using System; using System.Collections.Generic; using UnityEngine; using Logic.Action; using Logic.Multilingual; using NodeCanvas.Tasks.Actions; using RuntimeData; using UnityEngine.UIElements; [Serializable] [CreateAssetMenu(fileName = "TechDataAssets", menuName = "TH1 Game Data/Action Data Asset")] public class ActionDataAssets : ScriptableObject { public List ActionList = new List(); private Dictionary _actionDict; [NonSerialized] private bool _dictInit = false; private void CheckDict() { if (_dictInit) return; _dictInit = true; _actionDict = new Dictionary(); foreach (var t in ActionList) _actionDict[t.ActionId] = t; } public bool GetActionInfo(CommonActionId actionId, out ActionInfo actionInfo) { actionInfo = null; CheckDict(); return _actionDict.TryGetValue(actionId, out actionInfo); foreach(var t in ActionList) if (actionId == t.ActionId) { //Debug.Log(t.ActionName); //Debug.Log(t.CityExp); actionInfo = t; return true; } //Debug.Log(actionId.GridMiscActionType); return false; } public bool GetActionDesc(CommonActionId actionId, bool locked ,out string ret) { ret = ""; foreach(var t in ActionList) if (actionId == t.ActionId) { ret = t.Desc; if (locked && t.NeedLockDesc) ret = t.LockDesc; return true; } return false; } } [Serializable] public class EmpireGridSpInfoPack { public bool IgnoreCivId; public bool IgnoreForceId; public bool IsGridSpType; public GridSpType GridSpType; public uint CivId; public uint ForceId; public bool OnlyCarryGiant; public GiantType CarryGiantType; public Sprite Sprite; [MultilingualField] public string Name; [MultilingualField] public string Desc; public bool HasLevel; public List LevelSprite; public bool CheckCivAndForce(CivEnum civ,ForceEnum force) { if (!IgnoreCivId && civ != Table.Instance.TransCivIdToCivEnum(CivId)) return false; if (!IgnoreForceId && force != Table.Instance.TransForceIdToForceEnum(ForceId)) return false; return true; } public bool CheckEmpire(Empire empire,GridSpType gridSpType) { if (!CheckCivAndForce(empire.Civ, empire.Force)) return false; return gridSpType == GridSpType; } } //public enum UIActionCircleBGType [Serializable] public class ActionInfo { public CommonActionId ActionId; [MultilingualField] public string ActionName; [MultilingualField] public string Desc; //科技树专用描述 public bool NeedTechDesc; [MultilingualField] public string TechDesc; //锁行动时专用描述 public bool NeedLockDesc; [MultilingualField] public string LockDesc; public Sprite Icon; public IconViewSizeType IconViewSizeType; public bool VarientIcon; public List IconList; public int Cost; public int CityExp; public bool NoNeedTech; public Vector2 SpriteSize; public Vector2 SpritePos; public Sprite GetIcon(CivEnum civEnum, ForceEnum forceEnum, GridSpType gridSpType) { return GetIcon(Table.Instance.TransCivEnumToCivId(civEnum),Table.Instance.TransForceEnumToForceId(forceEnum),gridSpType); } public Sprite GetIcon(uint civId,uint forceId, GridSpType gridSpType) { if (!VarientIcon) return Icon; if (gridSpType != GridSpType.None) { foreach (var t in IconList) { if (gridSpType == t.GridSpType) return t.Sprite; } } foreach (var t in IconList) { if ((t.IgnoreCivId || t.CivId == civId) && (t.IgnoreForceId || t.ForceId == forceId) ) return t.Sprite; } return null; } public string GetActionName(CivEnum civEnum, ForceEnum forceEnum, GridSpType gridSpType) { return GetActionName(Table.Instance.TransCivEnumToCivId(civEnum),Table.Instance.TransForceEnumToForceId(forceEnum),gridSpType); } public string GetActionName(uint civId,uint forceId, GridSpType gridSpType) { if (!VarientIcon) return ActionName; if (gridSpType != GridSpType.None) { foreach (var t in IconList) { if (gridSpType == t.GridSpType) return t.Name == "" ? ActionName : t.Name; } } foreach (var t in IconList) { if ((t.IgnoreCivId || t.CivId == civId) && (t.IgnoreForceId || t.ForceId == forceId) ) return t.Name == "" ? ActionName : t.Name; } return ActionName; } }