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(); } } } } }