Improved respawn
This commit is contained in:
43
client/enemy/death/DeathComponent.gd
Normal file
43
client/enemy/death/DeathComponent.gd
Normal 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
|
6
client/enemy/death/DeathComponent.tscn
Normal file
6
client/enemy/death/DeathComponent.tscn
Normal 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")
|
Reference in New Issue
Block a user