Add localization support and refactor menus
- Implemented LocalizationManager for handling multiple languages. - Updated LoadGameMenu, MainMenu, PauseMenu, and SettingsMenu to support localization. - Added InstanceSelectionMenu for selecting game instances. - Refactored SaveManager to handle new SaveInstance structure. - Created SaveDialog for saving games with user-defined names. - Enhanced SaveData to manage multiple save instances. - Added error handling and logging for save/load operations. - Updated UI elements to reflect localized text.
This commit is contained in:
101
scripts/SaveDialog.cs
Normal file
101
scripts/SaveDialog.cs
Normal file
@@ -0,0 +1,101 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user