geometry-tower-defense-base/src-ref/UI/Combat/View/CombatInfoForm.cs

137 lines
3.4 KiB
C#

using GeometryTD.CustomEvent;
using TMPro;
using UnityEngine;
using UnityGameFramework.Runtime;
namespace GeometryTD.UI
{
public class CombatInfoForm : UGuiForm
{
[SerializeField] private TMP_Text _levelMetaText;
[SerializeField] private TMP_Text _levelPhaseText;
[SerializeField] private TMP_Text _coinText;
[SerializeField] private TMP_Text _baseHpText;
[SerializeField] private TMP_Text _enemyHpRateText;
[SerializeField] private CommonButton _pauseButton;
[SerializeField] private CommonButton _endButton;
private CombatInfoFormContext _context;
public void RefreshUI(CombatInfoFormContext context)
{
_context = context;
if (_levelMetaText != null)
{
_levelMetaText.text = context?.LevelMetaText ?? string.Empty;
}
if (_levelPhaseText != null)
{
_levelPhaseText.text = context?.LevelPhaseText ?? string.Empty;
}
if (_coinText != null)
{
_coinText.text = context?.CoinText ?? "0";
}
if (_baseHpText != null)
{
_baseHpText.text = context?.BaseHpText ?? string.Empty;
}
if (_enemyHpRateText != null)
{
_enemyHpRateText.text = context?.EnemyHpRateText ?? string.Empty;
}
if (_pauseButton != null)
{
_pauseButton.Interactive = context?.CanPause ?? false;
}
if (_endButton != null)
{
_endButton.gameObject.SetActive(context?.CanEnd ?? false);
}
}
public void OnPauseButtonClick()
{
if (_context != null && !_context.CanPause)
{
return;
}
GameEntry.Event.Fire(this, CombatPauseEventArgs.Create());
}
public void OnEndButtonClick()
{
if (_context != null && !_context.CanEnd)
{
return;
}
GameEntry.Event.Fire(this, CombatEndEventArgs.Create());
}
public void OnFailButtonClick()
{
GameEntry.Event.Fire(this, CombatDebugFailEventArgs.Create());
}
protected override void OnOpen(object userData)
{
base.OnOpen(userData);
if (userData is CombatInfoFormContext context)
{
RefreshUI(context);
return;
}
Log.Warning("CombatInfoForm requires CombatInfoFormContext as userData.");
}
protected override void OnClose(bool isShutdown, object userData)
{
_context = null;
if (_levelMetaText != null)
{
_levelMetaText.text = string.Empty;
}
if (_levelPhaseText != null)
{
_levelPhaseText.text = string.Empty;
}
if (_coinText != null)
{
_coinText.text = string.Empty;
}
if (_baseHpText != null)
{
_baseHpText.text = string.Empty;
}
if (_enemyHpRateText != null)
{
_enemyHpRateText.text = string.Empty;
}
base.OnClose(isShutdown, userData);
}
}
}