Reworked health bar. Added shield regen

This commit is contained in:
2025-11-15 18:33:32 +03:00
parent 85a4fc7381
commit c391068961
11 changed files with 168 additions and 67 deletions
+35 -6
View File
@@ -14,6 +14,10 @@ signal depleted
@export_range(1, 5000) var max_hull: int = 1
@onready var shield_regen_delay_timer : Timer = $ShieldRegenDelayTimer
@onready var shield_regen_tick_timer : Timer = $ShieldRegenTickTimer
var shield: int:
get: return _shield
set(value): pass
@@ -25,26 +29,51 @@ var hull: int:
set(value): pass
@onready var _shield := max_shield
@onready var _armor := max_armor
@onready var _hull := max_hull
@onready var _shield := max_shield:
set(value):
_shield = value
shield_updated.emit(_shield)
@onready var _armor := max_armor:
set(value):
_armor = value
armor_updated.emit(_armor)
@onready var _hull := max_hull:
set(value):
_hull = value
hull_updated.emit(_hull)
@onready var _shield_regen := floori(max_shield/30.0)
func apply_damage(damage: AbstractDamage) -> void:
if _shield > 0:
var damage_value := ceili(damage.value * damage.shield_damage_multiplier())
_shield = max(_shield - damage_value, 0)
shield_updated.emit(_shield)
shield_regen_delay_timer.start()
elif _armor > 0:
var damage_value := ceili(damage.value * damage.armor_damage_multiplier())
_armor = max(_armor - damage_value, 0)
armor_updated.emit(_armor)
else:
if _hull == 0: return
var damage_value := ceili(damage.value * damage.hull_damage_multiplier())
_hull = max(_hull - damage_value, 0)
hull_updated.emit(_hull)
if _hull == 0:
depleted.emit()
if not shield_regen_delay_timer.is_stopped():
shield_regen_delay_timer.start()
shield_regen_tick_timer.stop()
func _on_shield_regen_delay_timer_timeout() -> void:
shield_regen_tick_timer.start()
func _on_shield_regen_tick_timer_timeout() -> void:
var new_shield_value := _shield + _shield_regen
if new_shield_value >= max_shield:
new_shield_value = max_shield
shield_regen_tick_timer.stop()
_shield = new_shield_value