This commit is contained in:
Marek Le
2026-04-02 23:22:51 +02:00
parent 73af6abeb7
commit 3488856b91
22 changed files with 534 additions and 78 deletions

57
plan.md
View File

@@ -17,7 +17,8 @@ scenes/ — Darstellung + Input
world/ — Hauptszene + portal_spawner
systems/ — Spiellogik
aggro/ — AggroSystem (system, tracker, decay, events) + aggro_config
9× *_system.gd — health, shield, damage, ability, cooldown, enemy_ai, respawn, spawn, buff
effect.gd — Effect Resource (Buff/Debuff/Aura Daten)
10× *_system.gd — health, shield, damage, ability, cooldown, enemy_ai, respawn, spawn, effect, element
autoloads/ — Globaler Zustand
event_bus.gd
game_state.gd
@@ -26,7 +27,7 @@ autoloads/ — Globaler Zustand
## Szenenbaum
- Welt
- Systems (10 Systeme als Child-Nodes)
- Systems (11 Systeme als Child-Nodes)
- Taverne
- Player
- Portale (dynamisch)
@@ -75,8 +76,14 @@ autoloads/ — Globaler Zustand
- portal_defeated(portal)
- Dungeon:
- dungeon_cleared()
- Reserviert:
- auto_attack_tick, target_requested, combat_state_changed, enemy_state_changed, enemy_target_changed, regeneration_changed
- Effects:
- effect_requested(target, effect, source)
- effect_applied(target, effect)
- effect_expired(target, effect)
- Elements:
- element_damage_dealt(attacker, target, amount, element)
- element_applied(target, element)
- element_reaction(target, element_a, element_b, reaction_name)
## Stats (autoload/stats.gd)
- Speichert aktuelle Attribute aller Entities
@@ -101,12 +108,12 @@ autoloads/ — Globaler Zustand
## resources/roles/
### Ability (ability.gd)
- ability_name, type, damage, ability_range, cooldown, uses_gcd, aoe_radius, icon, is_heal, passive_stat
- ability_name, type, damage, ability_range, cooldown, uses_gcd, aoe_radius, icon, is_heal, passive_stat, element
- Typen: Single, AOE, Utility, Ult, Passive
### AbilitySet (ability_set.gd)
- abilities (Array[Ability]), aa_damage, aa_range, aa_is_heal
### AbilityModifier (geplant)
- Verändert Ability (Element, Beruf, Prestige)
### AbilityModifier (geplant, Zukunft)
- Verändert Ability (Beruf, Prestige)
### Rollen-Ordner (damage/, tank/, healer/)
- set.tres — AbilitySet der Rolle
- abilities/ — 5 Ability .tres pro Rolle (single, aoe, utility, ult, passive)
@@ -132,10 +139,27 @@ autoloads/ — Globaler Zustand
- Ability-Ausführung (Single, AOE, Utility, Ult) + Auto-Attack in _process
- Listener: ability_use_requested
- Event: attack_executed, damage_requested, heal_requested
### BuffSystem (buff_system.gd)
- Passive-Buffs (damage/heal/shield Multiplikatoren in Stats)
- Listener: role_changed
- Event: buff_changed, shield_changed
### 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
- Listener: role_changed, entity_died, effect_requested
- Event: buff_changed, shield_changed, effect_applied, effect_expired
### ElementSystem (element_system.gd)
- Verwaltet Element-Zustände auf Entities und löst Elementareffekte aus
- Element Enum: NONE, FIRE (erweiterbar)
- State: applied_elements Dictionary[Node, int]
- Nur Entities in Gruppen "enemies" oder "portals" erhalten Elemente
- Bei Element-Schaden: Element auf Ziel anwenden, passenden Effekt erstellen
- Feuer: DoT (3 Schaden/Tick, 2s Interval, 6s Dauer)
- Bei zwei verschiedenen Elementen: Reaktion auslösen (Zukunft)
- Listener: element_damage_dealt, entity_died, effect_expired
- Event: element_applied, element_reaction
### CooldownSystem (cooldown_system.gd)
- Cooldown-Tracking, GCD, AA-Timer per Entity
- register/deregister per Entity, direkte Funktionsaufrufe vom AbilitySystem
@@ -166,7 +190,7 @@ autoloads/ — Globaler Zustand
## Welt (world/)
- world.tscn — Hauptszene (100x100m)
- Systems (alle 10 Systeme als Child-Nodes)
- Systems (alle 11 Systeme als Child-Nodes)
- NavigationRegion3D
- Boden (MeshInstance3D, 100x100m PlaneMesh)
- Kollision (StaticBody3D, WorldBoundaryShape3D)
@@ -185,7 +209,7 @@ autoloads/ — Globaler Zustand
- Camera3D
- Movement (Node, movement.gd) — WASD + Springen, liest Werte von Stats
- Combat (Node, combat.gd) — Input-Handler, emittiert ability_use_requested
- Role (Node, role.gd) — Rollenwechsel ALT+1/2/3, emittiert role_changed
- Role (Node, role.gd) — Rollenwechsel ALT+1/2/3, emittiert role_changed (auch bei _ready)
- Targeting (Node, targeting.gd) — Klick/TAB, emittiert target_requested
- player.gd — Registriert bei Stats mit PlayerStats Resource, Sichtbarkeit bei Tod/Respawn
- camera.gd — LMB freies Umsehen, RMB Kamera + Laufrichtung
@@ -199,7 +223,7 @@ 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
- Healthbar (Sprite3D + SubViewport, healthbar.gd) — liest HP/Shield von Stats, zeigt Effekt-Icons
- enemy.gd — Registriert bei Stats mit EnemyStats Resource, Detection-Area Signal
- Aggro-Regeln (Werte in AggroConfig Resource):
- Aufbau:
@@ -242,7 +266,7 @@ autoloads/ — Globaler Zustand
## Dungeon (dungeon/)
- dungeon.tscn — Geschlossener Raum (15x90m, Wände, dunkles Licht)
- Systems (alle 10 Systeme, temporär bis Welt parallel läuft)
- Systems (alle 11 Systeme, temporär bis Welt parallel läuft)
- NavigationRegion3D
- Boden, 4 Wände (StaticBody3D + BoxMesh, 3m hoch)
- Spieler (Instanz von player.tscn)
@@ -257,9 +281,10 @@ autoloads/ — Globaler Zustand
- hud.tscn — CanvasLayer
- 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
- hud.gd — Reagiert auf Events, liest Werte von Stats, zeigt Effekt-Icons
# Abilities (Werte)
- Schadens-Klasse: