4.8 KiB
4.8 KiB
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)
- NavigationRegion3D (Wegfindung für Gegner)
-
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
- CanvasLayer (hud.gd)
-
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)
- Healthbar (Sprite3D + SubViewport, über dem Gegner, enemy_healthbar.gd)
- SubViewport
- Border (ColorRect, gelb, sichtbar bei Anvisierung)
- HealthBar (ProgressBar, grün)
- ShieldBar (ProgressBar, blau)
- SubViewport
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, Fähigkeiten 1-5
- 1 Single: Anvisiertes Ziel angreifen (10 Schaden, Distanzprüfung)
- 2 AOE: Alle Gegner im Bereich (5 Schaden, halber Single-Schaden)
- 3 Utility: Schild-Regeneration sofort zurücksetzen
- 4 Ult: 4x Schaden an anvisiertem Ziel + 2x AOE-Schaden um das Ziel herum
- 5 Passive: 50% mehr Schaden (permanent aktiv)
- 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)
- enemy_movement.gd — Navigation zum Ziel/Spawnpunkt
- enemy_combat.gd — Angriff über Event (damage_requested)
- 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
Abilities (Resources)
- ability.gd (Resource) — name, type, damage, range, 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