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.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://bqkwdpfmu7tge"]
|
[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/Core/Game.cs" id="1_xncbp"]
|
||||||
[ext_resource type="Script" path="res://scripts/PauseMenu.cs" id="2_a5qiy"]
|
[ext_resource type="Script" path="res://scripts/UI/Menus/PauseMenu.cs" id="2_a5qiy"]
|
||||||
|
|
||||||
[node name="Game" type="Control"]
|
[node name="Game" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://cdnyu0lqxhn80"]
|
[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"]
|
[node name="LoadGameMenu" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://dsrcpteclv0ar"]
|
[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"]
|
[node name="MainMenu" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://b2k5vxrj8nq4h"]
|
[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"]
|
[node name="SettingsMenu" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
|
|||||||
9
scripts/Gameplay/Units/BaseUnit.cs
Normal file
9
scripts/Gameplay/Units/BaseUnit.cs
Normal file
@@ -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
|
||||||
|
}
|
||||||
1
scripts/Gameplay/Units/BaseUnit.cs.uid
Normal file
1
scripts/Gameplay/Units/BaseUnit.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bdm5xfw58nd5i
|
||||||
9
scripts/Modding/API/IModAPI.cs
Normal file
9
scripts/Modding/API/IModAPI.cs
Normal file
@@ -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
|
||||||
|
}
|
||||||
1
scripts/Modding/API/IModAPI.cs.uid
Normal file
1
scripts/Modding/API/IModAPI.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bpq0jeupss8q6
|
||||||
127
scripts/README.md
Normal file
127
scripts/README.md
Normal file
@@ -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
|
||||||
9
scripts/Systems/Events/EventSystem.cs
Normal file
9
scripts/Systems/Events/EventSystem.cs
Normal file
@@ -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
|
||||||
|
}
|
||||||
1
scripts/Systems/Events/EventSystem.cs.uid
Normal file
1
scripts/Systems/Events/EventSystem.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://b3slxjam3wsfl
|
||||||
@@ -74,9 +74,8 @@ namespace TheGame
|
|||||||
// Anslut signaler
|
// Anslut signaler
|
||||||
Confirmed += OnSaveConfirmed;
|
Confirmed += OnSaveConfirmed;
|
||||||
|
|
||||||
// Fokusera på text input
|
// Fokusera på text input - skjut upp till nästa frame
|
||||||
_nameInput.GrabFocus();
|
CallDeferred(nameof(FocusNameInput));
|
||||||
_nameInput.SelectAll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateExistingSaveUI(VBoxContainer vbox)
|
private void CreateExistingSaveUI(VBoxContainer vbox)
|
||||||
@@ -298,5 +297,14 @@ namespace TheGame
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void FocusNameInput()
|
||||||
|
{
|
||||||
|
if (_nameInput != null && IsInsideTree())
|
||||||
|
{
|
||||||
|
_nameInput.GrabFocus();
|
||||||
|
_nameInput.SelectAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user