33 lines
1.2 KiB
GDScript
33 lines
1.2 KiB
GDScript
extends Node
|
|
|
|
func _ready() -> void:
|
|
_emit_initial.call_deferred()
|
|
|
|
func _process(delta: float) -> void:
|
|
_regen_player(delta)
|
|
_regen_entities(delta, EnemyData.entities)
|
|
_regen_entities(delta, BossData.entities)
|
|
|
|
func _regen_player(delta: float) -> void:
|
|
if not PlayerData.alive or PlayerData.health_regen <= 0:
|
|
return
|
|
if PlayerData.health < PlayerData.max_health:
|
|
var health: float = min(PlayerData.health + PlayerData.health_regen * delta, PlayerData.max_health)
|
|
PlayerData.set_health(health)
|
|
|
|
func _regen_entities(delta: float, entities: Dictionary) -> void:
|
|
for entity in entities:
|
|
if not is_instance_valid(entity):
|
|
continue
|
|
var data: Dictionary = entities[entity]
|
|
if not data["alive"]:
|
|
continue
|
|
var regen: float = data["health_regen"]
|
|
if regen > 0 and data["health"] < data["max_health"]:
|
|
data["health"] = min(data["health"] + regen * delta, data["max_health"])
|
|
EventBus.health_changed.emit(entity, data["health"], data["max_health"])
|
|
|
|
func _emit_initial() -> void:
|
|
EventBus.health_changed.emit(PlayerData, PlayerData.health, PlayerData.max_health)
|
|
EventBus.shield_changed.emit(PlayerData, PlayerData.shield, PlayerData.max_shield)
|