diff options
Diffstat (limited to 'Scenes/Entities/Enemies/Components/Health.gd')
-rw-r--r-- | Scenes/Entities/Enemies/Components/Health.gd | 31 |
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) |