]> Untitled Git - lightcycles.git/blobdiff - player/player.gd
Squashed commit of the following:
[lightcycles.git] / player / player.gd
index 43786766b45baa9c595e09cc77b33f756b0f1fa6..ed5bba0c54fd0256ad6c18e9bae4634d319828b8 100644 (file)
@@ -3,30 +3,67 @@ extends CharacterBody3D
 
 
 signal playerTurn
+signal playerDestroyed
+signal playerRestart
 
 
-@export_category("Movement")
+@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 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)
+       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:
-       velocity = global_transform.basis.z * speed
-       move_and_slide()
+       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