TH1/Unity/Assets/Scripts/TH1_UI/View/Info/UIInfoGridInfoActionPointMono.cs
2026-06-15 16:00:53 +08:00

122 lines
4.3 KiB
C#

using System.Collections.Generic;
using RuntimeData;
using TH1_UI.HintUI;
using UI.HintUI;
using UnityEngine;
using UnityEngine.UI;
namespace TH1_UI.View.Info
{
public class UIInfoGridInfoActionPointMono : MonoBehaviour
{
private const string CommonActionPointWikiNameId = "18873";
private const string AttackActionPointWikiNameId = "18802";
private const string MoveActionPointWikiNameId = "18872";
private const string SkillActionPointWikiNameId = "18871";
private const string EmptyActionPointWikiNameId = "18870";
private const uint CommonActionPointFallbackWikiId = 0;
private const uint AttackActionPointFallbackWikiId = 12;
private const uint MoveActionPointFallbackWikiId = 13;
private const uint SkillActionPointFallbackWikiId = 14;
private const uint EmptyActionPointFallbackWikiId = 15;
private static readonly Dictionary<string, uint> WikiIdCache = new Dictionary<string, uint>();
public Image Icon;
public HintTrigger HintTrigger;
public Sprite CommonActionPoint;
public Sprite MoveActionPoint;
public Sprite EmptyActionPoint;
public Sprite AttackActionPoint;
public Sprite SkillActionPoint;
public void SetContent(ActionPointType type)
{
if (Icon != null)
Icon.sprite = GetSpriteByType(type);
SetWikiHint(GetWikiIdByType(type));
}
public void SetEmpty()
{
if (Icon != null)
Icon.sprite = EmptyActionPoint;
SetWikiHint(ResolveWikiId(EmptyActionPointWikiNameId, EmptyActionPointFallbackWikiId));
}
public void ResetContent()
{
if (Icon != null)
Icon.sprite = EmptyActionPoint;
SetWikiHint(ResolveWikiId(EmptyActionPointWikiNameId, EmptyActionPointFallbackWikiId));
}
private Sprite GetSpriteByType(ActionPointType type)
{
return type switch
{
ActionPointType.Common => CommonActionPoint,
ActionPointType.Move => MoveActionPoint,
ActionPointType.Attack => AttackActionPoint,
ActionPointType.Capture => SkillActionPoint,
_ => CommonActionPoint,
};
}
private uint GetWikiIdByType(ActionPointType type)
{
return type switch
{
ActionPointType.Common => ResolveWikiId(CommonActionPointWikiNameId, CommonActionPointFallbackWikiId),
ActionPointType.Move => ResolveWikiId(MoveActionPointWikiNameId, MoveActionPointFallbackWikiId),
ActionPointType.Attack => ResolveWikiId(AttackActionPointWikiNameId, AttackActionPointFallbackWikiId),
ActionPointType.Capture => ResolveWikiId(SkillActionPointWikiNameId, SkillActionPointFallbackWikiId),
_ => ResolveWikiId(CommonActionPointWikiNameId, CommonActionPointFallbackWikiId),
};
}
private void SetWikiHint(uint wikiId)
{
if (HintTrigger == null) return;
if (wikiId == 0)
{
HintTrigger.enabled = false;
HintTrigger.DataProvider = null;
return;
}
if (HintTrigger.DataProvider == null)
HintTrigger.DataProvider = new HintDataProvider();
HintTrigger.DataProvider.HintDataType = HintDataType.WikiData;
HintTrigger.DataProvider.Text = string.Empty;
HintTrigger.DataProvider.WikiId = wikiId;
HintTrigger.DataProvider.ShowWikiNameInHint = true;
HintTrigger.enabled = true;
}
private static uint ResolveWikiId(string wikiNameId, uint fallbackWikiId)
{
if (WikiIdCache.TryGetValue(wikiNameId, out var cachedWikiId))
return cachedWikiId;
var items = Table.Instance?.WikiData?.Items;
if (items != null)
{
for (int i = 0; i < items.Count; i++)
{
var item = items[i];
if (item == null || item.Name != wikiNameId) continue;
WikiIdCache[wikiNameId] = item.Id;
return item.Id;
}
}
return fallbackWikiId;
}
}
}