TH1/Unity/Assets/Scripts/TH1_UI/HintUI/HintDataProvider.cs
2025-09-19 03:51:31 +08:00

128 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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