109 lines
4.9 KiB
Markdown
109 lines
4.9 KiB
Markdown
# 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)
|
|
- 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), Aggro bei Schaden, alarmiert Gegner in 3m
|
|
- 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, 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
|