Refactor: reorganize scripts with domain-driven design structure
Move all C# scripts from flat structure to organized folders: - Core/ for game logic (Game, GameState, GameSettings) - UI/Menus/ and UI/Dialogs/ for user interface - Systems/ for reusable systems (Save, Localization) - Data/ for data models and configuration - Added framework for future: Gameplay/, Story/, Modding/ Update all .tscn scene files to reference new script paths. Fix timing issue in AdvancedSaveDialog focus handling.
This commit is contained in:
84
scripts/UI/Menus/PauseMenu.cs
Normal file
84
scripts/UI/Menus/PauseMenu.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
using Godot;
|
||||
|
||||
namespace TheGame
|
||||
{
|
||||
public partial class PauseMenu : Control
|
||||
{
|
||||
private Game _gameController;
|
||||
private Label _titleLabel;
|
||||
private Button _resumeButton;
|
||||
private Button _saveButton;
|
||||
private Button _settingsButton;
|
||||
private Button _mainMenuButton;
|
||||
private Button _desktopButton;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
// Lägg till i localized_ui gruppen
|
||||
AddToGroup("localized_ui");
|
||||
|
||||
_gameController = GetParent<Game>();
|
||||
|
||||
_titleLabel = GetNode<Label>("MenuContainer/TitleLabel");
|
||||
_resumeButton = GetNode<Button>("MenuContainer/ResumeButton");
|
||||
_saveButton = GetNode<Button>("MenuContainer/SaveButton");
|
||||
_settingsButton = GetNode<Button>("MenuContainer/SettingsButton");
|
||||
_mainMenuButton = GetNode<Button>("MenuContainer/MainMenuButton");
|
||||
_desktopButton = GetNode<Button>("MenuContainer/DesktopButton");
|
||||
|
||||
UpdateLocalization();
|
||||
}
|
||||
|
||||
public void UpdateLocalization()
|
||||
{
|
||||
var loc = LocalizationManager.Instance;
|
||||
_titleLabel.Text = loc.GetText("pause_menu_title");
|
||||
_resumeButton.Text = loc.GetText("pause_menu_resume");
|
||||
_saveButton.Text = loc.GetText("pause_menu_save");
|
||||
_settingsButton.Text = loc.GetText("pause_menu_settings");
|
||||
_mainMenuButton.Text = loc.GetText("pause_menu_main_menu");
|
||||
_desktopButton.Text = loc.GetText("pause_menu_desktop");
|
||||
}
|
||||
|
||||
private void _on_resume_button_pressed()
|
||||
{
|
||||
_gameController.TogglePause();
|
||||
}
|
||||
|
||||
private void _on_save_button_pressed()
|
||||
{
|
||||
// Skapa och visa advanced save dialog
|
||||
var advancedSaveDialog = new AdvancedSaveDialog();
|
||||
advancedSaveDialog.ProcessMode = ProcessModeEnum.WhenPaused; // Sätt innan initialize
|
||||
advancedSaveDialog.Initialize(_gameController);
|
||||
GetTree().Root.AddChild(advancedSaveDialog);
|
||||
advancedSaveDialog.PopupCentered(new Vector2I(450, 350));
|
||||
}
|
||||
|
||||
private void _on_settings_button_pressed()
|
||||
{
|
||||
// Skapa settings menu som popup
|
||||
var settingsScene = GD.Load<PackedScene>("res://scenes/SettingsMenu.tscn");
|
||||
var settingsMenu = settingsScene.Instantiate<SettingsMenu>();
|
||||
|
||||
// Sätt process mode så att den fungerar när pausat
|
||||
settingsMenu.ProcessMode = ProcessModeEnum.WhenPaused;
|
||||
|
||||
GetTree().Root.AddChild(settingsMenu);
|
||||
}
|
||||
|
||||
private void _on_main_menu_button_pressed()
|
||||
{
|
||||
_gameController.HandleExitRequest(() => {
|
||||
GetTree().Paused = false;
|
||||
GameState.ResetGameState();
|
||||
GetTree().ChangeSceneToFile("res://scenes/MainMenu.tscn");
|
||||
});
|
||||
}
|
||||
|
||||
private void _on_desktop_button_pressed()
|
||||
{
|
||||
_gameController.HandleExitRequest(() => GetTree().Quit());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user