diff --git a/.gitattribute b/.gitattribute new file mode 100644 index 0000000..9648f5f --- /dev/null +++ b/.gitattribute @@ -0,0 +1,6 @@ +*.gd eol=lf +*.tscn eol=lf +*.material eol=lf +*.cfg eol=lf +*.godot eol=lf +*.import eol=lf diff --git a/.godot/editor/create_recent.Node b/.godot/editor/create_recent.Node new file mode 100644 index 0000000..c902293 --- /dev/null +++ b/.godot/editor/create_recent.Node @@ -0,0 +1,2 @@ +Camera3D +CSGBox3D diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg new file mode 100644 index 0000000..1603e4f --- /dev/null +++ b/.godot/editor/editor_layout.cfg @@ -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="" diff --git a/.godot/editor/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample-folding-be3310776924ea3fea47fff1d5cf2371.cfg b/.godot/editor/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample-folding-be3310776924ea3fea47fff1d5cf2371.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample-folding-be3310776924ea3fea47fff1d5cf2371.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/favorites.Node b/.godot/editor/favorites.Node new file mode 100644 index 0000000..e69de29 diff --git a/.godot/editor/filesystem_cache8 b/.godot/editor/filesystem_cache8 index b275358..246e37a 100644 --- a/.godot/editor/filesystem_cache8 +++ b/.godot/editor/filesystem_cache8 @@ -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::::<><>:: diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4 new file mode 100644 index 0000000..c48d8ed --- /dev/null +++ b/.godot/editor/filesystem_update4 @@ -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 diff --git a/.godot/editor/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample-folding-e50e391bcec6e4ceff0f2f1e27eaf64c.cfg b/.godot/editor/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample-folding-e50e391bcec6e4ceff0f2f1e27eaf64c.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample-folding-e50e391bcec6e4ceff0f2f1e27eaf64c.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample-folding-552c6f1b79bcaa2860d4dd971c151bbd.cfg b/.godot/editor/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample-folding-552c6f1b79bcaa2860d4dd971c151bbd.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample-folding-552c6f1b79bcaa2860d4dd971c151bbd.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample-folding-5a5c11825043e8fec296f8bbabaa6288.cfg b/.godot/editor/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample-folding-5a5c11825043e8fec296f8bbabaa6288.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample-folding-5a5c11825043e8fec296f8bbabaa6288.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample-folding-2500317df4a1677d356ffa7c239b056c.cfg b/.godot/editor/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample-folding-2500317df4a1677d356ffa7c239b056c.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample-folding-2500317df4a1677d356ffa7c239b056c.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn-folding-17f7cd5b179e4536ec89e624fafcb101.cfg b/.godot/editor/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn-folding-17f7cd5b179e4536ec89e624fafcb101.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn-folding-17f7cd5b179e4536ec89e624fafcb101.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/minivan.res-folding-81d6b528b5025c3f7df874c3d31f78f9.cfg b/.godot/editor/minivan.res-folding-81d6b528b5025c3f7df874c3d31f78f9.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/minivan.res-folding-81d6b528b5025c3f7df874c3d31f78f9.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/node_3d.tscn-editstate-14584830dbc22d3f76a596eed5f4948e.cfg b/.godot/editor/node_3d.tscn-editstate-14584830dbc22d3f76a596eed5f4948e.cfg new file mode 100644 index 0000000..906f287 --- /dev/null +++ b/.godot/editor/node_3d.tscn-editstate-14584830dbc22d3f76a596eed5f4948e.cfg @@ -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")]) diff --git a/.godot/editor/node_3d.tscn-folding-14584830dbc22d3f76a596eed5f4948e.cfg b/.godot/editor/node_3d.tscn-folding-14584830dbc22d3f76a596eed5f4948e.cfg new file mode 100644 index 0000000..1d019fa --- /dev/null +++ b/.godot/editor/node_3d.tscn-folding-14584830dbc22d3f76a596eed5f4948e.cfg @@ -0,0 +1,5 @@ +[folding] + +node_unfolds=[] +resource_unfolds=[] +nodes_folded=[] diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg index 77704d7..1d2cc8f 100644 --- a/.godot/editor/project_metadata.cfg +++ b/.godot/editor/project_metadata.cfg @@ -20,4 +20,4 @@ Camera3D:scale=true [recent_files] -scenes=["res://node_3d.tscn"] +scenes=["res://town/town_scene.tscn", "res://node_3d.tscn"] diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg new file mode 100644 index 0000000..e69de29 diff --git a/.godot/editor/tow_truck.res-folding-496bb4bc87a6c7b122f86e589d016825.cfg b/.godot/editor/tow_truck.res-folding-496bb4bc87a6c7b122f86e589d016825.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/tow_truck.res-folding-496bb4bc87a6c7b122f86e589d016825.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/town_scene.tscn-folding-7a91fd739b7abc563d418228362712ea.cfg b/.godot/editor/town_scene.tscn-folding-7a91fd739b7abc563d418228362712ea.cfg new file mode 100644 index 0000000..6403e5a --- /dev/null +++ b/.godot/editor/town_scene.tscn-folding-7a91fd739b7abc563d418228362712ea.cfg @@ -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=[] diff --git a/.godot/editor/truck_cab.res-folding-01a5581fb83c02aec55186569b48ff31.cfg b/.godot/editor/truck_cab.res-folding-01a5581fb83c02aec55186569b48ff31.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/truck_cab.res-folding-01a5581fb83c02aec55186569b48ff31.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn-folding-7e91ce2a8e37f1140f2a491da8d78040.cfg b/.godot/editor/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn-folding-7e91ce2a8e37f1140f2a491da8d78040.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn-folding-7e91ce2a8e37f1140f2a491da8d78040.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/truck_trailer.res-folding-01045088c3087ae07f79a26b2003c9a8.cfg b/.godot/editor/truck_trailer.res-folding-01045088c3087ae07f79a26b2003c9a8.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/truck_trailer.res-folding-01045088c3087ae07f79a26b2003c9a8.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/wheel.res-folding-a6322e613afbf410bf25bc3d5b0743c5.cfg b/.godot/editor/wheel.res-folding-a6322e613afbf410bf25bc3d5b0743c5.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/wheel.res-folding-a6322e613afbf410bf25bc3d5b0743c5.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/global_script_class_cache.cfg b/.godot/global_script_class_cache.cfg index 32c2394..1775a2f 100644 --- a/.godot/global_script_class_cache.cfg +++ b/.godot/global_script_class_cache.cfg @@ -1 +1 @@ -list=[] +list=Array[Dictionary]([]) diff --git a/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex b/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex new file mode 100644 index 0000000..7280320 Binary files /dev/null and b/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex differ diff --git a/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.md5 b/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.md5 new file mode 100644 index 0000000..182fae1 --- /dev/null +++ b/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.md5 @@ -0,0 +1,3 @@ +source_md5="ce7eb00cb5b7e971d0f336f1814f6cb5" +dest_md5="c1b9b00f60f8f30a4b541575d5152e44" + diff --git a/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex b/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex new file mode 100644 index 0000000..fa0f68b Binary files /dev/null and b/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex differ diff --git a/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.md5 b/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.md5 new file mode 100644 index 0000000..8d46f33 --- /dev/null +++ b/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.md5 @@ -0,0 +1,3 @@ +source_md5="5bd7eca1a6164956bbece83554dd8ddb" +dest_md5="06dbde7fc0f5c2e83a282e48966e6883" + diff --git a/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex b/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex new file mode 100644 index 0000000..ebc757e Binary files /dev/null and b/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex differ diff --git a/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.md5 b/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.md5 new file mode 100644 index 0000000..27c95c8 --- /dev/null +++ b/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.md5 @@ -0,0 +1,3 @@ +source_md5="479a4a2bdbd40dea2f759750b535a1df" +dest_md5="1a04c36afa44aaa2b4aeb43dd16d9e02" + diff --git a/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex b/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex new file mode 100644 index 0000000..7a59c49 Binary files /dev/null and b/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex differ diff --git a/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.md5 b/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.md5 new file mode 100644 index 0000000..4ab19c4 --- /dev/null +++ b/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.md5 @@ -0,0 +1,3 @@ +source_md5="af4711e0c224d320d1b126cdf1c9e78e" +dest_md5="0449d7c86293a0efb65e17a5ec31cac0" + diff --git a/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex b/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex new file mode 100644 index 0000000..7342dff Binary files /dev/null and b/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex differ diff --git a/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.md5 b/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.md5 new file mode 100644 index 0000000..ec7a56f --- /dev/null +++ b/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.md5 @@ -0,0 +1,3 @@ +source_md5="655343634bfbabd4b2d99c8c463a9ad0" +dest_md5="6ce5f10dacbb8333bac0be3d9ec37117" + diff --git a/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.md5 b/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.md5 new file mode 100644 index 0000000..8c19dc5 --- /dev/null +++ b/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.md5 @@ -0,0 +1,3 @@ +source_md5="2f3a63b1a9bf2c6b68c6e1f1da74a47c" +dest_md5="572bf33710e6a39abfb327b41876fdf1" + diff --git a/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample b/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample new file mode 100644 index 0000000..36be46b Binary files /dev/null and b/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample differ diff --git a/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex b/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex new file mode 100644 index 0000000..6399773 Binary files /dev/null and b/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex differ diff --git a/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.md5 b/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.md5 new file mode 100644 index 0000000..eae8826 --- /dev/null +++ b/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.md5 @@ -0,0 +1,3 @@ +source_md5="3b4522e7349d3a0db51cd98c38c2ae61" +dest_md5="cf46b0999b4d6c18b1bb22e21964f66a" + diff --git a/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex b/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex new file mode 100644 index 0000000..f52ae0b Binary files /dev/null and b/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex differ diff --git a/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.md5 b/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.md5 new file mode 100644 index 0000000..bc59dc3 --- /dev/null +++ b/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.md5 @@ -0,0 +1,3 @@ +source_md5="c643e882af4e6519374d473f82c4c376" +dest_md5="54567e8184349899f35df040a7688464" + diff --git a/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.md5 b/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.md5 new file mode 100644 index 0000000..1534f87 --- /dev/null +++ b/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.md5 @@ -0,0 +1,3 @@ +source_md5="e30823d015b944e1a486719c4b5f1d65" +dest_md5="3e45e26908f4e1e0850c6d0bcca75c76" + diff --git a/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample b/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample new file mode 100644 index 0000000..36cb25f Binary files /dev/null and b/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample differ diff --git a/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.md5 b/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.md5 new file mode 100644 index 0000000..a64e743 --- /dev/null +++ b/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.md5 @@ -0,0 +1,3 @@ +source_md5="b15f64e9fd99e39e48e899737325ca24" +dest_md5="0fa9db8c95975174e542db5cdd9ec178" + diff --git a/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample b/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample new file mode 100644 index 0000000..8b081f8 Binary files /dev/null and b/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample differ diff --git a/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.md5 b/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.md5 new file mode 100644 index 0000000..e7bb43d --- /dev/null +++ b/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.md5 @@ -0,0 +1,3 @@ +source_md5="177fcd2d5799c2a019f058eeff123aef" +dest_md5="9e2b7f8c87e67a545e1777fe71d37663" + diff --git a/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample b/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample new file mode 100644 index 0000000..1f0376f Binary files /dev/null and b/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample differ diff --git a/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.md5 b/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.md5 new file mode 100644 index 0000000..5146d5c --- /dev/null +++ b/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.md5 @@ -0,0 +1,3 @@ +source_md5="d80e01b1b40b8e8484c6ecf178bb9ff6" +dest_md5="e5ca1eda74043251b3afdd11a9b9c142" + diff --git a/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample b/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample new file mode 100644 index 0000000..7277d2f Binary files /dev/null and b/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample differ diff --git a/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.md5 b/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.md5 new file mode 100644 index 0000000..927a643 --- /dev/null +++ b/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.md5 @@ -0,0 +1,3 @@ +source_md5="ea1ce24fc25c95dce0ea44ffa66f395c" +dest_md5="f0288c8425c63e291717a7561b74d992" + diff --git a/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn b/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn new file mode 100644 index 0000000..8a64066 Binary files /dev/null and b/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn differ diff --git a/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex b/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex new file mode 100644 index 0000000..8a20430 Binary files /dev/null and b/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex differ diff --git a/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.md5 b/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.md5 new file mode 100644 index 0000000..274a04e --- /dev/null +++ b/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.md5 @@ -0,0 +1,3 @@ +source_md5="a39ef986c315d3485bbd77beb1ef30c5" +dest_md5="8c2fd73e5fae42c988a3e824df6dfd4a" + diff --git a/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.md5 b/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.md5 new file mode 100644 index 0000000..d310198 --- /dev/null +++ b/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.md5 @@ -0,0 +1,3 @@ +source_md5="21bfa370823577a0f32b53df00b936df" +dest_md5="02e238c979992ec989041a56a36afe83" + diff --git a/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn b/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn new file mode 100644 index 0000000..09d553f Binary files /dev/null and b/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn differ diff --git a/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex b/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex new file mode 100644 index 0000000..ccc63bf Binary files /dev/null and b/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex differ diff --git a/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.md5 b/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.md5 new file mode 100644 index 0000000..cb395ef --- /dev/null +++ b/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.md5 @@ -0,0 +1,3 @@ +source_md5="63f10640a74da0424be95e4ad611d120" +dest_md5="9975c96d81f85d6bf9ceb131170e9dad" + diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1115cc727c3a2a745acd484b011f24aa1803884c.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1115cc727c3a2a745acd484b011f24aa1803884c.cache new file mode 100644 index 0000000..156a438 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1115cc727c3a2a745acd484b011f24aa1803884c.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/13a57bb6c53ab09d8002873d3713a3ce5d5d3441.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/13a57bb6c53ab09d8002873d3713a3ce5d5d3441.cache new file mode 100644 index 0000000..ae5b305 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/13a57bb6c53ab09d8002873d3713a3ce5d5d3441.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1d4895a8943bfcc67073363722bbbbf927ce59a5.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1d4895a8943bfcc67073363722bbbbf927ce59a5.cache new file mode 100644 index 0000000..10480f3 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1d4895a8943bfcc67073363722bbbbf927ce59a5.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1fc3cc477134af7fa5a8cd7f5a9ca964b54beb9f.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1fc3cc477134af7fa5a8cd7f5a9ca964b54beb9f.cache new file mode 100644 index 0000000..2cb2574 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1fc3cc477134af7fa5a8cd7f5a9ca964b54beb9f.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/e41f7b95ca910a39563719338b6433a45f7f9be8.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/e41f7b95ca910a39563719338b6433a45f7f9be8.cache new file mode 100644 index 0000000..83d988b Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/e41f7b95ca910a39563719338b6433a45f7f9be8.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/fe5513d3d4067307b98a5ae178be51d8d1382533.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/fe5513d3d4067307b98a5ae178be51d8d1382533.cache new file mode 100644 index 0000000..751b57f Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/fe5513d3d4067307b98a5ae178be51d8d1382533.cache differ diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin index b084ec8..39faca2 100644 Binary files a/.godot/uid_cache.bin and b/.godot/uid_cache.bin differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..5723ae2 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# Truck Town + +This is a demo implementing different types of trucks of +varying complexity using vehicle physics. + +Controls: + +- Up Arrow, W, Gamepad Right Trigger, Gamepad A/Cross: Accelerate +- Down Arrow, S, Gamepad Left Trigger, Gamepad B/Circle, Gamepad X/Square: Brake/reverse +- Left Arrow, Gamepad Left Stick, Gamepad D-Pad Left: Steer left +- Right Arrow, Gamepad Left Stick, Gamepad D-Pad Right: Steer right +- U, Gamepad Select, left-click speedometer: Change speedometer unit (m/s, km/h, mph) +- C, Gamepad Y/Triangle: Change camera (exterior, interior, top-down) +- Escape, Gamepad D-Pad Up: 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 + +![Screenshot](screenshots/truck_town.webp) diff --git a/car_select/car_select.gd b/car_select/car_select.gd new file mode 100644 index 0000000..c399d80 --- /dev/null +++ b/car_select/car_select.gd @@ -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")) diff --git a/car_select/car_select.tscn b/car_select/car_select.tscn new file mode 100644 index 0000000..4732971 --- /dev/null +++ b/car_select/car_select.tscn @@ -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"] diff --git a/car_select/choose_tow.png b/car_select/choose_tow.png new file mode 100644 index 0000000..f4060d0 Binary files /dev/null and b/car_select/choose_tow.png differ diff --git a/car_select/choose_tow.png.import b/car_select/choose_tow.png.import new file mode 100644 index 0000000..0224a39 --- /dev/null +++ b/car_select/choose_tow.png.import @@ -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 diff --git a/car_select/choose_trailer.png b/car_select/choose_trailer.png new file mode 100644 index 0000000..c5a036f Binary files /dev/null and b/car_select/choose_trailer.png differ diff --git a/car_select/choose_trailer.png.import b/car_select/choose_trailer.png.import new file mode 100644 index 0000000..ba3b1a3 --- /dev/null +++ b/car_select/choose_trailer.png.import @@ -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 diff --git a/car_select/choose_van.png b/car_select/choose_van.png new file mode 100644 index 0000000..e6ab1da Binary files /dev/null and b/car_select/choose_van.png differ diff --git a/car_select/choose_van.png.import b/car_select/choose_van.png.import new file mode 100644 index 0000000..a627ecb --- /dev/null +++ b/car_select/choose_van.png.import @@ -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 diff --git a/icon.webp b/icon.webp new file mode 100644 index 0000000..f6aae78 Binary files /dev/null and b/icon.webp differ diff --git a/icon.webp.import b/icon.webp.import new file mode 100644 index 0000000..cc29159 --- /dev/null +++ b/icon.webp.import @@ -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 diff --git a/node_3d.tscn b/node_3d.tscn new file mode 100644 index 0000000..429da8e --- /dev/null +++ b/node_3d.tscn @@ -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) diff --git a/project.godot b/project.godot index 4fca659..e1c7494 100644 --- a/project.godot +++ b/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 diff --git a/screenshots/.gdignore b/screenshots/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/screenshots/tow.png b/screenshots/tow.png new file mode 100644 index 0000000..3a3859c Binary files /dev/null and b/screenshots/tow.png differ diff --git a/screenshots/trailer.png b/screenshots/trailer.png new file mode 100644 index 0000000..cef43d9 Binary files /dev/null and b/screenshots/trailer.png differ diff --git a/screenshots/truck_town.webp b/screenshots/truck_town.webp new file mode 100644 index 0000000..39e003f Binary files /dev/null and b/screenshots/truck_town.webp differ diff --git a/spedometer.gd b/spedometer.gd new file mode 100644 index 0000000..7b77e84 --- /dev/null +++ b/spedometer.gd @@ -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 diff --git a/town/materials/cement.tres b/town/materials/cement.tres new file mode 100644 index 0000000..b7c62f3 --- /dev/null +++ b/town/materials/cement.tres @@ -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 diff --git a/town/materials/cement.webp b/town/materials/cement.webp new file mode 100644 index 0000000..cd70e21 Binary files /dev/null and b/town/materials/cement.webp differ diff --git a/town/materials/cement.webp.import b/town/materials/cement.webp.import new file mode 100644 index 0000000..c0cd93c --- /dev/null +++ b/town/materials/cement.webp.import @@ -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 diff --git a/town/materials/grass.tres b/town/materials/grass.tres new file mode 100644 index 0000000..8cafd37 --- /dev/null +++ b/town/materials/grass.tres @@ -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 diff --git a/town/materials/grass.webp b/town/materials/grass.webp new file mode 100644 index 0000000..cb69392 Binary files /dev/null and b/town/materials/grass.webp differ diff --git a/town/materials/grass.webp.import b/town/materials/grass.webp.import new file mode 100644 index 0000000..7b2cd77 --- /dev/null +++ b/town/materials/grass.webp.import @@ -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 diff --git a/town/town_scene.tscn b/town/town_scene.tscn new file mode 100644 index 0000000..7c20eea --- /dev/null +++ b/town/town_scene.tscn @@ -0,0 +1,423 @@ +[gd_scene load_steps=38 format=3 uid="uid://d0ygmqpylq0wy"] + +[ext_resource type="PackedScene" uid="uid://dfdgytsvtqxwv" path="res://town/truck_town.glb" id="1_x0dmm"] +[ext_resource type="Script" path="res://spedometer.gd" id="2"] +[ext_resource type="Texture2D" uid="uid://b2g4dq0w72e68" path="res://town/materials/grass.webp" id="4_cymw0"] +[ext_resource type="Material" uid="uid://bdjiubscxkdn6" path="res://town/materials/cement.tres" id="5_83ty7"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_2k12y"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_1gf0c"] +sky_material = SubResource("ProceduralSkyMaterial_2k12y") + +[sub_resource type="Environment" id="Environment_dauhq"] +background_mode = 2 +sky = SubResource("Sky_1gf0c") +tonemap_mode = 2 +tonemap_white = 6.0 +glow_intensity = 0.5 +glow_blend_mode = 1 +fog_enabled = true +fog_light_color = Color(0.62, 0.6014, 0.6014, 1) +fog_density = 0.0015 +fog_sky_affect = 0.0 + +[sub_resource type="InputEventAction" id="InputEventAction_a4722"] +action = &"cycle_speedometer_unit" + +[sub_resource type="Shortcut" id="Shortcut_msvqx"] +events = [SubResource("InputEventAction_a4722")] + +[sub_resource type="Gradient" id="Gradient_jks6h"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(1, 1, 1, 0.25098) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_m8ylb"] +gradient = SubResource("Gradient_jks6h") +width = 128 +height = 128 + +[sub_resource type="Gradient" id="Gradient_1rnu2"] +offsets = PackedFloat32Array(0.00645161) +colors = PackedColorArray(1, 0, 0, 0.25098) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_xu6xc"] +gradient = SubResource("Gradient_1rnu2") +width = 128 +height = 128 + +[sub_resource type="BoxMesh" id="BoxMesh_x3c0g"] +size = Vector3(4096, 1, 4096) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0ud3l"] +albedo_texture = ExtResource("4_cymw0") +roughness = 0.8 +uv1_scale = Vector3(128, 64, 1) +texture_filter = 5 + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_gearx"] +data = PackedVector3Array(-2048, 0.5, 2048, 2048, 0.5, 2048, -2048, -0.5, 2048, 2048, 0.5, 2048, 2048, -0.5, 2048, -2048, -0.5, 2048, 2048, 0.5, -2048, -2048, 0.5, -2048, 2048, -0.5, -2048, -2048, 0.5, -2048, -2048, -0.5, -2048, 2048, -0.5, -2048, 2048, 0.5, 2048, 2048, 0.5, -2048, 2048, -0.5, 2048, 2048, 0.5, -2048, 2048, -0.5, -2048, 2048, -0.5, 2048, -2048, 0.5, -2048, -2048, 0.5, 2048, -2048, -0.5, -2048, -2048, 0.5, 2048, -2048, -0.5, 2048, -2048, -0.5, -2048, 2048, 0.5, 2048, -2048, 0.5, 2048, 2048, 0.5, -2048, -2048, 0.5, 2048, -2048, 0.5, -2048, 2048, 0.5, -2048, -2048, -0.5, 2048, 2048, -0.5, 2048, -2048, -0.5, -2048, 2048, -0.5, 2048, 2048, -0.5, -2048, -2048, -0.5, -2048) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_g7q2f"] +data = PackedVector3Array(-2048, 0.5, 2048, 2048, 0.5, 2048, -2048, -0.5, 2048, 2048, 0.5, 2048, 2048, -0.5, 2048, -2048, -0.5, 2048, 2048, 0.5, -2048, -2048, 0.5, -2048, 2048, -0.5, -2048, -2048, 0.5, -2048, -2048, -0.5, -2048, 2048, -0.5, -2048, 2048, 0.5, 2048, 2048, 0.5, -2048, 2048, -0.5, 2048, 2048, 0.5, -2048, 2048, -0.5, -2048, 2048, -0.5, 2048, -2048, 0.5, -2048, -2048, 0.5, 2048, -2048, -0.5, -2048, -2048, 0.5, 2048, -2048, -0.5, 2048, -2048, -0.5, -2048, 2048, 0.5, 2048, -2048, 0.5, 2048, 2048, 0.5, -2048, -2048, 0.5, 2048, -2048, 0.5, -2048, 2048, 0.5, -2048, -2048, -0.5, 2048, 2048, -0.5, 2048, -2048, -0.5, -2048, 2048, -0.5, 2048, 2048, -0.5, -2048, -2048, -0.5, -2048) + +[sub_resource type="BoxMesh" id="BoxMesh_n528d"] +size = Vector3(1990, 1, 93.75) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aijyr"] +albedo_texture = ExtResource("4_cymw0") +roughness = 0.8 +uv1_scale = Vector3(128, 2, 1) +texture_filter = 5 + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_mb5rx"] +data = PackedVector3Array(-995, 0.5, 47.017, 995, 0.5, 47.017, -995, -0.5, 47.017, 995, 0.5, 47.017, 995, -0.5, 47.017, -995, -0.5, 47.017, 995, 0.5, -47.017, -995, 0.5, -47.017, 995, -0.5, -47.017, -995, 0.5, -47.017, -995, -0.5, -47.017, 995, -0.5, -47.017, 995, 0.5, 47.017, 995, 0.5, -47.017, 995, -0.5, 47.017, 995, 0.5, -47.017, 995, -0.5, -47.017, 995, -0.5, 47.017, -995, 0.5, -47.017, -995, 0.5, 47.017, -995, -0.5, -47.017, -995, 0.5, 47.017, -995, -0.5, 47.017, -995, -0.5, -47.017, 995, 0.5, 47.017, -995, 0.5, 47.017, 995, 0.5, -47.017, -995, 0.5, 47.017, -995, 0.5, -47.017, 995, 0.5, -47.017, -995, -0.5, 47.017, 995, -0.5, 47.017, -995, -0.5, -47.017, 995, -0.5, 47.017, 995, -0.5, -47.017, -995, -0.5, -47.017) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_3wmyg"] +data = PackedVector3Array(-995, 0.5, 47.017, 995, 0.5, 47.017, -995, -0.5, 47.017, 995, 0.5, 47.017, 995, -0.5, 47.017, -995, -0.5, 47.017, 995, 0.5, -47.017, -995, 0.5, -47.017, 995, -0.5, -47.017, -995, 0.5, -47.017, -995, -0.5, -47.017, 995, -0.5, -47.017, 995, 0.5, 47.017, 995, 0.5, -47.017, 995, -0.5, 47.017, 995, 0.5, -47.017, 995, -0.5, -47.017, 995, -0.5, 47.017, -995, 0.5, -47.017, -995, 0.5, 47.017, -995, -0.5, -47.017, -995, 0.5, 47.017, -995, -0.5, 47.017, -995, -0.5, -47.017, 995, 0.5, 47.017, -995, 0.5, 47.017, 995, 0.5, -47.017, -995, 0.5, 47.017, -995, 0.5, -47.017, 995, 0.5, -47.017, -995, -0.5, 47.017, 995, -0.5, 47.017, -995, -0.5, -47.017, 995, -0.5, 47.017, 995, -0.5, -47.017, -995, -0.5, -47.017) + +[sub_resource type="Curve3D" id="Curve3D_6vskq"] +_data = { +"points": PackedVector3Array(0.543398, -0.103395, 1.65241, -0.543398, 0.103395, -1.65241, 3.28336, 5.28308, -55.2298, -0.833012, -0.217682, 2.2701, 0.833012, 0.217682, -2.2701, 3.56751, 6.35417, -60.6377, -0.0791855, 0.892603, 1.8625, 0.0791855, -0.892603, -1.8625, 5.02051, 4.0616, -66.9724, -0.149003, 0.23034, 1.52293, 0.149003, -0.23034, -1.52293, 5.94106, 1.27618, -73.7061, 0.152164, 0.0198116, 0.82222, -0.152164, -0.0198116, -0.82222, 6.24068, 1.29284, -81.1135, 0.709167, -0.00765228, 0.797897, -0.709167, 0.00765228, -0.797897, 1.66464, 0.49591, -92.5504, 1.86497, 0.492211, 1.35976, -1.86497, -0.492211, -1.35976, -5.43053, -0.176876, -98.7249, 3.65234, 0.403153, 0.595093, -3.65234, -0.403153, -0.595093, -14.2107, -2.83686, -102.669, 2.41666, 0.162499, -0.433556, -2.41666, -0.162499, 0.433556, -23.5045, -3.81825, -104.349, 2.69847, 0.0319109, -1.39461, -2.69847, -0.0319109, 1.39461, -32.5873, -4.93983, -102.986, 0, 0, 0, 0, 0, 0, -41.6334, -4.712, -100.865, 0, 0, 0, 0, 0, 0, -46.381, -4.47723, -99.9369, 1.76731, -0.395488, -0.332947, -1.76731, 0.395488, 0.332947, -48.5051, -4.01378, -99.6217, 1.47411, -0.793471, -0.42971, -1.47411, 0.793471, 0.42971, -52.9601, -1.59774, -98.743, 1.40203, -0.0544708, -0.311745, -1.40203, 0.0544708, 0.311745, -57.3469, -0.190034, -97.9515, 1.23469, 0.514086, -0.296593, -1.23469, -0.514086, 0.296593, -61.54, -0.983026, -97.2347, 1.78854, 0.324845, -0.419327, -1.78854, -0.324845, 0.419327, -65.8922, -3.47315, -96.0933, 4.19576, 0.234449, -0.89743, -4.19576, -0.234449, 0.89743, -72.3135, -4.084, -94.5145, 1.25638, 0.000484467, 10.8308, -1.25638, -0.000484467, -10.8308, -85.2469, -4.12423, -100.301, -2.00005, 0.315476, 0.567215, 2.00005, -0.315476, -0.567215, -79.6224, -4.49219, -111.463, -7.05647, 0.0288595, -2.48302, 6.90189, -0.0282273, 2.42863, -62.2289, -4.22628, -112.062, 0.259935, -0.461171, -3.92209, -0.738754, 1.31068, 11.1469, -57.1626, -4.54992, -98.6082, 2.09652, -0.278773, -0.0627518, -2.09652, 0.278773, 0.0627518, -73.0278, -2.4152, -85.6188, 2.88116, -0.17606, -0.0584183, -2.88116, 0.17606, 0.0584183, -83.2919, -2.37169, -84.7517, 3.23965, -0.202814, -1.03859, -3.23965, 0.202814, 1.03859, -101.697, -1.14444, -83.4727, 2.30534, -0.119607, -2.03248, -2.30534, 0.119607, 2.03248, -117.54, 0.480612, -77.5978, 1.62395, -0.460591, -1.66295, -1.62395, 0.460591, 1.66295, -128.78, 2.73801, -72.081, 0.623291, -0.0807109, -1.60843, -0.623291, 0.0807109, 1.60843, -142.737, 4.67136, -61.0967, -0.62944, -0.367424, -3.50014, 0.62944, 0.367424, 3.50014, -144.324, 4.46733, -50.0448, -1.81136, -0.102165, -1.03172, 1.81136, 0.102165, 1.03172, -137.273, 4.46672, -42.9261, -0.912231, -0.160881, -0.155205, 0.912231, 0.160881, 0.155205, -130.732, 4.37322, -42.3592, -1.12225, 0.309475, -0.159954, 1.12225, -0.309475, 0.159954, -127.167, 4.13784, -41.615, -1.44321, 0.289954, -0.16938, 1.44321, -0.289954, 0.16938, -123.841, 2.59092, -41.3764, -1.71183, 0.232457, -0.163383, 1.71183, -0.232457, 0.163383, -119.037, 2.92625, -40.5647, -1.65579, 0.0589757, -0.114311, 1.65579, -0.0589757, 0.114311, -115.158, 1.3437, -40.4409, -1.32726, 0.0452385, -0.0909462, 1.32726, -0.0452385, 0.0909462, -109.915, 2.63164, -39.7556, -1.40851, 0.0955319, -0.112408, 1.40851, -0.0955319, 0.112408, -106.253, 0.993988, -39.5967, -1.74428, 0.116143, -0.0901184, 1.74428, -0.116143, 0.0901184, -98.305, -0.669029, -38.2801, -1.98921, -1.76747, 0.459106, 1.98921, 1.76747, -0.459106, -87.2684, 1.03817, -38.1925, 0, 0, 0, 0, 0, 0, -80.2635, 2.10998, -38.466), +"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +} +point_count = 40 + +[sub_resource type="TorusMesh" id="TorusMesh_jqadq"] +inner_radius = 3.5 +outer_radius = 7.0 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5qgna"] +albedo_color = Color(0.215902, 0.215902, 0.215902, 1) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_smisc"] +data = PackedVector3Array(-1.3394, 0, -3.2336, 0, 1.2374, -4.0126, 0, 0, -3.5, -1.3394, 0, -3.2336, -1.5355, 1.2374, -3.7071, 0, 1.2374, -4.0126, -1.5355, 1.2374, -3.7071, 0, 1.75, -5.25, 0, 1.2374, -4.0126, -1.5355, 1.2374, -3.7071, -2.0091, 1.75, -4.8504, 0, 1.75, -5.25, -2.0091, 1.75, -4.8504, 0, 1.2374, -6.4874, 0, 1.75, -5.25, -2.0091, 1.75, -4.8504, -2.4826, 1.2374, -5.9936, 0, 1.2374, -6.4874, -2.4826, 1.2374, -5.9936, 0, 0, -7, 0, 1.2374, -6.4874, -2.4826, 1.2374, -5.9936, -2.6788, 0, -6.4672, 0, 0, -7, -2.6788, 0, -6.4672, 0, -1.2374, -6.4874, 0, 0, -7, -2.6788, 0, -6.4672, -2.4826, -1.2374, -5.9936, 0, -1.2374, -6.4874, -2.4826, -1.2374, -5.9936, 0, -1.75, -5.25, 0, -1.2374, -6.4874, -2.4826, -1.2374, -5.9936, -2.0091, -1.75, -4.8504, 0, -1.75, -5.25, -2.0091, -1.75, -4.8504, 0, -1.2374, -4.0126, 0, -1.75, -5.25, -2.0091, -1.75, -4.8504, -1.5355, -1.2374, -3.7071, 0, -1.2374, -4.0126, -1.5355, -1.2374, -3.7071, 0, 0, -3.5, 0, -1.2374, -4.0126, -1.5355, -1.2374, -3.7071, -1.3394, 0, -3.2336, 0, 0, -3.5, -2.4749, 0, -2.4749, -1.5355, 1.2374, -3.7071, -1.3394, 0, -3.2336, -2.4749, 0, -2.4749, -2.8373, 1.2374, -2.8373, -1.5355, 1.2374, -3.7071, -2.8373, 1.2374, -2.8373, -2.0091, 1.75, -4.8504, -1.5355, 1.2374, -3.7071, -2.8373, 1.2374, -2.8373, -3.7123, 1.75, -3.7123, -2.0091, 1.75, -4.8504, -3.7123, 1.75, -3.7123, -2.4826, 1.2374, -5.9936, -2.0091, 1.75, -4.8504, -3.7123, 1.75, -3.7123, -4.5873, 1.2374, -4.5873, -2.4826, 1.2374, -5.9936, -4.5873, 1.2374, -4.5873, -2.6788, 0, -6.4672, -2.4826, 1.2374, -5.9936, -4.5873, 1.2374, -4.5873, -4.9497, 0, -4.9497, -2.6788, 0, -6.4672, -4.9497, 0, -4.9497, -2.4826, -1.2374, -5.9936, -2.6788, 0, -6.4672, -4.9497, 0, -4.9497, -4.5873, -1.2374, -4.5873, -2.4826, -1.2374, -5.9936, -4.5873, -1.2374, -4.5873, -2.0091, -1.75, -4.8504, -2.4826, -1.2374, -5.9936, -4.5873, -1.2374, -4.5873, -3.7123, -1.75, -3.7123, -2.0091, -1.75, -4.8504, -3.7123, -1.75, -3.7123, -1.5355, -1.2374, -3.7071, -2.0091, -1.75, -4.8504, -3.7123, -1.75, -3.7123, -2.8373, -1.2374, -2.8373, -1.5355, -1.2374, -3.7071, -2.8373, -1.2374, -2.8373, -1.3394, 0, -3.2336, -1.5355, -1.2374, -3.7071, -2.8373, -1.2374, -2.8373, -2.4749, 0, -2.4749, -1.3394, 0, -3.2336, -3.2336, 0, -1.3394, -2.8373, 1.2374, -2.8373, -2.4749, 0, -2.4749, -3.2336, 0, -1.3394, -3.7071, 1.2374, -1.5355, -2.8373, 1.2374, -2.8373, -3.7071, 1.2374, -1.5355, -3.7123, 1.75, -3.7123, -2.8373, 1.2374, -2.8373, -3.7071, 1.2374, -1.5355, -4.8504, 1.75, -2.0091, -3.7123, 1.75, -3.7123, -4.8504, 1.75, -2.0091, -4.5873, 1.2374, -4.5873, -3.7123, 1.75, -3.7123, -4.8504, 1.75, -2.0091, -5.9936, 1.2374, -2.4826, -4.5873, 1.2374, -4.5873, -5.9936, 1.2374, -2.4826, -4.9497, 0, -4.9497, -4.5873, 1.2374, -4.5873, -5.9936, 1.2374, -2.4826, -6.4672, 0, -2.6788, -4.9497, 0, -4.9497, -6.4672, 0, -2.6788, -4.5873, -1.2374, -4.5873, -4.9497, 0, -4.9497, -6.4672, 0, -2.6788, -5.9936, -1.2374, -2.4826, -4.5873, -1.2374, -4.5873, -5.9936, -1.2374, -2.4826, -3.7123, -1.75, -3.7123, -4.5873, -1.2374, -4.5873, -5.9936, -1.2374, -2.4826, -4.8504, -1.75, -2.0091, -3.7123, -1.75, -3.7123, -4.8504, -1.75, -2.0091, -2.8373, -1.2374, -2.8373, -3.7123, -1.75, -3.7123, -4.8504, -1.75, -2.0091, -3.7071, -1.2374, -1.5355, -2.8373, -1.2374, -2.8373, -3.7071, -1.2374, -1.5355, -2.4749, 0, -2.4749, -2.8373, -1.2374, -2.8373, -3.7071, -1.2374, -1.5355, -3.2336, 0, -1.3394, -2.4749, 0, -2.4749, -3.5, 0, 0, -3.7071, 1.2374, -1.5355, -3.2336, 0, -1.3394, -3.5, 0, 0, -4.0126, 1.2374, 0, -3.7071, 1.2374, -1.5355, -4.0126, 1.2374, 0, -4.8504, 1.75, -2.0091, -3.7071, 1.2374, -1.5355, -4.0126, 1.2374, 0, -5.25, 1.75, 0, -4.8504, 1.75, -2.0091, -5.25, 1.75, 0, -5.9936, 1.2374, -2.4826, -4.8504, 1.75, -2.0091, -5.25, 1.75, 0, -6.4874, 1.2374, 0, -5.9936, 1.2374, -2.4826, -6.4874, 1.2374, 0, -6.4672, 0, -2.6788, -5.9936, 1.2374, -2.4826, -6.4874, 1.2374, 0, -7, 0, 0, -6.4672, 0, -2.6788, -7, 0, 0, -5.9936, -1.2374, -2.4826, -6.4672, 0, -2.6788, -7, 0, 0, -6.4874, -1.2374, 0, -5.9936, -1.2374, -2.4826, -6.4874, -1.2374, 0, -4.8504, -1.75, -2.0091, -5.9936, -1.2374, -2.4826, -6.4874, -1.2374, 0, -5.25, -1.75, 0, -4.8504, -1.75, -2.0091, -5.25, -1.75, 0, -3.7071, -1.2374, -1.5355, -4.8504, -1.75, -2.0091, -5.25, -1.75, 0, -4.0126, -1.2374, 0, -3.7071, -1.2374, -1.5355, -4.0126, -1.2374, 0, -3.2336, 0, -1.3394, -3.7071, -1.2374, -1.5355, -4.0126, -1.2374, 0, -3.5, 0, 0, -3.2336, 0, -1.3394, -3.2336, 0, 1.3394, -4.0126, 1.2374, 0, -3.5, 0, 0, -3.2336, 0, 1.3394, -3.7071, 1.2374, 1.5355, -4.0126, 1.2374, 0, -3.7071, 1.2374, 1.5355, -5.25, 1.75, 0, -4.0126, 1.2374, 0, -3.7071, 1.2374, 1.5355, -4.8504, 1.75, 2.0091, -5.25, 1.75, 0, -4.8504, 1.75, 2.0091, -6.4874, 1.2374, 0, -5.25, 1.75, 0, -4.8504, 1.75, 2.0091, -5.9936, 1.2374, 2.4826, -6.4874, 1.2374, 0, -5.9936, 1.2374, 2.4826, -7, 0, 0, -6.4874, 1.2374, 0, -5.9936, 1.2374, 2.4826, -6.4672, 0, 2.6788, -7, 0, 0, -6.4672, 0, 2.6788, -6.4874, -1.2374, 0, -7, 0, 0, -6.4672, 0, 2.6788, -5.9936, -1.2374, 2.4826, -6.4874, -1.2374, 0, -5.9936, -1.2374, 2.4826, -5.25, -1.75, 0, -6.4874, -1.2374, 0, -5.9936, -1.2374, 2.4826, -4.8504, -1.75, 2.0091, -5.25, -1.75, 0, -4.8504, -1.75, 2.0091, -4.0126, -1.2374, 0, -5.25, -1.75, 0, -4.8504, -1.75, 2.0091, -3.7071, -1.2374, 1.5355, -4.0126, -1.2374, 0, -3.7071, -1.2374, 1.5355, -3.5, 0, 0, -4.0126, -1.2374, 0, -3.7071, -1.2374, 1.5355, -3.2336, 0, 1.3394, -3.5, 0, 0, -2.4749, 0, 2.4749, -3.7071, 1.2374, 1.5355, -3.2336, 0, 1.3394, -2.4749, 0, 2.4749, -2.8373, 1.2374, 2.8373, -3.7071, 1.2374, 1.5355, -2.8373, 1.2374, 2.8373, -4.8504, 1.75, 2.0091, -3.7071, 1.2374, 1.5355, -2.8373, 1.2374, 2.8373, -3.7123, 1.75, 3.7123, -4.8504, 1.75, 2.0091, -3.7123, 1.75, 3.7123, -5.9936, 1.2374, 2.4826, -4.8504, 1.75, 2.0091, -3.7123, 1.75, 3.7123, -4.5873, 1.2374, 4.5873, -5.9936, 1.2374, 2.4826, -4.5873, 1.2374, 4.5873, -6.4672, 0, 2.6788, -5.9936, 1.2374, 2.4826, -4.5873, 1.2374, 4.5873, -4.9497, 0, 4.9497, -6.4672, 0, 2.6788, -4.9497, 0, 4.9497, -5.9936, -1.2374, 2.4826, -6.4672, 0, 2.6788, -4.9497, 0, 4.9497, -4.5873, -1.2374, 4.5873, -5.9936, -1.2374, 2.4826, -4.5873, -1.2374, 4.5873, -4.8504, -1.75, 2.0091, -5.9936, -1.2374, 2.4826, -4.5873, -1.2374, 4.5873, -3.7123, -1.75, 3.7123, -4.8504, -1.75, 2.0091, -3.7123, -1.75, 3.7123, -3.7071, -1.2374, 1.5355, -4.8504, -1.75, 2.0091, -3.7123, -1.75, 3.7123, -2.8373, -1.2374, 2.8373, -3.7071, -1.2374, 1.5355, -2.8373, -1.2374, 2.8373, -3.2336, 0, 1.3394, -3.7071, -1.2374, 1.5355, -2.8373, -1.2374, 2.8373, -2.4749, 0, 2.4749, -3.2336, 0, 1.3394, -1.3394, 0, 3.2336, -2.8373, 1.2374, 2.8373, -2.4749, 0, 2.4749, -1.3394, 0, 3.2336, -1.5355, 1.2374, 3.7071, -2.8373, 1.2374, 2.8373, -1.5355, 1.2374, 3.7071, -3.7123, 1.75, 3.7123, -2.8373, 1.2374, 2.8373, -1.5355, 1.2374, 3.7071, -2.0091, 1.75, 4.8504, -3.7123, 1.75, 3.7123, -2.0091, 1.75, 4.8504, -4.5873, 1.2374, 4.5873, -3.7123, 1.75, 3.7123, -2.0091, 1.75, 4.8504, -2.4826, 1.2374, 5.9936, -4.5873, 1.2374, 4.5873, -2.4826, 1.2374, 5.9936, -4.9497, 0, 4.9497, -4.5873, 1.2374, 4.5873, -2.4826, 1.2374, 5.9936, -2.6788, 0, 6.4672, -4.9497, 0, 4.9497, -2.6788, 0, 6.4672, -4.5873, -1.2374, 4.5873, -4.9497, 0, 4.9497, -2.6788, 0, 6.4672, -2.4826, -1.2374, 5.9936, -4.5873, -1.2374, 4.5873, -2.4826, -1.2374, 5.9936, -3.7123, -1.75, 3.7123, -4.5873, -1.2374, 4.5873, -2.4826, -1.2374, 5.9936, -2.0091, -1.75, 4.8504, -3.7123, -1.75, 3.7123, -2.0091, -1.75, 4.8504, -2.8373, -1.2374, 2.8373, -3.7123, -1.75, 3.7123, -2.0091, -1.75, 4.8504, -1.5355, -1.2374, 3.7071, -2.8373, -1.2374, 2.8373, -1.5355, -1.2374, 3.7071, -2.4749, 0, 2.4749, -2.8373, -1.2374, 2.8373, -1.5355, -1.2374, 3.7071, -1.3394, 0, 3.2336, -2.4749, 0, 2.4749, 0, 0, 3.5, -1.5355, 1.2374, 3.7071, -1.3394, 0, 3.2336, 0, 0, 3.5, 0, 1.2374, 4.0126, -1.5355, 1.2374, 3.7071, 0, 1.2374, 4.0126, -2.0091, 1.75, 4.8504, -1.5355, 1.2374, 3.7071, 0, 1.2374, 4.0126, 0, 1.75, 5.25, -2.0091, 1.75, 4.8504, 0, 1.75, 5.25, -2.4826, 1.2374, 5.9936, -2.0091, 1.75, 4.8504, 0, 1.75, 5.25, 0, 1.2374, 6.4874, -2.4826, 1.2374, 5.9936, 0, 1.2374, 6.4874, -2.6788, 0, 6.4672, -2.4826, 1.2374, 5.9936, 0, 1.2374, 6.4874, 0, 0, 7, -2.6788, 0, 6.4672, 0, 0, 7, -2.4826, -1.2374, 5.9936, -2.6788, 0, 6.4672, 0, 0, 7, 0, -1.2374, 6.4874, -2.4826, -1.2374, 5.9936, 0, -1.2374, 6.4874, -2.0091, -1.75, 4.8504, -2.4826, -1.2374, 5.9936, 0, -1.2374, 6.4874, 0, -1.75, 5.25, -2.0091, -1.75, 4.8504, 0, -1.75, 5.25, -1.5355, -1.2374, 3.7071, -2.0091, -1.75, 4.8504, 0, -1.75, 5.25, 0, -1.2374, 4.0126, -1.5355, -1.2374, 3.7071, 0, -1.2374, 4.0126, -1.3394, 0, 3.2336, -1.5355, -1.2374, 3.7071, 0, -1.2374, 4.0126, 0, 0, 3.5, -1.3394, 0, 3.2336, 1.3394, 0, 3.2336, 0, 1.2374, 4.0126, 0, 0, 3.5, 1.3394, 0, 3.2336, 1.5355, 1.2374, 3.7071, 0, 1.2374, 4.0126, 1.5355, 1.2374, 3.7071, 0, 1.75, 5.25, 0, 1.2374, 4.0126, 1.5355, 1.2374, 3.7071, 2.0091, 1.75, 4.8504, 0, 1.75, 5.25, 2.0091, 1.75, 4.8504, 0, 1.2374, 6.4874, 0, 1.75, 5.25, 2.0091, 1.75, 4.8504, 2.4826, 1.2374, 5.9936, 0, 1.2374, 6.4874, 2.4826, 1.2374, 5.9936, 0, 0, 7, 0, 1.2374, 6.4874, 2.4826, 1.2374, 5.9936, 2.6788, 0, 6.4672, 0, 0, 7, 2.6788, 0, 6.4672, 0, -1.2374, 6.4874, 0, 0, 7, 2.6788, 0, 6.4672, 2.4826, -1.2374, 5.9936, 0, -1.2374, 6.4874, 2.4826, -1.2374, 5.9936, 0, -1.75, 5.25, 0, -1.2374, 6.4874, 2.4826, -1.2374, 5.9936, 2.0091, -1.75, 4.8504, 0, -1.75, 5.25, 2.0091, -1.75, 4.8504, 0, -1.2374, 4.0126, 0, -1.75, 5.25, 2.0091, -1.75, 4.8504, 1.5355, -1.2374, 3.7071, 0, -1.2374, 4.0126, 1.5355, -1.2374, 3.7071, 0, 0, 3.5, 0, -1.2374, 4.0126, 1.5355, -1.2374, 3.7071, 1.3394, 0, 3.2336, 0, 0, 3.5, 2.4749, 0, 2.4749, 1.5355, 1.2374, 3.7071, 1.3394, 0, 3.2336, 2.4749, 0, 2.4749, 2.8373, 1.2374, 2.8373, 1.5355, 1.2374, 3.7071, 2.8373, 1.2374, 2.8373, 2.0091, 1.75, 4.8504, 1.5355, 1.2374, 3.7071, 2.8373, 1.2374, 2.8373, 3.7123, 1.75, 3.7123, 2.0091, 1.75, 4.8504, 3.7123, 1.75, 3.7123, 2.4826, 1.2374, 5.9936, 2.0091, 1.75, 4.8504, 3.7123, 1.75, 3.7123, 4.5873, 1.2374, 4.5873, 2.4826, 1.2374, 5.9936, 4.5873, 1.2374, 4.5873, 2.6788, 0, 6.4672, 2.4826, 1.2374, 5.9936, 4.5873, 1.2374, 4.5873, 4.9497, 0, 4.9497, 2.6788, 0, 6.4672, 4.9497, 0, 4.9497, 2.4826, -1.2374, 5.9936, 2.6788, 0, 6.4672, 4.9497, 0, 4.9497, 4.5873, -1.2374, 4.5873, 2.4826, -1.2374, 5.9936, 4.5873, -1.2374, 4.5873, 2.0091, -1.75, 4.8504, 2.4826, -1.2374, 5.9936, 4.5873, -1.2374, 4.5873, 3.7123, -1.75, 3.7123, 2.0091, -1.75, 4.8504, 3.7123, -1.75, 3.7123, 1.5355, -1.2374, 3.7071, 2.0091, -1.75, 4.8504, 3.7123, -1.75, 3.7123, 2.8373, -1.2374, 2.8373, 1.5355, -1.2374, 3.7071, 2.8373, -1.2374, 2.8373, 1.3394, 0, 3.2336, 1.5355, -1.2374, 3.7071, 2.8373, -1.2374, 2.8373, 2.4749, 0, 2.4749, 1.3394, 0, 3.2336, 3.2336, 0, 1.3394, 2.8373, 1.2374, 2.8373, 2.4749, 0, 2.4749, 3.2336, 0, 1.3394, 3.7071, 1.2374, 1.5355, 2.8373, 1.2374, 2.8373, 3.7071, 1.2374, 1.5355, 3.7123, 1.75, 3.7123, 2.8373, 1.2374, 2.8373, 3.7071, 1.2374, 1.5355, 4.8504, 1.75, 2.0091, 3.7123, 1.75, 3.7123, 4.8504, 1.75, 2.0091, 4.5873, 1.2374, 4.5873, 3.7123, 1.75, 3.7123, 4.8504, 1.75, 2.0091, 5.9936, 1.2374, 2.4826, 4.5873, 1.2374, 4.5873, 5.9936, 1.2374, 2.4826, 4.9497, 0, 4.9497, 4.5873, 1.2374, 4.5873, 5.9936, 1.2374, 2.4826, 6.4672, 0, 2.6788, 4.9497, 0, 4.9497, 6.4672, 0, 2.6788, 4.5873, -1.2374, 4.5873, 4.9497, 0, 4.9497, 6.4672, 0, 2.6788, 5.9936, -1.2374, 2.4826, 4.5873, -1.2374, 4.5873, 5.9936, -1.2374, 2.4826, 3.7123, -1.75, 3.7123, 4.5873, -1.2374, 4.5873, 5.9936, -1.2374, 2.4826, 4.8504, -1.75, 2.0091, 3.7123, -1.75, 3.7123, 4.8504, -1.75, 2.0091, 2.8373, -1.2374, 2.8373, 3.7123, -1.75, 3.7123, 4.8504, -1.75, 2.0091, 3.7071, -1.2374, 1.5355, 2.8373, -1.2374, 2.8373, 3.7071, -1.2374, 1.5355, 2.4749, 0, 2.4749, 2.8373, -1.2374, 2.8373, 3.7071, -1.2374, 1.5355, 3.2336, 0, 1.3394, 2.4749, 0, 2.4749, 3.5, 0, 0, 3.7071, 1.2374, 1.5355, 3.2336, 0, 1.3394, 3.5, 0, 0, 4.0126, 1.2374, 0, 3.7071, 1.2374, 1.5355, 4.0126, 1.2374, 0, 4.8504, 1.75, 2.0091, 3.7071, 1.2374, 1.5355, 4.0126, 1.2374, 0, 5.25, 1.75, 0, 4.8504, 1.75, 2.0091, 5.25, 1.75, 0, 5.9936, 1.2374, 2.4826, 4.8504, 1.75, 2.0091, 5.25, 1.75, 0, 6.4874, 1.2374, 0, 5.9936, 1.2374, 2.4826, 6.4874, 1.2374, 0, 6.4672, 0, 2.6788, 5.9936, 1.2374, 2.4826, 6.4874, 1.2374, 0, 7, 0, 0, 6.4672, 0, 2.6788, 7, 0, 0, 5.9936, -1.2374, 2.4826, 6.4672, 0, 2.6788, 7, 0, 0, 6.4874, -1.2374, 0, 5.9936, -1.2374, 2.4826, 6.4874, -1.2374, 0, 4.8504, -1.75, 2.0091, 5.9936, -1.2374, 2.4826, 6.4874, -1.2374, 0, 5.25, -1.75, 0, 4.8504, -1.75, 2.0091, 5.25, -1.75, 0, 3.7071, -1.2374, 1.5355, 4.8504, -1.75, 2.0091, 5.25, -1.75, 0, 4.0126, -1.2374, 0, 3.7071, -1.2374, 1.5355, 4.0126, -1.2374, 0, 3.2336, 0, 1.3394, 3.7071, -1.2374, 1.5355, 4.0126, -1.2374, 0, 3.5, 0, 0, 3.2336, 0, 1.3394, 3.2336, 0, -1.3394, 4.0126, 1.2374, 0, 3.5, 0, 0, 3.2336, 0, -1.3394, 3.7071, 1.2374, -1.5355, 4.0126, 1.2374, 0, 3.7071, 1.2374, -1.5355, 5.25, 1.75, 0, 4.0126, 1.2374, 0, 3.7071, 1.2374, -1.5355, 4.8504, 1.75, -2.0091, 5.25, 1.75, 0, 4.8504, 1.75, -2.0091, 6.4874, 1.2374, 0, 5.25, 1.75, 0, 4.8504, 1.75, -2.0091, 5.9936, 1.2374, -2.4826, 6.4874, 1.2374, 0, 5.9936, 1.2374, -2.4826, 7, 0, 0, 6.4874, 1.2374, 0, 5.9936, 1.2374, -2.4826, 6.4672, 0, -2.6788, 7, 0, 0, 6.4672, 0, -2.6788, 6.4874, -1.2374, 0, 7, 0, 0, 6.4672, 0, -2.6788, 5.9936, -1.2374, -2.4826, 6.4874, -1.2374, 0, 5.9936, -1.2374, -2.4826, 5.25, -1.75, 0, 6.4874, -1.2374, 0, 5.9936, -1.2374, -2.4826, 4.8504, -1.75, -2.0091, 5.25, -1.75, 0, 4.8504, -1.75, -2.0091, 4.0126, -1.2374, 0, 5.25, -1.75, 0, 4.8504, -1.75, -2.0091, 3.7071, -1.2374, -1.5355, 4.0126, -1.2374, 0, 3.7071, -1.2374, -1.5355, 3.5, 0, 0, 4.0126, -1.2374, 0, 3.7071, -1.2374, -1.5355, 3.2336, 0, -1.3394, 3.5, 0, 0, 2.4749, 0, -2.4749, 3.7071, 1.2374, -1.5355, 3.2336, 0, -1.3394, 2.4749, 0, -2.4749, 2.8373, 1.2374, -2.8373, 3.7071, 1.2374, -1.5355, 2.8373, 1.2374, -2.8373, 4.8504, 1.75, -2.0091, 3.7071, 1.2374, -1.5355, 2.8373, 1.2374, -2.8373, 3.7123, 1.75, -3.7123, 4.8504, 1.75, -2.0091, 3.7123, 1.75, -3.7123, 5.9936, 1.2374, -2.4826, 4.8504, 1.75, -2.0091, 3.7123, 1.75, -3.7123, 4.5873, 1.2374, -4.5873, 5.9936, 1.2374, -2.4826, 4.5873, 1.2374, -4.5873, 6.4672, 0, -2.6788, 5.9936, 1.2374, -2.4826, 4.5873, 1.2374, -4.5873, 4.9497, 0, -4.9497, 6.4672, 0, -2.6788, 4.9497, 0, -4.9497, 5.9936, -1.2374, -2.4826, 6.4672, 0, -2.6788, 4.9497, 0, -4.9497, 4.5873, -1.2374, -4.5873, 5.9936, -1.2374, -2.4826, 4.5873, -1.2374, -4.5873, 4.8504, -1.75, -2.0091, 5.9936, -1.2374, -2.4826, 4.5873, -1.2374, -4.5873, 3.7123, -1.75, -3.7123, 4.8504, -1.75, -2.0091, 3.7123, -1.75, -3.7123, 3.7071, -1.2374, -1.5355, 4.8504, -1.75, -2.0091, 3.7123, -1.75, -3.7123, 2.8373, -1.2374, -2.8373, 3.7071, -1.2374, -1.5355, 2.8373, -1.2374, -2.8373, 3.2336, 0, -1.3394, 3.7071, -1.2374, -1.5355, 2.8373, -1.2374, -2.8373, 2.4749, 0, -2.4749, 3.2336, 0, -1.3394, 1.3394, 0, -3.2336, 2.8373, 1.2374, -2.8373, 2.4749, 0, -2.4749, 1.3394, 0, -3.2336, 1.5355, 1.2374, -3.7071, 2.8373, 1.2374, -2.8373, 1.5355, 1.2374, -3.7071, 3.7123, 1.75, -3.7123, 2.8373, 1.2374, -2.8373, 1.5355, 1.2374, -3.7071, 2.0091, 1.75, -4.8504, 3.7123, 1.75, -3.7123, 2.0091, 1.75, -4.8504, 4.5873, 1.2374, -4.5873, 3.7123, 1.75, -3.7123, 2.0091, 1.75, -4.8504, 2.4826, 1.2374, -5.9936, 4.5873, 1.2374, -4.5873, 2.4826, 1.2374, -5.9936, 4.9497, 0, -4.9497, 4.5873, 1.2374, -4.5873, 2.4826, 1.2374, -5.9936, 2.6788, 0, -6.4672, 4.9497, 0, -4.9497, 2.6788, 0, -6.4672, 4.5873, -1.2374, -4.5873, 4.9497, 0, -4.9497, 2.6788, 0, -6.4672, 2.4826, -1.2374, -5.9936, 4.5873, -1.2374, -4.5873, 2.4826, -1.2374, -5.9936, 3.7123, -1.75, -3.7123, 4.5873, -1.2374, -4.5873, 2.4826, -1.2374, -5.9936, 2.0091, -1.75, -4.8504, 3.7123, -1.75, -3.7123, 2.0091, -1.75, -4.8504, 2.8373, -1.2374, -2.8373, 3.7123, -1.75, -3.7123, 2.0091, -1.75, -4.8504, 1.5355, -1.2374, -3.7071, 2.8373, -1.2374, -2.8373, 1.5355, -1.2374, -3.7071, 2.4749, 0, -2.4749, 2.8373, -1.2374, -2.8373, 1.5355, -1.2374, -3.7071, 1.3394, 0, -3.2336, 2.4749, 0, -2.4749, 0, 0, -3.5, 1.5355, 1.2374, -3.7071, 1.3394, 0, -3.2336, 0, 0, -3.5, 0, 1.2374, -4.0126, 1.5355, 1.2374, -3.7071, 0, 1.2374, -4.0126, 2.0091, 1.75, -4.8504, 1.5355, 1.2374, -3.7071, 0, 1.2374, -4.0126, 0, 1.75, -5.25, 2.0091, 1.75, -4.8504, 0, 1.75, -5.25, 2.4826, 1.2374, -5.9936, 2.0091, 1.75, -4.8504, 0, 1.75, -5.25, 0, 1.2374, -6.4874, 2.4826, 1.2374, -5.9936, 0, 1.2374, -6.4874, 2.6788, 0, -6.4672, 2.4826, 1.2374, -5.9936, 0, 1.2374, -6.4874, 0, 0, -7, 2.6788, 0, -6.4672, 0, 0, -7, 2.4826, -1.2374, -5.9936, 2.6788, 0, -6.4672, 0, 0, -7, 0, -1.2374, -6.4874, 2.4826, -1.2374, -5.9936, 0, -1.2374, -6.4874, 2.0091, -1.75, -4.8504, 2.4826, -1.2374, -5.9936, 0, -1.2374, -6.4874, 0, -1.75, -5.25, 2.0091, -1.75, -4.8504, 0, -1.75, -5.25, 1.5355, -1.2374, -3.7071, 2.0091, -1.75, -4.8504, 0, -1.75, -5.25, 0, -1.2374, -4.0126, 1.5355, -1.2374, -3.7071, 0, -1.2374, -4.0126, 1.3394, 0, -3.2336, 1.5355, -1.2374, -3.7071, 0, -1.2374, -4.0126, 0, 0, -3.5, 1.3394, 0, -3.2336) + +[sub_resource type="PrismMesh" id="PrismMesh_xglk4"] +left_to_right = 0.0 +size = Vector3(4, 2, 4) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_kamav"] +albedo_color = Color(1, 0.666667, 0.176471, 1) + +[sub_resource type="PrismMesh" id="PrismMesh_3jdtn"] +left_to_right = 0.0 +size = Vector3(4, 1, 4) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ykfn8"] +data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_4aeas"] +data = PackedVector3Array(-2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, -0.5, 2, -2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_e2cnd"] +data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_8ool4"] +data = PackedVector3Array(-2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, -0.5, 2, -2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ru3pl"] +data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_stwys"] +data = PackedVector3Array(-2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, -0.5, 2, -2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_04800"] +data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_248tl"] +data = PackedVector3Array(-2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, -0.5, 2, -2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_nhcrh"] +data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2) + +[node name="TownScene" type="Node3D"] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_dauhq") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(0.506501, -0.706305, -0.494561, -4.63342e-08, -0.573577, 0.819152, -0.862239, -0.414901, -0.290517, 11.0084, 12.3453, -31.3148) +light_energy = 1.45 +shadow_enabled = true +shadow_bias = 0.015 +shadow_blur = 1.5 +directional_shadow_mode = 0 +directional_shadow_max_distance = 80.0 + +[node name="TruckTown" parent="." instance=ExtResource("1_x0dmm")] + +[node name="InstancePos" type="Marker3D" parent="."] +transform = Transform3D(1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 8, 3.36405, -16) + +[node name="Spedometer" type="Button" parent="."] +custom_minimum_size = Vector2(140, 40) +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -164.0 +offset_top = -64.0 +offset_right = -24.0 +offset_bottom = -24.0 +grow_horizontal = 0 +grow_vertical = 0 +focus_mode = 0 +action_mode = 0 +shortcut = SubResource("Shortcut_msvqx") +shortcut_feedback = false +shortcut_in_tooltip = false +text = "Speed: ???" +script = ExtResource("2") + +[node name="Back" type="Button" parent="."] +offset_left = 24.0 +offset_top = 24.0 +offset_right = 92.0 +offset_bottom = 56.0 +text = "« Back" + +[node name="TouchTurnLeft" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 4 +anchor_top = 0.5 +anchor_bottom = 0.5 +grow_vertical = 2 + +[node name="TurnLeft" type="TouchScreenButton" parent="TouchTurnLeft"] +modulate = Color(1, 1, 1, 0) +position = Vector2(0, -256) +scale = Vector2(2.5, 4) +texture_normal = SubResource("GradientTexture2D_m8ylb") +texture_pressed = SubResource("GradientTexture2D_xu6xc") +passby_press = true +action = "turn_left" +visibility_mode = 1 + +[node name="TouchReverse" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Reverse" type="TouchScreenButton" parent="TouchReverse"] +modulate = Color(1, 1, 1, 0) +position = Vector2(-256, -256) +scale = Vector2(4, 4) +texture_normal = SubResource("GradientTexture2D_m8ylb") +texture_pressed = SubResource("GradientTexture2D_xu6xc") +passby_press = true +action = "reverse" +visibility_mode = 1 + +[node name="TouchTurnRight" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +grow_horizontal = 0 +grow_vertical = 2 + +[node name="TurnRight" type="TouchScreenButton" parent="TouchTurnRight"] +modulate = Color(1, 1, 1, 0) +position = Vector2(-320, -256) +scale = Vector2(2.5, 4) +texture_normal = SubResource("GradientTexture2D_m8ylb") +texture_pressed = SubResource("GradientTexture2D_xu6xc") +passby_press = true +action = "turn_right" +visibility_mode = 1 + +[node name="Ground" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29, -5.86, 2064.6) +cast_shadow = 0 +mesh = SubResource("BoxMesh_x3c0g") +surface_material_override/0 = SubResource("StandardMaterial3D_0ud3l") + +[node name="StaticBody3D" type="StaticBody3D" parent="Ground"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_gearx") + +[node name="Ground2" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29, -5.86, -2125.13) +cast_shadow = 0 +mesh = SubResource("BoxMesh_x3c0g") +surface_material_override/0 = SubResource("StandardMaterial3D_0ud3l") + +[node name="StaticBody3D" type="StaticBody3D" parent="Ground2"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground2/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_g7q2f") + +[node name="Ground3" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1082.19, -5.86, -30.267) +cast_shadow = 0 +mesh = SubResource("BoxMesh_n528d") +surface_material_override/0 = SubResource("StandardMaterial3D_aijyr") + +[node name="StaticBody3D" type="StaticBody3D" parent="Ground3"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground3/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_mb5rx") + +[node name="Ground4" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1027.31, -5.86, -30.248) +cast_shadow = 0 +mesh = SubResource("BoxMesh_n528d") +surface_material_override/0 = SubResource("StandardMaterial3D_aijyr") + +[node name="StaticBody3D" type="StaticBody3D" parent="Ground4"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground4/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_3wmyg") + +[node name="Racetrack" type="CSGPolygon3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.225899, 0) +calculate_tangents = false +use_collision = true +polygon = PackedVector2Array(-1.5, 1, -1.4, 1, -1.3, 0.9, -1.2, 0.9, 2.2, 0.9, 2.3, 0.9, 2.4, 1, 2.5, 1, 2.4, 0.9, 2, 0.1, 2, 0, 1.9, -0.1, -0.9, -0.1, -1, 0, -1, 0.1, -1.4, 0.9) +mode = 2 +path_node = NodePath("Path3D") +path_interval_type = 0 +path_interval = 0.5 +path_simplify_angle = 2.0 +path_rotation = 1 +path_local = true +path_continuous_u = true +path_u_distance = 20.0 +path_joined = false +smooth_faces = true +material = ExtResource("5_83ty7") + +[node name="Path3D" type="Path3D" parent="Racetrack"] +curve = SubResource("Curve3D_6vskq") + +[node name="HugeTire" type="MeshInstance3D" parent="Racetrack"] +transform = Transform3D(-4.29291e-08, 0.982104, 0.188341, -1, -4.37114e-08, -6.16922e-16, 8.23266e-09, -0.188341, 0.982104, -43, -2.7741, -101.158) +mesh = SubResource("TorusMesh_jqadq") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_5qgna") +metadata/_edit_group_ = true + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/HugeTire"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/HugeTire/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_smisc") + +[node name="Ramp" type="MeshInstance3D" parent="Racetrack"] +transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, -36, -4.13, -106.8) +mesh = SubResource("PrismMesh_xglk4") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") +metadata/_edit_group_ = true + +[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp"] +transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06) +mesh = SubResource("PrismMesh_3jdtn") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_ykfn8") + +[node name="Ramp2" type="MeshInstance3D" parent="Racetrack"] +transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, -34.366, -4.13, -98.138) +mesh = SubResource("PrismMesh_xglk4") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") +metadata/_edit_group_ = true + +[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp2"] +transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06) +mesh = SubResource("PrismMesh_3jdtn") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp2/RampStart"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp2/RampStart/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_4aeas") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp2"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp2/StaticBody3D"] +transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 0, 0, 0) +shape = SubResource("ConcavePolygonShape3D_e2cnd") + +[node name="Ramp3" type="MeshInstance3D" parent="Racetrack"] +transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, -80.4018, -4.13, -101.536) +mesh = SubResource("PrismMesh_xglk4") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") +metadata/_edit_group_ = true + +[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp3"] +transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06) +mesh = SubResource("PrismMesh_3jdtn") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp3/RampStart"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp3/RampStart/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_8ool4") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp3"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp3/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_ru3pl") + +[node name="Ramp4" type="MeshInstance3D" parent="Racetrack"] +transform = Transform3D(-0.984808, 0, -0.173648, 0, 1, 0, 0.173648, 0, -0.984808, -62.2203, -4.13, -104.798) +mesh = SubResource("PrismMesh_xglk4") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") +metadata/_edit_group_ = true + +[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp4"] +transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06) +mesh = SubResource("PrismMesh_3jdtn") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp4/RampStart"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp4/RampStart/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_stwys") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp4"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp4/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_04800") + +[node name="Ramp5" type="MeshInstance3D" parent="Racetrack"] +transform = Transform3D(-0.984808, 0, -0.173648, 0, 1, 0, 0.173648, 0, -0.984808, -89.0271, -4.13, -100.015) +mesh = SubResource("PrismMesh_xglk4") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") +metadata/_edit_group_ = true + +[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp5"] +transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06) +mesh = SubResource("PrismMesh_3jdtn") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_kamav") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp5/RampStart"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp5/RampStart/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_248tl") + +[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp5"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp5/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_nhcrh") + +[connection signal="pressed" from="Spedometer" to="Spedometer" method="_on_spedometer_pressed"] diff --git a/town/truck_town.glb b/town/truck_town.glb new file mode 100644 index 0000000..fa1045d Binary files /dev/null and b/town/truck_town.glb differ diff --git a/town/truck_town.glb.import b/town/truck_town.glb.import new file mode 100644 index 0000000..3582328 --- /dev/null +++ b/town/truck_town.glb.import @@ -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 diff --git a/vehicles/blob_shadow.png b/vehicles/blob_shadow.png new file mode 100644 index 0000000..b10f977 Binary files /dev/null and b/vehicles/blob_shadow.png differ diff --git a/vehicles/blob_shadow.png.import b/vehicles/blob_shadow.png.import new file mode 100644 index 0000000..75d4200 --- /dev/null +++ b/vehicles/blob_shadow.png.import @@ -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 diff --git a/vehicles/car_base.tscn b/vehicles/car_base.tscn new file mode 100644 index 0000000..507031a --- /dev/null +++ b/vehicles/car_base.tscn @@ -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) diff --git a/vehicles/engine.wav b/vehicles/engine.wav new file mode 100644 index 0000000..cad6a1a Binary files /dev/null and b/vehicles/engine.wav differ diff --git a/vehicles/engine.wav.import b/vehicles/engine.wav.import new file mode 100644 index 0000000..9570a82 --- /dev/null +++ b/vehicles/engine.wav.import @@ -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 diff --git a/vehicles/follow_camera.gd b/vehicles/follow_camera.gd new file mode 100644 index 0000000..8fcf749 --- /dev/null +++ b/vehicles/follow_camera.gd @@ -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) diff --git a/vehicles/impact.wav.import b/vehicles/impact.wav.import new file mode 100644 index 0000000..bf6771c --- /dev/null +++ b/vehicles/impact.wav.import @@ -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 diff --git a/vehicles/impact_1.wav b/vehicles/impact_1.wav new file mode 100644 index 0000000..7985683 Binary files /dev/null and b/vehicles/impact_1.wav differ diff --git a/vehicles/impact_1.wav.import b/vehicles/impact_1.wav.import new file mode 100644 index 0000000..7a7e330 --- /dev/null +++ b/vehicles/impact_1.wav.import @@ -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 diff --git a/vehicles/impact_2.wav b/vehicles/impact_2.wav new file mode 100644 index 0000000..2437de5 Binary files /dev/null and b/vehicles/impact_2.wav differ diff --git a/vehicles/impact_2.wav.import b/vehicles/impact_2.wav.import new file mode 100644 index 0000000..a4bdef8 --- /dev/null +++ b/vehicles/impact_2.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bf0h7s81yr8nj" +path="res://.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample" + +[deps] + +source_file="res://vehicles/impact_2.wav" +dest_files=["res://.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.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 diff --git a/vehicles/impact_3.wav b/vehicles/impact_3.wav new file mode 100644 index 0000000..0e83aa7 Binary files /dev/null and b/vehicles/impact_3.wav differ diff --git a/vehicles/impact_3.wav.import b/vehicles/impact_3.wav.import new file mode 100644 index 0000000..3a4926f --- /dev/null +++ b/vehicles/impact_3.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://sun2n8a4xapl" +path="res://.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample" + +[deps] + +source_file="res://vehicles/impact_3.wav" +dest_files=["res://.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.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 diff --git a/vehicles/impact_4.wav b/vehicles/impact_4.wav new file mode 100644 index 0000000..4a12073 Binary files /dev/null and b/vehicles/impact_4.wav differ diff --git a/vehicles/impact_4.wav.import b/vehicles/impact_4.wav.import new file mode 100644 index 0000000..f5cf3fb --- /dev/null +++ b/vehicles/impact_4.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dpbayeeufya21" +path="res://.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample" + +[deps] + +source_file="res://vehicles/impact_4.wav" +dest_files=["res://.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.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 diff --git a/vehicles/meshes/meshes.glb b/vehicles/meshes/meshes.glb new file mode 100644 index 0000000..41c5b36 Binary files /dev/null and b/vehicles/meshes/meshes.glb differ diff --git a/vehicles/meshes/meshes.glb.import b/vehicles/meshes/meshes.glb.import new file mode 100644 index 0000000..1789566 --- /dev/null +++ b/vehicles/meshes/meshes.glb.import @@ -0,0 +1,105 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://e8iojcfvf11q" +path="res://.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn" + +[deps] + +source_file="res://vehicles/meshes/meshes.glb" +dest_files=["res://.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn"] + +[params] + +nodes/root_type="Node3D" +nodes/root_name="Scene Root" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +import_script/path="" +_subresources={ +"materials": { +"car_blue": { +"use_external/enabled": false, +"use_external/path": "res://town/materials/car_blue.tres" +}, +"car_yellow": { +"use_external/enabled": false, +"use_external/path": "res://town/materials/car_red.tres" +}, +"chrome": { +"use_external/enabled": false, +"use_external/path": "res://town/materials/chrome.tres" +}, +"truck_trailer": { +"use_external/enabled": true, +"use_external/path": "res://vehicles/truck_trailer.tres" +} +}, +"meshes": { +"meshes_minivan": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://vehicles/meshes/minivan.res" +}, +"meshes_tow_truck": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://vehicles/meshes/tow_truck.res" +}, +"meshes_truck_cab": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://vehicles/meshes/truck_cab.res" +}, +"meshes_truck_trailer": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://vehicles/meshes/truck_trailer.res" +}, +"meshes_wheel": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://vehicles/meshes/wheel.res" +} +} +} +gltf/naming_version=0 +gltf/embedded_image_handling=1 diff --git a/vehicles/meshes/minivan.res b/vehicles/meshes/minivan.res new file mode 100644 index 0000000..c897879 Binary files /dev/null and b/vehicles/meshes/minivan.res differ diff --git a/vehicles/meshes/tow_truck.res b/vehicles/meshes/tow_truck.res new file mode 100644 index 0000000..e799d01 Binary files /dev/null and b/vehicles/meshes/tow_truck.res differ diff --git a/vehicles/meshes/truck_cab.res b/vehicles/meshes/truck_cab.res new file mode 100644 index 0000000..f1db2c5 Binary files /dev/null and b/vehicles/meshes/truck_cab.res differ diff --git a/vehicles/meshes/truck_trailer.res b/vehicles/meshes/truck_trailer.res new file mode 100644 index 0000000..6688611 Binary files /dev/null and b/vehicles/meshes/truck_trailer.res differ diff --git a/vehicles/meshes/wheel.res b/vehicles/meshes/wheel.res new file mode 100644 index 0000000..99b083c Binary files /dev/null and b/vehicles/meshes/wheel.res differ diff --git a/vehicles/particle_smoke.png b/vehicles/particle_smoke.png new file mode 100644 index 0000000..34cad39 Binary files /dev/null and b/vehicles/particle_smoke.png differ diff --git a/vehicles/particle_smoke.png.import b/vehicles/particle_smoke.png.import new file mode 100644 index 0000000..f4c3b2b --- /dev/null +++ b/vehicles/particle_smoke.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d4ostmqwgytk" +path="res://.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://vehicles/particle_smoke.png" +dest_files=["res://.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.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 diff --git a/vehicles/tow_truck.tscn b/vehicles/tow_truck.tscn new file mode 100644 index 0000000..7b98624 --- /dev/null +++ b/vehicles/tow_truck.tscn @@ -0,0 +1,405 @@ +[gd_scene load_steps=28 format=3 uid="uid://bh7765vrq5muf"] + +[ext_resource type="Script" path="res://vehicles/vehicle.gd" id="1_qhfnb"] +[ext_resource type="ArrayMesh" uid="uid://bqrwin8ccgptt" path="res://vehicles/meshes/wheel.res" id="2_uwuq1"] +[ext_resource type="ArrayMesh" uid="uid://cbpqxxd14g8un" path="res://vehicles/meshes/tow_truck.res" id="3_tv0o3"] +[ext_resource type="Script" path="res://vehicles/follow_camera.gd" id="4_wddne"] +[ext_resource type="ArrayMesh" uid="uid://ctglc27jx8xe2" path="res://vehicles/meshes/truck_cab.res" id="5_04cnp"] +[ext_resource type="AudioStream" uid="uid://cb7wvsd6vygd3" path="res://vehicles/engine.wav" id="5_fwfew"] +[ext_resource type="AudioStream" uid="uid://sy2li7u35867" path="res://vehicles/impact_1.wav" id="6_i7k5m"] +[ext_resource type="AudioStream" uid="uid://bf0h7s81yr8nj" path="res://vehicles/impact_2.wav" id="7_hc8k7"] +[ext_resource type="AudioStream" uid="uid://sun2n8a4xapl" path="res://vehicles/impact_3.wav" id="8_cbgcu"] +[ext_resource type="AudioStream" uid="uid://dpbayeeufya21" path="res://vehicles/impact_4.wav" id="9_y8ei3"] +[ext_resource type="Texture2D" uid="uid://d4ostmqwgytk" path="res://vehicles/particle_smoke.png" id="10_lfosv"] +[ext_resource type="Texture2D" uid="uid://bju75l2w3r7vq" path="res://vehicles/blob_shadow.png" id="11_5ul8v"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_0hbge"] +size = Vector3(1.17624, 0.6963, 2.23996) + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_aad58"] +random_pitch = 1.05 +random_volume_offset_db = 2.0 +streams_count = 4 +stream_0/stream = ExtResource("6_i7k5m") +stream_0/weight = 1.0 +stream_1/stream = ExtResource("7_hc8k7") +stream_1/weight = 1.0 +stream_2/stream = ExtResource("8_cbgcu") +stream_2/weight = 1.0 +stream_3/stream = ExtResource("9_y8ei3") +stream_3/weight = 1.0 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_atib4"] +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("10_lfosv") +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_xsbig"] +material = SubResource("StandardMaterial3D_atib4") + +[sub_resource type="Curve" id="Curve_kr6si"] +_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_38b5g"] +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_i2aww"] +radius = 0.05 +height = 0.42 +radial_segments = 12 +rings = 3 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nrety"] +albedo_color = Color(0.635294, 0.635294, 0.635294, 1) +metallic = 1.0 +roughness = 0.5 + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_eoojf"] +radius = 0.05 +height = 0.3 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_so248"] +albedo_color = Color(0.635294, 0.635294, 0.635294, 1) +metallic = 1.0 +roughness = 0.5 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_c2qj1"] +albedo_color = Color(0.635294, 0.635294, 0.635294, 1) +metallic = 1.0 +roughness = 0.5 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ffy5m"] +albedo_color = Color(0.635294, 0.635294, 0.635294, 1) +metallic = 1.0 +roughness = 0.5 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_l1evv"] +albedo_color = Color(0.635294, 0.635294, 0.635294, 1) +metallic = 1.0 +roughness = 0.5 + +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_hvgqm"] +friction = 0.5 + +[sub_resource type="BoxShape3D" id="BoxShape3D_hbuqf"] +size = Vector3(0.954078, 1, 2.32662) + +[node name="TowTruck" 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 +script = ExtResource("1_qhfnb") + +[node name="Wheel1" type="VehicleWheel3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.000773743, 1.10416) +use_as_traction = true +use_as_steering = true +wheel_roll_influence = 0.4 +wheel_radius = 0.18 +wheel_friction_slip = 1.0 +suspension_stiffness = 30.0 +damping_compression = 0.88 + +[node name="Wheel1" type="MeshInstance3D" parent="Body/Wheel1"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_uwuq1") + +[node name="Wheel2" type="VehicleWheel3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.000773743, -0.783403) +use_as_traction = true +wheel_roll_influence = 0.4 +wheel_radius = 0.18 +wheel_friction_slip = 1.0 +suspension_stiffness = 30.0 +damping_compression = 0.88 + +[node name="Wheel2" type="MeshInstance3D" parent="Body/Wheel2"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_uwuq1") + +[node name="Wheel3" type="VehicleWheel3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.000773743, 1.10416) +use_as_traction = true +use_as_steering = true +wheel_roll_influence = 0.4 +wheel_radius = 0.18 +wheel_friction_slip = 1.0 +suspension_stiffness = 30.0 +damping_compression = 0.88 + +[node name="Wheel3" type="MeshInstance3D" parent="Body/Wheel3"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_uwuq1") + +[node name="Wheel4" type="VehicleWheel3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.000773743, -0.783403) +use_as_traction = true +wheel_roll_influence = 0.4 +wheel_radius = 0.18 +wheel_friction_slip = 1.0 +suspension_stiffness = 30.0 +damping_compression = 0.88 + +[node name="Wheel4" type="MeshInstance3D" parent="Body/Wheel4"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_uwuq1") + +[node name="Body" type="MeshInstance3D" parent="Body"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("3_tv0o3") + +[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.74227e-08, 0.241922, -0.970295, 0, 2.032, -4.394) +current = true +fov = 74.0 +near = 0.1 +script = ExtResource("4_wddne") +min_distance = 5.0 +max_distance = 7.0 +height = 1.75 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.391365, 0.158069) +shape = SubResource("BoxShape3D_0hbge") + +[node name="EngineSound" type="AudioStreamPlayer3D" parent="Body"] +stream = ExtResource("5_fwfew") +pitch_scale = 0.05 +autoplay = true +attenuation_filter_cutoff_hz = 20500.0 + +[node name="ImpactSound" type="AudioStreamPlayer3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.391365, 0.158069) +stream = SubResource("AudioStreamRandomizer_aad58") +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_xsbig") +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_kr6si") +color_ramp = SubResource("Gradient_38b5g") + +[node name="BlobShadow" type="Decal" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.222867, 0.145518) +size = Vector3(1.6, 4, 3) +texture_albedo = ExtResource("11_5ul8v") +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) + +[node name="ChainB1" type="RigidBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.846248, -0.53279, 0, 0.53279, 0.846248, 0, 1.10846, -1.55698) + +[node name="Chain1" type="MeshInstance3D" parent="ChainB1"] +layers = 2 +gi_mode = 2 +mesh = SubResource("CapsuleMesh_i2aww") +surface_material_override/0 = SubResource("StandardMaterial3D_nrety") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB1"] +shape = SubResource("CapsuleShape3D_eoojf") + +[node name="ChainB2" type="RigidBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.846248, -0.53279, 0, 0.53279, 0.846248, 0, 0.803378, -1.75806) + +[node name="Chain1" type="MeshInstance3D" parent="ChainB2"] +layers = 2 +gi_mode = 2 +mesh = SubResource("CapsuleMesh_i2aww") +surface_material_override/0 = SubResource("StandardMaterial3D_so248") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB2"] +shape = SubResource("CapsuleShape3D_eoojf") + +[node name="ChainB3" type="RigidBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.846248, -0.53279, 0, 0.53279, 0.846248, 0, 0.490045, -1.96106) + +[node name="Chain1" type="MeshInstance3D" parent="ChainB3"] +layers = 2 +gi_mode = 2 +mesh = SubResource("CapsuleMesh_i2aww") +surface_material_override/0 = SubResource("StandardMaterial3D_c2qj1") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB3"] +shape = SubResource("CapsuleShape3D_eoojf") + +[node name="ChainB4" type="RigidBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.447167, -0.894451, 0, 0.894451, 0.447167, 0, 0.290326, -2.19413) + +[node name="Chain1" type="MeshInstance3D" parent="ChainB4"] +layers = 2 +gi_mode = 2 +mesh = SubResource("CapsuleMesh_i2aww") +surface_material_override/0 = SubResource("StandardMaterial3D_ffy5m") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB4"] +shape = SubResource("CapsuleShape3D_eoojf") + +[node name="ChainB5" type="RigidBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.0993884, -0.995049, 0, 0.995049, 0.0993884, 0, 0.205717, -2.50193) + +[node name="Chain1" type="MeshInstance3D" parent="ChainB5"] +layers = 2 +gi_mode = 2 +mesh = SubResource("CapsuleMesh_i2aww") +surface_material_override/0 = SubResource("StandardMaterial3D_l1evv") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB5"] +shape = SubResource("CapsuleShape3D_eoojf") + +[node name="PinJoint1" type="PinJoint3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.28044, -1.4153) +node_a = NodePath("../Body") +node_b = NodePath("../ChainB1") + +[node name="PinJoint2" type="PinJoint3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.962693, -1.6492) +node_a = NodePath("../ChainB1") +node_b = NodePath("../ChainB2") + +[node name="PinJoint3" type="PinJoint3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.644947, -1.85661) +node_a = NodePath("../ChainB2") +node_b = NodePath("../ChainB3") +params/bias = 0.5 + +[node name="PinJoint4" type="PinJoint3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.350687, -2.04279) +node_a = NodePath("../ChainB3") +node_b = NodePath("../ChainB4") +params/bias = 0.5 + +[node name="PinJoint5" type="PinJoint3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.217609, -2.33375) +node_a = NodePath("../ChainB4") +node_b = NodePath("../ChainB5") +params/bias = 0.5 + +[node name="Body2" type="VehicleBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -3.97518) +mass = 10.0 +center_of_mass_mode = 1 +physics_material_override = SubResource("PhysicsMaterial_hvgqm") + +[node name="Wheel1" type="VehicleWheel3D" parent="Body2"] +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="Body2/Wheel1"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_uwuq1") + +[node name="Wheel2" type="VehicleWheel3D" parent="Body2"] +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="Body2/Wheel2"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_uwuq1") + +[node name="Wheel3" type="VehicleWheel3D" parent="Body2"] +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="Body2/Wheel3"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_uwuq1") + +[node name="Wheel4" type="VehicleWheel3D" parent="Body2"] +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="Body2/Wheel4"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_uwuq1") + +[node name="Body" type="MeshInstance3D" parent="Body2"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("5_04cnp") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Body2"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.588269, 0.0774262) +shape = SubResource("BoxShape3D_hbuqf") + +[node name="BlobShadow" type="Decal" parent="Body2"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.122867, 0.0251799) +size = Vector3(1.6, 4, 3) +texture_albedo = ExtResource("11_5ul8v") +upper_fade = 2.0 +lower_fade = 1.0 +cull_mask = 1048573 + +[node name="PinJoint6" type="PinJoint3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.148269, -2.64894) +node_a = NodePath("../ChainB5") +node_b = NodePath("../Body2") diff --git a/vehicles/trailer_truck.tscn b/vehicles/trailer_truck.tscn new file mode 100644 index 0000000..3ded4e4 --- /dev/null +++ b/vehicles/trailer_truck.tscn @@ -0,0 +1,367 @@ +[gd_scene load_steps=24 format=3 uid="uid://drinprblemj5u"] + +[ext_resource type="Script" path="res://vehicles/vehicle.gd" id="1_wetfm"] +[ext_resource type="ArrayMesh" uid="uid://bqrwin8ccgptt" path="res://vehicles/meshes/wheel.res" id="2_q28iu"] +[ext_resource type="ArrayMesh" uid="uid://ctglc27jx8xe2" path="res://vehicles/meshes/truck_cab.res" id="3_t1je7"] +[ext_resource type="Script" path="res://vehicles/follow_camera.gd" id="4_4yhuf"] +[ext_resource type="AudioStream" uid="uid://sy2li7u35867" path="res://vehicles/impact_1.wav" id="6_n54jl"] +[ext_resource type="AudioStream" uid="uid://cb7wvsd6vygd3" path="res://vehicles/engine.wav" id="6_r21ue"] +[ext_resource type="AudioStream" uid="uid://bf0h7s81yr8nj" path="res://vehicles/impact_2.wav" id="7_i1avs"] +[ext_resource type="AudioStream" uid="uid://sun2n8a4xapl" path="res://vehicles/impact_3.wav" id="8_nmphs"] +[ext_resource type="AudioStream" uid="uid://dpbayeeufya21" path="res://vehicles/impact_4.wav" id="9_11toc"] +[ext_resource type="Texture2D" uid="uid://d4ostmqwgytk" path="res://vehicles/particle_smoke.png" id="10_5qary"] +[ext_resource type="Texture2D" uid="uid://bju75l2w3r7vq" path="res://vehicles/blob_shadow.png" id="11_ifj1h"] +[ext_resource type="Material" uid="uid://dyg750wqca86r" path="res://vehicles/truck_trailer.tres" id="12_hbs2y"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_itmot"] +size = Vector3(1.3392, 1.04159, 2.3947) + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_xu0em"] +random_pitch = 1.05 +random_volume_offset_db = 2.0 +streams_count = 4 +stream_0/stream = ExtResource("6_n54jl") +stream_0/weight = 1.0 +stream_1/stream = ExtResource("7_i1avs") +stream_1/weight = 1.0 +stream_2/stream = ExtResource("8_nmphs") +stream_2/weight = 1.0 +stream_3/stream = ExtResource("9_11toc") +stream_3/weight = 1.0 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u6m2g"] +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("10_5qary") +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_q42ka"] +material = SubResource("StandardMaterial3D_u6m2g") + +[sub_resource type="Curve" id="Curve_n4o5r"] +_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_cj6wi"] +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_70jti"] +resource_name = "car_blue" +vertex_color_use_as_albedo = true +albedo_color = Color(0.0387471, 0, 0.256548, 1) +roughness = 0.6 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_uj5nn"] +resource_name = "chrome" +vertex_color_use_as_albedo = true +albedo_color = Color(0.797738, 0.797738, 0.797738, 1) +metallic = 1.0 +roughness = 0.35 + +[sub_resource type="ArrayMesh" id="ArrayMesh_8a087"] +_surfaces = [{ +"aabb": AABB(-0.653809, -0.437256, -1.98144, 1.30762, 0.674683, 3.89161), +"format": 34359742465, +"index_count": 444, +"index_data": PackedByteArray(4, 0, 1, 0, 2, 0, 4, 0, 6, 0, 1, 0, 3, 0, 6, 0, 4, 0, 3, 0, 5, 0, 6, 0, 5, 0, 0, 0, 7, 0, 5, 0, 3, 0, 0, 0, 4, 0, 0, 0, 3, 0, 4, 0, 2, 0, 0, 0, 1, 0, 5, 0, 7, 0, 1, 0, 6, 0, 5, 0, 51, 0, 8, 0, 50, 0, 51, 0, 9, 0, 8, 0, 55, 0, 9, 0, 48, 0, 55, 0, 8, 0, 9, 0, 43, 0, 46, 0, 39, 0, 43, 0, 40, 0, 46, 0, 62, 0, 28, 0, 60, 0, 62, 0, 11, 0, 28, 0, 14, 0, 67, 0, 15, 0, 14, 0, 10, 0, 67, 0, 17, 0, 56, 0, 16, 0, 17, 0, 73, 0, 56, 0, 71, 0, 38, 0, 18, 0, 71, 0, 70, 0, 38, 0, 21, 0, 73, 0, 17, 0, 21, 0, 22, 0, 73, 0, 27, 0, 64, 0, 66, 0, 27, 0, 63, 0, 64, 0, 26, 0, 68, 0, 32, 0, 26, 0, 27, 0, 68, 0, 32, 0, 35, 0, 33, 0, 32, 0, 68, 0, 35, 0, 53, 0, 11, 0, 13, 0, 53, 0, 12, 0, 11, 0, 68, 0, 30, 0, 35, 0, 68, 0, 34, 0, 30, 0, 43, 0, 69, 0, 74, 0, 43, 0, 23, 0, 69, 0, 63, 0, 26, 0, 54, 0, 63, 0, 27, 0, 26, 0, 47, 0, 17, 0, 16, 0, 47, 0, 65, 0, 17, 0, 13, 0, 10, 0, 14, 0, 13, 0, 11, 0, 10, 0, 24, 0, 74, 0, 31, 0, 24, 0, 41, 0, 74, 0, 28, 0, 25, 0, 60, 0, 28, 0, 34, 0, 25, 0, 41, 0, 44, 0, 74, 0, 41, 0, 42, 0, 44, 0, 57, 0, 11, 0, 62, 0, 57, 0, 10, 0, 11, 0, 73, 0, 49, 0, 50, 0, 73, 0, 58, 0, 49, 0, 52, 0, 34, 0, 28, 0, 52, 0, 29, 0, 34, 0, 34, 0, 37, 0, 30, 0, 34, 0, 29, 0, 37, 0, 10, 0, 51, 0, 67, 0, 10, 0, 9, 0, 51, 0, 63, 0, 24, 0, 31, 0, 63, 0, 54, 0, 24, 0, 67, 0, 49, 0, 52, 0, 67, 0, 50, 0, 49, 0, 7, 0, 2, 0, 1, 0, 7, 0, 0, 0, 2, 0, 34, 0, 59, 0, 25, 0, 34, 0, 68, 0, 59, 0, 31, 0, 64, 0, 63, 0, 31, 0, 72, 0, 64, 0, 32, 0, 49, 0, 54, 0, 32, 0, 52, 0, 49, 0, 51, 0, 50, 0, 67, 0, 12, 0, 67, 0, 52, 0, 68, 0, 66, 0, 59, 0, 68, 0, 27, 0, 66, 0, 20, 0, 17, 0, 18, 0, 20, 0, 21, 0, 17, 0, 58, 0, 43, 0, 39, 0, 58, 0, 38, 0, 43, 0, 11, 0, 52, 0, 28, 0, 11, 0, 12, 0, 52, 0, 61, 0, 18, 0, 19, 0, 61, 0, 20, 0, 18, 0, 29, 0, 36, 0, 37, 0, 29, 0, 52, 0, 36, 0, 55, 0, 16, 0, 8, 0, 55, 0, 47, 0, 16, 0, 26, 0, 32, 0, 54, 0, 29, 0, 52, 0, 32, 0, 74, 0, 40, 0, 43, 0, 74, 0, 44, 0, 40, 0, 41, 0, 49, 0, 58, 0, 41, 0, 54, 0, 49, 0, 65, 0, 18, 0, 17, 0, 65, 0, 71, 0, 18, 0, 74, 0, 72, 0, 31, 0, 74, 0, 69, 0, 72, 0, 19, 0, 58, 0, 73, 0, 38, 0, 23, 0, 43, 0, 38, 0, 70, 0, 23, 0, 36, 0, 12, 0, 53, 0, 36, 0, 52, 0, 12, 0, 48, 0, 10, 0, 57, 0, 48, 0, 9, 0, 10, 0, 39, 0, 41, 0, 58, 0, 45, 0, 19, 0, 58, 0, 45, 0, 61, 0, 19, 0, 24, 0, 54, 0, 41, 0, 56, 0, 8, 0, 16, 0, 56, 0, 50, 0, 8, 0, 56, 0, 73, 0, 50, 0, 39, 0, 45, 0, 58, 0, 39, 0, 46, 0, 45, 0, 18, 0, 58, 0, 19, 0, 18, 0, 38, 0, 58, 0, 43, 0, 46, 0, 40, 0, 43, 0, 39, 0, 46, 0, 14, 0, 67, 0, 10, 0, 14, 0, 15, 0, 67, 0, 21, 0, 73, 0, 22, 0, 21, 0, 17, 0, 73, 0, 32, 0, 35, 0, 68, 0, 32, 0, 33, 0, 35, 0, 53, 0, 11, 0, 12, 0, 53, 0, 13, 0, 11, 0, 68, 0, 30, 0, 34, 0, 68, 0, 35, 0, 30, 0, 13, 0, 10, 0, 11, 0, 13, 0, 14, 0, 10, 0, 41, 0, 44, 0, 42, 0, 41, 0, 74, 0, 44, 0, 34, 0, 37, 0, 29, 0, 34, 0, 30, 0, 37, 0, 20, 0, 17, 0, 21, 0, 20, 0, 18, 0, 17, 0, 61, 0, 18, 0, 20, 0, 61, 0, 19, 0, 18, 0, 29, 0, 36, 0, 52, 0, 29, 0, 37, 0, 36, 0, 74, 0, 40, 0, 44, 0, 74, 0, 43, 0, 40, 0, 36, 0, 12, 0, 52, 0, 36, 0, 53, 0, 12, 0, 45, 0, 19, 0, 61, 0, 45, 0, 58, 0, 19, 0, 39, 0, 45, 0, 46, 0, 39, 0, 58, 0, 45, 0), +"name": "car_blue", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 75, +"vertex_data": PackedByteArray(248, 223, 10, 190, 12, 64, 51, 190, 254, 127, 244, 63, 248, 223, 10, 190, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 12, 64, 51, 190, 254, 127, 244, 63, 29, 0, 1, 62, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 16, 32, 115, 62, 254, 127, 244, 63, 29, 0, 1, 62, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 16, 32, 115, 62, 254, 127, 244, 63, 0, 0, 0, 0, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 81, 160, 207, 60, 8, 32, 65, 191, 249, 159, 0, 191, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 81, 160, 207, 60, 8, 32, 65, 191, 249, 159, 0, 63, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 66, 64, 254, 189, 252, 255, 134, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 66, 64, 254, 189, 252, 255, 134, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 63, 169, 192, 201, 60, 1, 224, 244, 191, 0, 0, 0, 0, 5, 224, 223, 190, 252, 255, 134, 191, 0, 0, 0, 0, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 0, 0, 0, 0, 5, 224, 223, 190, 7, 96, 3, 190, 0, 0, 0, 0, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 191, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 81, 160, 207, 60, 254, 127, 216, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 63, 81, 160, 207, 60, 250, 95, 214, 190, 249, 159, 0, 63, 197, 31, 197, 60, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 81, 160, 207, 60, 2, 128, 173, 191, 0, 0, 0, 0, 230, 31, 253, 189, 228, 159, 73, 190, 0, 0, 0, 0, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 81, 160, 207, 60, 254, 127, 216, 191, 249, 159, 0, 63, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 81, 160, 207, 60, 250, 95, 214, 190, 249, 159, 0, 191, 197, 31, 197, 60, 252, 255, 134, 191, 249, 159, 0, 191, 81, 160, 207, 60, 2, 128, 173, 191, 249, 159, 0, 191, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190) +}, { +"aabb": AABB(-0.502441, -0.437256, -1.81738, 1.00489, 0.314402, 1.52466), +"format": 34359742465, +"index_count": 24, +"index_data": PackedByteArray(7, 0, 8, 0, 6, 0, 7, 0, 13, 0, 8, 0, 10, 0, 11, 0, 15, 0, 10, 0, 9, 0, 11, 0, 4, 0, 14, 0, 3, 0, 4, 0, 5, 0, 14, 0, 1, 0, 12, 0, 2, 0, 1, 0, 0, 0, 12, 0), +"name": "chrome", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 16, +"vertex_data": PackedByteArray(249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190) +}, { +"aabb": AABB(-0.625, -0.00771, -2.00586, 1.24024, 1.12197, 4.19922), +"format": 34359742465, +"index_count": 36, +"index_data": PackedByteArray(1, 0, 7, 0, 4, 0, 1, 0, 6, 0, 7, 0, 0, 0, 6, 0, 1, 0, 0, 0, 5, 0, 6, 0, 3, 0, 5, 0, 0, 0, 3, 0, 2, 0, 5, 0, 4, 0, 2, 0, 3, 0, 4, 0, 7, 0, 2, 0, 0, 0, 4, 0, 3, 0, 0, 0, 1, 0, 4, 0, 6, 0, 2, 0, 7, 0, 6, 0, 5, 0, 2, 0), +"name": "truck_trailer", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 8, +"vertex_data": PackedByteArray(250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 0, 192, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 0, 192, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 12, 64, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 12, 64, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 12, 64, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 12, 64) +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_e2bcg"] +resource_name = "meshes_truck_trailer" +_surfaces = [{ +"aabb": AABB(-0.653809, -0.437256, -1.98144, 1.30762, 0.674683, 3.89161), +"attribute_data": PackedByteArray(0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63), +"format": 34359742487, +"index_count": 444, +"index_data": PackedByteArray(13, 0, 4, 0, 8, 0, 13, 0, 18, 0, 4, 0, 11, 0, 20, 0, 14, 0, 11, 0, 17, 0, 20, 0, 15, 0, 2, 0, 22, 0, 15, 0, 10, 0, 2, 0, 12, 0, 1, 0, 9, 0, 12, 0, 7, 0, 1, 0, 5, 0, 16, 0, 23, 0, 5, 0, 19, 0, 16, 0, 117, 0, 24, 0, 115, 0, 117, 0, 25, 0, 24, 0, 126, 0, 25, 0, 111, 0, 126, 0, 24, 0, 25, 0, 103, 0, 107, 0, 92, 0, 103, 0, 95, 0, 107, 0, 138, 0, 69, 0, 135, 0, 138, 0, 32, 0, 69, 0, 39, 0, 146, 0, 41, 0, 39, 0, 27, 0, 146, 0, 44, 0, 127, 0, 42, 0, 44, 0, 156, 0, 127, 0, 153, 0, 90, 0, 47, 0, 153, 0, 152, 0, 90, 0, 57, 0, 157, 0, 46, 0, 57, 0, 58, 0, 157, 0, 67, 0, 140, 0, 142, 0, 67, 0, 139, 0, 140, 0, 66, 0, 150, 0, 80, 0, 66, 0, 68, 0, 150, 0, 79, 0, 85, 0, 81, 0, 79, 0, 148, 0, 85, 0, 123, 0, 30, 0, 37, 0, 123, 0, 35, 0, 30, 0, 149, 0, 74, 0, 86, 0, 149, 0, 83, 0, 74, 0, 101, 0, 151, 0, 160, 0, 101, 0, 59, 0, 151, 0, 139, 0, 65, 0, 125, 0, 139, 0, 67, 0, 65, 0, 109, 0, 44, 0, 42, 0, 109, 0, 141, 0, 44, 0, 38, 0, 28, 0, 40, 0, 38, 0, 31, 0, 28, 0, 60, 0, 160, 0, 75, 0, 60, 0, 96, 0, 160, 0, 69, 0, 63, 0, 135, 0, 69, 0, 84, 0, 63, 0, 97, 0, 105, 0, 162, 0, 97, 0, 100, 0, 105, 0, 130, 0, 32, 0, 138, 0, 130, 0, 29, 0, 32, 0, 158, 0, 113, 0, 114, 0, 158, 0, 133, 0, 113, 0, 121, 0, 84, 0, 69, 0, 121, 0, 72, 0, 84, 0, 82, 0, 89, 0, 73, 0, 82, 0, 71, 0, 89, 0, 29, 0, 118, 0, 147, 0, 29, 0, 26, 0, 118, 0, 139, 0, 62, 0, 76, 0, 139, 0, 125, 0, 62, 0, 144, 0, 113, 0, 119, 0, 144, 0, 114, 0, 113, 0, 21, 0, 6, 0, 3, 0, 21, 0, 0, 0, 6, 0, 84, 0, 134, 0, 63, 0, 84, 0, 150, 0, 134, 0, 76, 0, 140, 0, 139, 0, 76, 0, 155, 0, 140, 0, 77, 0, 113, 0, 124, 0, 77, 0, 119, 0, 113, 0, 116, 0, 114, 0, 144, 0, 34, 0, 145, 0, 120, 0, 150, 0, 143, 0, 134, 0, 150, 0, 68, 0, 143, 0, 54, 0, 45, 0, 48, 0, 54, 0, 56, 0, 45, 0, 131, 0, 101, 0, 91, 0, 131, 0, 90, 0, 101, 0, 32, 0, 121, 0, 69, 0, 32, 0, 36, 0, 121, 0, 136, 0, 49, 0, 51, 0, 136, 0, 55, 0, 49, 0, 70, 0, 87, 0, 88, 0, 70, 0, 120, 0, 87, 0, 126, 0, 43, 0, 24, 0, 126, 0, 110, 0, 43, 0, 64, 0, 77, 0, 124, 0, 70, 0, 120, 0, 78, 0, 161, 0, 94, 0, 102, 0, 161, 0, 104, 0, 94, 0, 99, 0, 113, 0, 133, 0, 99, 0, 124, 0, 113, 0, 141, 0, 47, 0, 44, 0, 141, 0, 153, 0, 47, 0, 160, 0, 154, 0, 75, 0, 160, 0, 151, 0, 154, 0, 53, 0, 132, 0, 159, 0, 90, 0, 59, 0, 101, 0, 90, 0, 152, 0, 59, 0, 87, 0, 33, 0, 122, 0, 87, 0, 120, 0, 33, 0, 112, 0, 29, 0, 130, 0, 112, 0, 26, 0, 29, 0, 93, 0, 98, 0, 132, 0, 106, 0, 52, 0, 132, 0, 106, 0, 137, 0, 52, 0, 61, 0, 124, 0, 99, 0, 129, 0, 24, 0, 43, 0, 129, 0, 115, 0, 24, 0, 128, 0, 158, 0, 114, 0, 93, 0, 106, 0, 132, 0, 93, 0, 108, 0, 106, 0, 47, 0, 131, 0, 50, 0, 47, 0, 90, 0, 131, 0, 204, 0, 210, 0, 200, 0, 204, 0, 199, 0, 210, 0, 172, 0, 217, 0, 164, 0, 172, 0, 173, 0, 217, 0, 182, 0, 220, 0, 184, 0, 182, 0, 174, 0, 220, 0, 189, 0, 194, 0, 219, 0, 189, 0, 190, 0, 194, 0, 212, 0, 166, 0, 167, 0, 212, 0, 170, 0, 166, 0, 218, 0, 187, 0, 191, 0, 218, 0, 193, 0, 187, 0, 169, 0, 163, 0, 165, 0, 169, 0, 171, 0, 163, 0, 202, 0, 206, 0, 203, 0, 202, 0, 221, 0, 206, 0, 192, 0, 196, 0, 185, 0, 192, 0, 188, 0, 196, 0, 181, 0, 175, 0, 183, 0, 181, 0, 177, 0, 175, 0, 216, 0, 176, 0, 180, 0, 216, 0, 179, 0, 176, 0, 186, 0, 195, 0, 211, 0, 186, 0, 197, 0, 195, 0, 222, 0, 201, 0, 207, 0, 222, 0, 205, 0, 201, 0, 195, 0, 168, 0, 211, 0, 195, 0, 213, 0, 168, 0, 208, 0, 178, 0, 215, 0, 208, 0, 214, 0, 178, 0, 198, 0, 208, 0, 209, 0, 198, 0, 214, 0, 208, 0), +"material": SubResource("StandardMaterial3D_70jti"), +"name": "car_blue", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 223, +"vertex_data": PackedByteArray(248, 223, 10, 190, 12, 64, 51, 190, 254, 127, 244, 63, 248, 223, 10, 190, 12, 64, 51, 190, 254, 127, 244, 63, 248, 223, 10, 190, 12, 64, 51, 190, 254, 127, 244, 63, 248, 223, 10, 190, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 12, 64, 51, 190, 1, 192, 221, 63, 248, 223, 10, 190, 12, 64, 51, 190, 1, 192, 221, 63, 248, 223, 10, 190, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 12, 64, 51, 190, 254, 127, 244, 63, 29, 0, 1, 62, 12, 64, 51, 190, 254, 127, 244, 63, 29, 0, 1, 62, 12, 64, 51, 190, 254, 127, 244, 63, 29, 0, 1, 62, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 16, 32, 115, 62, 254, 127, 244, 63, 29, 0, 1, 62, 16, 32, 115, 62, 254, 127, 244, 63, 29, 0, 1, 62, 16, 32, 115, 62, 254, 127, 244, 63, 29, 0, 1, 62, 16, 32, 115, 62, 1, 192, 221, 63, 29, 0, 1, 62, 16, 32, 115, 62, 1, 192, 221, 63, 29, 0, 1, 62, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 16, 32, 115, 62, 254, 127, 244, 63, 248, 223, 10, 190, 16, 32, 115, 62, 254, 127, 244, 63, 248, 223, 10, 190, 16, 32, 115, 62, 254, 127, 244, 63, 0, 0, 0, 0, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 191, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 81, 160, 207, 60, 8, 32, 65, 191, 249, 159, 0, 191, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 191, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 191, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 81, 160, 207, 60, 8, 32, 65, 191, 249, 159, 0, 63, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 66, 64, 254, 189, 252, 255, 134, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 191, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 66, 64, 254, 189, 252, 255, 134, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 191, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 63, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 63, 169, 192, 201, 60, 1, 224, 244, 191, 0, 0, 0, 0, 5, 224, 223, 190, 252, 255, 134, 191, 0, 0, 0, 0, 5, 224, 223, 190, 253, 159, 253, 191, 0, 0, 0, 0, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 0, 0, 0, 0, 5, 224, 223, 190, 7, 96, 3, 190, 0, 0, 0, 0, 5, 224, 223, 190, 7, 96, 3, 190, 0, 0, 0, 0, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 191, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 191, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 191, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 81, 160, 207, 60, 254, 127, 216, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 63, 81, 160, 207, 60, 250, 95, 214, 190, 249, 159, 0, 63, 197, 31, 197, 60, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 81, 160, 207, 60, 2, 128, 173, 191, 0, 0, 0, 0, 230, 31, 253, 189, 228, 159, 73, 190, 0, 0, 0, 0, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 81, 160, 207, 60, 254, 127, 216, 191, 249, 159, 0, 63, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 63, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 81, 160, 207, 60, 250, 95, 214, 190, 249, 159, 0, 191, 197, 31, 197, 60, 252, 255, 134, 191, 249, 159, 0, 191, 81, 160, 207, 60, 2, 128, 173, 191, 249, 159, 0, 191, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 140, 243, 255, 255, 255, 255, 255, 191, 140, 243, 255, 255, 255, 255, 255, 191, 254, 255, 255, 127, 255, 255, 255, 63, 223, 218, 52, 247, 255, 255, 255, 191, 5, 152, 249, 231, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 63, 201, 136, 31, 165, 255, 255, 255, 63, 5, 152, 249, 231, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 201, 136, 31, 165, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 201, 136, 31, 165, 255, 255, 255, 63, 5, 152, 249, 231, 255, 255, 255, 191, 223, 218, 52, 247, 255, 255, 255, 191, 5, 152, 249, 231, 255, 255, 255, 191, 223, 218, 52, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 140, 243, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 249, 103, 249, 231, 255, 255, 255, 191, 31, 37, 52, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 53, 119, 31, 165, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 53, 119, 31, 165, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 53, 119, 31, 165, 255, 255, 255, 63, 249, 103, 249, 231, 255, 255, 255, 191, 31, 37, 52, 247, 255, 255, 255, 191, 31, 37, 52, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 248, 150, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 248, 150, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 123, 140, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 221, 218, 20, 247, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 221, 218, 20, 247, 255, 255, 255, 191, 5, 152, 249, 231, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 123, 140, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 217, 136, 31, 165, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 217, 136, 31, 165, 255, 255, 255, 63, 221, 218, 20, 247, 255, 255, 255, 191, 5, 152, 249, 231, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 217, 136, 31, 165, 255, 255, 255, 63, 5, 152, 249, 231, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 221, 218, 20, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 33, 37, 20, 247, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 33, 37, 20, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 37, 119, 31, 165, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 37, 119, 31, 165, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 33, 37, 20, 247, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 37, 119, 31, 165, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 33, 37, 20, 247, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 23, 233, 255, 255, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 23, 233, 255, 255, 255, 255, 255, 191, 254, 255, 255, 127, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 201, 136, 31, 165, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 248, 150, 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 23, 233, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 53, 119, 31, 165, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 123, 140, 255, 255, 255, 63, 255, 127, 255, 127, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 223, 218, 52, 247, 255, 255, 255, 191, 254, 255, 255, 127, 255, 255, 255, 63, 217, 136, 31, 165, 255, 255, 255, 63, 5, 152, 249, 231, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 255, 127, 255, 127, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 63, 31, 37, 52, 247, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 37, 119, 31, 165, 255, 255, 255, 63, 249, 103, 5, 24, 255, 255, 255, 191, 53, 119, 223, 90, 255, 255, 255, 63, 249, 103, 5, 24, 255, 255, 255, 191, 31, 37, 202, 8, 255, 255, 255, 191, 31, 37, 202, 8, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 249, 103, 5, 24, 255, 255, 255, 191, 31, 37, 202, 8, 255, 255, 255, 191, 249, 103, 5, 24, 255, 255, 255, 191, 53, 119, 223, 90, 255, 255, 255, 63, 53, 119, 223, 90, 255, 255, 255, 63, 201, 136, 223, 90, 255, 255, 255, 63, 5, 152, 5, 24, 255, 255, 255, 191, 223, 218, 202, 8, 255, 255, 255, 191, 5, 152, 5, 24, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 223, 218, 202, 8, 255, 255, 255, 191, 223, 218, 202, 8, 255, 255, 255, 191, 5, 152, 5, 24, 255, 255, 255, 191, 201, 136, 223, 90, 255, 255, 255, 63, 5, 152, 5, 24, 255, 255, 255, 191, 201, 136, 223, 90, 255, 255, 255, 63, 21, 119, 222, 90, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 249, 103, 5, 24, 255, 255, 255, 191, 21, 119, 222, 90, 255, 255, 255, 63, 32, 37, 218, 8, 255, 255, 255, 191, 32, 37, 218, 8, 255, 255, 255, 191, 249, 103, 5, 24, 255, 255, 255, 191, 21, 119, 222, 90, 255, 255, 255, 63, 249, 103, 5, 24, 255, 255, 255, 191, 32, 37, 218, 8, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 21, 119, 222, 90, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 233, 136, 222, 90, 255, 255, 255, 63, 233, 136, 222, 90, 255, 255, 255, 63, 5, 152, 5, 24, 255, 255, 255, 191, 222, 218, 218, 8, 255, 255, 255, 191, 222, 218, 218, 8, 255, 255, 255, 191, 233, 136, 222, 90, 255, 255, 255, 63, 5, 152, 5, 24, 255, 255, 255, 191, 222, 218, 218, 8, 255, 255, 255, 191, 5, 152, 5, 24, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 233, 136, 222, 90, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 31, 37, 202, 8, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 223, 218, 202, 8, 255, 255, 255, 191, 53, 119, 223, 90, 255, 255, 255, 63, 249, 103, 5, 24, 255, 255, 255, 191, 32, 37, 218, 8, 255, 255, 255, 191, 201, 136, 223, 90, 255, 255, 255, 63, 222, 218, 218, 8, 255, 255, 255, 191, 5, 152, 5, 24, 255, 255, 255, 191) +}, { +"aabb": AABB(-0.502441, -0.437256, -1.81738, 1.00489, 0.314402, 1.52466), +"attribute_data": PackedByteArray(0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63), +"format": 34359742487, +"index_count": 24, +"index_data": PackedByteArray(7, 0, 8, 0, 6, 0, 7, 0, 13, 0, 8, 0, 10, 0, 11, 0, 15, 0, 10, 0, 9, 0, 11, 0, 4, 0, 14, 0, 3, 0, 4, 0, 5, 0, 14, 0, 1, 0, 12, 0, 2, 0, 1, 0, 0, 0, 12, 0), +"material": SubResource("StandardMaterial3D_uj5nn"), +"name": "chrome", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 16, +"vertex_data": PackedByteArray(249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191) +}, { +"aabb": AABB(-0.625, -0.00771, -2.00586, 1.24024, 1.12197, 4.19922), +"attribute_data": PackedByteArray(64, 193, 241, 62, 218, 161, 71, 63, 31, 250, 91, 63, 5, 121, 127, 63, 182, 186, 127, 63, 136, 28, 41, 63, 0, 79, 60, 59, 168, 28, 41, 63, 66, 193, 241, 62, 203, 255, 125, 63, 143, 251, 118, 63, 5, 121, 127, 63, 192, 218, 96, 60, 115, 56, 72, 63, 109, 151, 248, 62, 194, 197, 125, 63, 3, 118, 94, 59, 208, 175, 3, 62, 66, 182, 230, 61, 220, 161, 71, 63, 232, 183, 210, 61, 115, 56, 72, 63, 3, 118, 94, 59, 140, 28, 41, 63, 171, 17, 127, 63, 161, 28, 41, 63, 66, 182, 230, 61, 203, 255, 125, 63, 232, 183, 210, 61, 135, 175, 122, 63, 31, 250, 91, 63, 164, 156, 78, 63, 11, 233, 88, 63, 194, 197, 125, 63, 182, 186, 127, 63, 208, 175, 3, 62, 0, 79, 60, 59, 152, 208, 4, 62, 143, 251, 118, 63, 164, 156, 78, 63, 11, 233, 88, 63, 179, 16, 71, 63, 171, 17, 127, 63, 144, 208, 4, 62, 192, 218, 96, 60, 135, 175, 122, 63, 111, 151, 248, 62, 181, 16, 71, 63), +"format": 34359742487, +"index_count": 36, +"index_data": PackedByteArray(3, 0, 21, 0, 12, 0, 3, 0, 18, 0, 21, 0, 1, 0, 19, 0, 5, 0, 1, 0, 15, 0, 19, 0, 11, 0, 17, 0, 2, 0, 11, 0, 8, 0, 17, 0, 14, 0, 6, 0, 10, 0, 14, 0, 22, 0, 6, 0, 0, 0, 13, 0, 9, 0, 0, 0, 4, 0, 13, 0, 20, 0, 7, 0, 23, 0, 20, 0, 16, 0, 7, 0), +"material": ExtResource("12_hbs2y"), +"name": "truck_trailer", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 24, +"vertex_data": PackedByteArray(250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 0, 192, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 0, 192, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 0, 192, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 0, 192, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 0, 192, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 0, 192, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 12, 64, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 12, 64, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 12, 64, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 12, 64, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 12, 64, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 12, 64, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 12, 64, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 12, 64, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 12, 64, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 0, 192, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 0, 192, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 12, 64, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 12, 64, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 12, 64, 255, 127, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 255, 191, 255, 255, 255, 127, 254, 255, 0, 128, 0, 0, 255, 127, 255, 127, 255, 191, 255, 127, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 191, 255, 127, 255, 127, 255, 127, 0, 128, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 254, 255, 255, 127, 255, 127, 255, 127, 0, 128, 255, 255, 255, 127, 255, 255, 0, 128, 0, 0, 255, 127, 255, 127, 255, 191, 255, 127, 0, 0, 0, 0, 255, 255, 255, 127, 255, 127, 255, 127, 0, 128, 255, 255, 255, 255, 0, 0, 255, 191, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 0, 128, 0, 0, 255, 127, 255, 127, 255, 191, 255, 255, 255, 255, 0, 0, 255, 191, 255, 127, 255, 255, 255, 255, 255, 255, 0, 0, 255, 127, 255, 127, 255, 191, 255, 127, 255, 127, 255, 127, 0, 128, 255, 127, 255, 255, 255, 255, 254, 255) +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_8a087") + +[sub_resource type="BoxShape3D" id="BoxShape3D_dpscj"] +size = Vector3(1.49783, 1.38835, 3.94168) + +[node name="TrailerTruck" 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 +script = ExtResource("1_wetfm") + +[node name="Wheel1" type="VehicleWheel3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.000773743, 1.10416) +use_as_traction = true +use_as_steering = true +wheel_roll_influence = 0.4 +wheel_radius = 0.23 +wheel_friction_slip = 1.0 +suspension_stiffness = 28.0 +damping_compression = 0.88 + +[node name="Wheel1" type="MeshInstance3D" parent="Body/Wheel1"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_q28iu") + +[node name="Wheel2" type="VehicleWheel3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.000773743, -0.783403) +use_as_traction = true +wheel_roll_influence = 0.4 +wheel_radius = 0.23 +wheel_friction_slip = 1.0 +suspension_stiffness = 28.0 +damping_compression = 0.88 + +[node name="Wheel2" type="MeshInstance3D" parent="Body/Wheel2"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_q28iu") + +[node name="Wheel3" type="VehicleWheel3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.000773743, 1.10416) +use_as_traction = true +use_as_steering = true +wheel_roll_influence = 0.4 +wheel_radius = 0.23 +wheel_friction_slip = 1.0 +suspension_stiffness = 28.0 +damping_compression = 0.88 + +[node name="Wheel3" type="MeshInstance3D" parent="Body/Wheel3"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_q28iu") + +[node name="Wheel4" type="VehicleWheel3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.000773743, -0.783403) +use_as_traction = true +wheel_roll_influence = 0.4 +wheel_radius = 0.23 +wheel_friction_slip = 1.0 +suspension_stiffness = 28.0 +damping_compression = 0.88 + +[node name="Wheel4" type="MeshInstance3D" parent="Body/Wheel4"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_q28iu") + +[node name="Body" type="MeshInstance3D" parent="Body"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("3_t1je7") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.571059, 0.132248) +shape = SubResource("BoxShape3D_itmot") + +[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.74227e-08, 0.241922, -0.970295, 0, 2.032, -4.394) +current = true +fov = 74.0 +near = 0.1 +script = ExtResource("4_4yhuf") +min_distance = 5.0 +max_distance = 7.0 +height = 2.5 + +[node name="EngineSound" type="AudioStreamPlayer3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.222867, 0.0955184) +stream = ExtResource("6_r21ue") +pitch_scale = 0.05 +autoplay = true +attenuation_filter_cutoff_hz = 20500.0 + +[node name="ImpactSound" type="AudioStreamPlayer3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.222867, 0.0955184) +stream = SubResource("AudioStreamRandomizer_xu0em") +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_q42ka") +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_n4o5r") +color_ramp = SubResource("Gradient_cj6wi") + +[node name="BlobShadow" type="Decal" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.222867, 0.145518) +size = Vector3(1.6, 4, 3) +texture_albedo = ExtResource("11_ifj1h") +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) + +[node name="Trailer" type="VehicleBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.637902, -2.78118) +center_of_mass_mode = 1 + +[node name="TWheel1" type="VehicleWheel3D" parent="Trailer"] +transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-08, 0, 0, 1, 0.573678, -0.402732, -1.53277) +wheel_roll_influence = 0.4 +wheel_radius = 0.1 +wheel_friction_slip = 1.0 +suspension_stiffness = 28.0 +damping_compression = 0.88 + +[node name="TWheel1" type="MeshInstance3D" parent="Trailer/TWheel1"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_q28iu") + +[node name="TWheel2" type="VehicleWheel3D" parent="Trailer"] +transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-08, 0, 0, 1, 0.573678, -0.402732, -0.600809) +wheel_roll_influence = 0.4 +wheel_radius = 0.23 +wheel_friction_slip = 1.0 +suspension_stiffness = 28.0 +damping_compression = 0.88 + +[node name="TWheel2" type="MeshInstance3D" parent="Trailer/TWheel2"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_q28iu") + +[node name="TWheel3" type="VehicleWheel3D" parent="Trailer"] +transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-08, 0, 0, 1, -0.573678, -0.402732, -1.53277) +wheel_roll_influence = 0.4 +wheel_radius = 0.1 +wheel_friction_slip = 1.0 +suspension_stiffness = 28.0 +damping_compression = 0.88 + +[node name="TWheel3" type="MeshInstance3D" parent="Trailer/TWheel3"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_q28iu") + +[node name="TWheel4" type="VehicleWheel3D" parent="Trailer"] +transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-08, 0, 0, 1, -0.573678, -0.402732, -0.600809) +wheel_roll_influence = 0.4 +wheel_radius = 0.23 +wheel_friction_slip = 1.0 +suspension_stiffness = 20.0 +damping_compression = 0.88 + +[node name="TWheel4" type="MeshInstance3D" parent="Trailer/TWheel4"] +layers = 2 +gi_mode = 2 +mesh = ExtResource("2_q28iu") + +[node name="Trailer" type="MeshInstance3D" parent="Trailer"] +layers = 2 +gi_mode = 2 +mesh = SubResource("ArrayMesh_e2bcg") + +[node name="BlobShadow" type="Decal" parent="Trailer/Trailer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00339114, -0.160769, 0.0766983) +size = Vector3(1.2, 4, 4.2) +texture_albedo = ExtResource("11_ifj1h") +upper_fade = 2.0 +lower_fade = 1.0 +cull_mask = 1048573 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Trailer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.383046, -0.0335202) +shape = SubResource("BoxShape3D_dpscj") + +[node name="BlobShadow" type="Decal" parent="Trailer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.003, -0.661, -1.05) +size = Vector3(1.6, 4, 1.8) +texture_albedo = ExtResource("11_ifj1h") +upper_fade = 2.0 +lower_fade = 1.0 +cull_mask = 1048573 + +[node name="PinJoint3D" type="ConeTwistJoint3D" parent="."] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0.704587, -0.960112) +node_a = NodePath("../Trailer") +node_b = NodePath("../Body") +swing_span = 30.0 +twist_span = 45.0 diff --git a/vehicles/truck_trailer.png b/vehicles/truck_trailer.png new file mode 100644 index 0000000..7aa994c Binary files /dev/null and b/vehicles/truck_trailer.png differ diff --git a/vehicles/truck_trailer.png.import b/vehicles/truck_trailer.png.import new file mode 100644 index 0000000..63691fe --- /dev/null +++ b/vehicles/truck_trailer.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://q7uvsiqefkwr" +path="res://.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://vehicles/truck_trailer.png" +dest_files=["res://.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.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 diff --git a/vehicles/truck_trailer.tres b/vehicles/truck_trailer.tres new file mode 100644 index 0000000..dd8f432 --- /dev/null +++ b/vehicles/truck_trailer.tres @@ -0,0 +1,8 @@ +[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dyg750wqca86r"] + +[ext_resource type="Texture2D" uid="uid://q7uvsiqefkwr" path="res://vehicles/truck_trailer.png" id="1_jkh55"] + +[resource] +albedo_texture = ExtResource("1_jkh55") +roughness = 0.6 +texture_filter = 5 diff --git a/vehicles/vehicle.gd b/vehicles/vehicle.gd new file mode 100644 index 0000000..b74c241 --- /dev/null +++ b/vehicles/vehicle.gd @@ -0,0 +1,61 @@ +extends VehicleBody3D + +const STEER_SPEED = 1.5 +const STEER_LIMIT = 0.4 +const BRAKE_STRENGTH = 2.0 + +@export var engine_force_value := 40.0 + +var previous_speed := linear_velocity.length() +var _steer_target := 0.0 + +@onready var desired_engine_pitch: float = $EngineSound.pitch_scale + +func _physics_process(delta: float): + var fwd_mps := (linear_velocity * transform.basis).x + + _steer_target = Input.get_axis(&"turn_right", &"turn_left") + _steer_target *= STEER_LIMIT + + # Engine sound simulation (not realistic, as this car script has no notion of gear or engine RPM). + desired_engine_pitch = 0.05 + linear_velocity.length() / (engine_force_value * 0.5) + # Change pitch smoothly to avoid abrupt change on collision. + $EngineSound.pitch_scale = lerpf($EngineSound.pitch_scale, desired_engine_pitch, 0.2) + + if abs(linear_velocity.length() - previous_speed) > 1.0: + # Sudden velocity change, likely due to a collision. Play an impact sound to give audible feedback, + # and vibrate for haptic feedback. + $ImpactSound.play() + Input.vibrate_handheld(100) + for joypad in Input.get_connected_joypads(): + Input.start_joy_vibration(joypad, 0.0, 0.5, 0.1) + + # Automatically accelerate when using touch controls (reversing overrides acceleration). + if DisplayServer.is_touchscreen_available() or Input.is_action_pressed(&"accelerate"): + # Increase engine force at low speeds to make the initial acceleration faster. + var speed := linear_velocity.length() + if speed < 5.0 and not is_zero_approx(speed): + engine_force = clampf(engine_force_value * 5.0 / speed, 0.0, 100.0) + else: + engine_force = engine_force_value + + if not DisplayServer.is_touchscreen_available(): + # Apply analog throttle factor for more subtle acceleration if not fully holding down the trigger. + engine_force *= Input.get_action_strength(&"accelerate") + else: + engine_force = 0.0 + + if Input.is_action_pressed(&"reverse"): + # Increase engine force at low speeds to make the initial reversing faster. + var speed := linear_velocity.length() + if speed < 5.0 and not is_zero_approx(speed): + engine_force = -clampf(engine_force_value * BRAKE_STRENGTH * 5.0 / speed, 0.0, 100.0) + else: + engine_force = -engine_force_value * BRAKE_STRENGTH + + # Apply analog brake factor for more subtle braking if not fully holding down the trigger. + engine_force *= Input.get_action_strength(&"reverse") + + steering = move_toward(steering, _steer_target, STEER_SPEED * delta) + + previous_speed = linear_velocity.length()