Improved respawn

This commit is contained in:
2024-02-13 13:49:28 +01:00
parent bbef2a0a4a
commit 4c1d8ab877
7 changed files with 75 additions and 25 deletions

View File

@ -0,0 +1,43 @@
class_name DeathComponent
extends Node
@export var health: HealthComponent
@export var hud: HUDComponent
@export var animation: AnimationPlayer
@export var drop: PackedScene
@export var respawn_time: float = 5.0
var respawn_position: Vector3
func _ready():
respawn_position = owner.global_position
health.death.connect(on_death)
func on_death():
drop_loot()
die()
await get_tree().create_timer(respawn_time).timeout
revive()
func drop_loot():
var loot := drop.instantiate() as Node3D
owner.get_parent().add_child(loot)
loot.global_position = owner.global_position + loot.position
func die():
set_alive(false)
animation.play("slime_death")
func revive():
health.restore()
set_alive(true)
(owner as Node3D).transform = Transform3D.IDENTITY
owner.global_position = respawn_position
animation.play("slime_idle")
func set_alive(alive: bool):
owner.propagate_call("set_process", [alive])
owner.propagate_call("set_physics_process", [alive])
owner.get_node("Collision").call_deferred("set_disabled", !alive)
hud.visible = alive

View File

@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://bfvudkup0xsq4"]
[ext_resource type="Script" path="res://enemy/death/DeathComponent.gd" id="1_5qhry"]
[node name="Death" type="Node"]
script = ExtResource("1_5qhry")