class_name Player extends CharacterBody3D signal playerTurn signal playerDestroyed signal playerRestart @onready var _skin = $skin @export_category("Movement") @export var speed = 5.0 @export_category("Camera") @export var distance = 3.0 @onready var _springArm = $SpringArm3D enum state {ALIVE, DEAD} var _state = state.ALIVE func _ready() -> void: _springArm.spring_length = distance func _input(event: InputEvent) -> void: if _state == state.ALIVE: if event.is_action_pressed("player_left"): global_rotate(Vector3.UP, PI/2) playerTurn.emit(self) elif event.is_action_pressed("player_right"): global_rotate(Vector3.UP, -PI/2) playerTurn.emit(self) else: if event.is_action_pressed("player_restart"): playerRestart.emit(self) func _physics_process(_delta: float) -> void: if _state == state.ALIVE: velocity = global_transform.basis.z * speed move_and_slide() if velocity.length() == 0: _explode() func _explode() -> void: _skin.visible = false _state = state.DEAD playerDestroyed.emit(self)