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.
101 lines
3.2 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |