From 7fd0f3a5a12ebb57856dd54a912ca64275761455 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Wed, 25 Dec 2024 13:04:21 +0100 Subject: [PATCH] add damage and health component --- scripts/components/damage.gd | 7 +++++ scripts/components/health.gd | 53 ++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 scripts/components/damage.gd create mode 100644 scripts/components/health.gd diff --git a/scripts/components/damage.gd b/scripts/components/damage.gd new file mode 100644 index 0000000..bcd6ce5 --- /dev/null +++ b/scripts/components/damage.gd @@ -0,0 +1,7 @@ +class_name DamageComponent +extends Node2D + +@export var damage: float = 0.25 + +func deal_damage(target: HealthComponent): + target.decrease_health(damage) diff --git a/scripts/components/health.gd b/scripts/components/health.gd new file mode 100644 index 0000000..fc09ff3 --- /dev/null +++ b/scripts/components/health.gd @@ -0,0 +1,53 @@ +class_name HealthComponent +extends Node2D + +@export var health: float = 1.0 +@export var max_health: float = 1.0 + +signal on_health_change(delta: float) +signal on_death + +func _get_delta(value: float) -> float: + var old_value = health + return value - old_value + +func set_health(new_value: float): + var delta = _get_delta(new_value) + + if new_value >= max_health: + health = max_health + on_health_change.emit(delta) + return + + health = new_value + + if health <= 0: + on_death.emit() + return + + on_health_change.emit(delta) + +func decrease_health(value: float): + var delta = _get_delta(value) + + health -= value + + if health <= 0: + on_death.emit() + return + + on_health_change.emit(delta) + +func increase_health(value: float): + var delta = _get_delta(value) + + health += value + + if health >= max_health: + health = max_health + on_health_change.emit(delta) + return + + health += value + on_health_change.emit(delta) +