summaryrefslogtreecommitdiff
path: root/Scenes/Entities/Enemies/Components/Health.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Scenes/Entities/Enemies/Components/Health.gd')
-rw-r--r--Scenes/Entities/Enemies/Components/Health.gd31
1 files changed, 28 insertions, 3 deletions
diff --git a/Scenes/Entities/Enemies/Components/Health.gd b/Scenes/Entities/Enemies/Components/Health.gd
index d6b7361..6f65e79 100644
--- a/Scenes/Entities/Enemies/Components/Health.gd
+++ b/Scenes/Entities/Enemies/Components/Health.gd
@@ -1,7 +1,6 @@
+class_name ComponentHealth
extends Node
-class_name Component_Health
-
signal died
@@ -11,8 +10,22 @@ signal died
@export_node_path("AnimatedSprite2D") var spritePath: NodePath
@onready var sprite: AnimatedSprite2D = get_node(spritePath)
+@export_node_path("ComponentMovement") var component_movement_path: NodePath
+var component_movement: ComponentMovement
+
@export var health: int
+@export var drops_items: bool = true
+@export_range(1, 100) var drop_chance: int = 30
+var drop_items = [
+ preload("res://Scenes/Entities/Objects/Coin.tscn"),
+]
+
+
+func _ready():
+ if component_movement_path:
+ component_movement = get_node(component_movement_path)
+
func take_damage():
health -= 1
@@ -24,11 +37,14 @@ func take_damage():
func death():
emit_signal("died")
- entity.set_physics_process(false)
+ if component_movement: # stop all movement
+ component_movement.process_mode = Node.PROCESS_MODE_DISABLED
+ entity.set_physics_process(false)
sprite.play("death")
await sprite.animation_finished
+ assert(sprite.sprite_frames.has_animation("death_post"))
sprite.play("death_post")
var tween: Tween = get_tree().create_tween()
@@ -39,5 +55,14 @@ func death():
1 / sprite.sprite_frames.get_animation_speed("death_post")
)
tween.tween_callback(func():
+ if drops_items and randi_range(1, 100) <= drop_chance:
+ call_deferred("drop_item")
+
entity.queue_free()
)
+
+
+func drop_item():
+ var item = drop_items.pick_random().instantiate()
+ item.position = entity.position
+ get_tree().current_scene.add_child(item)