using System; using UnityEngine; namespace AibisDream.UI { public class TerminalStartPanel : MonoBehaviour { [SerializeField] private TerminalPanelAnimator panelAnimator; [SerializeField] private TerminalMenuItemView newGameItem; [SerializeField] private TerminalMenuItemView chapterItem; [SerializeField] private TerminalMenuItemView settingItem; [SerializeField] private TerminalMenuItemView quitItem; private TerminalPanel _owner; private TerminalMenuItemView _selectedItem; public bool IsOpen => gameObject.activeSelf; public void SetOwner(TerminalPanel owner) { _owner = owner; } private void Awake() { InitMenuItems(); RegisterItem(newGameItem, StartNewGame); RegisterItem(chapterItem, OpenChapter); RegisterItem(settingItem, OpenSetting); RegisterItem(quitItem, QuitApp); } private void OnDestroy() { UnregisterItem(newGameItem); UnregisterItem(chapterItem); UnregisterItem(settingItem); UnregisterItem(quitItem); } public void Show() { if (panelAnimator != null) { panelAnimator.Show(prepare: () => _owner?.SetHeader("termnial_header_start", "REPAIR_STATION_07 - AUTH_VERIFIED")); } else { _owner?.SetHeader("termnial_header_start", "REPAIR_STATION_07 - AUTH_VERIFIED"); gameObject.SetActive(true); } } public void Hide(Action onComplete = null) { if (panelAnimator != null) { panelAnimator.Hide(onComplete); } else { gameObject.SetActive(false); onComplete?.Invoke(); } } private void InitMenuItems() { newGameItem?.SetContent("start_newGame", "SESSION CREATE", "STATUS: ACTIVE"); chapterItem?.SetContent("start_selcetLevel", "HISTORY QUERY", "RANGE: 04/533"); settingItem?.SetContent("start_setting", "USER CONFIG", "AUTH: LOCAL"); quitItem?.SetContent("start_quit", "SESSION CLOSE", "LOG: SAVED"); } private void RegisterItem(TerminalMenuItemView item, Action action) { if (item == null) { return; } item.Hovered += SelectItem; item.Clicked += _ => action?.Invoke(); } private void UnregisterItem(TerminalMenuItemView item) { if (item == null) { return; } item.Hovered -= SelectItem; } private void SelectItem(TerminalMenuItemView item) { if (_selectedItem != null) { _selectedItem.SetSelected(false); } _selectedItem = item; _selectedItem?.SetSelected(true); } private static void StartNewGame() { UIManager.Instance.CloseTerminalThen(() => GameManager.Instance.StartNewGame()); } private void OpenChapter() { _owner.SwitchTo(TerminalPage.Chapter); } private void OpenSetting() { _owner.SwitchTo(TerminalPage.Setting); } private static void QuitApp() { GameManager.Instance.QuitApp(); } } }