using GeometryTD.CustomEvent; using TMPro; using UnityEngine; using UnityGameFramework.Runtime; namespace GeometryTD.UI { public class MenuForm : UGuiForm { [SerializeField] private TMP_Text _titleText; [SerializeField] private TMP_Text _startButtonText; [SerializeField] private TMP_Text _settingsButtonText; [SerializeField] private TMP_Text _exitButtonText; private MenuFormContext _context; public void RefreshUI(MenuFormContext context) { _context = context; if (_context == null) { return; } SetText(_titleText, _context.TitleText); SetText(_startButtonText, _context.StartButtonText); SetText(_settingsButtonText, _context.SettingsButtonText); SetText(_exitButtonText, _context.ExitButtonText); } public void OnStartButtonClick() { GameEntry.Event.Fire(this, MenuStartRequestedEventArgs.Create()); } public void OnSettingsButtonClick() { GameEntry.Event.Fire(this, MenuSettingsRequestedEventArgs.Create()); } public void OnExitButtonClick() { GameEntry.Event.Fire(this, MenuExitRequestedEventArgs.Create()); } protected override void OnOpen(object userData) { base.OnOpen(userData); if (userData is MenuFormContext context) { RefreshUI(context); return; } Log.Warning("MenuForm requires MenuFormContext as userData."); } protected override void OnClose(bool isShutdown, object userData) { _context = null; base.OnClose(isShutdown, userData); } private static void SetText(TMP_Text textComponent, string value) { if (textComponent == null) { return; } textComponent.text = value ?? string.Empty; } } }