2024-08-24 15:25:30 +02:00
|
|
|
using Godot;
|
|
|
|
|
using System;
|
2025-04-10 19:04:06 +02:00
|
|
|
using Cirno.Scripts.Enums;
|
2025-03-09 16:34:19 +01:00
|
|
|
using Cirno.Scripts.UI;
|
2025-03-24 16:56:35 +01:00
|
|
|
using Godot.Collections;
|
2024-08-24 15:25:30 +02:00
|
|
|
|
2025-03-10 14:23:28 +01:00
|
|
|
public partial class MainMenu : CanvasLayer
|
2024-08-24 15:25:30 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
|
|
[Export]
|
2025-02-19 15:45:21 +01:00
|
|
|
public string GameScene { get; set; }
|
2024-08-24 15:25:30 +02:00
|
|
|
|
|
|
|
|
[Export]
|
2024-08-25 17:06:59 +02:00
|
|
|
public string MainMenuScene { get; set; }
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-02-19 13:34:15 +01:00
|
|
|
[Export]
|
2025-02-25 21:21:07 +01:00
|
|
|
public Control SubMenuHolder { get; set; } = new Control();
|
|
|
|
|
|
2025-03-12 15:47:57 +01:00
|
|
|
[Export]
|
|
|
|
|
public Button DefaultSelectedButton { get; private set; }
|
|
|
|
|
|
2025-02-27 10:37:10 +01:00
|
|
|
[Export]
|
2025-07-09 10:41:44 +02:00
|
|
|
public AudioStreamPlayer MusicPlayer { get; private set; }
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-05-08 18:22:05 +02:00
|
|
|
[ExportCategory("Languages")]
|
|
|
|
|
[Export] public Button ItalianButton { get; private set; }
|
|
|
|
|
[Export] public Button EnglishButton { get; private set; }
|
|
|
|
|
|
2025-02-25 21:21:07 +01:00
|
|
|
[ExportCategory("Music Room")]
|
|
|
|
|
[Export]
|
|
|
|
|
public PackedScene MusicRoomTemplate { get; set; }
|
|
|
|
|
|
|
|
|
|
[ExportCategory("Debug Menu")]
|
2025-02-19 13:34:15 +01:00
|
|
|
[Export]
|
2025-02-25 21:21:07 +01:00
|
|
|
public PackedScene DebugMenuTemplate { get; set; }
|
2025-03-09 16:34:19 +01:00
|
|
|
|
|
|
|
|
[ExportCategory("Credits Menu")]
|
|
|
|
|
[Export]
|
|
|
|
|
public PackedScene CreditsMenuTemplate { get; set; }
|
2025-03-09 17:14:06 +01:00
|
|
|
|
|
|
|
|
[ExportCategory("Options Menu")]
|
|
|
|
|
[Export]
|
|
|
|
|
public PackedScene OptionsMenuTemplate { get; set; }
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-04-08 15:02:41 +02:00
|
|
|
[ExportCategory("Difficulty Menu")]
|
|
|
|
|
[Export]
|
|
|
|
|
public PackedScene DifficultyMenuTemplate { get; set; }
|
|
|
|
|
|
2025-05-08 18:22:05 +02:00
|
|
|
|
|
|
|
|
|
2024-08-24 15:25:30 +02:00
|
|
|
// Called when the node enters the scene tree for the first time.
|
|
|
|
|
public override void _Ready()
|
|
|
|
|
{
|
2025-03-12 15:47:57 +01:00
|
|
|
DefaultSelectedButton.GrabFocus();
|
2025-05-08 12:32:16 +02:00
|
|
|
GlobalState.Instance.ChangeCursor(true);
|
2025-05-09 09:31:23 +02:00
|
|
|
|
|
|
|
|
var locale = TranslationServer.GetLocale();
|
|
|
|
|
if (locale is "en")
|
|
|
|
|
{
|
|
|
|
|
EnglishButton.ButtonPressed = true;
|
|
|
|
|
ItalianButton.ButtonPressed = false;
|
|
|
|
|
}
|
|
|
|
|
else if (locale is "it")
|
|
|
|
|
{
|
|
|
|
|
EnglishButton.ButtonPressed = false;
|
|
|
|
|
ItalianButton.ButtonPressed = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EnglishButton.Pressed += OnEnglishButtonPressed;
|
|
|
|
|
ItalianButton.Pressed += OnItalianButtonPressed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnEnglishButtonPressed()
|
|
|
|
|
{
|
|
|
|
|
EnglishButton.ButtonPressed = true;
|
|
|
|
|
ItalianButton.ButtonPressed = false;
|
|
|
|
|
TranslationServer.SetLocale("en");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnItalianButtonPressed()
|
|
|
|
|
{
|
|
|
|
|
EnglishButton.ButtonPressed = false;
|
|
|
|
|
ItalianButton.ButtonPressed = true;
|
|
|
|
|
TranslationServer.SetLocale("it");
|
2024-08-24 15:25:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
|
|
|
public override void _Process(double delta)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void _on_start_button_pressed()
|
|
|
|
|
{
|
2025-04-08 15:02:41 +02:00
|
|
|
SpawnMenu<DifficultyMenu>(DifficultyMenuTemplate, SubMenuHolder);
|
|
|
|
|
|
2025-04-04 10:40:02 +02:00
|
|
|
//GetTree().ChangeSceneToFile(GameScene);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnContinuePressed()
|
|
|
|
|
{
|
|
|
|
|
if (GameScene == null) return;
|
|
|
|
|
if (GlobalState.Instance.LoadGame())
|
2025-02-27 10:37:10 +01:00
|
|
|
{
|
2025-04-10 19:04:06 +02:00
|
|
|
GlobalState.Session.GameMode = GameMode.Game;
|
2025-04-04 10:40:02 +02:00
|
|
|
GlobalState.Session.AllowSaving = true;
|
2024-08-24 15:25:30 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void _on_debug_button_pressed()
|
|
|
|
|
{
|
2025-02-25 21:21:07 +01:00
|
|
|
SpawnMenu<DebugMenu>(DebugMenuTemplate, SubMenuHolder);
|
|
|
|
|
|
|
|
|
|
// if (DebugMenuTemplate is null || DebugMenuHolder is null) return;
|
|
|
|
|
// DebugMenuHolder.Visible = true;
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-02-25 21:21:07 +01:00
|
|
|
// var children = DebugMenuHolder.GetChildren();
|
|
|
|
|
// foreach (var child in children)
|
|
|
|
|
// {
|
|
|
|
|
// child.QueueFree();
|
|
|
|
|
// }
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-02-25 21:21:07 +01:00
|
|
|
// var menu = DebugMenuTemplate.Instantiate<DebugMenu>();
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-02-25 21:21:07 +01:00
|
|
|
// DebugMenuHolder.CallDeferred("add_child", menu);
|
|
|
|
|
|
|
|
|
|
// menu.DebugMenuClosed += () =>
|
|
|
|
|
// {
|
|
|
|
|
// DebugMenuHolder.Visible = false;
|
|
|
|
|
// };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void _on_music_room_button_pressed()
|
|
|
|
|
{
|
|
|
|
|
SpawnMenu<MusicRoom>(MusicRoomTemplate, SubMenuHolder);
|
2025-02-27 10:37:10 +01:00
|
|
|
MusicPlayer?.Stop();
|
2025-02-25 21:21:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SpawnMenu<T>(PackedScene template, Control holder) where T : MenuBase
|
|
|
|
|
{
|
|
|
|
|
if (template is null || holder is null) return;
|
|
|
|
|
holder.Visible = true;
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-02-25 21:21:07 +01:00
|
|
|
var children = holder.GetChildren();
|
2025-02-19 15:45:21 +01:00
|
|
|
foreach (var child in children)
|
|
|
|
|
{
|
|
|
|
|
child.QueueFree();
|
|
|
|
|
}
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-02-25 21:21:07 +01:00
|
|
|
var menu = template.Instantiate<T>();
|
2025-02-27 10:37:10 +01:00
|
|
|
|
2025-02-25 21:21:07 +01:00
|
|
|
holder.CallDeferred("add_child", menu);
|
2025-02-19 13:34:15 +01:00
|
|
|
|
2025-02-25 21:21:07 +01:00
|
|
|
menu.MenuClosed += () =>
|
2025-02-19 15:45:21 +01:00
|
|
|
{
|
2025-02-25 21:21:07 +01:00
|
|
|
holder.Visible = false;
|
2025-02-27 10:37:10 +01:00
|
|
|
if (!MusicPlayer.Playing)
|
|
|
|
|
{
|
|
|
|
|
MusicPlayer.Play();
|
|
|
|
|
}
|
2025-03-12 15:47:57 +01:00
|
|
|
|
|
|
|
|
DefaultSelectedButton.GrabFocus();
|
2025-02-19 15:45:21 +01:00
|
|
|
};
|
2024-08-24 15:25:30 +02:00
|
|
|
}
|
|
|
|
|
|
2025-03-09 16:34:19 +01:00
|
|
|
private void OnCreditsButtonPressed()
|
|
|
|
|
{
|
|
|
|
|
SpawnMenu<CreditsMenu>(CreditsMenuTemplate, SubMenuHolder);
|
|
|
|
|
}
|
2025-03-09 17:14:06 +01:00
|
|
|
|
|
|
|
|
private void OnOptionsButtonPressed()
|
|
|
|
|
{
|
|
|
|
|
SpawnMenu<OptionsMenu>(OptionsMenuTemplate, SubMenuHolder);
|
|
|
|
|
}
|
2025-03-09 16:34:19 +01:00
|
|
|
|
2025-04-30 16:11:25 +02:00
|
|
|
private void OnRogueliteButtonPressed()
|
|
|
|
|
{
|
|
|
|
|
GlobalState.Session.NewSession();
|
|
|
|
|
GlobalState.Session.AllowSaving = false;
|
|
|
|
|
GlobalState.Session.Difficulty = DifficultyLevel.Normal;
|
|
|
|
|
GlobalState.Session.GameMode = GameMode.Roguelite;
|
|
|
|
|
GlobalState.Session.LevelNumber = 0;
|
|
|
|
|
GlobalState.Instance.GotoScene("uid://bf1kqr3o6r6d4");
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-24 15:25:30 +02:00
|
|
|
private void _on_mainmenu_button_pressed()
|
|
|
|
|
{
|
2025-02-27 10:37:10 +01:00
|
|
|
if (MainMenuScene != null)
|
|
|
|
|
{
|
2025-02-21 11:39:22 +01:00
|
|
|
GlobalState.Instance.GotoScene(MainMenuScene);
|
|
|
|
|
//GetTree().ChangeSceneToFile(MainMenuScene);
|
2024-08-24 15:25:30 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void _on_exit_button_pressed()
|
|
|
|
|
{
|
|
|
|
|
GetTree().Quit();
|
|
|
|
|
}
|
|
|
|
|
}
|