128 lines
5.0 KiB
C#
128 lines
5.0 KiB
C#
using Logic.Action;
|
||
using Logic.Multilingual;
|
||
using RuntimeData;
|
||
using TH1_Logic.Action;
|
||
using Unity.Burst.CompilerServices;
|
||
using UnityEngine;
|
||
|
||
// using Logic.Tech; // 假设TechType在这里
|
||
// using Logic.Skill; // 假设SkillType在这里
|
||
// using Logic.City; // 假设CityUpgradeId在这里
|
||
|
||
// 建议将所有与HintUI相关的逻辑类都放在这个命名空间下
|
||
namespace UI.HintUI
|
||
{
|
||
/// <summary>
|
||
/// 定义提示所依赖的数据类型
|
||
/// </summary>
|
||
public enum HintDataType
|
||
{
|
||
SkillHintData,
|
||
ActionHintData,
|
||
TechHintData,
|
||
CityUpgradeHintData,
|
||
UnitHintData,
|
||
// 直接显示静态文本
|
||
TextData,
|
||
TextDataGiantUpgrate
|
||
}
|
||
|
||
/// <summary>
|
||
/// 一个统一的提示数据提供者。
|
||
/// 它包含所有可能用到的数据字段,通过HintDataType枚举来决定使用哪个。
|
||
/// </summary>
|
||
[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;
|
||
|
||
// 用于 ActionHintData
|
||
[Tooltip("当类型为ActionHintData时,使用此数据")]
|
||
public CommonActionId ActionIdData;
|
||
|
||
// 用于 TextData
|
||
[Tooltip("当类型为ActionHintData时,使用此数据")]
|
||
public CommonActionId TextData;
|
||
|
||
[Tooltip("unitData")]
|
||
public UnitType UnitType;
|
||
public GiantType GiantType;
|
||
public uint UnitLevel;
|
||
|
||
// 用于 CityUpgradeHintData (注意:我根据推断为您增加了这个字段)
|
||
//[Tooltip("当类型为CityUpgradeHintData时,使用此数据")]
|
||
//public CityUpgradeId CityUpgradeIdData; // 假设存在一个CityUpgradeId类型
|
||
|
||
/// <summary>
|
||
/// 根据HintDataType动态获取最终应显示的提示文本
|
||
/// </summary>
|
||
/// <returns>提示字符串</returns>
|
||
public string GetHintText()
|
||
{
|
||
|
||
string ret = Text;
|
||
string ret2 = "";
|
||
var unitFullType = new UnitFullType(){UnitType = UnitType,GiantType = GiantType,UnitLevel = UnitLevel};
|
||
switch (this.HintDataType)
|
||
{
|
||
case HintDataType.SkillHintData:
|
||
// 假设GetSkillDesc存在并且接收SkillTypeData
|
||
Table.Instance.SkillDataAssets.GetSkillNameAndDesc(this.SkillTypeData,unitFullType,out ret2,out ret);
|
||
break;
|
||
case HintDataType.ActionHintData:
|
||
// 仿写:从Action数据表中获取描述
|
||
Table.Instance.ActionDataAssets.GetActionDesc(this.ActionIdData,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(UnitType,GiantType,UnitLevel,out ret);
|
||
break;
|
||
case HintDataType.TextDataGiantUpgrate:
|
||
Table.Instance.TextDataAssets.GetGiantUpgradeText(GiantType,out ret);
|
||
ret.Replace("\\n","\n");
|
||
break;
|
||
case HintDataType.TextData:
|
||
if (TextData.PlayerActionType == PlayerActionType.FinishHeroTask)
|
||
{
|
||
ret = Table.Instance.TextDataAssets.HeroForceFinishHint;
|
||
}
|
||
break;
|
||
default:
|
||
// 处理未知的或默认的枚举值,方便调试
|
||
UnityEngine.Debug.LogWarning($"未处理的HintDataType: {this.HintDataType}");
|
||
break;
|
||
}
|
||
|
||
if (!uint.TryParse(ret, out var retNum)) return ret;
|
||
if (ret2 != "")
|
||
{
|
||
if (!uint.TryParse(ret2, out var retNum2)) return ret2;
|
||
return "<color=yellow>" + MultilingualManager.Instance.GetMultilingualText(retNum2) + "</color>:" + MultilingualManager.Instance.GetMultilingualText(retNum);
|
||
}
|
||
return MultilingualManager.Instance.GetMultilingualText(retNum);
|
||
}
|
||
}
|
||
}
|