2026-02-14 22:57:12 +08:00

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;
}
}