small racing game im working on
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
extends Node3D

@onready var idle := $idle as AudioStreamPlayer
@onready var low := $low as AudioStreamPlayer
@onready var med := $med as AudioStreamPlayer
@onready var high := $high as AudioStreamPlayer

@onready var players: Array[AudioStreamPlayer] = [idle, low, med, high]
@export var db_curves: Array[Curve]
@export var pitch_curves: Array[Curve]

@export var car: Car

var n: float = 0

func _ready() -> void:
	await get_tree().physics_frame
	for p in players: p.play()

func _process(d: float):
	var r := car.rpm()
	if car.engine_force > 0.1 and car.is_on_ground():
		n = move_toward(n, clampf(r / 700.0, 0, 1), 1 * d)
		for i in 4:
			curve_player(i)
	else:
		n = move_toward(n, 0, 1 * d)
		curve_player(0)
		for i in 4:
			curve_player(i)
	if n > .9:
		players[-1].pitch_scale = (r / 600) + 1

func curve_player(i: int) -> void:
	players[i].volume_db = db_curves[i].sample_baked(n) - 50
	players[i].pitch_scale = (pitch_curves[i].sample_baked(n) * 2) + .001