update
This commit is contained in:
87
plan.md
87
plan.md
@@ -21,6 +21,7 @@
|
||||
- HUD (Instanz von hud.tscn)
|
||||
|
||||
- player.tscn — Spieler
|
||||
- Gruppe (player)
|
||||
- CharacterBody3D (player.gd)
|
||||
- Kollision (CapsuleShape3D, 1.8m x 0.3m)
|
||||
- Mesh (CapsuleMesh)
|
||||
@@ -28,7 +29,7 @@
|
||||
- Camera3D (hinter/über Spieler)
|
||||
- Movement (Node, movement.gd)
|
||||
- Combat (Node, combat.gd)
|
||||
- PlayerClass (Node, player_class.gd)
|
||||
- Role (Node, role.gd)
|
||||
- Targeting (Node, targeting.gd)
|
||||
- Health (Node, health.gd)
|
||||
- Shield (Node, shield.gd)
|
||||
@@ -40,23 +41,28 @@
|
||||
- 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
|
||||
- RoleIcon (Label, T=Tank, D=Schaden, H=Heiler)
|
||||
- Abilities(Label, Fähigkeiten 1-4, Passive P)
|
||||
|
||||
- portal.tscn — Portal (Gegner-Spawner, anvisierbar, Gruppe "targetable")
|
||||
- portal.tscn — Portal (Gegner-Spawner, anvisierbar)
|
||||
- Gruppe (portals)
|
||||
- StaticBody3D (portal.gd)
|
||||
- Kollision (CylinderShape3D)
|
||||
- Mesh (CylinderMesh, Platzhalter)
|
||||
- Mesh (CylinderMesh, blau)
|
||||
- Health (Node, health.gd)
|
||||
- HitArea (Area3D, Trefferbereich)
|
||||
- CollisionShape3D
|
||||
- PortalSpawner (Node, portal_spawner.gd)
|
||||
- Spawnt 3 Gegner bei 85%, 70%, 55%, 40%, 25%, 10% Leben (einmalig)
|
||||
- Portal = Spawnpunkt der Gegner
|
||||
- 10m Aggro-Radius um das Portal
|
||||
- Spawner (Node, spawner.gd)
|
||||
- DetectionArea (Area3D, 10m Radius, Auto-Targeting bei Betreten)
|
||||
- CollisionShape3D (SphereShape3D)
|
||||
- Healthbar (Sprite3D + SubViewport, healthbar.gd)
|
||||
- Phase 1: Angreifbar, HP-Bar, spawnt 3 Gegner bei 85%/70%/55%/40%/25%/10% Leben
|
||||
- Portal = Spawnpunkt, 10m Aggro-Radius
|
||||
- Phase 2 (geplant): Bei 0 HP → Portal wird Gate, teleportiert in Dungeon
|
||||
- Abgesperrter Bereich mit Gegner-Gruppen und Boss
|
||||
|
||||
- enemy.tscn — Gegner
|
||||
- Gruppe (enemies)
|
||||
- CharacterBody3D (enemy.gd)
|
||||
- Kollision (CapsuleShape3D)
|
||||
- Mesh (SphereMesh, Platzhalter)
|
||||
@@ -80,41 +86,54 @@
|
||||
- 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 (Gruppe "targetable"), Kampfmodus bei Gegner-Angriff, Auto-Targeting auf nächsten Gegner
|
||||
- combat.gd — Führt Abilities aus, verwaltet Cooldowns (GCD 0.5s), Auto-Attack (10 Schaden, 1s, 20m)
|
||||
- targeting.gd — Klick/TAB anvisieren (Gruppen "enemies" + "portals"), Kampfmodus bei Gegner-Angriff, Auto-Targeting (Gegner > Portal)
|
||||
- event_bus.gd — Autoload-Singleton, globale Signals
|
||||
- portal.gd — Portal-Kern, Gruppe "targetable", kein Kampf/Aggro/State
|
||||
- portal_spawner.gd — Spawnt Gegner bei Lebensschwellen, setzt Portal als Spawnpunkt
|
||||
- enemy.gd — Gegner-Kern, State Machine (Idle, Verfolgen, Angreifen, Zurückkehren), alarmiert Gegner in 3m, Gruppe "enemies" + "targetable"
|
||||
- role.gd — Rollenwechsel 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
|
||||
- portal.gd — Portal-Kern, Gruppe "portals", stirbt bei 0 HP, kein Kampf/Aggro/State
|
||||
- enemy.gd — Gegner-Kern, State Machine (Idle, Verfolgen, Angreifen, Zurückkehren), alarmiert Gegner in 3m, Gruppe "enemies"
|
||||
- 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
|
||||
- Außerhalb 10m Portal-Radius: Aggro verfällt 1% * 2 je s (1%, 2%, 4%, 8%, ...)
|
||||
- Ohne Aggro: Gegner kehrt zum Portal zurück, regeneriert 10% Leben/s bis 100%, dann 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
|
||||
|
||||
## Components (scripts/components/, wiederverwendbar)
|
||||
- health.gd — Leben, Regeneration, Tod bei 0 (liest Base-Werte aus EntityStats)
|
||||
- shield.gd — Schild, Regeneration nach Delay (liest Base-Werte aus EntityStats)
|
||||
- healthbar.gd — Liest Health/Shield (optional) vom Parent, gelber Rand bei Anvisierung, blauer Lebensbalken wenn Spieler Ziel ist (nur bei Gegnern)
|
||||
- spawner.gd — Spawnt Entities bei Lebensschwellen, engagt Spieler im Portal-Radius sofort
|
||||
|
||||
## Stats (Resources)
|
||||
- entity_stats.gd (Resource) — max_health, health_regen, max_shield, shield_regen_delay, shield_regen_time
|
||||
- player_stats.tres — health=100, regen=1/s, shield=50, delay=3s, regen_time=5s
|
||||
- enemy_stats.tres — health=100, regen=0, shield=50, delay=3s, regen_time=5s
|
||||
- portal_stats.tres — health=500, regen=0, shield=0
|
||||
|
||||
## Aggro
|
||||
- Schaden = Aggro (1:1)
|
||||
- Heilung = Aggro (0.5x)
|
||||
- Tank = Aggro-Multiplikator (2x)
|
||||
- Aggro verfällt -1/s
|
||||
- Spieler im Portal-Radius: Aggro bleibt bei mindestens 1
|
||||
- Außerhalb 10m Portal-Radius: Aggro verfällt 1% * 2 je s (1%, 2%, 4%, 8%, ...)
|
||||
- Ohne Aggro: Gegner kehrt zum Portal zurück, regeneriert 10% Leben/s bis 100%, dann 1%/s
|
||||
- Bei Spieler-Tod → Aggro auf 0
|
||||
|
||||
## 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
|
||||
- Auto-Attack: 10 Schaden, 1s, automatisch bei anvisiertem Gegner im Kampf
|
||||
- Schadens-Klasse:
|
||||
- 1 Single: 30 Schaden, 20m Range, 1s CD, GCD
|
||||
- 2 AOE: 20 Schaden, 5m Range, 3s CD, GCD
|
||||
- 3 Utility: Schild sofort auf 100%, 5s CD, kein GCD
|
||||
- 4 Ult: 5x Single (50 Schaden) + 2x AOE 3m (20 Schaden), 20m Range, 15s CD, GCD
|
||||
- 5 Passive: 50% mehr Schaden (permanent aktiv, kein CD)
|
||||
- Jede Rolle hat ein eigenes AbilitySet
|
||||
- Beim Rollenwechsel wird das AbilitySet getauscht
|
||||
- Elemente und Modifikatoren verändern Abilities nachträglich
|
||||
|
||||
## Events
|
||||
@@ -126,7 +145,7 @@
|
||||
- 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
|
||||
- role_changed(player, role_type) — Spieler hat Rolle 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
|
||||
|
||||
Reference in New Issue
Block a user