small racing game im working on
tweak car settings
heavier - slower - less damped
bendn 2023-01-29
parent c6d722b · commit b382626
-rw-r--r--assets/cars/kenney_sedan/sedan.tscn3
-rw-r--r--classes/car.gd24
-rw-r--r--ui/speedometer.gd6
3 files changed, 24 insertions, 9 deletions
diff --git a/assets/cars/kenney_sedan/sedan.tscn b/assets/cars/kenney_sedan/sedan.tscn
index e3643e1..8ac24bf 100644
--- a/assets/cars/kenney_sedan/sedan.tscn
+++ b/assets/cars/kenney_sedan/sedan.tscn
@@ -340,9 +340,8 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
[node name="Ball" type="RigidBody3D" parent="."]
collision_layer = 2
collision_mask = 3
+mass = 3.0
physics_material_override = SubResource("PhysicsMaterial_grep7")
-linear_damp = 0.1
-angular_damp = 5.0
[node name="Coll" type="CollisionShape3D" parent="Ball"]
shape = SubResource("SphereShape3D_2sf22")
diff --git a/classes/car.gd b/classes/car.gd
index 05085a2..0786a0f 100644
--- a/classes/car.gd
+++ b/classes/car.gd
@@ -12,12 +12,14 @@ class_name Car
@onready var body_mesh := $CarMesh/body as MeshInstance3D
@export var show_debug := false
-var acceleration := 35.0 # ai must change this for randomness
+var acceleration := 45.0 # ai must change this for randomness
+const limit_speed := 200.0
+const limit_spin := 35.0
const sphere_offset := Vector3(0, -2.3, 0)
const max_steering_range := deg_to_rad(40.0)
const turn_speed := 2.0
const wheel_turn_speed := 0.2
-const turn_stop_limit := 0.75
+const turn_stop_limit := 2
const body_tilt := 685.0
var throttle := 0.0
@@ -44,7 +46,7 @@ func move_mesh(delta: float) -> void:
ball.apply_central_force(-car_mesh.global_transform.basis.z * throttle)
func turn(delta: float) -> void:
- if ball.linear_velocity.length() > turn_stop_limit:
+ if kph() > turn_stop_limit:
var new_basis := car_mesh.global_transform.basis.rotated(car_mesh.global_transform.basis.y, _steering)
car_mesh.global_transform.basis = car_mesh.global_transform.basis.slerp(new_basis, turn_speed * delta)
car_mesh.global_transform = car_mesh.global_transform.orthonormalized()
@@ -56,6 +58,18 @@ func floor_mesh(delta: float) -> void:
var xform := align_with_y(car_mesh.global_transform, n.normalized())
car_mesh.global_transform = car_mesh.global_transform.interpolate_with(xform, 10 * delta)
+# aka arbitrary units/h
+func kph() -> float:
+ return (ball.linear_velocity.length_squared() / 12)
+
+# angular au/h
+func spin_kph() -> float:
+ return (ball.angular_velocity.length_squared() / 12)
+
+func limit() -> void:
+ ball.linear_damp = max(.1 * (kph() - limit_speed), 0) if kph() > limit_speed else 0.0
+ ball.angular_damp = max(.1 * (spin_kph() - limit_spin), 0) if spin_kph() > limit_spin else 0.0
+
func _physics_process(delta: float) -> void:
move_mesh(delta)
@@ -67,10 +81,12 @@ func _physics_process(delta: float) -> void:
# steering = -steering
# drift particles
- var drift: bool = ball.linear_velocity.length() > 25 and abs(ball.linear_velocity.normalized().dot(-car_mesh.transform.basis.z)) > .5
+ var drift: bool = kph() > 25 and abs(ball.linear_velocity.normalized().dot(-car_mesh.transform.basis.z)) > .5
skid_l.emitting = drift
skid_r.emitting = drift
+ limit()
+
turn(delta)
floor_mesh(delta)
diff --git a/ui/speedometer.gd b/ui/speedometer.gd
index c9eb0c9..c7c93da 100644
--- a/ui/speedometer.gd
+++ b/ui/speedometer.gd
@@ -1,14 +1,14 @@
extends Label
@export var f_string = "龍 %dkm/h"
-var car: Node3D
+var car: Car
func _ready() -> void:
set_process(false)
func _process(_delta: float) -> void:
- text = f_string % (car.linear_velocity.length_squared() / 12)
+ text = f_string % car.kph()
func _on_race_created_car(_car: Car) -> void:
- car = _car.ball
+ car = _car
set_process(true)