diff --git a/scenes/Game.tscn b/scenes/Game.tscn index fd646f0..8e2284c 100644 --- a/scenes/Game.tscn +++ b/scenes/Game.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://bqkwdpfmu7tge"] -[ext_resource type="Script" path="res://scripts/Game.cs" id="1_xncbp"] -[ext_resource type="Script" path="res://scripts/PauseMenu.cs" id="2_a5qiy"] +[ext_resource type="Script" path="res://scripts/Core/Game.cs" id="1_xncbp"] +[ext_resource type="Script" path="res://scripts/UI/Menus/PauseMenu.cs" id="2_a5qiy"] [node name="Game" type="Control"] layout_mode = 3 diff --git a/scenes/LoadGameMenu.tscn b/scenes/LoadGameMenu.tscn index 2a18b43..c315257 100644 --- a/scenes/LoadGameMenu.tscn +++ b/scenes/LoadGameMenu.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://cdnyu0lqxhn80"] -[ext_resource type="Script" path="res://scripts/LoadGameMenu.cs" id="1_l8m0c"] +[ext_resource type="Script" path="res://scripts/UI/Menus/LoadGameMenu.cs" id="1_l8m0c"] [node name="LoadGameMenu" type="Control"] layout_mode = 3 diff --git a/scenes/MainMenu.tscn b/scenes/MainMenu.tscn index 1f442a1..0297059 100644 --- a/scenes/MainMenu.tscn +++ b/scenes/MainMenu.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dsrcpteclv0ar"] -[ext_resource type="Script" path="res://scripts/MainMenu.cs" id="1_g4hxb"] +[ext_resource type="Script" path="res://scripts/UI/Menus/MainMenu.cs" id="1_g4hxb"] [node name="MainMenu" type="Control"] layout_mode = 3 diff --git a/scenes/SettingsMenu.tscn b/scenes/SettingsMenu.tscn index bc7fb82..337c11c 100644 --- a/scenes/SettingsMenu.tscn +++ b/scenes/SettingsMenu.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://b2k5vxrj8nq4h"] -[ext_resource type="Script" path="res://scripts/SettingsMenu.cs" id="1_settings"] +[ext_resource type="Script" path="res://scripts/UI/Menus/SettingsMenu.cs" id="1_settings"] [node name="SettingsMenu" type="Control"] layout_mode = 3 diff --git a/scripts/Game.cs b/scripts/Core/Game.cs similarity index 100% rename from scripts/Game.cs rename to scripts/Core/Game.cs diff --git a/scripts/Game.cs.uid b/scripts/Core/Game.cs.uid similarity index 100% rename from scripts/Game.cs.uid rename to scripts/Core/Game.cs.uid diff --git a/scripts/GameSettings.cs b/scripts/Core/GameSettings.cs similarity index 100% rename from scripts/GameSettings.cs rename to scripts/Core/GameSettings.cs diff --git a/scripts/GameSettings.cs.uid b/scripts/Core/GameSettings.cs.uid similarity index 100% rename from scripts/GameSettings.cs.uid rename to scripts/Core/GameSettings.cs.uid diff --git a/scripts/GameState.cs b/scripts/Core/GameState.cs similarity index 100% rename from scripts/GameState.cs rename to scripts/Core/GameState.cs diff --git a/scripts/GameState.cs.uid b/scripts/Core/GameState.cs.uid similarity index 100% rename from scripts/GameState.cs.uid rename to scripts/Core/GameState.cs.uid diff --git a/scripts/GameSeed.cs b/scripts/Data/GameSeed.cs similarity index 100% rename from scripts/GameSeed.cs rename to scripts/Data/GameSeed.cs diff --git a/scripts/GameSeed.cs.uid b/scripts/Data/GameSeed.cs.uid similarity index 100% rename from scripts/GameSeed.cs.uid rename to scripts/Data/GameSeed.cs.uid diff --git a/scripts/Gameplay/Units/BaseUnit.cs b/scripts/Gameplay/Units/BaseUnit.cs new file mode 100644 index 0000000..cdbb08f --- /dev/null +++ b/scripts/Gameplay/Units/BaseUnit.cs @@ -0,0 +1,9 @@ +// Placeholder för unit system +// Detta kommer att innehålla bas-klasser för enheter i spelet + +namespace TheGame.Gameplay.Units +{ + // TODO: Implementera BaseUnit class + // TODO: Implementera Unit stats system + // TODO: Implementera Unit behaviors +} \ No newline at end of file diff --git a/scripts/Gameplay/Units/BaseUnit.cs.uid b/scripts/Gameplay/Units/BaseUnit.cs.uid new file mode 100644 index 0000000..694b848 --- /dev/null +++ b/scripts/Gameplay/Units/BaseUnit.cs.uid @@ -0,0 +1 @@ +uid://bdm5xfw58nd5i diff --git a/scripts/Modding/API/IModAPI.cs b/scripts/Modding/API/IModAPI.cs new file mode 100644 index 0000000..fdd6a22 --- /dev/null +++ b/scripts/Modding/API/IModAPI.cs @@ -0,0 +1,9 @@ +// Placeholder för mod API +// Detta kommer att definiera interface för mod-utveckling + +namespace TheGame.Modding.API +{ + // TODO: Implementera IMod interface + // TODO: Implementera ModAPI class + // TODO: Definiera mod lifecycle events +} \ No newline at end of file diff --git a/scripts/Modding/API/IModAPI.cs.uid b/scripts/Modding/API/IModAPI.cs.uid new file mode 100644 index 0000000..693ab9d --- /dev/null +++ b/scripts/Modding/API/IModAPI.cs.uid @@ -0,0 +1 @@ +uid://bpq0jeupss8q6 diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..95bef50 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,127 @@ +# Scripts Structure - Domain-Driven Design + +Detta projekt använder en Domain-Driven Design-struktur för att organisera koden på ett skalbart och underhållbart sätt. + +## Mappstruktur + +### Core/ +Grundläggande spellogik och huvudsystem +- `Game.cs` - Huvudklass för spelet +- `GameState.cs` - Spelets tillstånd +- `GameSettings.cs` - Spelinställningar + +### UI/ +Användargränssnitt och visuella komponenter + +#### UI/Menus/ +Menyhantering +- `MainMenu.cs` - Huvudmeny +- `LoadGameMenu.cs` - Ladda spel-meny +- `SettingsMenu.cs` - Inställningsmeny +- `PauseMenu.cs` - Pausmeny +- `InstanceSelectionMenu.cs` - Val av spelinstans + +#### UI/Dialogs/ +Dialogrutor och popup-fönster +- `SaveDialog.cs` - Spara spel-dialog +- `AdvancedSaveDialog.cs` - Avancerad spara-dialog +- `ExitConfirmationDialog.cs` - Bekräftelse för avslut + +#### UI/HUD/ +Heads-up Display komponenter (framtida användning) + +### Gameplay/ +Spelmekanik och spelspecifik logik + +#### Gameplay/Units/ +Enheter och karaktärer (framtida användning) + +#### Gameplay/Actions/ +Spelares aktioner och kommandon (framtida användning) + +#### Gameplay/Stats/ +Statistik och värdesystem (framtida användning) + +#### Gameplay/Combat/ +Stridssystem (framtida användning) + +#### Gameplay/World/ +Världslogik och miljö (framtida användning) + +### Story/ +Berättelse och narrativ + +#### Story/Events/ +Story-events och händelser (framtida användning) + +#### Story/Dialogue/ +Dialogsystem (framtida användning) + +#### Story/Quests/ +Uppdragssystem (framtida användning) + +#### Story/Narrative/ +Berättarlogik (framtida användning) + +### Systems/ +Återanvändbara system och managers + +#### Systems/Save/ +Spara/ladda-system +- `SaveManager.cs` - Hanterar sparning/laddning +- `SaveInstance.cs` - Representation av sparfil + +#### Systems/Localization/ +Lokaliseringssystem +- `LocalizationManager.cs` - Hanterar språkstöd + +#### Systems/Audio/ +Ljudsystem (framtida användning) + +#### Systems/Input/ +Inputhantering (framtida användning) + +#### Systems/Events/ +Event bus och messaging (framtida användning) + +### Data/ +Datamodeller och konfiguration +- `GameSeed.cs` - Spelfrö för procedurell generering + +#### Data/Configurations/ +Konfigurationsfiler (framtida användning) + +#### Data/Definitions/ +Data definitions för units, actions etc (framtida användning) + +#### Data/Serialization/ +Serialization helpers (framtida användning) + +### Modding/ +Mod-stöd och utbyggbarhet + +#### Modding/API/ +Mod API interfaces (framtida användning) + +#### Modding/Loader/ +Mod loading system (framtida användning) + +#### Modding/Framework/ +Mod framework (framtida användning) + +## Fördelar med denna struktur + +1. **Skalbarhet** - Lätt att lägga till nya features utan att påverka befintlig kod +2. **Separation of Concerns** - Varje mapp har ett tydligt ansvar +3. **Moduläritet** - System kan utvecklas oberoende av varandra +4. **Testbarhet** - Enkel att skriva enhetstester för varje domän +5. **Mod-vänlighet** - Tydlig struktur för mod-utvecklare +6. **Underhållbarhet** - Utvecklare vet direkt var de ska leta efter funktionalitet + +## Riktlinjer för utveckling + +- Håll relaterade klasser tillsammans i samma undermapp +- Använd namespaces som matchar mappstrukturen +- Skapa nya undermappar när en mapp blir för stor (>10-15 filer) +- Undvik cirkulära dependencies mellan mappar +- Använd interfaces för att kommunicera mellan olika domäner \ No newline at end of file diff --git a/scripts/Systems/Events/EventSystem.cs b/scripts/Systems/Events/EventSystem.cs new file mode 100644 index 0000000..d361a20 --- /dev/null +++ b/scripts/Systems/Events/EventSystem.cs @@ -0,0 +1,9 @@ +// Placeholder för event system +// Detta kommer att innehålla en global event bus för löst kopplad kommunikation mellan system + +namespace TheGame.Systems.Events +{ + // TODO: Implementera EventBus/MessageBus system + // TODO: Implementera EventData base class + // TODO: Implementera event subscription system +} \ No newline at end of file diff --git a/scripts/Systems/Events/EventSystem.cs.uid b/scripts/Systems/Events/EventSystem.cs.uid new file mode 100644 index 0000000..8e3057b --- /dev/null +++ b/scripts/Systems/Events/EventSystem.cs.uid @@ -0,0 +1 @@ +uid://b3slxjam3wsfl diff --git a/scripts/LocalizationManager.cs b/scripts/Systems/Localization/LocalizationManager.cs similarity index 100% rename from scripts/LocalizationManager.cs rename to scripts/Systems/Localization/LocalizationManager.cs diff --git a/scripts/LocalizationManager.cs.uid b/scripts/Systems/Localization/LocalizationManager.cs.uid similarity index 100% rename from scripts/LocalizationManager.cs.uid rename to scripts/Systems/Localization/LocalizationManager.cs.uid diff --git a/scripts/SaveInstance.cs b/scripts/Systems/Save/SaveInstance.cs similarity index 100% rename from scripts/SaveInstance.cs rename to scripts/Systems/Save/SaveInstance.cs diff --git a/scripts/SaveInstance.cs.uid b/scripts/Systems/Save/SaveInstance.cs.uid similarity index 100% rename from scripts/SaveInstance.cs.uid rename to scripts/Systems/Save/SaveInstance.cs.uid diff --git a/scripts/SaveManager.cs b/scripts/Systems/Save/SaveManager.cs similarity index 100% rename from scripts/SaveManager.cs rename to scripts/Systems/Save/SaveManager.cs diff --git a/scripts/SaveManager.cs.uid b/scripts/Systems/Save/SaveManager.cs.uid similarity index 100% rename from scripts/SaveManager.cs.uid rename to scripts/Systems/Save/SaveManager.cs.uid diff --git a/scripts/AdvancedSaveDialog.cs b/scripts/UI/Dialogs/AdvancedSaveDialog.cs similarity index 96% rename from scripts/AdvancedSaveDialog.cs rename to scripts/UI/Dialogs/AdvancedSaveDialog.cs index 1acee9a..16270be 100644 --- a/scripts/AdvancedSaveDialog.cs +++ b/scripts/UI/Dialogs/AdvancedSaveDialog.cs @@ -74,9 +74,8 @@ namespace TheGame // Anslut signaler Confirmed += OnSaveConfirmed; - // Fokusera på text input - _nameInput.GrabFocus(); - _nameInput.SelectAll(); + // Fokusera på text input - skjut upp till nästa frame + CallDeferred(nameof(FocusNameInput)); } private void CreateExistingSaveUI(VBoxContainer vbox) @@ -298,5 +297,14 @@ namespace TheGame } } } + + private void FocusNameInput() + { + if (_nameInput != null && IsInsideTree()) + { + _nameInput.GrabFocus(); + _nameInput.SelectAll(); + } + } } } \ No newline at end of file diff --git a/scripts/AdvancedSaveDialog.cs.uid b/scripts/UI/Dialogs/AdvancedSaveDialog.cs.uid similarity index 100% rename from scripts/AdvancedSaveDialog.cs.uid rename to scripts/UI/Dialogs/AdvancedSaveDialog.cs.uid diff --git a/scripts/ExitConfirmationDialog.cs b/scripts/UI/Dialogs/ExitConfirmationDialog.cs similarity index 100% rename from scripts/ExitConfirmationDialog.cs rename to scripts/UI/Dialogs/ExitConfirmationDialog.cs diff --git a/scripts/ExitConfirmationDialog.cs.uid b/scripts/UI/Dialogs/ExitConfirmationDialog.cs.uid similarity index 100% rename from scripts/ExitConfirmationDialog.cs.uid rename to scripts/UI/Dialogs/ExitConfirmationDialog.cs.uid diff --git a/scripts/SaveDialog.cs b/scripts/UI/Dialogs/SaveDialog.cs similarity index 100% rename from scripts/SaveDialog.cs rename to scripts/UI/Dialogs/SaveDialog.cs diff --git a/scripts/SaveDialog.cs.uid b/scripts/UI/Dialogs/SaveDialog.cs.uid similarity index 100% rename from scripts/SaveDialog.cs.uid rename to scripts/UI/Dialogs/SaveDialog.cs.uid diff --git a/scripts/InstanceSelectionMenu.cs b/scripts/UI/Menus/InstanceSelectionMenu.cs similarity index 100% rename from scripts/InstanceSelectionMenu.cs rename to scripts/UI/Menus/InstanceSelectionMenu.cs diff --git a/scripts/InstanceSelectionMenu.cs.uid b/scripts/UI/Menus/InstanceSelectionMenu.cs.uid similarity index 100% rename from scripts/InstanceSelectionMenu.cs.uid rename to scripts/UI/Menus/InstanceSelectionMenu.cs.uid diff --git a/scripts/LoadGameMenu.cs b/scripts/UI/Menus/LoadGameMenu.cs similarity index 100% rename from scripts/LoadGameMenu.cs rename to scripts/UI/Menus/LoadGameMenu.cs diff --git a/scripts/LoadGameMenu.cs.uid b/scripts/UI/Menus/LoadGameMenu.cs.uid similarity index 100% rename from scripts/LoadGameMenu.cs.uid rename to scripts/UI/Menus/LoadGameMenu.cs.uid diff --git a/scripts/MainMenu.cs b/scripts/UI/Menus/MainMenu.cs similarity index 100% rename from scripts/MainMenu.cs rename to scripts/UI/Menus/MainMenu.cs diff --git a/scripts/MainMenu.cs.uid b/scripts/UI/Menus/MainMenu.cs.uid similarity index 100% rename from scripts/MainMenu.cs.uid rename to scripts/UI/Menus/MainMenu.cs.uid diff --git a/scripts/PauseMenu.cs b/scripts/UI/Menus/PauseMenu.cs similarity index 100% rename from scripts/PauseMenu.cs rename to scripts/UI/Menus/PauseMenu.cs diff --git a/scripts/PauseMenu.cs.uid b/scripts/UI/Menus/PauseMenu.cs.uid similarity index 100% rename from scripts/PauseMenu.cs.uid rename to scripts/UI/Menus/PauseMenu.cs.uid diff --git a/scripts/SettingsMenu.cs b/scripts/UI/Menus/SettingsMenu.cs similarity index 100% rename from scripts/SettingsMenu.cs rename to scripts/UI/Menus/SettingsMenu.cs diff --git a/scripts/SettingsMenu.cs.uid b/scripts/UI/Menus/SettingsMenu.cs.uid similarity index 100% rename from scripts/SettingsMenu.cs.uid rename to scripts/UI/Menus/SettingsMenu.cs.uid