Files
GameJamDungeon/Zennysoft.Game.Ma/src/menu/MainMenu.cs
2025-12-04 20:21:24 -08:00

79 lines
2.1 KiB
C#

using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection;
using Godot;
namespace Zennysoft.Game.Ma;
public interface IMainMenu : IControl
{
event MainMenu.StartGameEventHandler StartGame;
event MainMenu.EnemyViewerEventHandler EnemyViewer;
event MainMenu.GalleryEventHandler Gallery;
event MainMenu.QuitEventHandler Quit;
void FadeIn();
}
[Meta(typeof(IAutoNode))]
public partial class MainMenu : Control, IMainMenu
{
public override void _Notification(int what) => this.Notify(what);
[Node] public IButton StartGameButton { get; set; } = default!;
[Node] public IButton EnemyViewerButton { get; set; } = default!;
[Node] public IButton GalleryButton { get; set; } = default!;
[Node] public IButton OptionsButton { get; set; } = default!;
[Node] public IButton QuitButton { get; set; } = default!;
[Signal]
public delegate void StartGameEventHandler();
[Signal]
public delegate void EnemyViewerEventHandler();
[Signal]
public delegate void GalleryEventHandler();
[Signal]
public delegate void OptionsEventHandler();
[Signal]
public delegate void QuitEventHandler();
public void OnReady()
{
StartGameButton.Pressed += OnStartGamePressed;
EnemyViewerButton.Pressed += EnemyViewerButton_Pressed;
GalleryButton.Pressed += GalleryButton_Pressed;
OptionsButton.Pressed += OptionsButton_Pressed;
QuitButton.Pressed += OnQuitPressed;
StartGameButton.GrabFocus();
}
public void FadeIn()
{
StartGameButton.GrabFocus();
Show();
}
public void OnExitTree()
{
StartGameButton.Pressed -= OnStartGamePressed;
EnemyViewerButton.Pressed -= EnemyViewerButton_Pressed;
GalleryButton.Pressed -= GalleryButton_Pressed;
OptionsButton.Pressed -= OptionsButton_Pressed;
QuitButton.Pressed -= OnQuitPressed;
}
public void OnStartGamePressed() => EmitSignal(SignalName.StartGame);
private void GalleryButton_Pressed() => EmitSignal(SignalName.Gallery);
private void EnemyViewerButton_Pressed() => EmitSignal(SignalName.EnemyViewer);
private void OptionsButton_Pressed() => EmitSignal(SignalName.Options);
public void OnQuitPressed() => EmitSignal(SignalName.Quit);
}