Game3D: Überblick und Lifecycle
Status: produktives Entwicklungsziel
Zweck und Verantwortlichkeiten
Game3D verbindet Godot-Presentation und Lifecycle mit Shared-Domain, Nakama und ENet. Fachliche Dungeon-/Loadout-Regeln gehören nicht in Nodes; Scenes orchestrieren Services und bilden Daten auf 3D-Nodes/UI ab.
Wichtige Dateipfade und Klassen
| Pfad / Namespace | Verantwortung / Lebensdauer |
|---|---|
src/HolodeckArena.Game3D/project.godot |
Engine 4.6, MainScene, Autoloads, Input und Layer |
Core/Bootstrap/AppBootstrap.cs / HolodeckArena3D.Core.Bootstrap.AppBootstrap |
Client-Autoload; erzeugt Services einmal pro Prozess und navigiert zum Main Menu |
Core/Bootstrap/ServerBootstrap.cs |
Server-Autoload; öffnet ENet und registriert Hub bei --server-mode |
Core/Bootstrap/BootstrapBase.cs |
Composition Root; hier neue Services registrieren, keine Gameplay-Abläufe hineinziehen |
Core/DI/ServiceProvider.cs |
eigener DI-Container; vom Bootstrap erzeugt und entsorgt |
Core/SceneLoading/SceneLoader.cs |
asynchroner Scene-Wechsel und Injection |
Core/SceneLoading/SceneInjector.cs |
injiziert rekursiv alle IServiceConsumer |
Core/GameFlow/GameFlowRoutes.cs |
aktive, stabile Szenenrouten |
Features/Gameplay/Player/PlayerController.cs |
3D-Player, Input, Bewegung, Facing, Interaction, Health und aktiver Prototyp-Combat |
Core/Network/DungeonCombatNetworkSync.cs |
separater ENet-Pfad für serverautoritative Dungeon-Waffen-Sessions |
Features/Balancing/BalancingSandboxScene.tscn |
Standalone-Szene für Combat-, Enemy-, Weapon- und Power-up-Tuning |
Laufzeit-Ablauf
MainScene ist ein Bootstrap-Container. Nach einem Frame bauen App/Server ihre Services; nur der zur RuntimeOption passende Pfad wird aktiv. Client: RuntimeConfig → Nakama-Services → Main Menu → Auth/Hub-Discovery → ENet → Hub. Server: RuntimeConfig → HubServerScene → ENet → Registry-Heartbeat.
Szenencontroller, die InjectedNode oder IServiceConsumer implementieren, dürfen erst nach InjectServices auf Services zugreifen. Standalone-Tools wie Room Preview und Balancing-Sandbox tragen die Gruppe standalone_tool_scene, damit Bootstrap keine normale Navigation startet.
Konfiguration und Erweiterungspunkte
- Service ergänzen: Interface/Implementierung anlegen, in
BootstrapBaseregistrieren, über Constructor oderInjectServicesbeziehen. - Route ergänzen: Scene erstellen, Konstante in
GameFlowRoutes, Methode inIGameFlowService/GameFlowService, Navigation über den Service. - Input ergänzen:
project.godotund gegebenenfallsAppBootstrap.EnsureGameplayInputActions; siehe How-to. - Autoload nur für prozessglobale Engine-Integration. Feature-State bevorzugt als DI-Service oder Scene-Node halten.
Tests, Debugging, Performance und Fallstricke
DI/Domain möglichst mit xUnit testen; Scene-Lifecycle manuell oder in Godot. Häufigster Fehler ist ein nicht injizierter Node, ein Autoload-Zugriff in Standalone-Tools oder ein nicht abgemeldetes Event. _PhysicsProcess des Players ist Hot Path: keine Serviceauflösung, Loads oder LINQ pro Frame.
Verwandt: Architektur, Szenen/Autoloads, Social Hub, Troubleshooting.