This commit is contained in:
Marek Lenczewski
2026-04-01 22:53:28 +02:00
parent b236cd52cb
commit e76c66eda6
70 changed files with 1016 additions and 732 deletions

View File

@@ -12,37 +12,41 @@ Der User kommuniziert auf Deutsch. Code und Variablen auf Englisch. Kommentare n
- Keine Debug-Prints im finalen Code (nur temporär zum Testen)
## Architektur
- **Systeme berechnen und entscheiden**, Szenen rendern und senden/empfangen
- **Event-Flow**: Input → Intention-Event → System → Ergebnis-Event → Node
- **Systeme** sind Scene-Nodes (nicht Autoloads), gefunden über Gruppen
- **Zwischen Szenen**: Kommunikation über EventBus (Autoload). Szenen kennen sich nicht.
- **Innerhalb einer Szene**: Modulare Skripte als Child-Nodes, Zugriff auf Geschwister-Nodes erlaubt.
- **Autoloads**: EventBus (Signals), GameState (Spielerzustand zwischen Szenenwechseln)
- **Gruppen**: "player", "enemies", "portals", "boss"
- **Resources** für statische Konfiguration (Stats, Abilities), **Nodes** für laufenden Zustand
- **Stats (Model)**: Autoload, zentrale Datenhaltung aller Entity-Attribute. Basiswerte aus Resources.
- **Systeme (Controller)**: Scene-Nodes in world.tscn/dungeon.tscn, lesen/schreiben über Stats.
- **Szenen (Views)**: Rendern, Input senden, Events empfangen. Kein Gameplay-State.
- **EventBus (Signals)**: Autoload, Kommunikation zwischen Szenen und Systemen.
- **Event-Flow**: Szene → Input → EventBus → System → Stats → EventBus → Szene
- **Zwischen Szenen**: Kommunikation über EventBus. Szenen kennen sich nicht.
- **Innerhalb einer Szene**: Zugriff auf Geschwister-Nodes erlaubt.
- **Autoloads**: EventBus (Signals), Stats (Entity-Daten), GameState (Szene + Position)
- **Gruppen**: "player", "enemies", "portals", "boss", "cooldown_system"
- **Resources** für Basiswerte (Stats, Abilities), **Stats Autoload** für Laufzeitwerte
## Projektstruktur
- `scenes/` — .tscn Dateien
- `world.tscn` — Hauptszene (100x100m, Taverne in Mitte)
- `world.tscn` — Hauptszene (100x100m, Taverne, 10 Systeme)
- `player/player.tscn` — Spieler
- `enemy/enemy.tscn` — Gegner
- `enemy/boss.tscn` — Boss (eigene Szene, erbt von Enemy)
- `portal/portal.tscn` — Portal (Gegner-Spawner)
- `portal/gate.tscn` — Gate (Teleporter, konfigurierbar: Dungeon-Eingang oder Exit)
- `dungeon/dungeon.tscn` — Dungeon (15x90m Schlauch, 4 Gegnergruppen + Boss)
- `enemy/boss.tscn` — Boss
- `portal/portal.tscn` — Portal
- `portal/gate.tscn` — Gate (Teleporter)
- `dungeon/dungeon.tscn` — Dungeon (15x90m, 10 Systeme)
- `hud/hud.tscn` — HUD
- `scripts/systems/`Zentrale Systeme (health, shield, respawn, ability, cooldown, damage, buff, aggro, enemy_ai, spawn)
- `scripts/systems/`10 Systeme (health, shield, damage, ability, cooldown, aggro, enemy_ai, respawn, spawn, buff)
- `scripts/player/` — Spieler-Skripte (player, camera, movement, combat, targeting, role, hud)
- `scripts/enemy/` — Gegner-Skripte (enemy, enemy_movement, boss)
- `scripts/portal/` — Portal + Gate (portal, gate)
- `scripts/dungeon/` — Dungeon-Logik (dungeon_manager)
- `scripts/components/`Wiederverwendbare Komponenten (health, shield, healthbar)
- `scripts/abilities/` — Ability-System (ability, ability_set)
- `scripts/resources/` — Resource-Klassen (entity_stats)
- `scripts/components/`Healthbar (healthbar)
- `scripts/abilities/` — Ability-Daten (ability, ability_set)
- `scripts/resources/` — Resource-Klassen (base_stats, player_stats, enemy_stats, boss_stats, portal_stats)
- `scripts/event_bus.gd` — Globale Signals
- `scripts/game_state.gd`Spielerzustand zwischen Szenenwechseln
- `scripts/stats.gd`Zentrale Entity-Datenhaltung
- `scripts/game_state.gd` — Szene + Position zwischen Szenenwechseln
- `scripts/world/portal_spawner.gd` — Portal-Spawning
- `resources/stats/` — Stats .tres (player_stats, enemy_stats, portal_stats, boss_stats)
- `resources/abilities/` — Ability .tres pro Rolle (single_attack, tank_single, healer_single, etc.)
- `resources/abilities/` — Ability .tres pro Rolle
- `resources/ability_sets/` — AbilitySet .tres pro Rolle (tank_set, damage_set, healer_set)
## Planungsdokument
@@ -81,11 +85,11 @@ Unter `~/Documents/2026/projekte/mmo/infosammlung/` liegen die originalen Design
- Heiler: Heilt statt schadet (Single, AOE, Ult), Heal-Passive, AOE macht Schaden
## Szenenwechsel
- GameState Autoload speichert Spielerzustand (HP, Shield, Rolle) zwischen Szenen
- Stats Autoload cached Spieler-Werte automatisch bei Szenenwechsel
- GameState speichert Rolle + Position
- Gate (Eingang): save_player → Dungeon laden
- Gate (Exit): save_player, returning_from_dungeon → Welt laden, Spieler bei Gate-Position
- Boss-Tod: dungeon_cleared → Welt laden, Spieler bei Taverne, Gates weg
- PortalSpawner stellt Gate wieder her wenn portal_position gesetzt und Boss noch lebt
- Gate (Exit): returning_from_dungeon → Welt laden, Spieler bei Gate-Position
- Boss-Tod: dungeon_cleared → Welt laden, Cache geleert, Spieler bei Taverne mit vollen HP
## Workflow mit dem User
- **plan.md ist zentral** — User will Änderungen zuerst in plan.md dokumentiert haben, dann implementieren