6.8 KiB
6.8 KiB
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 | — |