180 lines
5.0 KiB
C#
180 lines
5.0 KiB
C#
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<ActionInfo> ActionList = new List<ActionInfo>();
|
|
|
|
private Dictionary<CommonActionId, ActionInfo> _actionDict;
|
|
|
|
[NonSerialized]
|
|
private bool _dictInit = false;
|
|
|
|
private void CheckDict()
|
|
{
|
|
if (_dictInit) return;
|
|
_dictInit = true;
|
|
_actionDict = new Dictionary<CommonActionId, ActionInfo>();
|
|
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<Sprite> 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<EmpireGridSpInfoPack> 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;
|
|
}
|
|
|
|
}
|