168 lines
4.4 KiB
C#
168 lines
4.4 KiB
C#
using GeometryTD.CustomEvent;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityGameFramework.Runtime;
|
|
|
|
namespace GeometryTD.UI
|
|
{
|
|
public class RewardSelectForm : UGuiForm
|
|
{
|
|
[SerializeField] private Transform _selectItemParent;
|
|
|
|
[SerializeField] private RewardItem[] _rewardItems;
|
|
|
|
[SerializeField] private TMP_Text _tipText;
|
|
|
|
[SerializeField] private TMP_Text _refreshButtonText;
|
|
|
|
[SerializeField] private CommonButton _refreshButton;
|
|
|
|
[SerializeField] private CommonButton _giveUpButton;
|
|
|
|
private RewardSelectFormContext _context;
|
|
|
|
public void OnInit(RewardSelectFormContext context)
|
|
{
|
|
if (context == null)
|
|
{
|
|
Log.Error("RewardSelectForm need Context.");
|
|
return;
|
|
}
|
|
|
|
RefreshUI(context);
|
|
}
|
|
|
|
public void RefreshUI(RewardSelectFormContext context)
|
|
{
|
|
_context = context;
|
|
EnsureRewardItems();
|
|
|
|
if (_tipText != null)
|
|
{
|
|
_tipText.text = context?.TipText ?? string.Empty;
|
|
}
|
|
|
|
if (_refreshButtonText != null)
|
|
{
|
|
_refreshButtonText.text = context?.RefreshButtonText ?? string.Empty;
|
|
}
|
|
|
|
if (_refreshButton != null)
|
|
{
|
|
_refreshButton.Interactive = context?.CanRefresh ?? false;
|
|
}
|
|
|
|
if (_giveUpButton != null)
|
|
{
|
|
_giveUpButton.Interactive = context?.CanGiveUp ?? false;
|
|
}
|
|
|
|
if (_rewardItems == null || _rewardItems.Length <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < _rewardItems.Length; i++)
|
|
{
|
|
RewardItem rewardItem = _rewardItems[i];
|
|
if (rewardItem == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
RewardItemContext itemContext = null;
|
|
if (context?.RewardItems != null && i < context.RewardItems.Length)
|
|
{
|
|
itemContext = context.RewardItems[i];
|
|
}
|
|
|
|
rewardItem.OnInit(itemContext);
|
|
}
|
|
}
|
|
|
|
public void OnRefreshButtonClick()
|
|
{
|
|
if (_context != null && !_context.CanRefresh)
|
|
{
|
|
return;
|
|
}
|
|
|
|
GameEntry.Event.Fire(this, RewardSelectRefreshEventArgs.Create());
|
|
}
|
|
|
|
public void OnGiveUpButtonClick()
|
|
{
|
|
if (_context != null && !_context.CanGiveUp)
|
|
{
|
|
return;
|
|
}
|
|
|
|
GameEntry.Event.Fire(this, RewardSelectGiveUpEventArgs.Create());
|
|
}
|
|
|
|
protected override void OnOpen(object userData)
|
|
{
|
|
base.OnOpen(userData);
|
|
|
|
if (userData is RewardSelectFormContext context)
|
|
{
|
|
RefreshUI(context);
|
|
return;
|
|
}
|
|
|
|
Log.Warning("RewardSelectForm requires RewardSelectFormContext as userData.");
|
|
}
|
|
|
|
protected override void OnClose(bool isShutdown, object userData)
|
|
{
|
|
_context = null;
|
|
|
|
if (_tipText != null)
|
|
{
|
|
_tipText.text = string.Empty;
|
|
}
|
|
|
|
if (_refreshButtonText != null)
|
|
{
|
|
_refreshButtonText.text = string.Empty;
|
|
}
|
|
|
|
if (_rewardItems != null)
|
|
{
|
|
for (int i = 0; i < _rewardItems.Length; i++)
|
|
{
|
|
RewardItem rewardItem = _rewardItems[i];
|
|
if (rewardItem == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
rewardItem.OnReset();
|
|
rewardItem.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
base.OnClose(isShutdown, userData);
|
|
}
|
|
|
|
private void EnsureRewardItems()
|
|
{
|
|
if (_rewardItems != null && _rewardItems.Length > 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (_selectItemParent != null)
|
|
{
|
|
_rewardItems = _selectItemParent.GetComponentsInChildren<RewardItem>(true);
|
|
}
|
|
|
|
if (_rewardItems == null || _rewardItems.Length <= 0)
|
|
{
|
|
_rewardItems = GetComponentsInChildren<RewardItem>(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|