using System.Collections.Generic; using Logic.Action; using Logic.Multilingual; using Logic.Skill; using NUnit.Framework; using RuntimeData; using TH1_Logic.Action; using TH1_Logic.Core; using TH1_Logic.MatchConfig; using Unity.Burst.CompilerServices; using UnityEngine; // using Logic.Tech; // 假设TechType在这里 // using Logic.Skill; // 假设SkillType在这里 // using Logic.City; // 假设CityUpgradeId在这里 // 建议将所有与HintUI相关的逻辑类都放在这个命名空间下 namespace UI.HintUI { /// /// 定义提示所依赖的数据类型 /// public enum HintDataType { SkillHintData, ActionHintData, TechHintData, CityUpgradeHintData, UnitHintData, // 直接显示静态文本 TextData, TextDataGiantUpgrate, TechAtomHintData, GeoData, PlayerTaskData, } /// /// 一个统一的提示数据提供者。 /// 它包含所有可能用到的数据字段,通过HintDataType枚举来决定使用哪个。 /// [System.Serializable] // 必须标记为Serializable,这样才能在Inspector中显示 public class HintDataProvider { // --- 核心控制字段 --- public HintDataType HintDataType; // --- 所有可能的数据字段 --- // 用于 TextData [Tooltip("当类型为TextData时,直接显示此文本")] public string Text = "默认静态文本..."; // 用于 TechHintData [Tooltip("当类型为TechHintData时,使用此数据")] public TechType TechTypeData; // 用于 SkillHintData [Tooltip("当类型为SkillHintData时,使用此数据")] public SkillType SkillTypeData; public SkillBase SkillParam; // 用于 ActionHintData [Tooltip("当类型为ActionHintData时,使用此数据")] public CommonActionId ActionIdData; public bool locked = false; // 用于 TextData [Tooltip("当类型为ActionHintData时,使用此数据")] public CommonActionId TextData; [Tooltip("当类型为TechAtomData时,使用此数据")] public TechAtom TechAtom; [Tooltip("当类型为GeoData时,使用此数据")] public List GeoIdList; [Tooltip("unitData")] public UnitFullType UnitFullType; //public UnitType UnitType; //public GiantType GiantType; //public uint UnitLevel; [Tooltip("类型是playerTask时,使用此数据")] public PlayerTaskType PlayerTaskType; // 用于 CityUpgradeHintData (注意:我根据推断为您增加了这个字段) //[Tooltip("当类型为CityUpgradeHintData时,使用此数据")] //public CityUpgradeId CityUpgradeIdData; // 假设存在一个CityUpgradeId类型 /// /// 根据HintDataType动态获取最终应显示的提示文本 /// /// 提示字符串 public string GetHintText() { string ret = Text; string ret2 = ""; bool IsDecode = false; switch (this.HintDataType) { case HintDataType.SkillHintData: // 假设GetSkillDesc存在并且接收SkillTypeData Table.Instance.SkillDataAssets.GetSkillNameAndDesc_DECODE(this.SkillTypeData,UnitFullType,SkillParam,out ret2,out ret); if(ret != "" && ret2 != "") ret = "" + ret2 +" : " + ret; IsDecode = true; break; case HintDataType.ActionHintData: // 仿写:从Action数据表中获取描述 Table.Instance.ActionDataAssets.GetActionDesc(this.ActionIdData,locked,out ret); break; case HintDataType.TechHintData: // 仿写:从Tech数据表中获取描述 Table.Instance.TechDataAssets.GetTechDesc(this.TechTypeData,out ret); break; case HintDataType.CityUpgradeHintData: // 仿写:从CityUpgrade数据表中获取描述 //return Table.Instance.CityUpgradeDataAssets.GetUpgradeDesc(this.CityUpgradeIdData); break; case HintDataType.UnitHintData: Table.Instance.UnitTypeDataAssets.GetUnitDesc(UnitFullType,out ret); break; case HintDataType.TextDataGiantUpgrate: Table.Instance.TextDataAssets.GetGiantUpgradeText_DECODE(UnitFullType.GiantType,out ret); ret.Replace("\\n","\n"); IsDecode = true; break; case HintDataType.TechAtomHintData: IsDecode = true; ret = ""; if (Table.Instance.TechDataAssets.GetTechAtomInfo(this.TechAtom, out var info)) ret = "" + MultilingualManager.Instance.GetMultilingualTextSafe(info.TechAtomName) + "
" + MultilingualManager.Instance.GetMultilingualTextSafe(info.Desc); break; case HintDataType.TextData: if (TextData.PlayerActionType == PlayerActionType.FinishHeroTask) { ret = Table.Instance.TextDataAssets.HeroForceFinishHint; }else { ret = Text; IsDecode = true; } break; case HintDataType.GeoData: ret = ""; foreach (var GeoId in GeoIdList) { if (Table.Instance.GeoDataAssets.GetGeoInfo(GeoId, out var v)) ret += "" + TmpGetBigClassType(v.GeoSmallClass) +" : " + MultilingualManager.Instance.GetMultilingualTextSafe(v.GeoName) + "
" + ""+MultilingualManager.Instance.GetMultilingualText(Table.Instance.TextDataAssets.GeoHintTitle)+":"+MultilingualManager.Instance.GetMultilingualTextSafe(v.GeoDesc) + "
"; } IsDecode = true; break; case HintDataType.PlayerTaskData: if (Table.Instance.PlayerTaskDataAssets.GetPlayerTaskData(PlayerTaskType, out var playerTaskData)) ret = playerTaskData.HintDesc; break; default: // 处理未知的或默认的枚举值,方便调试 UnityEngine.Debug.LogWarning($"未处理的HintDataType: {this.HintDataType}"); break; } //如果已经是decode的多语言,直接返回 if (IsDecode || ret == "") return ret; //否则要进行多语言解码 return MultilingualManager.Instance.GetMultilingualTextSafe(ret); } public string TmpGetBigClassType(GeoSmallClass smallClass) { return Table.Instance.GeoDataAssets.GetSmallClassName(smallClass); } } }