Files
aibis-dream/Assets/Scripts/UI/Terminal/TerminalStartPanel.cs
T

118 lines
2.9 KiB
C#

using System;
using UnityEngine;
namespace AibisDream.UI.Terminal
{
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()
{
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()
{
_owner?.SetHeader("<选择章节>", "CHAPER xx/xxx - LOADING - DT");
if (panelAnimator != null)
{
panelAnimator.Show();
}
else
{
gameObject.SetActive(true);
}
}
public void Hide()
{
if (panelAnimator != null)
{
panelAnimator.Hide();
}
else
{
gameObject.SetActive(false);
}
}
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();
}
}
}