using UnityEngine; using UnityGameFramework.Runtime; namespace GeometryTD.UI { public class CombatSelectForm : UGuiForm { [SerializeField] private RectTransform _content; [SerializeField] private CombatSelectBuildArea _buildArea; [SerializeField] private CombatSelectFuncArea _funcArea; private CombatSelectFormContext _context; public void RefreshUI(CombatSelectFormContext context) { _context = context; EnsureContentReference(); if (_content == null) { Log.Warning("CombatSelectForm content is missing."); return; } bool isVisible = context != null && context.IsVisible; _content.gameObject.SetActive(isVisible); if (!isVisible) { _buildArea?.OnReset(); _funcArea?.OnReset(); return; } _content.anchoredPosition = context.ContentPosition; if (_buildArea != null) { bool showBuildArea = context.ShowBuildArea; _buildArea.gameObject.SetActive(showBuildArea); if (showBuildArea) { _buildArea.OnInit(context.BuildItems); } else { _buildArea.OnReset(); } } if (_funcArea != null) { bool showFuncArea = context.ShowFuncArea; _funcArea.gameObject.SetActive(showFuncArea); if (showFuncArea) { _funcArea.OnInit(context.UpgradeItem, context.DestroyItem); } else { _funcArea.OnReset(); } } } protected override void OnOpen(object userData) { base.OnOpen(userData); if (userData is CombatSelectFormContext context) { RefreshUI(context); return; } Log.Warning("CombatSelectForm requires CombatSelectFormContext as userData."); RefreshUI(null); } protected override void OnClose(bool isShutdown, object userData) { _context = null; _buildArea?.OnReset(); _funcArea?.OnReset(); if (_content != null) { _content.gameObject.SetActive(false); } base.OnClose(isShutdown, userData); } private void Awake() { EnsureContentReference(); } private void EnsureContentReference() { if (_content != null) { return; } Transform contentTransform = transform.Find("Content"); _content = contentTransform as RectTransform; } } }