26 lines
660 B
GDScript
26 lines
660 B
GDScript
extends Area3D
|
|
class_name HealthComponent
|
|
|
|
@export var max_health : float = 100
|
|
@onready var current_health : float = max_health
|
|
@export var signal_name : String
|
|
|
|
signal start_dying
|
|
|
|
func damage(value: float):
|
|
if current_health > 0:
|
|
current_health -= value
|
|
if signal_name:
|
|
HudSignalBus.emit_signal(signal_name, current_health, max_health)
|
|
if current_health <= 0:
|
|
start_dying.emit()
|
|
|
|
|
|
|
|
func _on_area_entered(area: Area3D) -> void:
|
|
if area is HealthPickup:
|
|
current_health = current_health + area.value
|
|
current_health = clamp(current_health, 0, max_health)
|
|
HudSignalBus.emit_signal(signal_name, current_health, max_health)
|
|
area.queue_free()
|