geometry-tower-defense/Assets/GameMain/Scripts/UI/Combat/View/TowerSelectItem.cs

97 lines
2.3 KiB
C#

using TMPro;
using UnityEngine;
using UnityEngine.UI;
using GeometryTD.CustomEvent;
using UnityGameFramework.Runtime;
namespace GeometryTD.UI
{
public class TowerSelectItem : MonoBehaviour
{
[SerializeField] private Image _icon;
[SerializeField] private TMP_Text _price;
[SerializeField] private CommonButton _button;
private TowerSelectItemContext _context;
private Sprite _defaultIcon;
private bool _hasCachedDefaultIcon;
public void OnInit(TowerSelectItemContext context)
{
CacheDefaultIcon();
_context = context;
if (_icon != null)
{
if (context != null && context.Icon != null)
{
_icon.sprite = context.Icon;
}
else if (_defaultIcon != null)
{
_icon.sprite = _defaultIcon;
}
_icon.enabled = _icon.sprite != null;
}
if (_price != null)
{
_price.text = context?.PriceText ?? string.Empty;
}
if (_button != null)
{
_button.Interactive = context != null && context.IsInteractable;
}
}
public void OnReset()
{
_context = null;
CacheDefaultIcon();
if (_icon != null)
{
_icon.sprite = _defaultIcon;
_icon.enabled = _icon.sprite != null;
}
if (_price != null)
{
_price.text = string.Empty;
}
if (_button != null)
{
_button.Interactive = false;
}
}
public void OnClick()
{
if (_context == null || !_context.IsInteractable)
{
return;
}
GameEntry.Event.Fire(
this,
CombatSelectItemClickEventArgs.Create(_context.ActionType, _context.ActionIndex));
}
private void CacheDefaultIcon()
{
if (_hasCachedDefaultIcon || _icon == null)
{
return;
}
_defaultIcon = _icon.sprite;
_hasCachedDefaultIcon = true;
}
}
}