update
This commit is contained in:
189
flow.md
Normal file
189
flow.md
Normal 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 | — |
|
||||
Reference in New Issue
Block a user