This commit is contained in:
Marek Lenczewski
2026-04-02 19:30:44 +02:00
parent c7e6f8f4b5
commit 73af6abeb7
90 changed files with 138 additions and 133 deletions

47
autoloads/event_bus.gd Normal file
View File

@@ -0,0 +1,47 @@
extends Node
# Intentionen (Input → System)
signal ability_use_requested(player, ability_index)
signal auto_attack_tick(attacker)
signal target_requested(player, target)
signal enemy_detected(enemy, player)
# Ergebnisse (System → Node)
signal combat_state_changed(player, in_combat)
signal enemy_state_changed(enemy, new_state)
signal enemy_target_changed(enemy, target)
# Kampf
signal attack_executed(attacker, position, direction, damage)
signal damage_dealt(attacker, target, damage)
signal damage_requested(attacker, target, amount)
signal heal_requested(healer, target, amount)
# Entity
signal entity_died(entity)
signal health_changed(entity, current, max_val)
signal shield_changed(entity, current, max_val)
signal shield_broken(entity)
signal shield_regenerated(entity)
signal regeneration_changed(entity, current, max_val)
# Spieler
signal target_changed(player, target)
signal player_respawned(player)
signal role_changed(player, role_type)
signal respawn_tick(timer)
signal cooldown_tick(cooldowns, max_cooldowns, gcd_timer)
# Buff
signal buff_changed(entity, stat, value)
# Gegner
signal enemy_engaged(enemy, target)
signal enemy_lost(enemy, player)
# Portal
signal portal_spawn(portal, enemies)
signal portal_defeated(portal)
# Dungeon
signal dungeon_cleared()

View File

@@ -0,0 +1 @@
uid://g7a7xkg1pgb4

20
autoloads/game_state.gd Normal file
View File

@@ -0,0 +1,20 @@
extends Node
var player_role: int = 1
var portal_position: Vector3 = Vector3.ZERO
var returning_from_dungeon := false
var dungeon_cleared := false
func save_player(player: Node) -> void:
var role: Node = player.get_node("Role")
player_role = role.current_role
func restore_player(player: Node) -> void:
var role: Node = player.get_node("Role")
role.set_role(player_role)
func clear() -> void:
Stats.clear_player_cache()
portal_position = Vector3.ZERO
returning_from_dungeon = false
dungeon_cleared = false

View File

@@ -0,0 +1 @@
uid://cp2vadwcd12sm

View File

@@ -0,0 +1,8 @@
extends Resource
class_name BaseStats
@export var max_health := 100.0
@export var health_regen := 0.0
@export var max_shield := 0.0
@export var shield_regen_delay := 3.0
@export var shield_regen_time := 5.0

View File

@@ -0,0 +1 @@
uid://cet184f878lb8

53
autoloads/stats/stats.gd Normal file
View File

@@ -0,0 +1,53 @@
extends Node
var entities: Dictionary = {}
var player_cache: Dictionary = {}
func register(entity: Node, base: BaseStats) -> void:
if entity.is_in_group("player") and not player_cache.is_empty():
entities[entity] = player_cache.duplicate()
entities[entity]["base_stats"] = base
player_cache.clear()
else:
entities[entity] = {
"base_stats": base,
"health": base.max_health,
"max_health": base.max_health,
"health_regen": base.health_regen,
"shield": base.max_shield,
"max_shield": base.max_shield,
"shield_regen_delay": base.shield_regen_delay,
"shield_regen_time": base.shield_regen_time,
"shield_regen_timer": 0.0,
"alive": true,
"buff_damage": 1.0,
"buff_heal": 1.0,
"buff_shield": 1.0,
}
func deregister(entity: Node) -> void:
if entity.is_in_group("player") and entity in entities:
player_cache = entities[entity].duplicate()
entities.erase(entity)
func clear_player_cache() -> void:
player_cache.clear()
func get_stat(entity: Node, key: String) -> Variant:
if entity in entities:
return entities[entity].get(key)
return null
func set_stat(entity: Node, key: String, value: Variant) -> void:
if entity in entities:
entities[entity][key] = value
func get_base(entity: Node) -> BaseStats:
if entity in entities:
return entities[entity]["base_stats"]
return null
func is_alive(entity: Node) -> bool:
if entity in entities:
return entities[entity]["alive"]
return false

View File

@@ -0,0 +1 @@
uid://cyxmpeib7pcw7