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(true); } if (_rewardItems == null || _rewardItems.Length <= 0) { _rewardItems = GetComponentsInChildren(true); } } } }