Files
mmo/systems/respawn_system.gd
Marek Lenczewski f1d34ebf1d update
2026-04-04 00:00:15 +02:00

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()