Pārlūkot izejas kodu

Use a higher engine force when slow and add a spedometer in Truck Town

Co-authored-by: Hugo Locurcio <[email protected]>
Aaron Franke 4 gadi atpakaļ
vecāks
revīzija
10a7e3d301

+ 0 - 2
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="."]

+ 0 - 1
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"]

+ 0 - 4
3d/truck_town/project.godot

@@ -70,10 +70,6 @@ back={
  ]
 }
 
-[physics]
-
-3d/default_gravity=11.0
-
 [rasterizer]
 
 shadow_filter=3

+ 24 - 0
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

+ 0 - 1
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"]

+ 29 - 1
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"]

+ 0 - 1
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"]

+ 14 - 4
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: