]> Untitled Git - lightcycles.git/blob - player/player.gd
Updated export config
[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 @onready var _ray = $RayCast3D
12
13
14 @export_category("Appearance")
15 @export var color: Color = Color.GOLD
16
17 @export_category("Movement") 
18 @export var speed: float = 5.0
19
20 @export_category("Camera")
21 @export var distance: float = 3.0
22
23
24 @onready var _springArm = $SpringArm3D
25 @onready var _camera = $SpringArm3D/Camera3D
26
27 enum state {ALIVE, DEAD}
28 var _state = state.ALIVE
29
30 var _input_map = null
31
32
33 func _ready() -> void:
34         _springArm.spring_length = distance
35         _skin.set_color(color)
36
37
38 func _input(event: InputEvent) -> void:
39         if _state == state.ALIVE:
40                 if event.is_action_pressed(_input_map.left):
41                         global_rotate(Vector3.UP, PI/2)
42                         playerTurn.emit(self)
43                 elif event.is_action_pressed(_input_map.right):
44                         global_rotate(Vector3.UP, -PI/2)
45                         playerTurn.emit(self)
46         else:
47                 if event.is_action_pressed(_input_map.restart):
48                         playerRestart.emit(self)
49
50
51 func _physics_process(_delta: float) -> void:
52         if _state == state.ALIVE:
53                 velocity = global_transform.basis.z * speed
54                 move_and_slide()
55                 if _ray_intersect_length() < 0.05 or velocity.length() < 0.02:
56                         _explode()
57
58
59 func _ray_intersect_length() -> float:
60         if _ray.is_colliding():
61                 var point: Vector3 = _ray.get_collision_point()
62                 var v: Vector3 = _ray.global_position - point
63                 return v.length()
64         else:
65                 return INF
66
67 func _explode() -> void:
68         _skin.visible = false
69         _state = state.DEAD
70         playerDestroyed.emit(self)
71
72
73 func get_camera_rid() -> RID:
74         return _camera.get_camera_rid()
75
76
77 func set_input_map(input_map) -> void:
78         _input_map = input_map