This commit is contained in:
Marek Lenczewski
2026-04-04 00:00:15 +02:00
parent 3488856b91
commit f1d34ebf1d
104 changed files with 1912 additions and 1789 deletions

58
plan.md
View File

@@ -4,21 +4,27 @@
Drei Grundordner nach Verantwortung. Resources liegen bei ihren Skripten.
```
scenes/ — Darstellung + Input
healthbar.gd — Shared Component
effect_icon_factory.gd — Shared Utility (statisch, Effekt-Icon-Erstellung)
healthbar.gd — Health-Anzeige + Viewport-Setup
healthbar_shield.gd — Shield-Anzeige
healthbar_status.gd — Target-Border + Aggro-Farbwechsel
healthbar_effects.gd — Effekt-Icons auf Healthbar
player/ — Spieler + player_stats
role/ — Rollenwechsel + Ability/AbilitySet-Klassen
damage/ — set.tres + abilities/
tank/ — set.tres + abilities/
healer/ — set.tres + abilities/
enemy/ — Gegner + Boss + enemy_stats + boss_stats
enemy/ — Gegner + enemy_stats
boss/ — Boss + boss_stats
portal/ — Portal + Gate + portal_stats
dungeon/ — Dungeon + dungeon_manager
hud/ — HUD
hud/ — HUD (4 Skripte: vitals, respawn, abilities, effects)
world/ — Hauptszene + portal_spawner
systems/ — Spiellogik
aggro/ — AggroSystem (system, tracker, decay, events) + aggro_config
effect.gd — Effect Resource (Buff/Debuff/Aura Daten)
10× *_system.gd — health, shield, damage, ability, cooldown, enemy_ai, respawn, spawn, effect, element
11× *_system.gd — health, shield, ability, auto_attack, cooldown, enemy_ai, respawn, spawn, effect, element, buff_calc
aura_system.gd — Aura-Propagierung (Child von EffectSystem)
autoloads/ — Globaler Zustand
event_bus.gd
game_state.gd
@@ -27,7 +33,7 @@ autoloads/ — Globaler Zustand
## Szenenbaum
- Welt
- Systems (11 Systeme als Child-Nodes)
- Systems (12 Systeme als Child-Nodes)
- Taverne
- Player
- Portale (dynamisch)
@@ -136,20 +142,26 @@ autoloads/ — Globaler Zustand
- Listener: entity_died
- Event: respawn_tick, player_respawned
### AbilitySystem (ability_system.gd)
- Ability-Ausführung (Single, AOE, Utility, Ult) + Auto-Attack in _process
- Ability-Ausführung (Single, AOE, Utility, Ult)
- Listener: ability_use_requested
- Event: attack_executed, damage_requested, heal_requested
### AutoAttackSystem (auto_attack_system.gd)
- Auto-Attack-Logik, läuft jeden Frame in _process
- Liest CombatState.in_combat + Targeting.current_target
- Event: damage_requested, heal_requested
### EffectSystem (effect_system.gd)
- Verwaltet Buffs, Debuffs und Auras auf Entities
- Effect Resource (effect.gd): effect_name, type (BUFF/DEBUFF/AURA), stat, value, duration, is_multiplier, aura_radius, tick_interval, element
- State: active_effects Dictionary[Node, Array[Dict]] (effect, source, remaining, tick_timer)
- Kein Stacking: gleicher effect_name auf Entity → wird refreshed statt gestackt
- Passive-Abilities werden als AURA-Effekte erstellt (role_changed → permanente Auras)
- Aura-Propagierung: Auras mit aura_radius > 0 geben allen Spielern im Radius einen temporären Buff (0.5s, refreshed jedes Frame). Verlässt man den Radius → Buff sofort weg
- _process: Dauer ticken, abgelaufene entfernen, DoT/HoT-Ticks, Aura-Propagierung
- _recalc_stat_buffs: Multiplier-Effekte aggregieren → buff_damage/heal/shield in Stats
- _process: Dauer ticken, abgelaufene entfernen, DoT/HoT-Ticks
- Listener: role_changed, entity_died, effect_requested
- Event: buff_changed, shield_changed, effect_applied, effect_expired
- Event: effect_applied, effect_expired
- Children:
- AuraSystem (aura_system.gd) — Aura-Propagierung im Radius, Buff-Refresh
- BuffCalcSystem (buff_calc_system.gd) — Multiplier aggregieren → Stats + Shield updaten
- Event: buff_changed, shield_changed
### ElementSystem (element_system.gd)
- Verwaltet Element-Zustände auf Entities und löst Elementareffekte aus
- Element Enum: NONE, FIRE (erweiterbar)
@@ -164,8 +176,6 @@ autoloads/ — Globaler Zustand
- Cooldown-Tracking, GCD, AA-Timer per Entity
- register/deregister per Entity, direkte Funktionsaufrufe vom AbilitySystem
- Event: cooldown_tick
### DamageSystem (damage_system.gd)
- Reserviert für spätere Schadensberechnung (aktuell leer)
### AggroSystem (systems/aggro/)
- Systemweite Werte in AggroConfig Resource (resources/stats/aggro_config.tres)
- aggro_system.gd — Parent, Config halten, Children verdrahten
@@ -209,8 +219,9 @@ autoloads/ — Globaler Zustand
- Camera3D
- Movement (Node, movement.gd) — WASD + Springen, liest Werte von Stats
- Combat (Node, combat.gd) — Input-Handler, emittiert ability_use_requested
- CombatState (Node, combat_state.gd) — in_combat-Tracking, Combat-Timer
- Role (Node, role.gd) — Rollenwechsel ALT+1/2/3, emittiert role_changed (auch bei _ready)
- Targeting (Node, targeting.gd) — Klick/TAB, emittiert target_requested
- Targeting (Node, targeting.gd) — Klick/TAB/Auto-Target, emittiert target_changed
- player.gd — Registriert bei Stats mit PlayerStats Resource, Sichtbarkeit bei Tod/Respawn
- camera.gd — LMB freies Umsehen, RMB Kamera + Laufrichtung
@@ -223,7 +234,10 @@ autoloads/ — Globaler Zustand
- DetectionArea (Area3D, emittiert enemy_detected)
- NavigationAgent3D
- EnemyMovement (Node, enemy_movement.gd) — Empfängt Bewegungsbefehle
- Healthbar (Sprite3D + SubViewport, healthbar.gd) — liest HP/Shield von Stats, zeigt Effekt-Icons
- Healthbar (Sprite3D + SubViewport, healthbar.gd) — Health-Anzeige
- HealthbarShield (Node, healthbar_shield.gd) — Shield-Anzeige
- HealthbarStatus (Node, healthbar_status.gd) — Target-Border + Aggro-Farbe
- HealthbarEffects (Node, healthbar_effects.gd) — Effekt-Icons
- enemy.gd — Registriert bei Stats mit EnemyStats Resource, Detection-Area Signal
- Aggro-Regeln (Werte in AggroConfig Resource):
- Aufbau:
@@ -254,6 +268,9 @@ autoloads/ — Globaler Zustand
- HitArea (Area3D)
- DetectionArea (Area3D, Auto-Targeting bei Betreten)
- Healthbar (Sprite3D + SubViewport, healthbar.gd)
- HealthbarShield (Node, healthbar_shield.gd)
- HealthbarStatus (Node, healthbar_status.gd)
- HealthbarEffects (Node, healthbar_effects.gd)
- portal.gd — Registriert bei Stats mit PortalStats Resource
- Spawnt Gegner bei HP-Schwellen (→ SpawnSystem)
@@ -266,7 +283,7 @@ autoloads/ — Globaler Zustand
## Dungeon (dungeon/)
- dungeon.tscn — Geschlossener Raum (15x90m, Wände, dunkles Licht)
- Systems (alle 11 Systeme, temporär bis Welt parallel läuft)
- Systems (alle 12 Systeme, temporär bis Welt parallel läuft)
- NavigationRegion3D
- Boden, 4 Wände (StaticBody3D + BoxMesh, 3m hoch)
- Spieler (Instanz von player.tscn)
@@ -278,13 +295,15 @@ autoloads/ — Globaler Zustand
- Eigene Systems bis Welt parallel läuft (geplant: Reparenting)
## HUD (hud/)
- hud.tscn — CanvasLayer
- hud.tscn — CanvasLayer (kein Root-Skript)
- HealthBar (ProgressBar, Label)
- ShieldBar (ProgressBar, Label)
- EffectContainer (HBoxContainer, programmatisch, unter ShieldBar)
- RespawnTimer (Label, Countdown bei Tod)
- AbilityBar (HBoxContainer, RoleIcon + Abilities 1-4 + Passive)
- hud.gd — Reagiert auf Events, liest Werte von Stats, zeigt Effekt-Icons
- HudVitals (Node, hud_vitals.gd) — HP/Shield-Bars
- HudRespawn (Node, hud_respawn.gd) — Respawn-Timer
- HudAbilities (Node, hud_abilities.gd) — Ability-Bar + Cooldowns + Rollen-Icon
- HudEffects (Node, hud_effects.gd) — Effekt-Icons (nutzt EffectIconFactory)
# Abilities (Werte)
- Schadens-Klasse:
@@ -308,3 +327,6 @@ autoloads/ — Globaler Zustand
- 3 Utility: Schild sofort auf 100%, 5s CD, kein GCD
- 4 Ult: 25 Heal Single + 10 AOE Heal 3m radius, 20m Range, 15s CD, GCD
- 5 Passive: 50% mehr Heal Aura, 50m (permanent aktiv, kein CD)
---