small racing game im working on
Diffstat (limited to 'classes/car.gd')
| -rw-r--r-- | classes/car.gd | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/classes/car.gd b/classes/car.gd index cc0e33b..bdace2c 100644 --- a/classes/car.gd +++ b/classes/car.gd @@ -14,12 +14,14 @@ var steer_target := 0.0 @export var gear_shift_time = 0.3 @export var power_curve: Curve = preload("res://assets/cars/kenney_sedan/power_curve.tres") @onready var body_mesh := $body as MeshInstance3D +@onready var checkpoint_sound := $checkpoint as AudioStreamPlayer @onready var wheels: Array[VehicleWheel3D] = [$bl as VehicleWheel3D, $br as VehicleWheel3D, $fl as VehicleWheel3D, $fr as VehicleWheel3D] +var particles: Array[GPUParticles3D] = [] signal shifted -var gear_ratios: Array[float] = [ 2.69, 2.01, 1.59, 1.32, 1.13, 1.0 ] +var gear_ratios: Array[float] = [ 5, 2.01, 1.59, 1.32, 1.13, 1.0 ] var current_gear := 0 # -1 reverse, 0 = neutral, 1 - 6 = gear 1 to 6. var clutch_position := 1 # 0.0 = clutch engaged var gear_timer := 0.0 @@ -38,6 +40,8 @@ func is_not_on_ground() -> bool: return wheels.any(func(whl: VehicleWheel3D): return !whl.is_in_contact()) func _ready() -> void: + for whl in wheels: + particles.append(whl.get_node(^"particles")) randomize() brake = 15 set_physics_process(false) @@ -60,11 +64,11 @@ func steer(to: float) -> void: steer_target = lerpf(steer_target, to, 10 * get_physics_process_delta_time()) -## virtual (dont return true for more than a frame) +## virtual func shift_down() -> bool: return false -## virtual (dont return true for more than a frame) +## virtual func shift_up() -> bool: return false @@ -101,12 +105,16 @@ func _physics_process(delta: float): engine_force = throttle * power_factor * gear_ratios[current_gear - 1] * final_drive_ratio * MAX_ENGINE_FORCE * clutch_position else: engine_force = 0.0 - var steer_speed_factor: float = 1 - clampf(kph() / 600, 0.0, 1.0) - steering = -clampf(steer_target, -.5, .5) * steer_speed_factor + steering = -clampf(steer_target, -.7, .7) body_mesh.rotation.z = lerp(body_mesh.rotation.z, clampf(((-steering * .2) * linear_velocity.length_squared() / 685.0) + randf_range(-0.05,0.05), -.4, .4), 10 * delta) limit(delta) + for i in 4: + particles[i].emitting = wheels[i].get_skidinfo() < .5 + if particles[i].emitting: + particles[i].amount = ceil(100 * (1 - wheels[i].get_skidinfo())) + func start() -> void: brake = 0 set_physics_process(true) |