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); }