30 lines
564 B
GDScript
30 lines
564 B
GDScript
class_name Target
|
|
extends RigidBody3D
|
|
|
|
const MAX_HEALTH: int = 10
|
|
var current_health: int = MAX_HEALTH
|
|
signal damaged(amount: int)
|
|
signal died()
|
|
|
|
|
|
func is_dead() -> bool:
|
|
return current_health <= 0
|
|
|
|
|
|
func take_damage(amount: int) -> void:
|
|
if amount <= 0:
|
|
return
|
|
if is_dead():
|
|
return
|
|
var was_alive := not is_dead()
|
|
current_health = max(0, current_health - amount)
|
|
emit_signal("damaged", amount)
|
|
if was_alive and is_dead():
|
|
emit_signal("died")
|
|
die()
|
|
|
|
|
|
func die() -> void:
|
|
# Optional: Explosion/Animation/Sound abspielen, dann entfernen
|
|
queue_free()
|