small racing game im working on
add particles & checkpoint sound
| -rw-r--r-- | assets/cars/engine.gd | 2 | ||||
| -rw-r--r-- | assets/cars/kenney_sedan/sedan.tscn | 53 | ||||
| -rw-r--r-- | assets/cars/skid.tres | 4 | ||||
| -rw-r--r-- | assets/cars/sphere.tres | 13 | ||||
| -rw-r--r-- | assets/mats/skid.tres | 6 | ||||
| -rw-r--r-- | assets/sounds/checkpoint.ogg | bin | 0 -> 11380 bytes | |||
| -rw-r--r-- | assets/sounds/checkpoint.ogg.import | 19 | ||||
| -rw-r--r-- | classes/car.gd | 18 | ||||
| -rw-r--r-- | classes/checkpoint.gd | 2 | ||||
| -rw-r--r-- | race.gd | 2 |
10 files changed, 93 insertions, 26 deletions
diff --git a/assets/cars/engine.gd b/assets/cars/engine.gd index d9cdf54..f5f0511 100644 --- a/assets/cars/engine.gd +++ b/assets/cars/engine.gd @@ -28,8 +28,6 @@ func _process(d: float): 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 diff --git a/assets/cars/kenney_sedan/sedan.tscn b/assets/cars/kenney_sedan/sedan.tscn index 8691913..34c1071 100644 --- a/assets/cars/kenney_sedan/sedan.tscn +++ b/assets/cars/kenney_sedan/sedan.tscn @@ -1,8 +1,10 @@ -[gd_scene load_steps=33 format=3 uid="uid://c157wew5y33bo"] +[gd_scene load_steps=36 format=3 uid="uid://c157wew5y33bo"] [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="Material" uid="uid://b0t01t5nxdfdp" path="res://assets/cars/skid.tres" id="2_yev8o"] [ext_resource type="Curve" uid="uid://f1go1j7raaq1" path="res://assets/cars/sounds/idle_db.tres" id="3_gwsff"] +[ext_resource type="SphereMesh" uid="uid://cd2plk55q0xr7" path="res://assets/cars/sphere.tres" id="3_wncel"] [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"] @@ -16,6 +18,7 @@ [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"] +[ext_resource type="AudioStream" uid="uid://d3rhrhg8srpdg" path="res://assets/sounds/checkpoint.ogg" id="19_stkh0"] [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_hs0do"] friction = 0.71 @@ -366,7 +369,7 @@ transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 1.2, 0 use_as_traction = true wheel_radius = 0.8 wheel_rest_length = 0.4 -wheel_friction_slip = 1.0 +wheel_friction_slip = 1.9 suspension_travel = 0.2 suspension_stiffness = 150.0 suspension_max_force = 18000.0 @@ -378,12 +381,20 @@ transform = Transform3D(-2.33967, 0, -2.0454e-07, 0, 2.33967, 0, 2.0454e-07, 0, mesh = SubResource("ArrayMesh_n2y6h") skeleton = NodePath("") +[node name="particles" type="GPUParticles3D" parent="br"] +emitting = false +lifetime = 3.0 +explosiveness = 0.1 +randomness = 0.2 +process_material = ExtResource("2_yev8o") +draw_pass_1 = ExtResource("3_wncel") + [node name="bl" type="VehicleWheel3D" parent="."] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -1.2, 0.8, 1.51) use_as_traction = true wheel_radius = 0.8 wheel_rest_length = 0.4 -wheel_friction_slip = 1.0 +wheel_friction_slip = 1.9 suspension_travel = 0.2 suspension_stiffness = 150.0 suspension_max_force = 18000.0 @@ -395,12 +406,20 @@ transform = Transform3D(2.33967, -1.78815e-14, -2.0454e-07, 0, 2.33967, -2.0454e mesh = SubResource("ArrayMesh_n2y6h") skeleton = NodePath("") +[node name="particles" type="GPUParticles3D" parent="bl"] +emitting = false +lifetime = 3.0 +explosiveness = 0.1 +randomness = 0.2 +process_material = ExtResource("2_yev8o") +draw_pass_1 = ExtResource("3_wncel") + [node name="fl" type="VehicleWheel3D" parent="."] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -1.2, 0.8, -1.51) use_as_steering = true wheel_radius = 0.8 wheel_rest_length = 0.4 -wheel_friction_slip = 1.0 +wheel_friction_slip = 2.0 suspension_travel = 0.2 suspension_stiffness = 150.0 suspension_max_force = 18000.0 @@ -412,12 +431,20 @@ transform = Transform3D(2.33967, -3.08847e-14, -2.0454e-07, 0, 2.33967, -3.5328e mesh = SubResource("ArrayMesh_n2y6h") skeleton = NodePath("") +[node name="particles" type="GPUParticles3D" parent="fl"] +emitting = false +lifetime = 3.0 +explosiveness = 0.1 +randomness = 0.2 +process_material = ExtResource("2_yev8o") +draw_pass_1 = ExtResource("3_wncel") + [node name="fr" type="VehicleWheel3D" parent="."] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 1.2, 0.8, -1.51) use_as_steering = true wheel_radius = 0.8 wheel_rest_length = 0.4 -wheel_friction_slip = 1.0 +wheel_friction_slip = 2.0 suspension_travel = 0.2 suspension_stiffness = 150.0 suspension_max_force = 18000.0 @@ -429,6 +456,14 @@ transform = Transform3D(-2.33967, 0, -2.0454e-07, 0, 2.33967, 0, 2.0454e-07, 0, mesh = SubResource("ArrayMesh_n2y6h") skeleton = NodePath("") +[node name="particles" type="GPUParticles3D" parent="fr"] +emitting = false +lifetime = 3.0 +explosiveness = 0.1 +randomness = 0.2 +process_material = ExtResource("2_yev8o") +draw_pass_1 = ExtResource("3_wncel") + [node name="Coll" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.43328, 0) shape = SubResource("SphereShape3D_t532n") @@ -441,19 +476,15 @@ 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("12_lrx8k") -volume_db = -50.0 [node name="med" type="AudioStreamPlayer" parent="Engine"] stream = ExtResource("13_d45jk") -volume_db = -50.0 [node name="high" type="AudioStreamPlayer" parent="Engine"] stream = ExtResource("14_cerxx") -volume_db = -50.0 [node name="Gearbox" type="Node3D" parent="."] script = ExtResource("11_augb2") @@ -462,4 +493,8 @@ script = ExtResource("11_augb2") stream = ExtResource("11_rwd1j") volume_db = -25.0 +[node name="checkpoint" type="AudioStreamPlayer" parent="."] +stream = ExtResource("19_stkh0") +volume_db = -10.0 + [connection signal="shifted" from="." to="Gearbox" method="_on_sedan_shifted"] diff --git a/assets/cars/skid.tres b/assets/cars/skid.tres index 8752e5b..b53db73 100644 --- a/assets/cars/skid.tres +++ b/assets/cars/skid.tres @@ -12,9 +12,9 @@ curve = SubResource("Curve_114lc") lifetime_randomness = 0.2 emission_shape = 1 emission_sphere_radius = 1.0 -direction = Vector3(0, 0, 1) +direction = Vector3(0, 0, -1) spread = 5.0 -gravity = Vector3(0, 2, 0) +gravity = Vector3(0, 1, 0) initial_velocity_min = 2.0 initial_velocity_max = 5.0 scale_min = 0.9 diff --git a/assets/cars/sphere.tres b/assets/cars/sphere.tres index 26c2256..604c359 100644 --- a/assets/cars/sphere.tres +++ b/assets/cars/sphere.tres @@ -1,11 +1,10 @@ [gd_resource type="SphereMesh" load_steps=2 format=3 uid="uid://cd2plk55q0xr7"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_efh8s"] -transparency = 1 -shading_mode = 0 -albedo_color = Color(0.435294, 0.435294, 0.435294, 0.705882) +[ext_resource type="Material" uid="uid://clxw3lq6vmrrl" path="res://assets/mats/skid.tres" id="1_3lts8"] [resource] -material = SubResource("StandardMaterial3D_efh8s") -radial_segments = 12 -rings = 12 +material = ExtResource("1_3lts8") +radius = 1.0 +height = 2.0 +radial_segments = 16 +rings = 8 diff --git a/assets/mats/skid.tres b/assets/mats/skid.tres new file mode 100644 index 0000000..55da1b1 --- /dev/null +++ b/assets/mats/skid.tres @@ -0,0 +1,6 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://clxw3lq6vmrrl"] + +[resource] +transparency = 1 +shading_mode = 0 +albedo_color = Color(0.52549, 0.52549, 0.52549, 0.568627) diff --git a/assets/sounds/checkpoint.ogg b/assets/sounds/checkpoint.ogg Binary files differnew file mode 100644 index 0000000..a6acb4a --- /dev/null +++ b/assets/sounds/checkpoint.ogg diff --git a/assets/sounds/checkpoint.ogg.import b/assets/sounds/checkpoint.ogg.import new file mode 100644 index 0000000..45fd959 --- /dev/null +++ b/assets/sounds/checkpoint.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://d3rhrhg8srpdg" +path="res://.godot/imported/checkpoint.ogg-569d47a17d9b3af43bb5b40e645b4b69.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/checkpoint.ogg" +dest_files=["res://.godot/imported/checkpoint.ogg-569d47a17d9b3af43bb5b40e645b4b69.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 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) diff --git a/classes/checkpoint.gd b/classes/checkpoint.gd index 9b7d3e4..468f38c 100644 --- a/classes/checkpoint.gd +++ b/classes/checkpoint.gd @@ -6,4 +6,4 @@ signal collected @export var needs_collision := true func enter() -> void: - collected.emit()
\ No newline at end of file + collected.emit() @@ -105,6 +105,8 @@ func _physics_process(_delta: float) -> void: func collect(cp: int) -> void: + if cp != -1: + car.checkpoint_sound.play() var time := best_time_data.get_time(current_lap, cp) if best_time_data else -1.0 time = best_time_data.time if (not track_res.laps or track_res.laps == current_lap + 1) and cp == -1 and time != -1.0 else time split.emit(timer.now(), time) |