update
This commit is contained in:
150
plan.md
150
plan.md
@@ -1,92 +1,116 @@
|
||||
# Projektstruktur
|
||||
|
||||
## Ordnerstruktur
|
||||
```
|
||||
player/ — Spieler (.tscn + .gd)
|
||||
enemy/ — Gegner + Boss (.tscn + .gd)
|
||||
portal/ — Portal + Gate (.tscn + .gd)
|
||||
dungeon/ — Dungeon (.tscn + .gd)
|
||||
hud/ — HUD (.tscn + .gd)
|
||||
world/ — Hauptszene (.tscn + .gd)
|
||||
systems/ — 10 Gameplay-Systeme (.gd)
|
||||
autoload/ — EventBus, Stats, GameState (.gd)
|
||||
components/ — Shared UI: healthbar (.gd)
|
||||
resources/
|
||||
stats/ — Stats-Klassen (.gd) + Daten (.tres)
|
||||
roles/ — Ability/AbilitySet-Klassen (.gd) + Rollen-Daten
|
||||
damage/ — set.tres + abilities/
|
||||
tank/ — set.tres + abilities/
|
||||
healer/ — set.tres + abilities/
|
||||
```
|
||||
|
||||
## Szenenbaum
|
||||
- Welt
|
||||
- Systems (HealthSystem, ShieldSystem, RespawnSystem, AbilitySystem, BuffSystem, CooldownSystem, DamageSystem, AggroSystem, EnemyAISystem, SpawnSystem)
|
||||
- Systems (10 Systeme als Child-Nodes)
|
||||
- Taverne
|
||||
- Player
|
||||
- Portale (dynamisch)
|
||||
- Gegner
|
||||
- HUD
|
||||
|
||||
## Architektur
|
||||
- Entities (Stats) mit einer Resource - Model mit DB-Tabelle
|
||||
- Systeme (Healthsystem) - Controller mit Service
|
||||
- Szenen (Dungeon) - Views
|
||||
- Eventbus (Signals) - Events / Listener
|
||||
- Entities mit Resourcen werden später zu Model mit DB-Tabelle in Go
|
||||
- Flow: Szene -> Input -> System -> Output -> Szene
|
||||
- Resources (stats/, roles/) — Datenmodelle + Basiswerte, werden später zu Go-Structs + DB
|
||||
- Autoload (Stats) — Laufzeit-Datenhaltung, wird später zu Server-API-Client
|
||||
- Systeme — Spiellogik, lesen/schreiben über Stats
|
||||
- Szenen — Views, rendern + Input, kein Gameplay-State
|
||||
- EventBus — Signale zwischen Szenen und Systemen
|
||||
- Flow: Szene → Input → EventBus → System → Stats → EventBus → Szene
|
||||
- Szenen kennen sich nicht
|
||||
- Innerhalb einer Szene: direkter Zugriff auf Geschwister erlaubt
|
||||
|
||||
# Autoload
|
||||
## GameState
|
||||
- game_state.gd
|
||||
- Speichert aktuelle Szene und Position
|
||||
# Stats
|
||||
- stats.gd
|
||||
- Speichert aktuelle Attribute aller Entities
|
||||
- Basiswerte aus BaseStats Resource
|
||||
## EventBus
|
||||
- event_bus.gd — Autoload-Singleton, globale Signals
|
||||
|
||||
## EventBus (autoload/event_bus.gd)
|
||||
- Intentionen (Input → System):
|
||||
- ability_use_requested(player, ability_index) — Spieler will Ability nutzen
|
||||
- enemy_detected(enemy, player) — Spieler in Detection-Area
|
||||
- ability_use_requested(player, ability_index)
|
||||
- enemy_detected(enemy, player)
|
||||
- Kampf:
|
||||
- attack_executed(attacker, position, direction, damage) — Angriff wurde ausgeführt
|
||||
- damage_dealt(attacker, target, damage) — Schaden wurde verteilt
|
||||
- damage_requested(attacker, target, amount) — Schaden anfordern
|
||||
- heal_requested(healer, target, amount) — Heilung anfordern
|
||||
- attack_executed(attacker, position, direction, damage)
|
||||
- damage_dealt(attacker, target, damage)
|
||||
- damage_requested(attacker, target, amount)
|
||||
- heal_requested(healer, target, amount)
|
||||
- Entity:
|
||||
- entity_died(entity) — Entity ist gestorben
|
||||
- health_changed(entity, current, max) — Leben hat sich verändert
|
||||
- shield_changed(entity, current, max) — Schild hat sich verändert
|
||||
- shield_broken(entity) — Schild ist auf 0 gefallen
|
||||
- shield_regenerated(entity) — Schild ist wieder voll
|
||||
- entity_died(entity)
|
||||
- health_changed(entity, current, max)
|
||||
- shield_changed(entity, current, max)
|
||||
- shield_broken(entity)
|
||||
- shield_regenerated(entity)
|
||||
- Spieler:
|
||||
- target_changed(player, target) — Spieler hat neues Ziel anvisiert
|
||||
- player_respawned(player) — Spieler ist respawnt
|
||||
- role_changed(player, role_type) — Spieler hat Rolle gewechselt
|
||||
- respawn_tick(timer) — Respawn-Countdown Update
|
||||
- cooldown_tick(cooldowns, max_cooldowns, gcd_timer) — Cooldown-Update für HUD
|
||||
- target_changed(player, target)
|
||||
- player_respawned(player)
|
||||
- role_changed(player, role_type)
|
||||
- respawn_tick(timer)
|
||||
- cooldown_tick(cooldowns, max_cooldowns, gcd_timer)
|
||||
- Buff:
|
||||
- buff_changed(entity, stat, value) — Buff hat sich verändert
|
||||
- buff_changed(entity, stat, value)
|
||||
- Gegner:
|
||||
- enemy_engaged(enemy, target) — Gegner hat Spieler anvisiert
|
||||
- enemy_engaged(enemy, target)
|
||||
- Portal:
|
||||
- portal_spawn(portal, enemies) — Portal hat Gegner gespawnt
|
||||
- portal_defeated(portal) — Portal besiegt, wird Gate
|
||||
- portal_spawn(portal, enemies)
|
||||
- portal_defeated(portal)
|
||||
- Dungeon:
|
||||
- dungeon_cleared() — Boss tot, Dungeon gesäubert
|
||||
- Reserviert (definiert, noch nicht genutzt):
|
||||
- dungeon_cleared()
|
||||
- Reserviert:
|
||||
- auto_attack_tick, target_requested, combat_state_changed, enemy_state_changed, enemy_target_changed, regeneration_changed
|
||||
|
||||
## Stats (autoload/stats.gd)
|
||||
- Speichert aktuelle Attribute aller Entities
|
||||
- Basiswerte aus BaseStats Resource
|
||||
- player_cache für Szenenwechsel
|
||||
|
||||
## GameState (autoload/game_state.gd)
|
||||
- Speichert Rolle + Position zwischen Szenenwechseln
|
||||
|
||||
# Resources
|
||||
## BaseStats
|
||||
|
||||
## resources/stats/
|
||||
### BaseStats (base_stats.gd)
|
||||
- max_health, health_regen, max_shield, shield_regen_delay, shield_regen_time
|
||||
## PlayerStats (extends BaseStats)
|
||||
### PlayerStats (player_stats.gd, extends BaseStats)
|
||||
- speed, jump_velocity, target_range, combat_timeout, respawn_time, gcd_time, aa_cooldown
|
||||
## EnemyStats (extends BaseStats)
|
||||
### EnemyStats (enemy_stats.gd, extends BaseStats)
|
||||
- speed, attack_range, attack_cooldown, attack_damage, regen_fast, regen_slow, aggro_decay, portal_radius, alert_radius
|
||||
## BossStats (extends EnemyStats)
|
||||
## PortalStats (extends BaseStats)
|
||||
### BossStats (boss_stats.gd, extends EnemyStats)
|
||||
### PortalStats (portal_stats.gd, extends BaseStats)
|
||||
- spawn_count, thresholds
|
||||
## Role
|
||||
- name, icon, mesh/material
|
||||
- ability_set (AbilitySet)
|
||||
## AbilitySet
|
||||
- abilities (Array[Ability]), aa_damage, aa_range, aa_is_heal
|
||||
- damage_set.tres → Rolle Damage
|
||||
- tank_set.tres → Rolle Tank
|
||||
- healer_set.tres → Rolle Healer
|
||||
## Ability
|
||||
|
||||
## resources/roles/
|
||||
### Ability (ability.gd)
|
||||
- ability_name, type, damage, ability_range, cooldown, uses_gcd, aoe_radius, icon, is_heal, passive_stat
|
||||
- Typen: Single, AOE, Utility, Ult, Passive
|
||||
## AbilityModifier
|
||||
### AbilitySet (ability_set.gd)
|
||||
- abilities (Array[Ability]), aa_damage, aa_range, aa_is_heal
|
||||
### AbilityModifier (geplant)
|
||||
- Verändert Ability (Element, Beruf, Prestige)
|
||||
### Rollen-Ordner (damage/, tank/, healer/)
|
||||
- set.tres — AbilitySet der Rolle
|
||||
- abilities/ — 5 Ability .tres pro Rolle (single, aoe, utility, ult, passive)
|
||||
|
||||
# Systeme
|
||||
# Systeme (systems/)
|
||||
- In jeder Root-Szene instanziert (world.tscn, dungeon.tscn)
|
||||
- Entities registrieren/deregistrieren sich bei Stats
|
||||
- Systeme lesen/schreiben über Stats
|
||||
|
||||
### HealthSystem (health_system.gd)
|
||||
- Leben und Lebensregeneration berechnen, Tod bei 0 HP
|
||||
- Listener: damage_requested, heal_requested
|
||||
@@ -132,7 +156,7 @@
|
||||
- Entities registrieren sich bei Stats in _ready(), deregistrieren in _exit_tree()
|
||||
- Stats cached Spieler-Werte automatisch bei Szenenwechsel (player_cache)
|
||||
|
||||
## Welt
|
||||
## Welt (world/)
|
||||
- world.tscn — Hauptszene (100x100m)
|
||||
- Systems (alle 10 Systeme als Child-Nodes)
|
||||
- NavigationRegion3D
|
||||
@@ -144,7 +168,7 @@
|
||||
- HUD (Instanz von hud.tscn)
|
||||
- PortalSpawner (Node, portal_spawner.gd)
|
||||
|
||||
## Spieler
|
||||
## Spieler (player/)
|
||||
- player.tscn — CharacterBody3D
|
||||
- Gruppe (player)
|
||||
- Kollision (CapsuleShape3D, 1.8m x 0.3m)
|
||||
@@ -158,7 +182,7 @@
|
||||
- player.gd — Registriert bei Stats mit PlayerStats Resource, Sichtbarkeit bei Tod/Respawn
|
||||
- camera.gd — LMB freies Umsehen, RMB Kamera + Laufrichtung
|
||||
|
||||
## Gegner
|
||||
## Gegner (enemy/)
|
||||
- enemy.tscn — CharacterBody3D
|
||||
- Gruppe (enemies)
|
||||
- Kollision (CapsuleShape3D)
|
||||
@@ -179,12 +203,12 @@
|
||||
- Ohne Aggro: Gegner kehrt zum Portal zurück, regeneriert
|
||||
- Bei Spieler-Tod → Aggro auf 0
|
||||
|
||||
## Boss
|
||||
## Boss (enemy/)
|
||||
- boss.tscn — wie enemy.tscn aber größer (Mesh lila, 1.5x)
|
||||
- Gruppe (enemies, boss)
|
||||
- boss.gd — Erbt von enemy.gd, registriert bei Stats mit BossStats Resource
|
||||
|
||||
## Portal
|
||||
## Portal (portal/)
|
||||
- portal.tscn — StaticBody3D
|
||||
- Gruppe (portals)
|
||||
- Kollision (CylinderShape3D)
|
||||
@@ -195,14 +219,14 @@
|
||||
- portal.gd — Registriert bei Stats mit PortalStats Resource
|
||||
- Spawnt Gegner bei HP-Schwellen (→ SpawnSystem)
|
||||
|
||||
## Gate
|
||||
## Gate (portal/)
|
||||
- gate.tscn — StaticBody3D (keine Kollision)
|
||||
- Mesh (CylinderMesh, grün, leuchtend)
|
||||
- GateArea (Area3D, 3m Radius)
|
||||
- gate.gd — Konfigurierbar: target_scene, is_exit
|
||||
- Beide Gates bestehen solange Boss lebt, verschwinden bei dungeon_cleared
|
||||
|
||||
## Dungeon
|
||||
## Dungeon (dungeon/)
|
||||
- dungeon.tscn — Geschlossener Raum (15x90m, Wände, dunkles Licht)
|
||||
- Systems (alle 10 Systeme, temporär bis Welt parallel läuft)
|
||||
- NavigationRegion3D
|
||||
@@ -215,7 +239,7 @@
|
||||
- DungeonManager (Node, dungeon_manager.gd)
|
||||
- Eigene Systems bis Welt parallel läuft (geplant: Reparenting)
|
||||
|
||||
## HUD
|
||||
## HUD (hud/)
|
||||
- hud.tscn — CanvasLayer
|
||||
- HealthBar (ProgressBar, Label)
|
||||
- ShieldBar (ProgressBar, Label)
|
||||
@@ -223,7 +247,7 @@
|
||||
- AbilityBar (HBoxContainer, RoleIcon + Abilities 1-4 + Passive)
|
||||
- hud.gd — Reagiert auf Events, liest Werte von Stats
|
||||
|
||||
## Abilities (Werte)
|
||||
# Abilities (Werte)
|
||||
- Schadens-Klasse:
|
||||
- AA: 10 Schaden, 10m
|
||||
- 1 Single: 30 Schaden, 20m Range, 2s CD, GCD
|
||||
|
||||
Reference in New Issue
Block a user