From 10a7e3d3010707c4aa9a93c87294761be80d1f1a Mon Sep 17 00:00:00 2001 From: Aaron Franke Date: Sun, 21 Feb 2021 20:09:05 -0500 Subject: [PATCH] Use a higher engine force when slow and add a spedometer in Truck Town Co-authored-by: Hugo Locurcio --- 3d/truck_town/car_base.tscn | 2 -- 3d/truck_town/car_select.tscn | 1 - 3d/truck_town/project.godot | 4 ---- 3d/truck_town/spedometer.gd | 24 ++++++++++++++++++++++++ 3d/truck_town/tow_truck.tscn | 1 - 3d/truck_town/town_scene.tscn | 30 +++++++++++++++++++++++++++++- 3d/truck_town/trailer_truck.tscn | 1 - 3d/truck_town/vehicle.gd | 18 ++++++++++++++---- 8 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 3d/truck_town/spedometer.gd diff --git a/3d/truck_town/car_base.tscn b/3d/truck_town/car_base.tscn index 028c7074..092e0dc4 100644 --- a/3d/truck_town/car_base.tscn +++ b/3d/truck_town/car_base.tscn @@ -122,7 +122,6 @@ __meta__ = { [node name="Body" type="VehicleBody" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -0.0955184 ) physics_material_override = SubResource( 1 ) -engine_force = 40.0 script = ExtResource( 1 ) [node name="Wheel1" type="VehicleWheel" parent="Body"] @@ -208,7 +207,6 @@ fov = 74.0 near = 0.1 script = ExtResource( 5 ) min_distance = 3.0 -max_distance = 4.0 height = 1.25 [node name="AnimationPlayer" type="AnimationPlayer" parent="."] diff --git a/3d/truck_town/car_select.tscn b/3d/truck_town/car_select.tscn index 0f6dcb65..f61facb2 100644 --- a/3d/truck_town/car_select.tscn +++ b/3d/truck_town/car_select.tscn @@ -48,7 +48,6 @@ margin_bottom = 400.0 size_flags_horizontal = 2 size_flags_vertical = 2 icon = ExtResource( 4 ) - [connection signal="pressed" from="MiniVan" to="." method="_on_MiniVan_pressed"] [connection signal="pressed" from="TrailerTruck" to="." method="_on_TrailerTruck_pressed"] [connection signal="pressed" from="TowTruck" to="." method="_on_TowTruck_pressed"] diff --git a/3d/truck_town/project.godot b/3d/truck_town/project.godot index 28a7c372..3b51f552 100644 --- a/3d/truck_town/project.godot +++ b/3d/truck_town/project.godot @@ -70,10 +70,6 @@ back={ ] } -[physics] - -3d/default_gravity=11.0 - [rasterizer] shadow_filter=3 diff --git a/3d/truck_town/spedometer.gd b/3d/truck_town/spedometer.gd new file mode 100644 index 00000000..a0fcb3fe --- /dev/null +++ b/3d/truck_town/spedometer.gd @@ -0,0 +1,24 @@ +extends Button + +enum SpeedUnit { + METERS_PER_SECOND = 0, + KILOMETERS_PER_HOUR = 1, + MILES_PER_HOUR = 2, +} + +export(SpeedUnit) var speed_unit = 0 + +func _process(_delta): + var speed = get_parent().get_parent().get_child(1).get_child(0).linear_velocity.length() + if speed_unit == SpeedUnit.METERS_PER_SECOND: + text = "Speed: " + ("%.1f" % speed) + " m/s" + elif speed_unit == SpeedUnit.KILOMETERS_PER_HOUR: + speed *= 3.6 + text = "Speed: " + ("%.0f" % speed) + " km/h" + else: # speed_unit == SpeedUnit.MILES_PER_HOUR: + speed *= 2.23694 + text = "Speed: " + ("%.0f" % speed) + " mph" + + +func _on_Spedometer_pressed(): + speed_unit = (speed_unit + 1) % 3 diff --git a/3d/truck_town/tow_truck.tscn b/3d/truck_town/tow_truck.tscn index 2b17c7ac..0f34f831 100644 --- a/3d/truck_town/tow_truck.tscn +++ b/3d/truck_town/tow_truck.tscn @@ -255,7 +255,6 @@ __meta__ = { [node name="Body" type="VehicleBody" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -0.0955184 ) -engine_force = 40.0 script = ExtResource( 1 ) [node name="Wheel1" type="VehicleWheel" parent="Body"] diff --git a/3d/truck_town/town_scene.tscn b/3d/truck_town/town_scene.tscn index a759d1fa..73da7a4e 100644 --- a/3d/truck_town/town_scene.tscn +++ b/3d/truck_town/town_scene.tscn @@ -1,6 +1,12 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://town_mesh.tscn" type="PackedScene" id=1] +[ext_resource path="res://spedometer.gd" type="Script" id=2] + +[sub_resource type="StyleBoxEmpty" id=1] + +[sub_resource type="Theme" id=2] +Button/styles/focus = SubResource( 1 ) [node name="TownScene" type="Spatial"] @@ -9,6 +15,27 @@ [node name="InstancePos" type="Position3D" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 13.2039, 6.67095, -37.6042 ) +[node name="Panel" type="Panel" parent="InstancePos"] +anchor_left = 1.0 +anchor_right = 1.0 +margin_left = -130.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 120, 40 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Spedometer" type="Button" parent="InstancePos/Panel"] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = SubResource( 2 ) +text = "Speed: ???" +flat = true +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + [node name="Back" type="Button" parent="."] margin_left = 17.0 margin_top = 9.0 @@ -19,3 +46,4 @@ text = "<- Back!" [node name="DirectionalLight" type="DirectionalLight" parent="."] transform = Transform( 1, 0, 0, 0, -0.629475, 0.777021, 0, -0.777021, -0.629475, 0, 24.4076, 0 ) shadow_enabled = true +[connection signal="pressed" from="InstancePos/Panel/Spedometer" to="InstancePos/Panel/Spedometer" method="_on_Spedometer_pressed"] diff --git a/3d/truck_town/trailer_truck.tscn b/3d/truck_town/trailer_truck.tscn index 3b7b6bf0..1cf0dc0e 100644 --- a/3d/truck_town/trailer_truck.tscn +++ b/3d/truck_town/trailer_truck.tscn @@ -299,7 +299,6 @@ shape = SubResource( 6 ) [node name="Body" type="VehicleBody" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -0.0955184 ) -engine_force = 200.0 script = ExtResource( 4 ) [node name="Wheel1" type="VehicleWheel" parent="Body"] diff --git a/3d/truck_town/vehicle.gd b/3d/truck_town/vehicle.gd index fd956410..48143c8a 100644 --- a/3d/truck_town/vehicle.gd +++ b/3d/truck_town/vehicle.gd @@ -5,7 +5,7 @@ const STEER_LIMIT = 0.4 var steer_target = 0 -export var engine_force_value = 85 +export var engine_force_value = 40 func _physics_process(delta): var fwd_mps = transform.basis.xform_inv(linear_velocity).x @@ -14,13 +14,23 @@ func _physics_process(delta): steer_target *= STEER_LIMIT if Input.is_action_pressed("accelerate"): - engine_force = engine_force_value + # Increase engine force at low speeds to make the initial acceleration faster. + var speed = linear_velocity.length() + if speed < 5 and speed != 0: + engine_force = clamp(engine_force_value * 5 / speed, 0, 100) + else: + engine_force = engine_force_value else: engine_force = 0 if Input.is_action_pressed("reverse"): - if (fwd_mps >= -1): - engine_force = -engine_force_value + # Increase engine force at low speeds to make the initial acceleration faster. + if fwd_mps >= -1: + var speed = linear_velocity.length() + if speed < 5 and speed != 0: + engine_force = -clamp(engine_force_value * 5 / speed, 0, 100) + else: + engine_force = -engine_force_value else: brake = 1 else: