This commit is contained in:
Marek Lenczewski
2026-04-02 16:02:24 +02:00
parent e76c66eda6
commit 47f4fe3d90
106 changed files with 434 additions and 204 deletions

189
flow.md Normal file
View File

@@ -0,0 +1,189 @@
# Datenflows
## 1. Kampf-Flow (Schaden)
```
Spieler drückt 1-4 Gegner im ATTACK-State
│ │
combat.gd enemy_ai_system.gd
│ │
▼ ▼
ability_use_requested ──► AbilitySystem ◄── _process (Auto-Attack)
damage_requested(attacker, target, amount)
HealthSystem
├── ShieldSystem.absorb() → Schild reduzieren
│ └── shield_changed / shield_broken
├── damage_dealt ──► AggroSystem (Aggro aufbauen)
├── health_changed ──► Healthbar, HUD, SpawnSystem
└── falls HP=0: entity_died
┌───────────┼───────────┐
▼ ▼ ▼
AggroSystem RespawnSystem SpawnSystem
(Tabelle (Spieler: (Portal:
aufräumen) 3s → Taverne) Daten löschen)
```
## 2. Kampf-Flow (Heilung)
```
Heiler drückt 1/2/4 (is_heal) oder Auto-Attack (aa_is_heal)
AbilitySystem
heal_requested(healer, target, amount)
├──► HealthSystem → HP erhöhen → health_changed → HUD
└──► AggroSystem → 0.5x Aggro auf ALLE Gegner die Heiler kennen
```
## 3. Aggro-Flow
```
damage_dealt ──► AggroSystem._on_damage_dealt()
│ Tank-Rolle → 2x Multiplikator
aggro_tables[enemy][player] += amount
heal_requested ──► AggroSystem._on_heal_requested()
│ 0.5x auf ALLE Gegner mit Heiler in Tabelle
aggro_tables[enemy][healer] += amount * 0.5
enemy_detected ──► AggroSystem._on_enemy_detected()
│ +1 Aggro, State → CHASE
└──► _alert_nearby() → Nachbarn im alert_radius auch aktivieren
_process(delta):
├── Aggro decay: -aggro_decay/s
├── Außerhalb Portal-Radius: exponentieller Decay (+1%·2^sekunden)
├── Innerhalb Portal-Radius: Minimum 1.0 Aggro
└── _update_target(): Höchster Aggro-Wert → enemy.target + State
```
## 4. Portal → Dungeon Flow
```
Portal wird angegriffen
health_changed ──► SpawnSystem
│ └── HP-Schwellen (85/70/55/40/25/10%) → Gegner spawnen
│ └── portal_spawn Signal
Portal HP = 0 → entity_died
portal.gd: _on_entity_died()
├── Mesh → grün (Gate-Look)
├── Gegner mit Portal löschen
└── Gate instanzieren an Portal-Position
└── portal_defeated Signal
Spieler betritt Gate
gate.gd: _on_gate_area_body_entered()
├── GameState.save_player() → Rolle speichern
├── Stats.deregister() → player_cache befüllen
└── change_scene → dungeon.tscn
dungeon_manager.gd _ready()
├── Stats.register() → player_cache wiederherstellen
└── GameState.restore_player() → Rolle setzen
```
## 5. Dungeon → Welt Flow
```
Boss stirbt → entity_died
dungeon_manager.gd: _on_entity_died()
├── 2s warten
├── GameState.dungeon_cleared = true
├── GameState.clear() → Stats.clear_player_cache()
├── dungeon_cleared Signal
└── change_scene → world.tscn
Spieler spawnt bei Taverne (0, 1, -5)
volle HP + Schild (durch clear_player_cache)
Exit-Gate (zurück zur Welt ohne Boss-Kill):
├── GameState.returning_from_dungeon = true
└── change_scene → world.tscn
└── Spieler bei portal_position, Stats aus Cache
```
## 6. Rollen-Flow
```
Spieler drückt ALT+1/2/3
role.gd: set_role()
role_changed(player, role_type)
├──► BuffSystem: Passive-Buffs berechnen
│ ├── buff_damage/buff_heal/buff_shield in Stats setzen
│ ├── max_shield anpassen (Tank-Passive)
│ └── buff_changed + shield_changed Signals
└──► CooldownSystem: Alle Cooldowns zurücksetzen
```
## 7. Cooldown-Flow
```
AbilitySystem führt Ability aus
CooldownSystem.set_cooldown(player, index, cd, gcd)
_process(delta): Alle Timer runterzählen
cooldown_tick(cds, max_cds, gcd_timer) ──► HUD (Ability-Icons updaten)
AbilitySystem fragt vor Ausführung:
├── is_ready(player, index) — Ability-CD abgelaufen?
├── is_gcd_ready(player) — GCD abgelaufen?
└── is_aa_ready(player) — Auto-Attack bereit?
```
## 8. Respawn-Flow
```
entity_died (Spieler)
RespawnSystem._on_entity_died()
├── Mesh/Collision/Input deaktivieren
└── dead_players[player] = 3.0s
_process(delta):
├── Timer runterzählen
├── respawn_tick → HUD (Countdown anzeigen)
└── Timer ≤ 0: _respawn()
├── Position → Taverne (0, 1, -5)
├── HP/Schild auf Max
├── Mesh/Collision/Input reaktivieren
├── health_changed + shield_changed
└── player_respawned
```
## Signalübersicht
| Signal | Sender | Empfänger |
|---|---|---|
| `ability_use_requested` | Combat | AbilitySystem |
| `damage_requested` | AbilitySystem, EnemyAI | HealthSystem |
| `heal_requested` | AbilitySystem | HealthSystem, AggroSystem |
| `damage_dealt` | HealthSystem | AggroSystem, Targeting |
| `health_changed` | HealthSystem, RespawnSystem | SpawnSystem, Healthbar, HUD |
| `shield_changed` | ShieldSystem, AbilitySystem, BuffSystem, RespawnSystem | Healthbar, HUD |
| `entity_died` | HealthSystem | AggroSystem, RespawnSystem, SpawnSystem, Targeting, DungeonManager, Portal |
| `role_changed` | Role | BuffSystem, CooldownSystem |
| `enemy_detected` | Enemy (DetectionArea) | AggroSystem |
| `enemy_engaged` | AggroSystem | Targeting |
| `cooldown_tick` | CooldownSystem | HUD |
| `respawn_tick` | RespawnSystem | HUD |
| `dungeon_cleared` | DungeonManager | Gate |
| `portal_defeated` | Portal | — |
| `player_respawned` | RespawnSystem | — |