class_name Player extends CharacterBody3D signal playerTurn signal playerDestroyed signal playerRestart @onready var _skin = $skin @export_category("Appearance") @export var color: Color = Color.GOLD @export_category("Movement") @export var speed = 5.0 @export_category("Camera") @export var distance = 3.0 @onready var _springArm = $SpringArm3D @onready var _camera = $SpringArm3D/Camera3D enum state {ALIVE, DEAD} var _state = state.ALIVE var _input_map = null func _ready() -> void: _springArm.spring_length = distance _skin.set_color(color) func _input(event: InputEvent) -> void: if _state == state.ALIVE: if event.is_action_pressed(_input_map.left): global_rotate(Vector3.UP, PI/2) playerTurn.emit(self) elif event.is_action_pressed(_input_map.right): global_rotate(Vector3.UP, -PI/2) playerTurn.emit(self) else: if event.is_action_pressed(_input_map.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) func get_camera_rid() -> RID: return _camera.get_camera_rid() func set_input_map(input_map) -> void: _input_map = input_map