Files
mmo/scripts/components/shield.gd
2026-03-29 16:05:31 +02:00

33 lines
1.0 KiB
GDScript

extends Node
@export var max_shield := 50.0
const REGEN_DELAY := 3.0
const REGEN_TIME := 5.0
var current_shield: float
var regen_timer := 0.0
func _ready() -> void:
current_shield = max_shield
func _process(delta: float) -> void:
if current_shield < max_shield:
regen_timer += delta
if regen_timer >= REGEN_DELAY:
current_shield += (max_shield / REGEN_TIME) * delta
if current_shield >= max_shield:
current_shield = max_shield
EventBus.shield_regenerated.emit(get_parent())
EventBus.shield_changed.emit(get_parent(), current_shield, max_shield)
func absorb(amount: float) -> float:
if current_shield <= 0:
return amount
regen_timer = 0.0
var absorbed: float = min(amount, current_shield)
current_shield -= absorbed
print("%s Schild: %s/%s (-%s)" % [get_parent().name, current_shield, max_shield, absorbed])
if current_shield <= 0:
EventBus.shield_broken.emit(get_parent())
EventBus.shield_changed.emit(get_parent(), current_shield, max_shield)
return amount - absorbed