blob: 2bd24472b78dbe9b49187b0355da46379df52cf4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
class_name ComponentHealth
extends Node
signal died
@export_node_path("CharacterBody2D") var entityPath: NodePath
@onready var entity: CharacterBody2D = get_node(entityPath)
@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"),
]
var is_dying = false
func _ready():
if component_movement_path:
component_movement = get_node(component_movement_path)
func take_damage():
health -= 1
if health <= 0 and not is_dying:
death()
func death():
is_dying = true
emit_signal("died")
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()
tween.tween_property(
entity,
"scale",
Vector2(0, 0),
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)
|