using Godot; using System; using Cirno.Scripts.Enums; using Cirno.Scripts.UI; using Godot.Collections; public partial class MainMenu : CanvasLayer { [Export] public string GameScene { get; set; } [Export] public string MainMenuScene { get; set; } [Export] public Control SubMenuHolder { get; set; } = new Control(); [Export] public Button DefaultSelectedButton { get; private set; } [Export] public AudioStreamPlayer2D MusicPlayer { get; private set; } [ExportCategory("Music Room")] [Export] public PackedScene MusicRoomTemplate { get; set; } [ExportCategory("Debug Menu")] [Export] public PackedScene DebugMenuTemplate { get; set; } [ExportCategory("Credits Menu")] [Export] public PackedScene CreditsMenuTemplate { get; set; } [ExportCategory("Options Menu")] [Export] public PackedScene OptionsMenuTemplate { get; set; } [ExportCategory("Difficulty Menu")] [Export] public PackedScene DifficultyMenuTemplate { get; set; } // Called when the node enters the scene tree for the first time. public override void _Ready() { DefaultSelectedButton.GrabFocus(); } // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) { } private void _on_start_button_pressed() { SpawnMenu(DifficultyMenuTemplate, SubMenuHolder); //GetTree().ChangeSceneToFile(GameScene); } private void OnContinuePressed() { if (GameScene == null) return; if (GlobalState.Instance.LoadGame()) { GlobalState.Session.GameMode = GameMode.Game; GlobalState.Session.AllowSaving = true; } } private void _on_debug_button_pressed() { SpawnMenu(DebugMenuTemplate, SubMenuHolder); // if (DebugMenuTemplate is null || DebugMenuHolder is null) return; // DebugMenuHolder.Visible = true; // var children = DebugMenuHolder.GetChildren(); // foreach (var child in children) // { // child.QueueFree(); // } // var menu = DebugMenuTemplate.Instantiate(); // DebugMenuHolder.CallDeferred("add_child", menu); // menu.DebugMenuClosed += () => // { // DebugMenuHolder.Visible = false; // }; } private void _on_music_room_button_pressed() { SpawnMenu(MusicRoomTemplate, SubMenuHolder); MusicPlayer?.Stop(); } private void SpawnMenu(PackedScene template, Control holder) where T : MenuBase { if (template is null || holder is null) return; holder.Visible = true; var children = holder.GetChildren(); foreach (var child in children) { child.QueueFree(); } var menu = template.Instantiate(); holder.CallDeferred("add_child", menu); menu.MenuClosed += () => { holder.Visible = false; if (!MusicPlayer.Playing) { MusicPlayer.Play(); } DefaultSelectedButton.GrabFocus(); }; } private void OnCreditsButtonPressed() { SpawnMenu(CreditsMenuTemplate, SubMenuHolder); } private void OnOptionsButtonPressed() { SpawnMenu(OptionsMenuTemplate, SubMenuHolder); } private void _on_mainmenu_button_pressed() { if (MainMenuScene != null) { GlobalState.Instance.GotoScene(MainMenuScene); //GetTree().ChangeSceneToFile(MainMenuScene); } } private void _on_exit_button_pressed() { GetTree().Quit(); } }