small racing game im working on
Diffstat (limited to 'classes/car.gd')
-rw-r--r--classes/car.gd18
1 files changed, 17 insertions, 1 deletions
diff --git a/classes/car.gd b/classes/car.gd
index 872fd5a..40c4e21 100644
--- a/classes/car.gd
+++ b/classes/car.gd
@@ -15,7 +15,9 @@ var steer_target := 0.0
@export var power_curve: Curve = preload("res://assets/cars/kenney_sedan/power_curve.tres")
@onready var body_mesh := $body as MeshInstance3D
-@onready var wheels := [$bl, $br, $fl, $fr]
+@onready var wheels: Array[VehicleWheel3D] = [$bl as VehicleWheel3D, $br as VehicleWheel3D, $fl as VehicleWheel3D, $fr as VehicleWheel3D]
+
+signal shifted
var gear_ratios: Array[float] = [ 2.69, 2.01, 1.59, 1.32, 1.13, 1.0 ]
var current_gear := 0 # -1 reverse, 0 = neutral, 1 - 6 = gear 1 to 6.
@@ -25,6 +27,18 @@ var throttle := 0.0
var current_speed_mps := 0.0 # meters
@onready var last_pos = position
+func ratio() -> float:
+ match current_gear:
+ 0: return 0
+ -1: return reverse_ratio
+ _: return gear_ratios[current_gear - 1]
+
+func is_on_ground() -> bool:
+ return wheels.all(func(whl: VehicleWheel3D): return whl.get_contact_body() != null)
+
+func is_not_on_ground() -> bool:
+ return wheels.any(func(whl: VehicleWheel3D): return whl.get_contact_body() == null)
+
func _ready() -> void:
randomize()
brake = 15
@@ -65,10 +79,12 @@ func _process_gear_inputs(delta: float):
current_gear = current_gear - 1
gear_timer = gear_shift_time
clutch_position = 0
+ shifted.emit()
elif shift_up() and current_gear < gear_ratios.size():
current_gear = current_gear + 1
gear_timer = gear_shift_time
clutch_position = 0
+ shifted.emit()
else:
clutch_position = 1