small racing game im working on
-rw-r--r--assets/cars/engine.gd27
-rw-r--r--assets/cars/kenney_sedan/sedan.tscn29
-rw-r--r--assets/cars/sounds/high_db.tres4
-rw-r--r--assets/cars/sounds/idle_db.tres6
-rw-r--r--assets/cars/sounds/idle_pitch.tres2
-rw-r--r--assets/cars/sounds/low_db.tres4
-rw-r--r--assets/cars/sounds/low_pitch.tres2
-rw-r--r--assets/cars/sounds/med_db.tres4
-rw-r--r--assets/cars/sounds/med_pitch.tres2
-rw-r--r--assets/sounds/engine/2000.oggbin0 -> 121659 bytes
-rw-r--r--assets/sounds/engine/2000.ogg.import19
-rw-r--r--assets/sounds/engine/500.oggbin0 -> 106055 bytes
-rw-r--r--assets/sounds/engine/500.ogg.import19
-rw-r--r--assets/sounds/engine/5000.oggbin0 -> 127116 bytes
-rw-r--r--assets/sounds/engine/5000.ogg.import19
-rw-r--r--assets/sounds/engine/8000.oggbin0 -> 115711 bytes
-rw-r--r--assets/sounds/engine/8000.ogg.import19
-rw-r--r--assets/sounds/engine/high.wavbin220012 -> 0 bytes
-rw-r--r--assets/sounds/engine/high.wav.import24
-rw-r--r--assets/sounds/engine/idle.wavbin582564 -> 0 bytes
-rw-r--r--assets/sounds/engine/idle.wav.import24
-rw-r--r--assets/sounds/engine/low.wavbin216532 -> 0 bytes
-rw-r--r--assets/sounds/engine/low.wav.import24
-rw-r--r--assets/sounds/engine/med.wavbin193004 -> 0 bytes
-rw-r--r--assets/sounds/engine/med.wav.import24
-rw-r--r--classes/car.gd23
-rw-r--r--project.godot6
27 files changed, 135 insertions, 146 deletions
diff --git a/assets/cars/engine.gd b/assets/cars/engine.gd
index 47d6a59..d9cdf54 100644
--- a/assets/cars/engine.gd
+++ b/assets/cars/engine.gd
@@ -11,19 +11,26 @@ extends Node3D
@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):
+func _process(d: float):
var r := car.rpm()
- var n := clampf(r / 500.0, 0, 1)
-# var s := "with n: %.2f" % n
- for i in 4:
- players[i].volume_db = (db_curves[i].sample_baked(n) - 50)
- players[i].pitch_scale = (pitch_curves[i].sample_baked(n) * 2) + .001
-# s += " | %s's: %.2f (%.2f)" % [players[i].name, players[i].volume_db, players[i].pitch_scale]
- if n > .9:
- players[-1].pitch_scale = (car.rpm() / 600) + 1
-# print(s)
+ 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
diff --git a/assets/cars/kenney_sedan/sedan.tscn b/assets/cars/kenney_sedan/sedan.tscn
index de261b3..8691913 100644
--- a/assets/cars/kenney_sedan/sedan.tscn
+++ b/assets/cars/kenney_sedan/sedan.tscn
@@ -2,11 +2,7 @@
[ext_resource type="Script" path="res://classes/car.gd" id="1_pdccm"]
[ext_resource type="Script" path="res://assets/cars/engine.gd" id="2_rxib8"]
-[ext_resource type="AudioStream" uid="uid://dlh4kgp4a23ib" path="res://assets/sounds/engine/high.wav" id="2_xgntt"]
-[ext_resource type="AudioStream" uid="uid://dua01ca8om1md" path="res://assets/sounds/engine/low.wav" id="3_4jicv"]
[ext_resource type="Curve" uid="uid://f1go1j7raaq1" path="res://assets/cars/sounds/idle_db.tres" id="3_gwsff"]
-[ext_resource type="AudioStream" uid="uid://c8ndjqdhoymmd" path="res://assets/sounds/engine/med.wav" id="4_aqqj1"]
-[ext_resource type="AudioStream" uid="uid://yh1tvvitnvhl" path="res://assets/sounds/engine/idle.wav" id="4_fubff"]
[ext_resource type="Curve" uid="uid://bq1r63t410ork" path="res://assets/cars/sounds/low_db.tres" id="4_rdkge"]
[ext_resource type="Curve" uid="uid://d15cjufi3m0wg" path="res://assets/cars/sounds/med_db.tres" id="5_7w6r4"]
[ext_resource type="Curve" uid="uid://d0rkqfng2uvkw" path="res://assets/cars/sounds/high_db.tres" id="6_h74co"]
@@ -15,7 +11,11 @@
[ext_resource type="Curve" uid="uid://da7vdsdlv8l70" path="res://assets/cars/sounds/med_pitch.tres" id="9_ret6y"]
[ext_resource type="Curve" uid="uid://ox0sapaob1jh" path="res://assets/cars/sounds/high_pitch.tres" id="10_28pjg"]
[ext_resource type="Script" path="res://assets/cars/gearbox.gd" id="11_augb2"]
+[ext_resource type="AudioStream" uid="uid://202hwcsj8a41" path="res://assets/sounds/engine/500.ogg" id="11_ouf2u"]
[ext_resource type="AudioStream" uid="uid://di8wcnme3mqbf" path="res://assets/sounds/shifts/1.wav" id="11_rwd1j"]
+[ext_resource type="AudioStream" uid="uid://dwbsofhdf1d8i" path="res://assets/sounds/engine/2000.ogg" id="12_lrx8k"]
+[ext_resource type="AudioStream" uid="uid://d1q0xhd5ufguo" path="res://assets/sounds/engine/5000.ogg" id="13_d45jk"]
+[ext_resource type="AudioStream" uid="uid://d4k65y04x6yxg" path="res://assets/sounds/engine/8000.ogg" id="14_cerxx"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_hs0do"]
friction = 0.71
@@ -344,7 +344,7 @@ radius = 2.0
[node name="Sedan" type="VehicleBody3D"]
collision_layer = 2
collision_mask = 3
-mass = 400.0
+mass = 1000.0
center_of_mass_mode = 1
physics_material_override = SubResource("PhysicsMaterial_hs0do")
gravity_scale = 3.0
@@ -439,20 +439,21 @@ db_curves = Array[Curve]([ExtResource("3_gwsff"), ExtResource("4_rdkge"), ExtRes
pitch_curves = Array[Curve]([ExtResource("7_hu8t3"), ExtResource("8_7rdpj"), ExtResource("9_ret6y"), ExtResource("10_28pjg")])
car = NodePath("..")
+[node name="idle" type="AudioStreamPlayer" parent="Engine"]
+stream = ExtResource("11_ouf2u")
+volume_db = -50.0
+
[node name="low" type="AudioStreamPlayer" parent="Engine"]
-stream = ExtResource("3_4jicv")
-volume_db = -25.0
+stream = ExtResource("12_lrx8k")
+volume_db = -50.0
[node name="med" type="AudioStreamPlayer" parent="Engine"]
-stream = ExtResource("4_aqqj1")
-volume_db = -25.0
+stream = ExtResource("13_d45jk")
+volume_db = -50.0
[node name="high" type="AudioStreamPlayer" parent="Engine"]
-stream = ExtResource("2_xgntt")
-volume_db = -25.0
-
-[node name="idle" type="AudioStreamPlayer" parent="Engine"]
-stream = ExtResource("4_fubff")
+stream = ExtResource("14_cerxx")
+volume_db = -50.0
[node name="Gearbox" type="Node3D" parent="."]
script = ExtResource("11_augb2")
diff --git a/assets/cars/sounds/high_db.tres b/assets/cars/sounds/high_db.tres
index 3ba6495..130fcbd 100644
--- a/assets/cars/sounds/high_db.tres
+++ b/assets/cars/sounds/high_db.tres
@@ -1,7 +1,7 @@
[gd_resource type="Curve" format=3 uid="uid://d0rkqfng2uvkw"]
[resource]
-max_value = 100.0
+max_value = 50.0
bake_resolution = 200
-_data = [Vector2(0.561404, 0), 0.0, 250.943, 0, 0, Vector2(1, 26.4151), 0.0, 0.0, 0, 0]
+_data = [Vector2(0.288515, 0), 0.0, 217.661, 0, 0, Vector2(1, 50), 0.0, 0.0, 0, 0]
point_count = 2
diff --git a/assets/cars/sounds/idle_db.tres b/assets/cars/sounds/idle_db.tres
index 231d79c..e48313c 100644
--- a/assets/cars/sounds/idle_db.tres
+++ b/assets/cars/sounds/idle_db.tres
@@ -1,6 +1,6 @@
[gd_resource type="Curve" format=3 uid="uid://f1go1j7raaq1"]
[resource]
-max_value = 100.0
-_data = [Vector2(0, 29.2453), 0.0, 0.0, 0, 0, Vector2(0.7277, 0), 0.0, 0.0, 0, 0]
-point_count = 2
+max_value = 50.0
+_data = [Vector2(0, 50), 0.0, 0.0, 0, 0, Vector2(0.142857, 41.5094), -182.429, -182.429, 0, 0, Vector2(0.212885, 1), 0.0, 0.0, 0, 0, Vector2(0.7277, 0), 0.0, 0.0, 0, 0]
+point_count = 4
diff --git a/assets/cars/sounds/idle_pitch.tres b/assets/cars/sounds/idle_pitch.tres
index 330db1c..fad82ed 100644
--- a/assets/cars/sounds/idle_pitch.tres
+++ b/assets/cars/sounds/idle_pitch.tres
@@ -1,5 +1,5 @@
[gd_resource type="Curve" format=3 uid="uid://blatk508sq620"]
[resource]
-_data = [Vector2(0, 0.4), 0.0, 0.0, 0, 0, Vector2(0.5, 0.5), 0.0, 0.0, 0, 0, Vector2(1, 0.641509), 1.14825, 0.0, 0, 0]
+_data = [Vector2(0, 0.40566), 0.0, 0.0, 0, 0, Vector2(0.5, 0.5), 0.0, 0.0, 0, 0, Vector2(1, 0.641509), 1.14825, 0.0, 0, 0]
point_count = 3
diff --git a/assets/cars/sounds/low_db.tres b/assets/cars/sounds/low_db.tres
index d5df175..78fe7f3 100644
--- a/assets/cars/sounds/low_db.tres
+++ b/assets/cars/sounds/low_db.tres
@@ -1,6 +1,6 @@
[gd_resource type="Curve" format=3 uid="uid://bq1r63t410ork"]
[resource]
-max_value = 100.0
-_data = [Vector2(0, 0), 0.0, 1.46262, 0, 0, Vector2(0.211268, 26.4151), -4.44437, 0.0, 0, 0, Vector2(0.446009, 24.5283), -47.8437, -47.8437, 0, 0, Vector2(0.671362, 0), -72.5629, 0.0, 0, 0]
+max_value = 50.0
+_data = [Vector2(0, 0), 0.0, 200.943, 0, 0, Vector2(0.168067, 46.6981), -4.44437, 0.0, 0, 0, Vector2(0.336134, 45.283), 2.3068, -465.094, 0, 0, Vector2(0.501401, 0), -72.5629, 0.0, 0, 0]
point_count = 4
diff --git a/assets/cars/sounds/low_pitch.tres b/assets/cars/sounds/low_pitch.tres
index 0ec3278..0d5b9bb 100644
--- a/assets/cars/sounds/low_pitch.tres
+++ b/assets/cars/sounds/low_pitch.tres
@@ -1,5 +1,5 @@
[gd_resource type="Curve" format=3 uid="uid://bof1lx0nk5jte"]
[resource]
-_data = [Vector2(0, 0.632075), 0.0, 0.0, 0, 0, Vector2(0.751174, 0.613208), 0.0, 0.0, 0, 0]
+_data = [Vector2(0, 0.5), 0.0, 0.0, 0, 0, Vector2(0.755869, 0.518868), 0.0, 0.0, 0, 0]
point_count = 2
diff --git a/assets/cars/sounds/med_db.tres b/assets/cars/sounds/med_db.tres
index fc28c40..05f4d56 100644
--- a/assets/cars/sounds/med_db.tres
+++ b/assets/cars/sounds/med_db.tres
@@ -1,7 +1,7 @@
[gd_resource type="Curve" format=3 uid="uid://d15cjufi3m0wg"]
[resource]
-max_value = 100.0
+max_value = 50.0
bake_resolution = 200
-_data = [Vector2(0.357895, 0), 0.0, 0.0, 0, 0, Vector2(0.533333, 22.6415), -2.51346, -2.51346, 0, 0, Vector2(0.723005, 17.9245), -76.0327, -76.0327, 0, 0, Vector2(0.892019, 0), -122.213, 0.0, 0, 0]
+_data = [Vector2(0.168067, 0), 0.0, 0.0, 0, 0, Vector2(0.322129, 50), -2.51346, -2.51346, 0, 0, Vector2(0.501401, 50), 0.0, 0.0, 0, 0, Vector2(0.77591, 0), -122.213, 0.0, 0, 0]
point_count = 4
diff --git a/assets/cars/sounds/med_pitch.tres b/assets/cars/sounds/med_pitch.tres
index 66d2dcd..1e21e08 100644
--- a/assets/cars/sounds/med_pitch.tres
+++ b/assets/cars/sounds/med_pitch.tres
@@ -1,5 +1,5 @@
[gd_resource type="Curve" format=3 uid="uid://da7vdsdlv8l70"]
[resource]
-_data = [Vector2(0.187793, 0), 0.0, 0.0, 0, 0, Vector2(0.253521, 0.235849), 0.0, 0.0, 0, 0, Vector2(0.356808, 0.415094), 0.0, 0.0, 0, 0, Vector2(1, 0.556604), 0.0, 0.0, 0, 0]
+_data = [Vector2(0.187793, 0), 0.0, 0.0, 0, 0, Vector2(0.246499, 0.471698), 0.0, 0.0, 0, 0, Vector2(0.355742, 0.509434), 0.0, 0.0, 0, 0, Vector2(1, 0.59434), 0.0, 0.0, 0, 0]
point_count = 4
diff --git a/assets/sounds/engine/2000.ogg b/assets/sounds/engine/2000.ogg
new file mode 100644
index 0000000..69c7124
--- /dev/null
+++ b/assets/sounds/engine/2000.ogg
Binary files differ
diff --git a/assets/sounds/engine/2000.ogg.import b/assets/sounds/engine/2000.ogg.import
new file mode 100644
index 0000000..b8b1e3e
--- /dev/null
+++ b/assets/sounds/engine/2000.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://dwbsofhdf1d8i"
+path="res://.godot/imported/2000.ogg-63c0f3012cd1ec06c234f214b2c0b795.oggvorbisstr"
+
+[deps]
+
+source_file="res://assets/sounds/engine/2000.ogg"
+dest_files=["res://.godot/imported/2000.ogg-63c0f3012cd1ec06c234f214b2c0b795.oggvorbisstr"]
+
+[params]
+
+loop=true
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/assets/sounds/engine/500.ogg b/assets/sounds/engine/500.ogg
new file mode 100644
index 0000000..6333584
--- /dev/null
+++ b/assets/sounds/engine/500.ogg
Binary files differ
diff --git a/assets/sounds/engine/500.ogg.import b/assets/sounds/engine/500.ogg.import
new file mode 100644
index 0000000..9293e6f
--- /dev/null
+++ b/assets/sounds/engine/500.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://202hwcsj8a41"
+path="res://.godot/imported/500.ogg-c7861095f902365fe1474b685d811d9f.oggvorbisstr"
+
+[deps]
+
+source_file="res://assets/sounds/engine/500.ogg"
+dest_files=["res://.godot/imported/500.ogg-c7861095f902365fe1474b685d811d9f.oggvorbisstr"]
+
+[params]
+
+loop=true
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/assets/sounds/engine/5000.ogg b/assets/sounds/engine/5000.ogg
new file mode 100644
index 0000000..c2c8c0f
--- /dev/null
+++ b/assets/sounds/engine/5000.ogg
Binary files differ
diff --git a/assets/sounds/engine/5000.ogg.import b/assets/sounds/engine/5000.ogg.import
new file mode 100644
index 0000000..5ca5ad8
--- /dev/null
+++ b/assets/sounds/engine/5000.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://d1q0xhd5ufguo"
+path="res://.godot/imported/5000.ogg-3c144a40cdce54851f00c0cb44f7a2e7.oggvorbisstr"
+
+[deps]
+
+source_file="res://assets/sounds/engine/5000.ogg"
+dest_files=["res://.godot/imported/5000.ogg-3c144a40cdce54851f00c0cb44f7a2e7.oggvorbisstr"]
+
+[params]
+
+loop=true
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/assets/sounds/engine/8000.ogg b/assets/sounds/engine/8000.ogg
new file mode 100644
index 0000000..81688a9
--- /dev/null
+++ b/assets/sounds/engine/8000.ogg
Binary files differ
diff --git a/assets/sounds/engine/8000.ogg.import b/assets/sounds/engine/8000.ogg.import
new file mode 100644
index 0000000..36f15fe
--- /dev/null
+++ b/assets/sounds/engine/8000.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://d4k65y04x6yxg"
+path="res://.godot/imported/8000.ogg-856fc4ad536bdb52e8bf049ee4caea3d.oggvorbisstr"
+
+[deps]
+
+source_file="res://assets/sounds/engine/8000.ogg"
+dest_files=["res://.godot/imported/8000.ogg-856fc4ad536bdb52e8bf049ee4caea3d.oggvorbisstr"]
+
+[params]
+
+loop=true
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/assets/sounds/engine/high.wav b/assets/sounds/engine/high.wav
deleted file mode 100644
index 131bdad..0000000
--- a/assets/sounds/engine/high.wav
+++ /dev/null
Binary files differ
diff --git a/assets/sounds/engine/high.wav.import b/assets/sounds/engine/high.wav.import
deleted file mode 100644
index 849e683..0000000
--- a/assets/sounds/engine/high.wav.import
+++ /dev/null
@@ -1,24 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamWAV"
-uid="uid://dlh4kgp4a23ib"
-path="res://.godot/imported/high.wav-6debdfdc0853c7116cc151973f7c20d5.sample"
-
-[deps]
-
-source_file="res://assets/sounds/engine/high.wav"
-dest_files=["res://.godot/imported/high.wav-6debdfdc0853c7116cc151973f7c20d5.sample"]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=2
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/assets/sounds/engine/idle.wav b/assets/sounds/engine/idle.wav
deleted file mode 100644
index e4e5637..0000000
--- a/assets/sounds/engine/idle.wav
+++ /dev/null
Binary files differ
diff --git a/assets/sounds/engine/idle.wav.import b/assets/sounds/engine/idle.wav.import
deleted file mode 100644
index 2f65d0e..0000000
--- a/assets/sounds/engine/idle.wav.import
+++ /dev/null
@@ -1,24 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamWAV"
-uid="uid://yh1tvvitnvhl"
-path="res://.godot/imported/idle.wav-1ce6c6b9bdd32a1a0c393ad4733e0b8a.sample"
-
-[deps]
-
-source_file="res://assets/sounds/engine/idle.wav"
-dest_files=["res://.godot/imported/idle.wav-1ce6c6b9bdd32a1a0c393ad4733e0b8a.sample"]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=2
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/assets/sounds/engine/low.wav b/assets/sounds/engine/low.wav
deleted file mode 100644
index e92c428..0000000
--- a/assets/sounds/engine/low.wav
+++ /dev/null
Binary files differ
diff --git a/assets/sounds/engine/low.wav.import b/assets/sounds/engine/low.wav.import
deleted file mode 100644
index 35ee3d0..0000000
--- a/assets/sounds/engine/low.wav.import
+++ /dev/null
@@ -1,24 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamWAV"
-uid="uid://dua01ca8om1md"
-path="res://.godot/imported/low.wav-aabb9e9df05ab8f1fbfa52dbab0c0d82.sample"
-
-[deps]
-
-source_file="res://assets/sounds/engine/low.wav"
-dest_files=["res://.godot/imported/low.wav-aabb9e9df05ab8f1fbfa52dbab0c0d82.sample"]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=2
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/assets/sounds/engine/med.wav b/assets/sounds/engine/med.wav
deleted file mode 100644
index 4209055..0000000
--- a/assets/sounds/engine/med.wav
+++ /dev/null
Binary files differ
diff --git a/assets/sounds/engine/med.wav.import b/assets/sounds/engine/med.wav.import
deleted file mode 100644
index b1076b6..0000000
--- a/assets/sounds/engine/med.wav.import
+++ /dev/null
@@ -1,24 +0,0 @@
-[remap]
-
-importer="wav"
-type="AudioStreamWAV"
-uid="uid://c8ndjqdhoymmd"
-path="res://.godot/imported/med.wav-c80ce62302bf0e6139c56c77f2e9002a.sample"
-
-[deps]
-
-source_file="res://assets/sounds/engine/med.wav"
-dest_files=["res://.godot/imported/med.wav-c80ce62302bf0e6139c56c77f2e9002a.sample"]
-
-[params]
-
-force/8_bit=false
-force/mono=false
-force/max_rate=false
-force/max_rate_hz=44100
-edit/trim=false
-edit/normalize=false
-edit/loop_mode=2
-edit/loop_begin=0
-edit/loop_end=-1
-compress/mode=0
diff --git a/classes/car.gd b/classes/car.gd
index 40c4e21..cc0e33b 100644
--- a/classes/car.gd
+++ b/classes/car.gd
@@ -6,8 +6,8 @@ class_name Car
var steer_target := 0.0
-@export var MAX_ENGINE_FORCE := 1200.0
-@export var MAX_BRAKE_FORCE := 25.0
+@export var MAX_ENGINE_FORCE := 4000.0
+@export var MAX_BRAKE_FORCE := 35.0
@export var reverse_ratio := -2.5
@export var final_drive_ratio := 3.38
@export var max_engine_rpm := 8000.0
@@ -24,8 +24,6 @@ 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
var throttle := 0.0
-var current_speed_mps := 0.0 # meters
-@onready var last_pos = position
func ratio() -> float:
match current_gear:
@@ -34,10 +32,10 @@ func ratio() -> float:
_: return gear_ratios[current_gear - 1]
func is_on_ground() -> bool:
- return wheels.all(func(whl: VehicleWheel3D): return whl.get_contact_body() != null)
+ return wheels.all(func(whl: VehicleWheel3D): return whl.is_in_contact() != null)
func is_not_on_ground() -> bool:
- return wheels.any(func(whl: VehicleWheel3D): return whl.get_contact_body() == null)
+ return wheels.any(func(whl: VehicleWheel3D): return !whl.is_in_contact())
func _ready() -> void:
randomize()
@@ -45,7 +43,7 @@ func _ready() -> void:
set_physics_process(false)
func kph():
- return current_speed_mps * 3600.0 / 1000.0
+ return (3 * PI * wheels[0].wheel_radius * rpm()) / 25;
# calculate the RPM of our engine based on the average of the wheels
func rpm() -> float:
@@ -91,9 +89,11 @@ func _process_gear_inputs(delta: float):
func _process(delta: float):
_process_gear_inputs(delta)
-func _physics_process(delta: float):
- current_speed_mps = (position - last_pos).length() / delta
+func limit(delta: float) -> void:
+ linear_damp = max((.5 * delta) * (kph() - 400), 0) if kph() > 400 else 0.0
+ angular_damp = max(5 * (angular_velocity.length_squared() - 45), 0) if angular_velocity.length_squared() > 45 else 0.0
+func _physics_process(delta: float):
var power_factor := power_curve.sample_baked(clampf(rpm() / max_engine_rpm, 0.0, 1.0))
if current_gear == -1:
engine_force = throttle * power_factor * reverse_ratio * final_drive_ratio * MAX_ENGINE_FORCE * clutch_position
@@ -101,12 +101,11 @@ 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(current_speed_mps / 150, 0.0, 1.0)
+ var steer_speed_factor: float = 1 - clampf(kph() / 600, 0.0, 1.0)
steering = -clampf(steer_target, -.5, .5) * steer_speed_factor
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)
- # remember where we are
- last_pos = position
+ limit(delta)
func start() -> void:
brake = 0
diff --git a/project.godot b/project.godot
index 42186a9..8491c99 100644
--- a/project.godot
+++ b/project.godot
@@ -57,14 +57,14 @@ texture={
[input]
ui_left={
-"deadzone": 0.5,
+"deadzone": 0.1,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":4194319,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
]
}
ui_right={
-"deadzone": 0.5,
+"deadzone": 0.1,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":4194321,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
@@ -88,11 +88,13 @@ brake={
shift_down={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":88,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
]
}
shift_up={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
]
}