6
.gitattribute
Normal file
|
@ -0,0 +1,6 @@
|
|||
*.gd eol=lf
|
||||
*.tscn eol=lf
|
||||
*.material eol=lf
|
||||
*.cfg eol=lf
|
||||
*.godot eol=lf
|
||||
*.import eol=lf
|
2
.godot/editor/create_recent.Node
Normal file
|
@ -0,0 +1,2 @@
|
|||
Camera3D
|
||||
CSGBox3D
|
48
.godot/editor/editor_layout.cfg
Normal file
|
@ -0,0 +1,48 @@
|
|||
[docks]
|
||||
|
||||
dock_1_selected_tab_idx=0
|
||||
dock_2_selected_tab_idx=0
|
||||
dock_3_selected_tab_idx=0
|
||||
dock_4_selected_tab_idx=0
|
||||
dock_5_selected_tab_idx=0
|
||||
dock_6_selected_tab_idx=0
|
||||
dock_7_selected_tab_idx=0
|
||||
dock_8_selected_tab_idx=0
|
||||
dock_floating={}
|
||||
dock_split_2=0
|
||||
dock_split_3=0
|
||||
dock_hsplit_1=0
|
||||
dock_hsplit_2=270
|
||||
dock_hsplit_3=-270
|
||||
dock_hsplit_4=0
|
||||
dock_filesystem_split=0
|
||||
dock_filesystem_display_mode=0
|
||||
dock_filesystem_file_sort=0
|
||||
dock_filesystem_file_list_display_mode=1
|
||||
dock_filesystem_selected_paths=PackedStringArray("res://town/town_scene.tscn")
|
||||
dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://town/")
|
||||
dock_3="Scene,Import"
|
||||
dock_4="FileSystem"
|
||||
dock_5="Inspector,Node,History"
|
||||
|
||||
[EditorNode]
|
||||
|
||||
open_scenes=PackedStringArray("res://node_3d.tscn", "res://town/town_scene.tscn")
|
||||
current_scene="res://town/town_scene.tscn"
|
||||
center_split_offset=0
|
||||
selected_default_debugger_tab_idx=0
|
||||
selected_main_editor_idx=1
|
||||
|
||||
[ScriptEditor]
|
||||
|
||||
open_scripts=[]
|
||||
selected_script=""
|
||||
open_help=[]
|
||||
script_split_offset=70
|
||||
list_split_offset=0
|
||||
|
||||
[ShaderEditor]
|
||||
|
||||
open_shaders=[]
|
||||
split_offset=0
|
||||
selected_shader=""
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
0
.godot/editor/favorites.Node
Normal file
|
@ -1,4 +1,45 @@
|
|||
ea4bc82a6ad023ab7ee23ee620429895
|
||||
::res://::1716826573
|
||||
::res://::1716827728
|
||||
default_env.tres::Environment::-1::1716823813::0::1::::<><>::
|
||||
export_presets.cfg::TextFile::-1::1716826851::0::1::::<><>::
|
||||
icon.png::CompressedTexture2D::4377832383621260559::1716823813::1716826574::1::::<><>::
|
||||
icon.webp::CompressedTexture2D::3626017087650301524::1716827726::1716827730::1::::<><>::
|
||||
node_3d.tscn::PackedScene::5734022820197298223::1716827531::0::1::::<><>::
|
||||
README.md::TextFile::-1::1716827726::0::1::::<><>::
|
||||
spedometer.gd::GDScript::-1::1716827726::0::1::::<>Button<>::
|
||||
::res://car_select/::1716827726
|
||||
car_select.gd::GDScript::-1::1716827726::0::1::::<>Control<>::
|
||||
car_select.tscn::PackedScene::5519083593120862163::1716827726::0::1::::<><>::res://car_select/car_select.gd<>uid://bh7b4n4lg1uqt::::res://car_select/choose_van.png<>uid://hvkcmpdq1t0k::::res://car_select/choose_trailer.png<>uid://de7itkxhl0u28::::res://car_select/choose_tow.png
|
||||
choose_tow.png::CompressedTexture2D::7506597740885427615::1716827726::1716827730::1::::<><>::
|
||||
choose_trailer.png::CompressedTexture2D::535285233427956760::1716827726::1716827730::1::::<><>::
|
||||
choose_van.png::CompressedTexture2D::2943915910416982227::1716827726::1716827730::1::::<><>::
|
||||
::res://town/::1716827726
|
||||
town_scene.tscn::PackedScene::8963914804262481880::1716827726::0::1::::<><>::uid://dfdgytsvtqxwv::::res://town/truck_town.glb<>res://spedometer.gd<>uid://b2g4dq0w72e68::::res://town/materials/grass.webp<>uid://bdjiubscxkdn6::::res://town/materials/cement.tres
|
||||
truck_town.glb::PackedScene::7516807590272283437::1716827726::1716827731::1::::<><>::uid://bdjiubscxkdn6::::res://town/materials/cement.tres<>uid://c71ovlrgdfif5::::res://town/materials/grass.tres
|
||||
::res://town/materials/::1716827726
|
||||
cement.tres::StandardMaterial3D::2616088146665799013::1716827726::0::1::::<><>::uid://dkv00eeo3yu2w::::res://town/materials/cement.webp
|
||||
cement.webp::CompressedTexture2D::7906065206908765244::1716827726::1716827731::1::::<><>::
|
||||
grass.tres::StandardMaterial3D::7073446329274880064::1716827726::0::1::::<><>::uid://b2g4dq0w72e68::::res://town/materials/grass.webp
|
||||
grass.webp::CompressedTexture2D::4295672758653397927::1716827726::1716827731::1::::<><>::
|
||||
::res://vehicles/::1716827727
|
||||
blob_shadow.png::CompressedTexture2D::3061404969606535202::1716827726::1716827730::1::::<><>::
|
||||
car_base.tscn::PackedScene::6639054641309143335::1716827726::0::1::::<><>::res://vehicles/vehicle.gd<>uid://d4ostmqwgytk::::res://vehicles/particle_smoke.png<>uid://bqrwin8ccgptt::::res://vehicles/meshes/wheel.res<>uid://b2xi556mwp7ue::::res://vehicles/meshes/minivan.res<>res://vehicles/follow_camera.gd<>uid://cb7wvsd6vygd3::::res://vehicles/engine.wav<>uid://sy2li7u35867::::res://vehicles/impact_1.wav<>uid://bf0h7s81yr8nj::::res://vehicles/impact_2.wav<>uid://sun2n8a4xapl::::res://vehicles/impact_3.wav<>uid://dpbayeeufya21::::res://vehicles/impact_4.wav<>uid://bju75l2w3r7vq::::res://vehicles/blob_shadow.png
|
||||
engine.wav::AudioStreamWAV::4910464526159239754::1716827726::1716827731::1::::<><>::
|
||||
follow_camera.gd::GDScript::-1::1716827726::0::1::::<>Camera3D<>::
|
||||
impact_1.wav::AudioStreamWAV::1314603724687552626::1716827726::1716827731::1::::<><>::
|
||||
impact_2.wav::AudioStreamWAV::2789457507702027471::1716827726::1716827731::1::::<><>::
|
||||
impact_3.wav::AudioStreamWAV::1305525011728930513::1716827726::1716827731::1::::<><>::
|
||||
impact_4.wav::AudioStreamWAV::8214202159646518848::1716827727::1716827731::1::::<><>::
|
||||
particle_smoke.png::CompressedTexture2D::271316685208785408::1716827727::1716827730::1::::<><>::
|
||||
tow_truck.tscn::PackedScene::2945802589605193517::1716827727::0::1::::<><>::res://vehicles/vehicle.gd<>uid://bqrwin8ccgptt::::res://vehicles/meshes/wheel.res<>uid://cbpqxxd14g8un::::res://vehicles/meshes/tow_truck.res<>res://vehicles/follow_camera.gd<>uid://ctglc27jx8xe2::::res://vehicles/meshes/truck_cab.res<>uid://cb7wvsd6vygd3::::res://vehicles/engine.wav<>uid://sy2li7u35867::::res://vehicles/impact_1.wav<>uid://bf0h7s81yr8nj::::res://vehicles/impact_2.wav<>uid://sun2n8a4xapl::::res://vehicles/impact_3.wav<>uid://dpbayeeufya21::::res://vehicles/impact_4.wav<>uid://d4ostmqwgytk::::res://vehicles/particle_smoke.png<>uid://bju75l2w3r7vq::::res://vehicles/blob_shadow.png
|
||||
trailer_truck.tscn::PackedScene::8369804417720244340::1716827727::0::1::::<><>::res://vehicles/vehicle.gd<>uid://bqrwin8ccgptt::::res://vehicles/meshes/wheel.res<>uid://ctglc27jx8xe2::::res://vehicles/meshes/truck_cab.res<>res://vehicles/follow_camera.gd<>uid://sy2li7u35867::::res://vehicles/impact_1.wav<>uid://cb7wvsd6vygd3::::res://vehicles/engine.wav<>uid://bf0h7s81yr8nj::::res://vehicles/impact_2.wav<>uid://sun2n8a4xapl::::res://vehicles/impact_3.wav<>uid://dpbayeeufya21::::res://vehicles/impact_4.wav<>uid://d4ostmqwgytk::::res://vehicles/particle_smoke.png<>uid://bju75l2w3r7vq::::res://vehicles/blob_shadow.png<>uid://dyg750wqca86r::::res://vehicles/truck_trailer.tres
|
||||
truck_trailer.png::CompressedTexture2D::1190334386377021965::1716827727::1716827730::1::::<><>::
|
||||
truck_trailer.tres::StandardMaterial3D::8858178430301242195::1716827727::0::1::::<><>::uid://q7uvsiqefkwr::::res://vehicles/truck_trailer.png
|
||||
vehicle.gd::GDScript::-1::1716827727::0::1::::<>VehicleBody3D<>::
|
||||
::res://vehicles/meshes/::1716827727
|
||||
meshes.glb::PackedScene::349391053548130180::1716827727::1716827731::1::::<><>::uid://d0n61oj27qnya::::res://vehicles/meshes/truck_trailer.res<>uid://ctglc27jx8xe2::::res://vehicles/meshes/truck_cab.res<>uid://bqrwin8ccgptt::::res://vehicles/meshes/wheel.res<>uid://cbpqxxd14g8un::::res://vehicles/meshes/tow_truck.res<>uid://b2xi556mwp7ue::::res://vehicles/meshes/minivan.res
|
||||
minivan.res::ArrayMesh::4329541084187321796::1716827731::0::1::::<><>::
|
||||
tow_truck.res::ArrayMesh::4875009636371023161::1716827731::0::1::::<><>::
|
||||
truck_cab.res::ArrayMesh::6119488589546590487::1716827731::0::1::::<><>::
|
||||
truck_trailer.res::ArrayMesh::8942749460750483204::1716827731::0::1::::<><>::uid://dyg750wqca86r::::res://vehicles/truck_trailer.tres
|
||||
wheel.res::ArrayMesh::3545887397788631717::1716827731::0::1::::<><>::
|
||||
|
|
6
.godot/editor/filesystem_update4
Normal file
|
@ -0,0 +1,6 @@
|
|||
res://node_3d.tscn
|
||||
res://vehicles/meshes/truck_trailer.res
|
||||
res://vehicles/meshes/truck_cab.res
|
||||
res://vehicles/meshes/wheel.res
|
||||
res://vehicles/meshes/tow_truck.res
|
||||
res://vehicles/meshes/minivan.res
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,175 @@
|
|||
[editor_states]
|
||||
|
||||
Anim={
|
||||
"visible": false
|
||||
}
|
||||
2D={
|
||||
"grid_offset": Vector2(0, 0),
|
||||
"grid_snap_active": false,
|
||||
"grid_step": Vector2(8, 8),
|
||||
"grid_visibility": 1,
|
||||
"ofs": Vector2(-165, -110),
|
||||
"primary_grid_step": Vector2i(8, 8),
|
||||
"show_edit_locks": true,
|
||||
"show_guides": true,
|
||||
"show_helpers": false,
|
||||
"show_origin": true,
|
||||
"show_rulers": true,
|
||||
"show_transformation_gizmos": true,
|
||||
"show_viewport": true,
|
||||
"show_zoom_control": true,
|
||||
"smart_snap_active": false,
|
||||
"snap_guides": true,
|
||||
"snap_node_anchors": true,
|
||||
"snap_node_center": true,
|
||||
"snap_node_parent": true,
|
||||
"snap_node_sides": true,
|
||||
"snap_other_nodes": true,
|
||||
"snap_pixel": true,
|
||||
"snap_relative": false,
|
||||
"snap_rotation": false,
|
||||
"snap_rotation_offset": 0.0,
|
||||
"snap_rotation_step": 0.261799,
|
||||
"snap_scale": false,
|
||||
"snap_scale_step": 0.1,
|
||||
"zoom": 1.0
|
||||
}
|
||||
3D={
|
||||
"fov": 70.01,
|
||||
"gizmos_status": {
|
||||
"AudioListener3D": 0,
|
||||
"AudioStreamPlayer3D": 0,
|
||||
"CPUParticles3D": 0,
|
||||
"CSGShape3D": 0,
|
||||
"Camera3D": 0,
|
||||
"CollisionObject3D": 0,
|
||||
"CollisionPolygon3D": 0,
|
||||
"CollisionShape3D": 0,
|
||||
"Decal": 0,
|
||||
"FogVolume": 0,
|
||||
"GPUParticles3D": 0,
|
||||
"GPUParticlesCollision3D": 0,
|
||||
"Joint3D": 0,
|
||||
"Light3D": 0,
|
||||
"LightmapGI": 0,
|
||||
"LightmapProbe": 0,
|
||||
"Marker3D": 0,
|
||||
"NavigationLink3D": 0,
|
||||
"NavigationRegion3D": 0,
|
||||
"OccluderInstance3D": 0,
|
||||
"Path3D": 0,
|
||||
"PhysicalBone3D": 0,
|
||||
"RayCast3D": 0,
|
||||
"ReflectionProbe": 0,
|
||||
"ShapeCast3D": 0,
|
||||
"Skeleton3D": 0,
|
||||
"SoftBody3D": 0,
|
||||
"SpringArm3D": 0,
|
||||
"VehicleWheel3D": 0,
|
||||
"VisibleOnScreenNotifier3D": 0,
|
||||
"VoxelGI": 0
|
||||
},
|
||||
"local_coords": false,
|
||||
"preview_sun_env": {
|
||||
"environ_ao_enabled": false,
|
||||
"environ_enabled": true,
|
||||
"environ_energy": 1.0,
|
||||
"environ_gi_enabled": false,
|
||||
"environ_glow_enabled": true,
|
||||
"environ_ground_color": Color(0.2, 0.169, 0.133, 1),
|
||||
"environ_sky_color": Color(0.385, 0.454, 0.55, 1),
|
||||
"environ_tonemap_enabled": true,
|
||||
"sun_color": Color(1, 1, 1, 1),
|
||||
"sun_enabled": true,
|
||||
"sun_energy": 1.0,
|
||||
"sun_max_distance": 100.0,
|
||||
"sun_rotation": Vector2(-1.0472, 2.61799)
|
||||
},
|
||||
"rotate_snap": 15.0,
|
||||
"scale_snap": 10.0,
|
||||
"show_grid": true,
|
||||
"show_origin": true,
|
||||
"snap_enabled": false,
|
||||
"translate_snap": 1.0,
|
||||
"viewport_mode": 1,
|
||||
"viewports": [{
|
||||
"auto_orthogonal": false,
|
||||
"auto_orthogonal_enabled": true,
|
||||
"cinematic_preview": false,
|
||||
"display_mode": 20,
|
||||
"distance": 4.0,
|
||||
"doppler": false,
|
||||
"frame_time": false,
|
||||
"gizmos": true,
|
||||
"half_res": false,
|
||||
"information": false,
|
||||
"listener": true,
|
||||
"lock_rotation": false,
|
||||
"orthogonal": false,
|
||||
"position": Vector3(0, 0, 0),
|
||||
"use_environment": false,
|
||||
"view_type": 0,
|
||||
"x_rotation": 0.5,
|
||||
"y_rotation": -0.5
|
||||
}, {
|
||||
"auto_orthogonal": false,
|
||||
"auto_orthogonal_enabled": true,
|
||||
"cinematic_preview": false,
|
||||
"display_mode": 20,
|
||||
"distance": 4.0,
|
||||
"doppler": false,
|
||||
"frame_time": false,
|
||||
"gizmos": true,
|
||||
"half_res": false,
|
||||
"information": false,
|
||||
"listener": false,
|
||||
"lock_rotation": false,
|
||||
"orthogonal": false,
|
||||
"position": Vector3(0, 0, 0),
|
||||
"use_environment": false,
|
||||
"view_type": 0,
|
||||
"x_rotation": 0.5,
|
||||
"y_rotation": -0.5
|
||||
}, {
|
||||
"auto_orthogonal": false,
|
||||
"auto_orthogonal_enabled": true,
|
||||
"cinematic_preview": false,
|
||||
"display_mode": 20,
|
||||
"distance": 4.0,
|
||||
"doppler": false,
|
||||
"frame_time": false,
|
||||
"gizmos": true,
|
||||
"half_res": false,
|
||||
"information": false,
|
||||
"listener": false,
|
||||
"lock_rotation": false,
|
||||
"orthogonal": false,
|
||||
"position": Vector3(0, 0, 0),
|
||||
"use_environment": false,
|
||||
"view_type": 0,
|
||||
"x_rotation": 0.5,
|
||||
"y_rotation": -0.5
|
||||
}, {
|
||||
"auto_orthogonal": false,
|
||||
"auto_orthogonal_enabled": true,
|
||||
"cinematic_preview": false,
|
||||
"display_mode": 20,
|
||||
"distance": 4.0,
|
||||
"doppler": false,
|
||||
"frame_time": false,
|
||||
"gizmos": true,
|
||||
"half_res": false,
|
||||
"information": false,
|
||||
"listener": false,
|
||||
"lock_rotation": false,
|
||||
"orthogonal": false,
|
||||
"position": Vector3(0, 0, 0),
|
||||
"use_environment": false,
|
||||
"view_type": 0,
|
||||
"x_rotation": 0.5,
|
||||
"y_rotation": -0.5
|
||||
}],
|
||||
"zfar": 4000.01,
|
||||
"znear": 0.05
|
||||
}
|
||||
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@17147/@Panel@13/@VBoxContainer@14/@HSplitContainer@17/@HSplitContainer@25/@HSplitContainer@33/@VBoxContainer@34/@VSplitContainer@36/@VSplitContainer@62/@VBoxContainer@63/@PanelContainer@110/MainScreen/@CanvasItemEditor@9462/@VSplitContainer@9281/@HSplitContainer@9283/@HSplitContainer@9285/@Control@9286/@SubViewportContainer@9287/@SubViewport@9288/Node3D/Camera3D")])
|
|
@ -0,0 +1,5 @@
|
|||
[folding]
|
||||
|
||||
node_unfolds=[]
|
||||
resource_unfolds=[]
|
||||
nodes_folded=[]
|
|
@ -20,4 +20,4 @@ Camera3D:scale=true
|
|||
|
||||
[recent_files]
|
||||
|
||||
scenes=["res://node_3d.tscn"]
|
||||
scenes=["res://town/town_scene.tscn", "res://node_3d.tscn"]
|
||||
|
|
0
.godot/editor/script_editor_cache.cfg
Normal file
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,5 @@
|
|||
[folding]
|
||||
|
||||
node_unfolds=[NodePath("DirectionalLight3D"), PackedStringArray("Transform", "Light", "Shadow", "Directional Shadow"), NodePath("InstancePos"), PackedStringArray("Transform"), NodePath("Spedometer"), PackedStringArray("Layout", "Focus", "Shortcut", "BiDi"), NodePath("Back"), PackedStringArray("Layout"), NodePath("TouchTurnLeft"), PackedStringArray("Layout"), NodePath("TouchTurnLeft/TurnLeft"), PackedStringArray("Visibility", "Transform"), NodePath("TouchReverse"), PackedStringArray("Layout"), NodePath("TouchReverse/Reverse"), PackedStringArray("Visibility", "Transform"), NodePath("TouchTurnRight"), PackedStringArray("Layout"), NodePath("TouchTurnRight/TurnRight"), PackedStringArray("Visibility", "Transform"), NodePath("Ground"), PackedStringArray("Transform", "Geometry", "surface_material_override"), NodePath("Ground2"), PackedStringArray("Transform", "Geometry", "surface_material_override"), NodePath("Ground3"), PackedStringArray("Transform", "Geometry", "surface_material_override"), NodePath("Ground4"), PackedStringArray("Transform", "Geometry", "surface_material_override"), NodePath("Racetrack"), PackedStringArray("Transform"), NodePath("Racetrack/HugeTire"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp2"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp2/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp2/StaticBody3D/CollisionShape3D"), PackedStringArray("Transform"), NodePath("Racetrack/Ramp3"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp3/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp4"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp4/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp5"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp5/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override")]
|
||||
resource_unfolds=["res://town/town_scene.tscn::Environment_dauhq", PackedStringArray("Resource", "Background", "Sky", "Tonemap", "Fog"), "res://town/town_scene.tscn::Shortcut_msvqx", PackedStringArray("Resource"), "res://town/town_scene.tscn::GradientTexture2D_m8ylb", PackedStringArray("Resource"), "res://town/town_scene.tscn::GradientTexture2D_xu6xc", PackedStringArray("Resource"), "res://town/town_scene.tscn::BoxMesh_x3c0g", PackedStringArray("Resource"), "res://town/town_scene.tscn::StandardMaterial3D_0ud3l", PackedStringArray("Resource", "Albedo", "Roughness", "UV1", "Sampling"), "res://town/town_scene.tscn::ConcavePolygonShape3D_gearx", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_g7q2f", PackedStringArray("Resource"), "res://town/town_scene.tscn::BoxMesh_n528d", PackedStringArray("Resource"), "res://town/town_scene.tscn::StandardMaterial3D_aijyr", PackedStringArray("Resource", "Albedo", "Roughness", "UV1", "Sampling"), "res://town/town_scene.tscn::ConcavePolygonShape3D_mb5rx", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_3wmyg", PackedStringArray("Resource"), "res://town/town_scene.tscn::Curve3D_6vskq", PackedStringArray("Resource"), "res://town/town_scene.tscn::TorusMesh_jqadq", PackedStringArray("Resource"), "res://town/town_scene.tscn::StandardMaterial3D_5qgna", PackedStringArray("Resource", "Albedo"), "res://town/town_scene.tscn::ConcavePolygonShape3D_smisc", PackedStringArray("Resource"), "res://town/town_scene.tscn::PrismMesh_xglk4", PackedStringArray("Resource"), "res://town/town_scene.tscn::StandardMaterial3D_kamav", PackedStringArray("Resource", "Albedo"), "res://town/town_scene.tscn::PrismMesh_3jdtn", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_ykfn8", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_4aeas", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_e2cnd", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_8ool4", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_ru3pl", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_stwys", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_04800", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_248tl", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_nhcrh", PackedStringArray("Resource")]
|
||||
nodes_folded=[]
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -0,0 +1,3 @@
|
|||
[folding]
|
||||
|
||||
sections_unfolded=PackedStringArray()
|
|
@ -1 +1 @@
|
|||
list=[]
|
||||
list=Array[Dictionary]([])
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="ce7eb00cb5b7e971d0f336f1814f6cb5"
|
||||
dest_md5="c1b9b00f60f8f30a4b541575d5152e44"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="5bd7eca1a6164956bbece83554dd8ddb"
|
||||
dest_md5="06dbde7fc0f5c2e83a282e48966e6883"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="479a4a2bdbd40dea2f759750b535a1df"
|
||||
dest_md5="1a04c36afa44aaa2b4aeb43dd16d9e02"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="af4711e0c224d320d1b126cdf1c9e78e"
|
||||
dest_md5="0449d7c86293a0efb65e17a5ec31cac0"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="655343634bfbabd4b2d99c8c463a9ad0"
|
||||
dest_md5="6ce5f10dacbb8333bac0be3d9ec37117"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="2f3a63b1a9bf2c6b68c6e1f1da74a47c"
|
||||
dest_md5="572bf33710e6a39abfb327b41876fdf1"
|
||||
|
BIN
.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex
Normal file
|
@ -0,0 +1,3 @@
|
|||
source_md5="3b4522e7349d3a0db51cd98c38c2ae61"
|
||||
dest_md5="cf46b0999b4d6c18b1bb22e21964f66a"
|
||||
|
BIN
.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex
Normal file
|
@ -0,0 +1,3 @@
|
|||
source_md5="c643e882af4e6519374d473f82c4c376"
|
||||
dest_md5="54567e8184349899f35df040a7688464"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="e30823d015b944e1a486719c4b5f1d65"
|
||||
dest_md5="3e45e26908f4e1e0850c6d0bcca75c76"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="b15f64e9fd99e39e48e899737325ca24"
|
||||
dest_md5="0fa9db8c95975174e542db5cdd9ec178"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="177fcd2d5799c2a019f058eeff123aef"
|
||||
dest_md5="9e2b7f8c87e67a545e1777fe71d37663"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="d80e01b1b40b8e8484c6ecf178bb9ff6"
|
||||
dest_md5="e5ca1eda74043251b3afdd11a9b9c142"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="ea1ce24fc25c95dce0ea44ffa66f395c"
|
||||
dest_md5="f0288c8425c63e291717a7561b74d992"
|
||||
|
BIN
.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn
Normal file
|
@ -0,0 +1,3 @@
|
|||
source_md5="a39ef986c315d3485bbd77beb1ef30c5"
|
||||
dest_md5="8c2fd73e5fae42c988a3e824df6dfd4a"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="21bfa370823577a0f32b53df00b936df"
|
||||
dest_md5="02e238c979992ec989041a56a36afe83"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
source_md5="63f10640a74da0424be95e4ad611d120"
|
||||
dest_md5="9975c96d81f85d6bf9ceb131170e9dad"
|
||||
|
39
README.md
Normal file
|
@ -0,0 +1,39 @@
|
|||
# Truck Town
|
||||
|
||||
This is a demo implementing different types of trucks of
|
||||
varying complexity using vehicle physics.
|
||||
|
||||
Controls:
|
||||
|
||||
- <kbd>Up Arrow</kbd>, <kbd>W</kbd>, <kbd>Gamepad Right Trigger</kbd>, <kbd>Gamepad A/Cross</kbd>: Accelerate
|
||||
- <kbd>Down Arrow</kbd>, <kbd>S</kbd>, <kbd>Gamepad Left Trigger</kbd>, <kbd>Gamepad B/Circle</kbd>, <kbd>Gamepad X/Square</kbd>: Brake/reverse
|
||||
- <kbd>Left Arrow</kbd>, <kbd>Gamepad Left Stick</kbd>, <kbd>Gamepad D-Pad Left</kbd>: Steer left
|
||||
- <kbd>Right Arrow</kbd>, <kbd>Gamepad Left Stick</kbd>, <kbd>Gamepad D-Pad Right</kbd>: Steer right
|
||||
- <kbd>U</kbd>, <kbd>Gamepad Select</kbd>, left-click speedometer: Change speedometer unit (m/s, km/h, mph)
|
||||
- <kbd>C</kbd>, <kbd>Gamepad Y/Triangle</kbd>: Change camera (exterior, interior, top-down)
|
||||
- <kbd>Escape</kbd>, <kbd>Gamepad D-Pad Up</kbd>: Go back to menu (press again to exit)
|
||||
|
||||
On mobile platforms, the vehicle automatically accelerates. Touch the left and
|
||||
right edges of the screen to steer. Touch the middle of the screen to
|
||||
brake/reverse (this also temporarily stops acceleration).
|
||||
|
||||
Language: GDScript
|
||||
|
||||
Renderer: Forward+ on desktop, Mobile on mobile
|
||||
|
||||
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/524
|
||||
|
||||
## How does it work?
|
||||
|
||||
The base vehicle uses a
|
||||
[`VehicleBody`](https://docs.godotengine.org/en/latest/classes/class_vehiclebody.html)
|
||||
node. The trailer truck is tied together using a
|
||||
[`ConeJointTwist`](https://docs.godotengine.org/en/latest/classes/class_conetwistjoint.html)
|
||||
node, and the tow truck is tried together using a chain made of
|
||||
[`RigidBody`](https://docs.godotengine.org/en/latest/classes/class_rigidbody.html)
|
||||
nodes which are pinned together using
|
||||
[`PinJoint`](https://docs.godotengine.org/en/latest/classes/class_pinjoint.html) nodes.
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
47
car_select/car_select.gd
Normal file
|
@ -0,0 +1,47 @@
|
|||
extends Control
|
||||
|
||||
var town: Node3D = null
|
||||
|
||||
func _ready():
|
||||
# Automatically focus the first item for gamepad accessibility.
|
||||
$HBoxContainer/MiniVan.grab_focus.call_deferred()
|
||||
|
||||
func _process(_delta: float):
|
||||
if Input.is_action_just_pressed(&"back"):
|
||||
_on_back_pressed()
|
||||
|
||||
|
||||
func _load_scene(car_scene: PackedScene):
|
||||
var car: Node3D = car_scene.instantiate()
|
||||
car.name = "car"
|
||||
town = preload("res://town/town_scene.tscn").instantiate()
|
||||
town.get_node(^"InstancePos").add_child(car)
|
||||
town.get_node(^"Spedometer").car_body = car.get_child(0)
|
||||
town.get_node(^"Back").pressed.connect(_on_back_pressed)
|
||||
|
||||
get_parent().add_child(town)
|
||||
hide()
|
||||
|
||||
|
||||
func _on_back_pressed():
|
||||
if is_instance_valid(town):
|
||||
# Currently in the town, go back to main menu.
|
||||
town.queue_free()
|
||||
show()
|
||||
# Automatically focus the first item for gamepad accessibility.
|
||||
$HBoxContainer/MiniVan.grab_focus.call_deferred()
|
||||
else:
|
||||
# In main menu, exit the game.
|
||||
get_tree().quit()
|
||||
|
||||
|
||||
func _on_mini_van_pressed():
|
||||
_load_scene(preload("res://vehicles/car_base.tscn"))
|
||||
|
||||
|
||||
func _on_trailer_truck_pressed():
|
||||
_load_scene(preload("res://vehicles/trailer_truck.tscn"))
|
||||
|
||||
|
||||
func _on_tow_truck_pressed():
|
||||
_load_scene(preload("res://vehicles/tow_truck.tscn"))
|
80
car_select/car_select.tscn
Normal file
|
@ -0,0 +1,80 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://ckvqraq6j1okh"]
|
||||
|
||||
[ext_resource type="Script" path="res://car_select/car_select.gd" id="1"]
|
||||
[ext_resource type="Texture2D" uid="uid://bh7b4n4lg1uqt" path="res://car_select/choose_van.png" id="2"]
|
||||
[ext_resource type="Texture2D" uid="uid://hvkcmpdq1t0k" path="res://car_select/choose_trailer.png" id="3"]
|
||||
[ext_resource type="Texture2D" uid="uid://de7itkxhl0u28" path="res://car_select/choose_tow.png" id="4"]
|
||||
|
||||
[sub_resource type="FontVariation" id="FontVariation_hqcvw"]
|
||||
variation_embolden = 1.0
|
||||
variation_transform = Transform2D(1, 0.2, 0, 1, 0, 0)
|
||||
spacing_glyph = -1
|
||||
spacing_space = 4
|
||||
|
||||
[node name="CarSelect" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -512.0
|
||||
offset_top = -300.0
|
||||
offset_right = 512.0
|
||||
offset_bottom = 300.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 2
|
||||
size_flags_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
layout_mode = 0
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="MiniVan" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 4
|
||||
icon = ExtResource("2")
|
||||
|
||||
[node name="TrailerTruck" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 4
|
||||
icon = ExtResource("3")
|
||||
|
||||
[node name="TowTruck" type="Button" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
size_flags_vertical = 4
|
||||
icon = ExtResource("4")
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -180.0
|
||||
offset_top = 32.0
|
||||
offset_right = 180.0
|
||||
offset_bottom = 123.0
|
||||
grow_horizontal = 2
|
||||
theme_override_colors/font_color = Color(0.494118, 0.858824, 0.960784, 1)
|
||||
theme_override_colors/font_shadow_color = Color(0, 0.25098, 1, 0.12549)
|
||||
theme_override_colors/font_outline_color = Color(0.105882, 0.278431, 0.47451, 1)
|
||||
theme_override_constants/shadow_offset_x = 6
|
||||
theme_override_constants/shadow_offset_y = 6
|
||||
theme_override_constants/outline_size = 38
|
||||
theme_override_constants/shadow_outline_size = 38
|
||||
theme_override_fonts/font = SubResource("FontVariation_hqcvw")
|
||||
theme_override_font_sizes/font_size = 64
|
||||
text = "Truck Town"
|
||||
|
||||
[connection signal="pressed" from="HBoxContainer/MiniVan" to="." method="_on_mini_van_pressed"]
|
||||
[connection signal="pressed" from="HBoxContainer/TrailerTruck" to="." method="_on_trailer_truck_pressed"]
|
||||
[connection signal="pressed" from="HBoxContainer/TowTruck" to="." method="_on_tow_truck_pressed"]
|
BIN
car_select/choose_tow.png
Normal file
After Width: | Height: | Size: 45 KiB |
34
car_select/choose_tow.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://de7itkxhl0u28"
|
||||
path="res://.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://car_select/choose_tow.png"
|
||||
dest_files=["res://.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
BIN
car_select/choose_trailer.png
Normal file
After Width: | Height: | Size: 43 KiB |
34
car_select/choose_trailer.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://hvkcmpdq1t0k"
|
||||
path="res://.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://car_select/choose_trailer.png"
|
||||
dest_files=["res://.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
BIN
car_select/choose_van.png
Normal file
After Width: | Height: | Size: 36 KiB |
34
car_select/choose_van.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bh7b4n4lg1uqt"
|
||||
path="res://.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://car_select/choose_van.png"
|
||||
dest_files=["res://.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
BIN
icon.webp
Normal file
After Width: | Height: | Size: 18 KiB |
34
icon.webp.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://brwp8bimc75uu"
|
||||
path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.webp"
|
||||
dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
8
node_3d.tscn
Normal file
|
@ -0,0 +1,8 @@
|
|||
[gd_scene format=3 uid="uid://cnxuru6kiplw6"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(0.866582, -0.139038, 0.479274, -0.0571974, 0.926401, 0.372169, -0.495746, -0.349928, 0.79485, 1.0281, 1.06217, 2.31513)
|
153
project.godot
|
@ -10,11 +10,156 @@ config_version=5
|
|||
|
||||
[application]
|
||||
|
||||
config/name="TestProject"
|
||||
run/main_scene="res://node_3d.tscn"
|
||||
config/name="Truck Town"
|
||||
config/description="This is a demo implementing different types of trucks of
|
||||
varying complexity using vehicle physics."
|
||||
config/tags=PackedStringArray("3d", "demo", "official", "physics", "vehicle")
|
||||
run/main_scene="res://car_select/car_select.tscn"
|
||||
config/features=PackedStringArray("4.2")
|
||||
config/icon="res://icon.png"
|
||||
config/icon="res://icon.webp"
|
||||
|
||||
[display]
|
||||
|
||||
window/stretch/mode="canvas_items"
|
||||
window/stretch/aspect="expand"
|
||||
|
||||
[input]
|
||||
|
||||
ui_accept={
|
||||
"deadzone": 0.2,
|
||||
"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":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, 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":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_select={
|
||||
"deadzone": 0.2,
|
||||
"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":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, 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":0,"physical_keycode":4194309,"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)
|
||||
]
|
||||
}
|
||||
ui_cancel={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
|
||||
, 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":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_focus_next={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_focus_prev={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_left={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"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)
|
||||
]
|
||||
}
|
||||
ui_right={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":15,"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_up={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
ui_down={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
ui_page_up={
|
||||
"deadzone": 0.2,
|
||||
"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":4194323,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_page_down={
|
||||
"deadzone": 0.2,
|
||||
"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":4194324,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
accelerate={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":87,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, 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":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
reverse={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":83,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"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)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
turn_left={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":65,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, 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":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
turn_right={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":68,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, 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":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
cycle_speedometer_unit={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":85,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":4,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
back={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
cycle_camera={
|
||||
"deadzone": 0.2,
|
||||
"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":0,"physical_keycode":67,"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)
|
||||
]
|
||||
}
|
||||
|
||||
[physics]
|
||||
|
||||
common/physics_ticks_per_second=120
|
||||
|
||||
[rendering]
|
||||
|
||||
environment/default_environment="res://default_env.tres"
|
||||
textures/vram_compression/import_etc2_astc=true
|
||||
lights_and_shadows/directional_shadow/size=8192
|
||||
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=3
|
||||
lights_and_shadows/directional_shadow/soft_shadow_filter_quality.mobile=1
|
||||
textures/default_filters/anisotropic_filtering_level=4
|
||||
textures/default_filters/texture_mipmap_bias=-0.5
|
||||
textures/decals/filter=1
|
||||
environment/defaults/default_clear_color=Color(0.133333, 0.133333, 0.133333, 1)
|
||||
anti_aliasing/quality/msaa_3d=2
|
||||
anti_aliasing/quality/use_debanding=true
|
||||
anti_aliasing/quality/msaa_3d.mobile=0
|
||||
scaling_3d/scale.mobile=0.67
|
||||
|
|
0
screenshots/.gdignore
Normal file
BIN
screenshots/tow.png
Normal file
After Width: | Height: | Size: 686 KiB |
BIN
screenshots/trailer.png
Normal file
After Width: | Height: | Size: 768 KiB |
BIN
screenshots/truck_town.webp
Normal file
After Width: | Height: | Size: 242 KiB |
39
spedometer.gd
Normal file
|
@ -0,0 +1,39 @@
|
|||
extends Button
|
||||
|
||||
enum SpeedUnit {
|
||||
METERS_PER_SECOND,
|
||||
KILOMETERS_PER_HOUR,
|
||||
MILES_PER_HOUR,
|
||||
}
|
||||
|
||||
@export var speed_unit: SpeedUnit = SpeedUnit.METERS_PER_SECOND
|
||||
|
||||
var gradient := Gradient.new()
|
||||
var car_body: VehicleBody3D
|
||||
|
||||
|
||||
func _ready():
|
||||
# The start and end points (offset 0.0 and 1.0) are already defined in a Gradient
|
||||
# resource on creation. Override their colors and only create one new point.
|
||||
gradient.set_color(0, Color(0.7, 0.9, 1.0))
|
||||
gradient.set_color(1, Color(1.0, 0.3, 0.1))
|
||||
gradient.add_point(0.2, Color(1.0, 1.0, 1.0))
|
||||
|
||||
|
||||
func _process(_delta):
|
||||
var speed := car_body.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"
|
||||
|
||||
# Change speedometer color depending on speed in m/s (regardless of unit).
|
||||
add_theme_color_override("font_color", gradient.sample(remap(car_body.linear_velocity.length(), 0.0, 30.0, 0.0, 1.0)))
|
||||
|
||||
|
||||
func _on_spedometer_pressed():
|
||||
speed_unit = ((speed_unit + 1) % SpeedUnit.size()) as SpeedUnit
|
10
town/materials/cement.tres
Normal file
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bdjiubscxkdn6"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dkv00eeo3yu2w" path="res://town/materials/cement.webp" id="1_but66"]
|
||||
|
||||
[resource]
|
||||
resource_name = "Cement"
|
||||
albedo_texture = ExtResource("1_but66")
|
||||
roughness = 0.8
|
||||
uv1_scale = Vector3(2, 2, 2)
|
||||
texture_filter = 5
|
BIN
town/materials/cement.webp
Normal file
After Width: | Height: | Size: 1.6 MiB |
34
town/materials/cement.webp.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkv00eeo3yu2w"
|
||||
path="res://.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://town/materials/cement.webp"
|
||||
dest_files=["res://.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
10
town/materials/grass.tres
Normal file
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c71ovlrgdfif5"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://b2g4dq0w72e68" path="res://town/materials/grass.webp" id="1_5bi3i"]
|
||||
|
||||
[resource]
|
||||
resource_name = "Grass"
|
||||
albedo_texture = ExtResource("1_5bi3i")
|
||||
roughness = 0.8
|
||||
uv1_scale = Vector3(2, 2, 2)
|
||||
texture_filter = 5
|
BIN
town/materials/grass.webp
Normal file
After Width: | Height: | Size: 1.8 MiB |
34
town/materials/grass.webp.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b2g4dq0w72e68"
|
||||
path="res://.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://town/materials/grass.webp"
|
||||
dest_files=["res://.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
423
town/town_scene.tscn
Normal file
BIN
town/truck_town.glb
Normal file
97
town/truck_town.glb.import
Normal file
|
@ -0,0 +1,97 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dfdgytsvtqxwv"
|
||||
path="res://.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://town/truck_town.glb"
|
||||
dest_files=["res://.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type="Node3D"
|
||||
nodes/root_name="TruckTown"
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=false
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=false
|
||||
animation/import=false
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"grass": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://town/materials/grass.tres"
|
||||
},
|
||||
"road": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://town/materials/cement.tres"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"PATH:Grass": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House01": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House02": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House03": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House04": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House05": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House06": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House07": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House08": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House09": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:House10": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
},
|
||||
"PATH:Road": {
|
||||
"decomposition/advanced": true,
|
||||
"decomposition/precision": 10,
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=0
|
||||
gltf/embedded_image_handling=1
|
BIN
vehicles/blob_shadow.png
Normal file
After Width: | Height: | Size: 654 B |
34
vehicles/blob_shadow.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bju75l2w3r7vq"
|
||||
path="res://.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://vehicles/blob_shadow.png"
|
||||
dest_files=["res://.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
191
vehicles/car_base.tscn
Normal file
|
@ -0,0 +1,191 @@
|
|||
[gd_scene load_steps=19 format=3 uid="uid://c1uai3rvx8hul"]
|
||||
|
||||
[ext_resource type="Script" path="res://vehicles/vehicle.gd" id="1_r806m"]
|
||||
[ext_resource type="Texture2D" uid="uid://d4ostmqwgytk" path="res://vehicles/particle_smoke.png" id="2_1gkvk"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://bqrwin8ccgptt" path="res://vehicles/meshes/wheel.res" id="2_3cqaw"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://b2xi556mwp7ue" path="res://vehicles/meshes/minivan.res" id="3_cqia8"]
|
||||
[ext_resource type="Script" path="res://vehicles/follow_camera.gd" id="4_6igu8"]
|
||||
[ext_resource type="AudioStream" uid="uid://cb7wvsd6vygd3" path="res://vehicles/engine.wav" id="5_m8g7o"]
|
||||
[ext_resource type="AudioStream" uid="uid://sy2li7u35867" path="res://vehicles/impact_1.wav" id="6_kq567"]
|
||||
[ext_resource type="AudioStream" uid="uid://bf0h7s81yr8nj" path="res://vehicles/impact_2.wav" id="7_e8n8v"]
|
||||
[ext_resource type="AudioStream" uid="uid://sun2n8a4xapl" path="res://vehicles/impact_3.wav" id="8_mh5uv"]
|
||||
[ext_resource type="AudioStream" uid="uid://dpbayeeufya21" path="res://vehicles/impact_4.wav" id="9_bomp1"]
|
||||
[ext_resource type="Texture2D" uid="uid://bju75l2w3r7vq" path="res://vehicles/blob_shadow.png" id="11_3ryw5"]
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_l7i2k"]
|
||||
friction = 0.5
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_x74tc"]
|
||||
size = Vector3(0.954078, 1, 2.32662)
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_bpr2q"]
|
||||
random_pitch = 1.05
|
||||
random_volume_offset_db = 2.0
|
||||
streams_count = 4
|
||||
stream_0/stream = ExtResource("6_kq567")
|
||||
stream_0/weight = 1.0
|
||||
stream_1/stream = ExtResource("7_e8n8v")
|
||||
stream_1/weight = 1.0
|
||||
stream_2/stream = ExtResource("8_mh5uv")
|
||||
stream_2/weight = 1.0
|
||||
stream_3/stream = ExtResource("9_bomp1")
|
||||
stream_3/weight = 1.0
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fuuj3"]
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(0.462745, 0.462745, 0.462745, 0.501961)
|
||||
albedo_texture = ExtResource("2_1gkvk")
|
||||
billboard_mode = 3
|
||||
billboard_keep_scale = true
|
||||
particles_anim_h_frames = 1
|
||||
particles_anim_v_frames = 1
|
||||
particles_anim_loop = false
|
||||
proximity_fade_enabled = true
|
||||
proximity_fade_distance = 0.5
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_30wks"]
|
||||
material = SubResource("StandardMaterial3D_fuuj3")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_4j5vd"]
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_p5xtl"]
|
||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
||||
|
||||
[node name="CarBase" type="Node3D"]
|
||||
|
||||
[node name="Body" type="VehicleBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -0.0955184)
|
||||
center_of_mass_mode = 1
|
||||
physics_material_override = SubResource("PhysicsMaterial_l7i2k")
|
||||
script = ExtResource("1_r806m")
|
||||
|
||||
[node name="Wheel1" type="VehicleWheel3D" parent="Body"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.115169, 1.10416)
|
||||
use_as_traction = true
|
||||
use_as_steering = true
|
||||
wheel_roll_influence = 0.4
|
||||
wheel_radius = 0.25
|
||||
wheel_friction_slip = 1.0
|
||||
suspension_travel = 2.0
|
||||
suspension_stiffness = 40.0
|
||||
damping_compression = 0.88
|
||||
|
||||
[node name="Wheel1" type="MeshInstance3D" parent="Body/Wheel1"]
|
||||
layers = 2
|
||||
gi_mode = 2
|
||||
mesh = ExtResource("2_3cqaw")
|
||||
|
||||
[node name="Wheel2" type="VehicleWheel3D" parent="Body"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.115169, -0.783403)
|
||||
use_as_traction = true
|
||||
wheel_roll_influence = 0.4
|
||||
wheel_radius = 0.25
|
||||
wheel_friction_slip = 1.0
|
||||
suspension_travel = 2.0
|
||||
suspension_stiffness = 40.0
|
||||
damping_compression = 0.88
|
||||
|
||||
[node name="Wheel2" type="MeshInstance3D" parent="Body/Wheel2"]
|
||||
layers = 2
|
||||
gi_mode = 2
|
||||
mesh = ExtResource("2_3cqaw")
|
||||
|
||||
[node name="Wheel3" type="VehicleWheel3D" parent="Body"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.115169, 1.10416)
|
||||
use_as_traction = true
|
||||
use_as_steering = true
|
||||
wheel_roll_influence = 0.4
|
||||
wheel_radius = 0.25
|
||||
wheel_friction_slip = 1.0
|
||||
suspension_travel = 2.0
|
||||
suspension_stiffness = 40.0
|
||||
damping_compression = 0.88
|
||||
|
||||
[node name="Wheel3" type="MeshInstance3D" parent="Body/Wheel3"]
|
||||
layers = 2
|
||||
gi_mode = 2
|
||||
mesh = ExtResource("2_3cqaw")
|
||||
|
||||
[node name="Wheel4" type="VehicleWheel3D" parent="Body"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.115169, -0.783403)
|
||||
use_as_traction = true
|
||||
wheel_roll_influence = 0.4
|
||||
wheel_radius = 0.25
|
||||
wheel_friction_slip = 1.0
|
||||
suspension_travel = 2.0
|
||||
suspension_stiffness = 40.0
|
||||
damping_compression = 0.88
|
||||
|
||||
[node name="Wheel4" type="MeshInstance3D" parent="Body/Wheel4"]
|
||||
layers = 2
|
||||
gi_mode = 2
|
||||
mesh = ExtResource("2_3cqaw")
|
||||
|
||||
[node name="Body" type="MeshInstance3D" parent="Body"]
|
||||
layers = 2
|
||||
gi_mode = 2
|
||||
mesh = ExtResource("3_cqia8")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Body"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.588269, 0.0774262)
|
||||
shape = SubResource("BoxShape3D_x74tc")
|
||||
|
||||
[node name="CameraBase" type="Node3D" parent="Body"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.97449, 0)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="Body/CameraBase"]
|
||||
transform = Transform3D(-1, 2.11495e-08, -8.48259e-08, 0, 0.970296, 0.241922, 8.74228e-08, 0.241922, -0.970296, 0, 2.032, -4.394)
|
||||
fov = 74.0
|
||||
near = 0.1
|
||||
script = ExtResource("4_6igu8")
|
||||
min_distance = 4.0
|
||||
max_distance = 5.0
|
||||
height = 1.25
|
||||
|
||||
[node name="EngineSound" type="AudioStreamPlayer3D" parent="Body"]
|
||||
stream = ExtResource("5_m8g7o")
|
||||
pitch_scale = 0.05
|
||||
autoplay = true
|
||||
attenuation_filter_cutoff_hz = 20500.0
|
||||
|
||||
[node name="ImpactSound" type="AudioStreamPlayer3D" parent="Body"]
|
||||
stream = SubResource("AudioStreamRandomizer_bpr2q")
|
||||
volume_db = -9.0
|
||||
max_polyphony = 3
|
||||
attenuation_filter_cutoff_hz = 20500.0
|
||||
|
||||
[node name="CPUParticles3D" type="CPUParticles3D" parent="Body"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.201696, -0.022867, -1.10448)
|
||||
amount = 125
|
||||
lifetime = 1.25
|
||||
mesh = SubResource("QuadMesh_30wks")
|
||||
direction = Vector3(0, 1, -0.5)
|
||||
gravity = Vector3(0, 0, 0)
|
||||
initial_velocity_min = 1.0
|
||||
initial_velocity_max = 1.0
|
||||
damping_min = 0.05
|
||||
damping_max = 0.05
|
||||
angle_max = 360.0
|
||||
scale_amount_curve = SubResource("Curve_4j5vd")
|
||||
color_ramp = SubResource("Gradient_p5xtl")
|
||||
|
||||
[node name="BlobShadow" type="Decal" parent="Body"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.05)
|
||||
size = Vector3(1.6, 4, 3)
|
||||
texture_albedo = ExtResource("11_3ryw5")
|
||||
upper_fade = 2.0
|
||||
lower_fade = 1.0
|
||||
cull_mask = 1048573
|
||||
|
||||
[node name="AudioListener3D" type="AudioListener3D" parent="Body"]
|
||||
current = true
|
||||
|
||||
[node name="InteriorCameraPosition" type="Marker3D" parent="Body"]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.9, 0.3)
|
||||
|
||||
[node name="TopDownCameraPosition" type="Marker3D" parent="Body"]
|
||||
transform = Transform3D(-1, 8.74228e-08, 0, 3.82137e-15, 4.37114e-08, 1, 8.74228e-08, 1, -4.37114e-08, 0.00169557, 15.7771, 0.0955178)
|
BIN
vehicles/engine.wav
Normal file
24
vehicles/engine.wav.import
Normal file
|
@ -0,0 +1,24 @@
|
|||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://cb7wvsd6vygd3"
|
||||
path="res://.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://vehicles/engine.wav"
|
||||
dest_files=["res://.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.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
|
91
vehicles/follow_camera.gd
Normal file
|
@ -0,0 +1,91 @@
|
|||
extends Camera3D
|
||||
|
||||
# Higher values cause the field of view to increase more at high speeds.
|
||||
const FOV_SPEED_FACTOR = 60
|
||||
|
||||
# Higher values cause the field of view to adapt to speed changes faster.
|
||||
const FOV_SMOOTH_FACTOR = 0.2
|
||||
|
||||
# Don't change FOV if moving below this speed. This prevents shadows from flickering when driving slowly.
|
||||
const FOV_CHANGE_MIN_SPEED = 0.05
|
||||
|
||||
@export var min_distance := 2.0
|
||||
@export var max_distance := 4.0
|
||||
@export var angle_v_adjust := 0.0
|
||||
@export var height := 1.5
|
||||
|
||||
var camera_type := CameraType.EXTERIOR
|
||||
|
||||
var initial_transform := transform
|
||||
|
||||
var base_fov := fov
|
||||
|
||||
# The field of view to smoothly interpolate to.
|
||||
var desired_fov := fov
|
||||
|
||||
# Position on the last physics frame (used to measure speed).
|
||||
@onready var previous_position := global_position
|
||||
|
||||
enum CameraType {
|
||||
EXTERIOR,
|
||||
INTERIOR,
|
||||
TOP_DOWN,
|
||||
MAX, # Represents the size of the CameraType enum.
|
||||
}
|
||||
|
||||
func _ready():
|
||||
update_camera()
|
||||
|
||||
|
||||
func _input(event):
|
||||
if event.is_action_pressed(&"cycle_camera"):
|
||||
camera_type = wrapi(camera_type + 1, 0, CameraType.MAX) as CameraType
|
||||
update_camera()
|
||||
|
||||
|
||||
func _physics_process(_delta):
|
||||
if camera_type == CameraType.EXTERIOR:
|
||||
var target: Vector3 = get_parent().global_transform.origin
|
||||
var pos := global_transform.origin
|
||||
|
||||
var from_target := pos - target
|
||||
|
||||
# Check ranges.
|
||||
if from_target.length() < min_distance:
|
||||
from_target = from_target.normalized() * min_distance
|
||||
elif from_target.length() > max_distance:
|
||||
from_target = from_target.normalized() * max_distance
|
||||
|
||||
from_target.y = height
|
||||
|
||||
pos = target + from_target
|
||||
|
||||
look_at_from_position(pos, target, Vector3.UP)
|
||||
elif camera_type == CameraType.TOP_DOWN:
|
||||
position.x = get_parent().global_transform.origin.x
|
||||
position.z = get_parent().global_transform.origin.z
|
||||
# Force rotation to prevent camera from being slanted after switching cameras while on a slope.
|
||||
rotation_degrees = Vector3(270, 180, 0)
|
||||
|
||||
# Dynamic field of view based on car speed, with smoothing to prevent sudden changes on impact.
|
||||
desired_fov = clamp(base_fov + (abs(global_position.length() - previous_position.length()) - FOV_CHANGE_MIN_SPEED) * FOV_SPEED_FACTOR, base_fov, 100)
|
||||
fov = lerpf(fov, desired_fov, FOV_SMOOTH_FACTOR)
|
||||
|
||||
# Turn a little up or down
|
||||
transform.basis = Basis(transform.basis[0], deg_to_rad(angle_v_adjust)) * transform.basis
|
||||
|
||||
previous_position = global_position
|
||||
|
||||
|
||||
func update_camera():
|
||||
match camera_type:
|
||||
CameraType.EXTERIOR:
|
||||
transform = initial_transform
|
||||
CameraType.INTERIOR:
|
||||
global_transform = get_node(^"../../InteriorCameraPosition").global_transform
|
||||
CameraType.TOP_DOWN:
|
||||
global_transform = get_node(^"../../TopDownCameraPosition").global_transform
|
||||
|
||||
# This detaches the camera transform from the parent spatial node, but only
|
||||
# for exterior and top-down cameras.
|
||||
set_as_top_level(camera_type != CameraType.INTERIOR)
|
24
vehicles/impact.wav.import
Normal file
|
@ -0,0 +1,24 @@
|
|||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://biwk66ryub3f1"
|
||||
path="res://.godot/imported/impact.wav-0e789bd7903e20aed8bed8918b465ad1.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://vehicles/impact.wav"
|
||||
dest_files=["res://.godot/imported/impact.wav-0e789bd7903e20aed8bed8918b465ad1.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=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=0
|
BIN
vehicles/impact_1.wav
Normal file
24
vehicles/impact_1.wav.import
Normal file
|
@ -0,0 +1,24 @@
|
|||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://sy2li7u35867"
|
||||
path="res://.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://vehicles/impact_1.wav"
|
||||
dest_files=["res://.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.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=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=0
|