Skip to content
This repository was archived by the owner on Jun 12, 2025. It is now read-only.

Commit 7b21911

Browse files
committed
Made sounds update on physics, allowed disabling input and car physics
1 parent ad49fd1 commit 7b21911

File tree

5 files changed

+37
-24
lines changed

5 files changed

+37
-24
lines changed

addons/aacc/scripts/audio/car_engine_sound_basic.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ func _ready() -> void:
99
volume_db = linear_to_db(min_volume)
1010
pitch_scale = engine_pitch_range.x
1111

12-
func _process(delta: float) -> void:
12+
func _physics_process(delta: float) -> void:
1313
volume_db = linear_to_db(lerp(min_volume, 1.0, car.accel_amount.get_current_value()))
1414
pitch_scale = lerp(engine_pitch_range.x, engine_pitch_range.y, car.revs.get_current_value())

addons/aacc/scripts/audio/car_tire_screech_sound.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class_name CarTireScreechSound extends AudioStreamPlayer3D
33

44
@onready var car: Car = get_node("..")
55

6-
func _process(_delta: float) -> void:
6+
func _physics_process(_delta: float) -> void:
77
pitch_scale = lerp(0.5, 1.25, car.burnout_amount)
88

99
volume_db = linear_to_db(car.burnout_amount)

addons/aacc/scripts/car.gd

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ class_name Car extends RigidBody3D
113113
## The force applied to the car when it's mid-air to stabilize it.
114114
@export var air_stabilization_force: float = 200.0
115115

116+
@export_group("Animation")
117+
@export var do_not_apply_forces: bool = false
118+
116119
#== NODES ==#
117120
var wheels: Array[CarWheel]
118121

@@ -378,27 +381,28 @@ func _physics_process(delta: float) -> void:
378381
update_revs(delta)
379382
update_burnout_amount()
380383

381-
if ground_coefficient > 0.0:
382-
var desired_linear_grip_force: Vector3 = Vector3.RIGHT * get_side_grip_force()
383-
var desired_engine_force: Vector3 = Vector3.FORWARD * get_engine_force() * delta
384-
var desired_brake_force: Vector3 = Vector3.FORWARD * get_brake_force() * delta
385-
var desired_slowdown_force: Vector3 = Vector3.FORWARD * get_slowdown_force() * delta
386-
# TODO: downforce
387-
388-
var sum_of_linear_forces: Vector3 = convert_linear_force(desired_linear_grip_force + desired_engine_force + desired_brake_force + desired_slowdown_force, delta)
389-
apply_force(sum_of_linear_forces * ground_coefficient / delta, average_wheel_collision_point - global_position)
390-
391-
var desired_takeoff_force: Vector3 = Vector3.FORWARD * get_takeoff_force() * delta
392-
apply_force(Plane(average_wheel_collision_normal).project(global_basis * desired_takeoff_force) * ground_coefficient / delta, average_wheel_collision_point - global_position)
393-
394-
var desired_steer_force: Vector3 = Vector3.UP * get_steer_force()
395-
var sum_of_angular_forces: Vector3 = convert_angular_force(desired_steer_force, delta)
396-
apply_torque(sum_of_angular_forces * average_wheel_collision_normal * ground_coefficient / delta)
397-
else:
398-
var desired_air_stabilization_force: Vector3 = get_air_stabilization_force() * delta
399-
400-
var sum_of_angular_forces: Vector3 = convert_angular_force(desired_air_stabilization_force, delta, false)
401-
apply_torque(sum_of_angular_forces / delta)
384+
if not do_not_apply_forces:
385+
if ground_coefficient > 0.0:
386+
var desired_linear_grip_force: Vector3 = Vector3.RIGHT * get_side_grip_force()
387+
var desired_engine_force: Vector3 = Vector3.FORWARD * get_engine_force() * delta
388+
var desired_brake_force: Vector3 = Vector3.FORWARD * get_brake_force() * delta
389+
var desired_slowdown_force: Vector3 = Vector3.FORWARD * get_slowdown_force() * delta
390+
# TODO: downforce
391+
392+
var sum_of_linear_forces: Vector3 = convert_linear_force(desired_linear_grip_force + desired_engine_force + desired_brake_force + desired_slowdown_force, delta)
393+
apply_force(sum_of_linear_forces * ground_coefficient / delta, average_wheel_collision_point - global_position)
394+
395+
var desired_takeoff_force: Vector3 = Vector3.FORWARD * get_takeoff_force() * delta
396+
apply_force(Plane(average_wheel_collision_normal).project(global_basis * desired_takeoff_force) * ground_coefficient / delta, average_wheel_collision_point - global_position)
397+
398+
var desired_steer_force: Vector3 = Vector3.UP * get_steer_force()
399+
var sum_of_angular_forces: Vector3 = convert_angular_force(desired_steer_force, delta)
400+
apply_torque(sum_of_angular_forces * average_wheel_collision_normal * ground_coefficient / delta)
401+
else:
402+
var desired_air_stabilization_force: Vector3 = get_air_stabilization_force() * delta
403+
404+
var sum_of_angular_forces: Vector3 = convert_angular_force(desired_air_stabilization_force, delta, false)
405+
apply_torque(sum_of_angular_forces / delta)
402406

403407
old_linear_velocity = linear_velocity
404408
old_angular_velocity = angular_velocity

addons/aacc/scripts/car_input.gd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
## TODO: docs
33
class_name CarInput extends Node
44

5+
@export var enabled: bool = true
56
@onready var _car: Car = AACCGlobal.current_car
67

78
func _physics_process(delta: float) -> void:
9+
if not enabled: return
810
if not _car: return
911

1012
_car.input_forward = clamp(Input.get_action_strength("aacc_forward"), 0.0, 1.0)

addons/aacc/scripts/car_wheel.gd

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ func _ready() -> void:
6464
car = get_parent() as Car
6565
if visual_node:
6666
initial_visual_node_transform = visual_node.transform
67+
68+
# The wheels don't need much from the car for physics stuff, but the car
69+
# does need stuff from the wheels for the physics stuff. It makes sense
70+
# to make the wheels execute slightly before the car.
71+
process_physics_priority = -1
6772

6873
func configure_raycasts() -> void:
6974
raycast_instance_1.target_position = (Vector3.DOWN * (wheel_radius + suspension_length))
@@ -178,7 +183,9 @@ func _physics_process(delta: float) -> void:
178183
last_compression = compression
179184

180185
suspension_magnitude *= collision_normal.dot(global_basis.y)
181-
car.apply_force(collision_normal * suspension_magnitude, collision_point - car.global_position)
186+
187+
if not car.do_not_apply_forces:
188+
car.apply_force(collision_normal * suspension_magnitude, collision_point - car.global_position)
182189
else:
183190
is_colliding = false
184191
last_compression = 0.0

0 commit comments

Comments
 (0)