43 lines
1.3 KiB
GDScript
43 lines
1.3 KiB
GDScript
extends Node
|
|
|
|
var respawn_timer := 0.0
|
|
var is_dead := false
|
|
|
|
func _ready() -> void:
|
|
EventBus.entity_died.connect(_on_entity_died)
|
|
|
|
func _process(delta: float) -> void:
|
|
if not is_dead:
|
|
return
|
|
respawn_timer -= delta
|
|
EventBus.respawn_tick.emit(respawn_timer)
|
|
if respawn_timer <= 0:
|
|
_respawn()
|
|
|
|
func _on_entity_died(entity: Node) -> void:
|
|
if not entity.is_in_group("player"):
|
|
return
|
|
if is_dead:
|
|
return
|
|
is_dead = true
|
|
respawn_timer = PlayerData.respawn_time
|
|
entity.velocity = Vector3.ZERO
|
|
entity.get_node("Mesh").visible = false
|
|
entity.get_node("CollisionShape3D").disabled = true
|
|
entity.get_node("Movement").set_physics_process(false)
|
|
entity.get_node("Ability").set_process_unhandled_input(false)
|
|
entity.get_node("Targeting").set_process_unhandled_input(false)
|
|
|
|
func _respawn() -> void:
|
|
is_dead = false
|
|
var player: Node = get_tree().get_first_node_in_group("player")
|
|
if not player:
|
|
return
|
|
player.global_position = Vector3(0, 1, -5)
|
|
player.get_node("Mesh").visible = true
|
|
player.get_node("CollisionShape3D").disabled = false
|
|
player.get_node("Movement").set_physics_process(true)
|
|
player.get_node("Ability").set_process_unhandled_input(true)
|
|
player.get_node("Targeting").set_process_unhandled_input(true)
|
|
PlayerData.respawn()
|