122 lines
4.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|