]> Untitled Git - lightcycles.git/blob - player/player.gd
ed5bba0c54fd0256ad6c18e9bae4634d319828b8
[lightcycles.git] / player / player.gd
1 class_name Player
2 extends CharacterBody3D
3
4
5 signal playerTurn
6 signal playerDestroyed
7 signal playerRestart
8
9
10 @onready var _skin = $skin
11
12
13 @export_category("Appearance")
14 @export var color: Color = Color.GOLD
15
16 @export_category("Movement") 
17 @export var speed = 5.0
18
19 @export_category("Camera")
20 @export var distance = 3.0
21
22
23 @onready var _springArm = $SpringArm3D
24 @onready var _camera = $SpringArm3D/Camera3D
25
26 enum state {ALIVE, DEAD}
27 var _state = state.ALIVE
28
29 var _input_map = null
30
31
32 func _ready() -> void:
33         _springArm.spring_length = distance
34         _skin.set_color(color)
35
36
37 func _input(event: InputEvent) -> void:
38         if _state == state.ALIVE:
39                 if event.is_action_pressed(_input_map.left):
40                         global_rotate(Vector3.UP, PI/2)
41                         playerTurn.emit(self)
42                 elif event.is_action_pressed(_input_map.right):
43                         global_rotate(Vector3.UP, -PI/2)
44                         playerTurn.emit(self)
45         else:
46                 if event.is_action_pressed(_input_map.restart):
47                         playerRestart.emit(self)
48
49
50 func _physics_process(_delta: float) -> void:
51         if _state == state.ALIVE:
52                 velocity = global_transform.basis.z * speed
53                 move_and_slide()
54                 if velocity.length() == 0:
55                         _explode()
56
57
58 func _explode() -> void:
59         _skin.visible = false
60         _state = state.DEAD
61         playerDestroyed.emit(self)
62
63
64 func get_camera_rid() -> RID:
65         return _camera.get_camera_rid()
66
67
68 func set_input_map(input_map) -> void:
69         _input_map = input_map