This commit is contained in:
Marek Lenczewski
2026-04-02 16:02:24 +02:00
parent e76c66eda6
commit 47f4fe3d90
106 changed files with 434 additions and 204 deletions

38
systems/shield_system.gd Normal file
View File

@@ -0,0 +1,38 @@
extends Node
func _process(delta: float) -> void:
for entity in Stats.entities:
if not is_instance_valid(entity):
continue
var data: Dictionary = Stats.entities[entity]
if not data["alive"]:
continue
var max_shield: float = data["max_shield"]
if max_shield <= 0:
continue
var shield: float = data["shield"]
if shield < max_shield:
data["shield_regen_timer"] += delta
if data["shield_regen_timer"] >= data["shield_regen_delay"]:
var regen_rate: float = max_shield / data["shield_regen_time"]
shield += regen_rate * delta
if shield >= max_shield:
shield = max_shield
EventBus.shield_regenerated.emit(entity)
data["shield"] = shield
EventBus.shield_changed.emit(entity, shield, max_shield)
func absorb(entity: Node, amount: float) -> float:
var shield: float = Stats.get_stat(entity, "shield")
if shield == null or shield <= 0:
return amount
Stats.set_stat(entity, "shield_regen_timer", 0.0)
var absorbed: float = min(amount, shield)
shield -= absorbed
Stats.set_stat(entity, "shield", shield)
var max_shield: float = Stats.get_stat(entity, "max_shield")
if shield <= 0:
EventBus.shield_broken.emit(entity)
EventBus.shield_changed.emit(entity, shield, max_shield)
return amount - absorbed