Files
TheGame/scripts/UI/Dialogs/SaveDialog.cs
Björn Blomberg ed4ce28921 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.
2025-10-17 14:50:40 +02:00

101 lines
3.2 KiB
C#

using Godot;
namespace TheGame
{
public partial class SaveDialog : AcceptDialog
{
private LineEdit _nameInput;
private Game _gameController;
public override void _Ready()
{
// Sätt process mode så att dialogen fungerar när spelet är pausat
ProcessMode = ProcessModeEnum.WhenPaused;
var loc = LocalizationManager.Instance;
Title = loc.GetText("save_dialog_title");
// Skapa innehåll för dialogen
var vbox = new VBoxContainer();
var label = new Label();
label.Text = loc.GetText("save_dialog_enter_name");
vbox.AddChild(label);
_nameInput = new LineEdit();
_nameInput.PlaceholderText = loc.GetText("save_dialog_placeholder");
_nameInput.Text = $"Save {System.DateTime.Now:yyyy-MM-dd HH:mm}";
vbox.AddChild(_nameInput);
AddChild(vbox);
// Sätt process mode på alla child nodes
SetProcessModeRecursive(this, ProcessModeEnum.WhenPaused);
// Anslut signaler
Confirmed += OnSaveConfirmed;
// Fokusera på text input
_nameInput.GrabFocus();
_nameInput.SelectAll();
}
public void Initialize(Game gameController)
{
_gameController = gameController;
}
private void OnSaveConfirmed()
{
if (_gameController != null)
{
string saveName = _nameInput.Text.Trim();
if (string.IsNullOrEmpty(saveName))
{
saveName = $"Save {System.DateTime.Now:yyyy-MM-dd HH:mm}";
}
var saveManager = new SaveManager();
float currentTime = _gameController.GetGameTime();
saveManager.SaveGame(currentTime, saveName);
// Stäng pausmenyn och återgå till spelet
_gameController.TogglePause();
}
QueueFree();
}
private void SetProcessModeRecursive(Node node, ProcessModeEnum mode)
{
if (node is Control control)
{
control.ProcessMode = mode;
}
foreach (Node child in node.GetChildren())
{
SetProcessModeRecursive(child, mode);
}
}
public override void _Input(InputEvent @event)
{
// Se till att input fungerar när spelet är pausat
if (@event is InputEventKey keyEvent && keyEvent.Pressed)
{
if (keyEvent.Keycode == Key.Enter || keyEvent.Keycode == Key.KpEnter)
{
OnSaveConfirmed();
GetViewport().SetInputAsHandled();
}
else if (keyEvent.Keycode == Key.Escape)
{
Hide();
QueueFree();
GetViewport().SetInputAsHandled();
}
}
}
}
}