# Projektstruktur ## Szenenbaum - Welt - Player - Gegner - HUD ## Architektur - Zwischen Szenen: Kommunikation über EventBus (Szenen kennen sich nicht) - Innerhalb einer Szene: Modulare Skripte, Zugriff auf Geschwister-Nodes erlaubt ## Szenen - world.tscn — Hauptszene - NavigationRegion3D (Wegfindung für Gegner) - Boden (MeshInstance3D, 20x20m PlaneMesh, Gras-Noise-Textur) - Kollision (StaticBody3D, WorldBoundaryShape3D) - Licht (DirectionalLight3D, 45°, Schatten) - Spieler (Instanz von player.tscn) - HUD (Instanz von hud.tscn) - player.tscn — Spieler - CharacterBody3D (player.gd) - Kollision (CapsuleShape3D, 1.8m x 0.3m) - Mesh (CapsuleMesh) - CameraPivot (Node3D, Kopfhöhe, camera.gd) - Camera3D (hinter/über Spieler) - Movement (Node, movement.gd) - Combat (Node, combat.gd) - PlayerClass (Node, player_class.gd) - Targeting (Node, targeting.gd) - Health (Node, health.gd) - Shield (Node, shield.gd) - Respawn (Node, respawn.gd) - hud.tscn — HUD (eigene Szene, kommuniziert nur über Events) - CanvasLayer (hud.gd) - HealthBar (ProgressBar, links oben) - ShieldBar (ProgressBar, links oben, unter HealthBar) - RespawnTimer (Label, mitte, Countdown bei Tod) - AbilityBar (HBoxContainer, mitte unten) - ClassIcon (Label, Klassen-Symbol: T=Tank, D=Schaden, H=Heiler) - Ability 1-5 - enemy.tscn — Gegner - CharacterBody3D (enemy.gd) - Kollision (CapsuleShape3D) - Mesh (SphereMesh, Platzhalter) - Health (Node, health.gd) - Shield (Node, shield.gd) - HitArea (Area3D, Trefferbereich des Gegners) - CollisionShape3D (CapsuleShape3D) - DetectionArea (Area3D, Erkennungsradius) - CollisionShape3D (SphereShape3D) - NavigationAgent3D (Wegfindung) - EnemyMovement (Node, enemy_movement.gd) - EnemyCombat (Node, enemy_combat.gd) - EnemyAggro (Node, enemy_aggro.gd) - Healthbar (Sprite3D + SubViewport, über dem Gegner, enemy_healthbar.gd) - SubViewport - Border (ColorRect, gelb, sichtbar bei Anvisierung) - HealthBar (ProgressBar, grün) - ShieldBar (ProgressBar, blau) ## Skripte - player.gd — Kern, verbindet Komponenten - camera.gd — LMB freies Umsehen, RMB Kamera + Laufrichtung anpassen - movement.gd — Bewegung (WASD relativ zur Kamera), Springen, Schwerkraft - combat.gd — Führt Abilities aus, verwaltet Cooldowns (GCD 1s), Fähigkeiten 1-5 - 1 Single: 10 Schaden, Distanzprüfung, 0s CD, GCD - 2 AOE: 5 Schaden im Bereich, 3s CD, GCD - 3 Utility: Schild sofort auf 100%, 5s CD, kein GCD - 4 Ult: 4x Single + 2x AOE um Ziel, 30s CD, GCD - 5 Passive: 50% mehr Schaden (permanent aktiv, kein CD) - targeting.gd — Klick/TAB anvisieren, Kampfmodus bei Gegner-Angriff, Auto-Targeting auf nächsten Gegner - event_bus.gd — Autoload-Singleton, globale Signals - enemy.gd — Gegner-Kern, State Machine (Idle, Verfolgen, Angreifen, Zurückkehren), alarmiert Gegner in 3m - enemy_movement.gd — Navigation zum Ziel/Spawnpunkt - enemy_combat.gd — Angriff über Event (damage_requested) - enemy_aggro.gd — Aggro-Tabelle (Spieler → Wert), wählt Ziel mit höchstem Aggro - Schaden = Aggro (1:1) - Heilung = Aggro (0.5x) - Tank = Aggro-Multiplikator (2x) - Aggro verfällt -1/s - Bei Spieler-Tod → Aggro auf 0 - health.gd — Leben, 1/s Regeneration, Tod bei 0 (wiederverwendbar) - shield.gd — Schild, regeneriert nach 3s ohne Schaden, in 5s voll (wiederverwendbar) - player_class.gd — Klassenwechsel ALT+1 bis ALT+3 (Tank/Schaden/Heiler), tauscht AbilitySet - respawn.gd — Bei Tod: Spieler deaktivieren, 3s Timer, Respawn am Startpunkt, Leben/Schild voll - hud.gd — Reagiert auf Events, aktualisiert HealthBar/ShieldBar/AbilityBar/RespawnTimer - enemy_healthbar.gd — Liest Health/Shield vom Gegner, aktualisiert Balken über dem Gegner, gelber Rand bei Anvisierung, blauer Lebensbalken wenn Spieler Ziel ist ## Abilities (Resources) - ability.gd (Resource) — name, type, damage, range, cooldown, uses_gcd, execute() - ability_set.gd (Resource) — Set von 5 Abilities pro Klasse - ability_modifier.gd (Resource) — Verändert Ability (Element, Beruf, Prestige) - Typen: Single, AOE, Utility, Ult, Passive - Jede Klasse hat ein eigenes AbilitySet - Beim Klassenwechsel wird das AbilitySet getauscht - Elemente und Modifikatoren verändern Abilities nachträglich ## Events - attack_executed(attacker, position, direction, damage) — Angriff wurde ausgeführt - damage_dealt(attacker, target, damage) — Schaden wurde verteilt - damage_requested(attacker, target, amount) — Schaden zwischen Szenen anfordern - entity_died(entity) — Entity ist gestorben - shield_broken(entity) — Schild ist auf 0 gefallen - shield_regenerated(entity) — Schild ist wieder voll - target_changed(player, target) — Spieler hat neues Ziel anvisiert - player_respawned(player) — Spieler ist respawnt - class_changed(player, class_name) — Spieler hat Klasse gewechselt - health_changed(entity, current, max) — Leben hat sich verändert - shield_changed(entity, current, max) — Schild hat sich verändert - respawn_tick(timer) — Respawn-Countdown Update - enemy_engaged(enemy, target) — Gegner hat Spieler anvisiert - cooldown_tick(cooldowns, max_cooldowns, gcd_timer) — Cooldown-Update für HUD