generated from krampus/template-godot4
	Compare commits
	
		
			3 Commits
		
	
	
		
			cd9a58a660
			...
			9d6a902d78
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9d6a902d78 | |||
| 1bd11434e4 | |||
| 6ad1ce2140 | 
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								asset_dev/guard_rail/guard_rail.blend
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								asset_dev/guard_rail/guard_rail.blend
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								asset_dev/guard_rail/guard_rail_post.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								asset_dev/guard_rail/guard_rail_post.xcf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								assets/textures/guard_rail/guard_rail_post.png
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/textures/guard_rail/guard_rail_post.png
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										34
									
								
								assets/textures/guard_rail/guard_rail_post.png.import
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								assets/textures/guard_rail/guard_rail_post.png.import
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| [remap] | ||||
| 
 | ||||
| importer="texture" | ||||
| type="CompressedTexture2D" | ||||
| uid="uid://cxeela02ysscf" | ||||
| path="res://.godot/imported/guard_rail_post.png-4447ff881a5916e5281ed251b7beecd0.ctex" | ||||
| metadata={ | ||||
| "vram_texture": false | ||||
| } | ||||
| 
 | ||||
| [deps] | ||||
| 
 | ||||
| source_file="res://assets/textures/guard_rail/guard_rail_post.png" | ||||
| dest_files=["res://.godot/imported/guard_rail_post.png-4447ff881a5916e5281ed251b7beecd0.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 | ||||
							
								
								
									
										
											BIN
										
									
								
								assets/vista_2.png
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/vista_2.png
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -1,4 +1,4 @@ | ||||
| [gd_scene load_steps=36 format=3 uid="uid://bm2o3mex10v11"] | ||||
| [gd_scene load_steps=40 format=3 uid="uid://bm2o3mex10v11"] | ||||
| 
 | ||||
| [ext_resource type="Terrain3DStorage" uid="uid://bu1gewgsgc5hm" path="res://levels/debug_level/terrain_3d_storage.res" id="1_nlsu2"] | ||||
| [ext_resource type="Texture2D" path="res://assets/textures/grass_fairway/grass_fairway_albedo.dds" id="2_e4m27"] | ||||
| @ -15,6 +15,7 @@ | ||||
| [ext_resource type="PackedScene" uid="uid://di7aql54lksn7" path="res://src/props/scenery/trees/palm_tree/palm_tree.tscn" id="12_sswxf"] | ||||
| [ext_resource type="PackedScene" uid="uid://c7l58wuuahn7w" path="res://src/props/flag/flag.tscn" id="13_6jtao"] | ||||
| [ext_resource type="Texture2D" uid="uid://dj60e8ri2fco" path="res://assets/models/scenery/city/concrete_building_1/concrete_building_1.png" id="14_y7s2h"] | ||||
| [ext_resource type="PackedScene" uid="uid://nqar1qcun8ax" path="res://src/props/scenery/highway/guard_rail.tscn" id="16_xtxyj"] | ||||
| 
 | ||||
| [sub_resource type="FastNoiseLite" id="FastNoiseLite_rpgb7"] | ||||
| noise_type = 0 | ||||
| @ -38,21 +39,30 @@ _shader_parameters = { | ||||
| "noise2_scale": 0.076, | ||||
| "noise3_scale": 0.021, | ||||
| "noise_texture": SubResource("NoiseTexture2D_sb318"), | ||||
| "vertex_normals_distance": 128.0 | ||||
| "vertex_normals_distance": 128.0, | ||||
| "world_noise_blend_far": 1.0, | ||||
| "world_noise_blend_near": 0.57, | ||||
| "world_noise_height": 74.0, | ||||
| "world_noise_lod_distance": 16384.0, | ||||
| "world_noise_max_octaves": 8, | ||||
| "world_noise_min_octaves": 2, | ||||
| "world_noise_offset": Vector3(0, -8, 0), | ||||
| "world_noise_scale": 5.0 | ||||
| } | ||||
| world_background = 2 | ||||
| texture_filtering = 1 | ||||
| show_navigation = true | ||||
| 
 | ||||
| [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ly4sm"] | ||||
| [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2u1w6"] | ||||
| cull_mode = 2 | ||||
| vertex_color_use_as_albedo = true | ||||
| backlight_enabled = true | ||||
| backlight = Color(0.5, 0.5, 0.5, 1) | ||||
| 
 | ||||
| [sub_resource type="Terrain3DMeshAsset" id="Terrain3DMeshAsset_8g62o"] | ||||
| name = "palm_tree" | ||||
| height_offset = 0.5 | ||||
| density = 10.0 | ||||
| material_override = SubResource("StandardMaterial3D_ly4sm") | ||||
| material_override = SubResource("StandardMaterial3D_2u1w6") | ||||
| generated_type = 1 | ||||
| 
 | ||||
| [sub_resource type="Terrain3DTextureAsset" id="Terrain3DTextureAsset_kocfk"] | ||||
| @ -82,11 +92,16 @@ sky_material = SubResource("PanoramaSkyMaterial_h8tes") | ||||
| background_mode = 2 | ||||
| sky = SubResource("Sky_2xshh") | ||||
| ambient_light_source = 2 | ||||
| ambient_light_color = Color(0.838897, 0.838897, 0.838897, 1) | ||||
| ambient_light_color = Color(0.78, 0.78, 0.78, 1) | ||||
| ssao_enabled = true | ||||
| ssao_intensity = 1.7 | ||||
| glow_enabled = true | ||||
| glow_bloom = 0.05 | ||||
| volumetric_fog_enabled = true | ||||
| volumetric_fog_density = 0.005 | ||||
| volumetric_fog_emission = Color(0, 1, 1, 1) | ||||
| volumetric_fog_length = 32.0 | ||||
| volumetric_fog_density = 0.001 | ||||
| volumetric_fog_emission = Color(0.6, 1, 1, 1) | ||||
| volumetric_fog_length = 1024.0 | ||||
| volumetric_fog_sky_affect = 0.0 | ||||
| 
 | ||||
| [sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_ypy22"] | ||||
| dof_blur_far_distance = 200.0 | ||||
| @ -95,6 +110,17 @@ dof_blur_near_enabled = true | ||||
| dof_blur_near_distance = 1.0 | ||||
| dof_blur_near_transition = 0.5 | ||||
| 
 | ||||
| [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5p7vs"] | ||||
| albedo_texture = ExtResource("14_y7s2h") | ||||
| uv1_scale = Vector3(300, 800, 1) | ||||
| 
 | ||||
| [sub_resource type="BoxMesh" id="BoxMesh_20p1k"] | ||||
| material = SubResource("StandardMaterial3D_5p7vs") | ||||
| size = Vector3(300, 1, 800) | ||||
| 
 | ||||
| [sub_resource type="BoxShape3D" id="BoxShape3D_g31tw"] | ||||
| size = Vector3(300, 1, 800) | ||||
| 
 | ||||
| [sub_resource type="FastNoiseLite" id="FastNoiseLite_mgjj0"] | ||||
| fractal_type = 2 | ||||
| 
 | ||||
| @ -110,8 +136,8 @@ shader_parameter/albedo = Color(0.427451, 0.917647, 1, 1) | ||||
| shader_parameter/scroll_speed1 = Vector2(0.05, 0) | ||||
| shader_parameter/scroll_speed2 = Vector2(-0.03, 0) | ||||
| shader_parameter/blend_factor = 0.5 | ||||
| shader_parameter/scale1 = Vector2(128, 128) | ||||
| shader_parameter/scale2 = Vector2(256, 256) | ||||
| shader_parameter/scale1 = Vector2(512, 512) | ||||
| shader_parameter/scale2 = Vector2(1024, 1024) | ||||
| shader_parameter/wave_strength = 0.4 | ||||
| shader_parameter/wave_scale = 0.02 | ||||
| shader_parameter/pixelation_level = 128 | ||||
| @ -124,23 +150,26 @@ shader_parameter/noise_texture = SubResource("NoiseTexture2D_0xqld") | ||||
| 
 | ||||
| [sub_resource type="PlaneMesh" id="PlaneMesh_2ywhk"] | ||||
| material = SubResource("ShaderMaterial_dkdxa") | ||||
| size = Vector2(4096, 4096) | ||||
| subdivide_width = 256 | ||||
| subdivide_depth = 256 | ||||
| size = Vector2(16384, 16384) | ||||
| subdivide_width = 1024 | ||||
| subdivide_depth = 1024 | ||||
| 
 | ||||
| [sub_resource type="BoxShape3D" id="BoxShape3D_x3wvm"] | ||||
| size = Vector3(4096, 2, 4096) | ||||
| 
 | ||||
| [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5p7vs"] | ||||
| albedo_texture = ExtResource("14_y7s2h") | ||||
| uv1_scale = Vector3(300, 800, 1) | ||||
| [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_65jc8"] | ||||
| albedo_color = Color(0.427451, 0.917647, 1, 1) | ||||
| 
 | ||||
| [sub_resource type="BoxMesh" id="BoxMesh_20p1k"] | ||||
| material = SubResource("StandardMaterial3D_5p7vs") | ||||
| size = Vector3(300, 1, 800) | ||||
| [sub_resource type="PlaneMesh" id="PlaneMesh_h0mhn"] | ||||
| material = SubResource("StandardMaterial3D_65jc8") | ||||
| size = Vector2(65536, 65536) | ||||
| 
 | ||||
| [sub_resource type="BoxShape3D" id="BoxShape3D_g31tw"] | ||||
| size = Vector3(300, 1, 800) | ||||
| [sub_resource type="Curve3D" id="Curve3D_3gyu3"] | ||||
| _data = { | ||||
| "points": PackedVector3Array(-4.50073, 0, 25.6049, 4.501, 0, -18.73, -15.152, 0, 5.61563, -20.4021, 0, 1.25826, 20.4021, 0, -1.25826, 25.991, 0, -27.2219, -9.077, 0, -17.164, 6.41687, 0, 33.4636, 72.1845, 0, 6.57864), | ||||
| "tilts": PackedFloat32Array(0, 0, 0) | ||||
| } | ||||
| point_count = 3 | ||||
| 
 | ||||
| [node name="TestLevel" type="Node3D"] | ||||
| 
 | ||||
| @ -154,22 +183,9 @@ environment = SubResource("Environment_k6wwx") | ||||
| camera_attributes = SubResource("CameraAttributesPractical_ypy22") | ||||
| 
 | ||||
| [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] | ||||
| transform = Transform3D(1, 0, 0, 0, 0.29404, 0.955793, 0, -0.955793, 0.29404, 0, 0, 0) | ||||
| 
 | ||||
| [node name="WaterTable" type="MeshInstance3D" parent="."] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0) | ||||
| mesh = SubResource("PlaneMesh_2ywhk") | ||||
| 
 | ||||
| [node name="BallZone" type="Area3D" parent="WaterTable"] | ||||
| script = ExtResource("9_jwlau") | ||||
| water_hazard = true | ||||
| 
 | ||||
| [node name="CollisionShape3D" type="CollisionShape3D" parent="WaterTable/BallZone"] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.2, 0) | ||||
| shape = SubResource("BoxShape3D_x3wvm") | ||||
| 
 | ||||
| [node name="ShotSetup" parent="." instance=ExtResource("8_h44v5")] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 212.717, 4, 294.073) | ||||
| transform = Transform3D(0.782608, -0.611691, 0.11558, 0, 0.185667, 0.982613, -0.622515, -0.769001, 0.145304, 0, 0, 0) | ||||
| shadow_enabled = true | ||||
| shadow_blur = 4.0 | ||||
| 
 | ||||
| [node name="Buildings" type="Node3D" parent="."] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 129.404, -9.53674e-07, 309.4) | ||||
| @ -189,23 +205,52 @@ transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0, | ||||
| [node name="PalmTree" parent="." instance=ExtResource("12_sswxf")] | ||||
| transform = Transform3D(-0.69799, 0, -0.716107, 0, 1, 0, 0.716107, 0, -0.69799, 140.872, -9.53674e-07, 296.932) | ||||
| 
 | ||||
| [node name="Flag" parent="." instance=ExtResource("13_6jtao")] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 540, 4, 452) | ||||
| [node name="Course" type="Node3D" parent="."] | ||||
| 
 | ||||
| [node name="DebugTable" type="MeshInstance3D" parent="."] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 160.1, 0, 885.605) | ||||
| mesh = SubResource("BoxMesh_20p1k") | ||||
| 
 | ||||
| [node name="StaticBody3D" type="StaticBody3D" parent="DebugTable"] | ||||
| 
 | ||||
| [node name="CollisionShape3D" type="CollisionShape3D" parent="DebugTable/StaticBody3D"] | ||||
| shape = SubResource("BoxShape3D_g31tw") | ||||
| 
 | ||||
| [node name="Fairway" type="Area3D" parent="."] | ||||
| [node name="Fairway" type="Area3D" parent="Course"] | ||||
| script = ExtResource("9_jwlau") | ||||
| terrain_angular_damping = 2.0 | ||||
| 
 | ||||
| [node name="CollisionPolygon3D" type="CollisionPolygon3D" parent="Fairway"] | ||||
| [node name="CollisionPolygon3D" type="CollisionPolygon3D" parent="Course/Fairway"] | ||||
| transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 209.788, 6.20358, 256.527) | ||||
| depth = 10.0 | ||||
| polygon = PackedVector2Array(-1.47594, 8.77969, -12.788, 19.9447, -17.7778, 31.2864, -19.2001, 41.1398, -19.2001, 55.4081, -16.3465, 66.9813, -15.7123, 75.8594, -14.9196, 82.6765, -12.383, 89.9692, -5.6736, 102.186, 2.88742, 115.027, 9.22891, 125.332, 14.7777, 133.893, 23.4973, 146.417, 35.7046, 159.893, 44.1071, 167.661, 55.8437, 178.18, 64.5632, 185.314, 69.7949, 189.753, 73.7584, 193.082, 80.734, 200.85, 94.5267, 212.899, 106.576, 221.46, 127.915, 233.827, 139.647, 240.802, 170.403, 256.181, 183.721, 262.839, 204.489, 271.717, 216.062, 274.571, 224.465, 279.485, 235.727, 283.429, 246.983, 289.929, 253.958, 290.88, 265.373, 296.27, 275.044, 298.965, 288.995, 299.282, 302.154, 299.599, 330.056, 297.063, 356.532, 289.612, 370.483, 282.636, 382.057, 270.112, 388.081, 259.648, 392.679, 245.221, 395.849, 226.989, 395.863, 185.922, 391.266, 164.52, 381.913, 148.636, 362.889, 133.417, 344.657, 121.051, 327.059, 111.063, 306.291, 103.136, 292.974, 102.66, 277.913, 102.66, 264.913, 105.99, 241.347, 117.315, 222.323, 125.558, 203.457, 127.144, 182.371, 123.973, 157.322, 119.534, 132.908, 107.644, 108.651, 86.0827, 88.8301, 59.386, 82.6471, 48.764, 75.6715, 25.7761, 65.063, 10.562, 56.819, 3.7449, 48.5751, -0.852661, 35.2579, -3.07219, 20.8311, -3.38925, 7.35541, 1.36685) | ||||
| 
 | ||||
| [node name="DebugTable" type="MeshInstance3D" parent="Course"] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 150, 0, -400) | ||||
| mesh = SubResource("BoxMesh_20p1k") | ||||
| skeleton = NodePath("../..") | ||||
| 
 | ||||
| [node name="StaticBody3D" type="StaticBody3D" parent="Course/DebugTable"] | ||||
| 
 | ||||
| [node name="CollisionShape3D" type="CollisionShape3D" parent="Course/DebugTable/StaticBody3D"] | ||||
| shape = SubResource("BoxShape3D_g31tw") | ||||
| 
 | ||||
| [node name="WaterTable" type="MeshInstance3D" parent="Course"] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0) | ||||
| mesh = SubResource("PlaneMesh_2ywhk") | ||||
| skeleton = NodePath("../..") | ||||
| 
 | ||||
| [node name="BallZone" type="Area3D" parent="Course/WaterTable"] | ||||
| script = ExtResource("9_jwlau") | ||||
| water_hazard = true | ||||
| 
 | ||||
| [node name="CollisionShape3D" type="CollisionShape3D" parent="Course/WaterTable/BallZone"] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.2, 0) | ||||
| shape = SubResource("BoxShape3D_x3wvm") | ||||
| 
 | ||||
| [node name="MacroWaterTable" type="MeshInstance3D" parent="Course"] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -10, 0) | ||||
| visible = false | ||||
| mesh = SubResource("PlaneMesh_h0mhn") | ||||
| skeleton = NodePath("../..") | ||||
| 
 | ||||
| [node name="Flag" parent="Course" instance=ExtResource("13_6jtao")] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 540, 4, 452) | ||||
| 
 | ||||
| [node name="ShotSetup" parent="Course" instance=ExtResource("8_h44v5")] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 212.717, 4, 294.073) | ||||
| 
 | ||||
| [node name="GuardRail" parent="." instance=ExtResource("16_xtxyj")] | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 211.416, 4, 288.708) | ||||
| curve = SubResource("Curve3D_3gyu3") | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								levels/debug_level/terrain_3d_storage.res
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								levels/debug_level/terrain_3d_storage.res
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -151,7 +151,6 @@ select_putter={ | ||||
| [physics] | ||||
| 
 | ||||
| 3d/physics_engine="JoltPhysics3D" | ||||
| 3d/sleep_threshold_linear=0.1 | ||||
| 3d/sleep_threshold_angular=2.0 | ||||
| jolt_3d/sleep/velocity_threshold=0.1 | ||||
| jolt_3d/sleep/time_threshold=1.0 | ||||
| @ -161,3 +160,5 @@ jolt_3d/limits/max_temporary_memory=64 | ||||
| 
 | ||||
| textures/canvas_textures/default_texture_filter=0 | ||||
| anti_aliasing/quality/msaa_3d=3 | ||||
| anti_aliasing/quality/screen_space_aa=1 | ||||
| anti_aliasing/quality/use_debanding=true | ||||
|  | ||||
| @ -169,7 +169,7 @@ bones/23/scale = Vector3(1, 1, 1) | ||||
| visible = false | ||||
| 
 | ||||
| [node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D" index="6"] | ||||
| transform = Transform3D(-0.944824, 0.316851, -0.0831417, -0.325647, -0.936013, 0.133541, -0.0355091, 0.153247, 0.98755, -0.1687, 3.15793, 0.845315) | ||||
| transform = Transform3D(-0.944824, 0.316851, -0.0831417, -0.326395, -0.932135, 0.156815, -0.027812, 0.1753, 0.984122, -0.1687, 3.13445, 0.86185) | ||||
| bone_name = "Hand.R" | ||||
| bone_idx = 11 | ||||
| 
 | ||||
|  | ||||
| @ -14,3 +14,4 @@ shape = SubResource("SphereShape3D_wmusx") | ||||
| 
 | ||||
| [node name="Camera3D" type="Camera3D" parent="."] | ||||
| current = true | ||||
| far = 8192.0 | ||||
|  | ||||
| @ -13,3 +13,4 @@ spring_length = 3.2 | ||||
| unique_name_in_owner = true | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 3) | ||||
| current = true | ||||
| far = 8192.0 | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| [gd_scene load_steps=40 format=3 uid="uid://cy7t2tc4y3b4"] | ||||
| [gd_scene load_steps=42 format=3 uid="uid://cy7t2tc4y3b4"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://src/player/shot_setup/shot_setup.gd" id="1_r6ei4"] | ||||
| [ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/player/physics_ball/physics_ball.tscn" id="2_1i5j5"] | ||||
| @ -7,6 +7,7 @@ | ||||
| [ext_resource type="PackedScene" uid="uid://445qd7m4qe2j" path="res://src/player/shot_setup/club_selector/club_selector.tscn" id="4_56ape"] | ||||
| [ext_resource type="PackedScene" uid="uid://fht6j87o8ecr" path="res://src/ui/projectile_arc/projectile_arc.tscn" id="4_ry2ho"] | ||||
| [ext_resource type="PackedScene" uid="uid://dbdul15c4oblg" path="res://src/ui/projected_target.tscn" id="6_mynqj"] | ||||
| [ext_resource type="Shader" path="res://src/shaders/canvas_retro.gdshader" id="7_h6c4m"] | ||||
| 
 | ||||
| [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnol1"] | ||||
| albedo_color = Color(0, 0.537255, 1, 1) | ||||
| @ -480,6 +481,15 @@ _data = { | ||||
| "display": SubResource("Animation_g52q7") | ||||
| } | ||||
| 
 | ||||
| [sub_resource type="ShaderMaterial" id="ShaderMaterial_afsun"] | ||||
| shader = ExtResource("7_h6c4m") | ||||
| shader_parameter/change_color_depth = true | ||||
| shader_parameter/target_color_depth = 6 | ||||
| shader_parameter/dithering = true | ||||
| shader_parameter/scale_resolution = true | ||||
| shader_parameter/target_resolution_scale = 3 | ||||
| shader_parameter/enable_recolor = false | ||||
| 
 | ||||
| [sub_resource type="Animation" id="Animation_pk1s7"] | ||||
| length = 0.001 | ||||
| tracks/0/type = "bezier" | ||||
| @ -712,6 +722,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6) | ||||
| unique_name_in_owner = true | ||||
| transform = Transform3D(1, 0, 0, 0, 1, 2.98023e-08, 0, -2.98023e-08, 1, 0, 0, 0) | ||||
| current = true | ||||
| far = 8192.0 | ||||
| 
 | ||||
| [node name="ArrowPivot" type="Node3D" parent="."] | ||||
| unique_name_in_owner = true | ||||
| @ -851,6 +862,17 @@ libraries = { | ||||
| "": SubResource("AnimationLibrary_gbnnr") | ||||
| } | ||||
| 
 | ||||
| [node name="ColorRect" type="ColorRect" parent="ShotUI"] | ||||
| visible = false | ||||
| material = SubResource("ShaderMaterial_afsun") | ||||
| layout_mode = 1 | ||||
| anchors_preset = 15 | ||||
| anchor_right = 1.0 | ||||
| anchor_bottom = 1.0 | ||||
| grow_horizontal = 2 | ||||
| grow_vertical = 2 | ||||
| mouse_filter = 2 | ||||
| 
 | ||||
| [node name="ShotGauges" type="Control" parent="ShotUI"] | ||||
| layout_mode = 1 | ||||
| anchor_left = 0.4 | ||||
|  | ||||
							
								
								
									
										58
									
								
								src/props/scenery/highway/guard_rail.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/props/scenery/highway/guard_rail.gd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | ||||
| @tool | ||||
| extends Path3D | ||||
| ## Guard rail along a curve with nicely spaced posts | ||||
| ## | ||||
| ## Ref: https://www.youtube.com/watch?v=Gfpnxg-jne4 | ||||
| 
 | ||||
| ## Distance between railing posts, in meters | ||||
| @export var post_space := 4.0: | ||||
| 	set(value): | ||||
| 		if value != post_space: | ||||
| 			_dirty = true | ||||
| 		post_space = value | ||||
| 
 | ||||
| ## If enabled, always places a railing post at the end of the curve. | ||||
| ## Post spacing will be adjusted to accomodate. | ||||
| @export var end_cap := false: | ||||
| 	set(value): | ||||
| 		if value != end_cap: | ||||
| 			_dirty = true | ||||
| 		end_cap = value | ||||
| 
 | ||||
| var _dirty := false | ||||
| 
 | ||||
| @onready var post_multi_mesh: MultiMeshInstance3D = $PostMultiMesh | ||||
| 
 | ||||
| 
 | ||||
| func _ready() -> void: | ||||
| 	post_multi_mesh.multimesh = post_multi_mesh.multimesh.duplicate() | ||||
| 
 | ||||
| 
 | ||||
| func _update_multimesh() -> void: | ||||
| 	if not curve: | ||||
| 		post_multi_mesh.multimesh.instance_count = 0 | ||||
| 		return | ||||
| 
 | ||||
| 	var path_length := curve.get_baked_length() | ||||
| 	var count: int = floor(path_length / post_space) | ||||
| 	var spacing := post_space | ||||
| 
 | ||||
| 	if end_cap: | ||||
| 		spacing = path_length / float(count) | ||||
| 		count += 1 | ||||
| 
 | ||||
| 	post_multi_mesh.multimesh.instance_count = count | ||||
| 
 | ||||
| 	for i in range(0, count): | ||||
| 		var tx := curve.sample_baked_with_rotation(spacing * i, true, true) | ||||
| 		post_multi_mesh.multimesh.set_instance_transform(i, tx) | ||||
| 
 | ||||
| 
 | ||||
| func _process(_delta: float) -> void: | ||||
| 	if _dirty: | ||||
| 		_update_multimesh() | ||||
| 		_dirty = false | ||||
| 
 | ||||
| 
 | ||||
| func _on_curve_changed() -> void: | ||||
| 	_dirty = true | ||||
							
								
								
									
										62
									
								
								src/props/scenery/highway/guard_rail.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								src/props/scenery/highway/guard_rail.tscn
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| [gd_scene load_steps=6 format=3 uid="uid://nqar1qcun8ax"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://src/props/scenery/highway/guard_rail.gd" id="1_imntf"] | ||||
| 
 | ||||
| [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_fo7j3"] | ||||
| load_path = "res://.godot/imported/guard_rail_post.png-4447ff881a5916e5281ed251b7beecd0.ctex" | ||||
| 
 | ||||
| [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k1yjg"] | ||||
| transparency = 2 | ||||
| alpha_scissor_threshold = 0.5 | ||||
| alpha_antialiasing_mode = 0 | ||||
| albedo_texture = SubResource("CompressedTexture2D_fo7j3") | ||||
| texture_filter = 4 | ||||
| texture_repeat = false | ||||
| billboard_mode = 2 | ||||
| 
 | ||||
| [sub_resource type="PlaneMesh" id="PlaneMesh_ko4yv"] | ||||
| material = SubResource("StandardMaterial3D_k1yjg") | ||||
| size = Vector2(0.5, 1) | ||||
| center_offset = Vector3(0, 0.5, 0) | ||||
| orientation = 2 | ||||
| 
 | ||||
| [sub_resource type="MultiMesh" id="MultiMesh_o7ch8"] | ||||
| transform_format = 1 | ||||
| mesh = SubResource("PlaneMesh_ko4yv") | ||||
| 
 | ||||
| [node name="GuardRail" type="Path3D"] | ||||
| script = ExtResource("1_imntf") | ||||
| end_cap = true | ||||
| 
 | ||||
| [node name="UpperRail" type="CSGPolygon3D" parent="."] | ||||
| use_collision = true | ||||
| polygon = PackedVector2Array(0, 0.8, -0.01, 0.9, 0, 1, 0.01, 0.9) | ||||
| mode = 2 | ||||
| path_node = NodePath("..") | ||||
| path_interval_type = 0 | ||||
| path_interval = 1.0 | ||||
| path_simplify_angle = 0.0 | ||||
| path_rotation = 2 | ||||
| path_local = true | ||||
| path_continuous_u = true | ||||
| path_u_distance = 1.0 | ||||
| path_joined = false | ||||
| 
 | ||||
| [node name="LowerRail" type="CSGPolygon3D" parent="."] | ||||
| use_collision = true | ||||
| polygon = PackedVector2Array(0, 0.4, -0.01, 0.5, 0, 0.6, 0.01, 0.5) | ||||
| mode = 2 | ||||
| path_node = NodePath("..") | ||||
| path_interval_type = 0 | ||||
| path_interval = 1.0 | ||||
| path_simplify_angle = 0.0 | ||||
| path_rotation = 2 | ||||
| path_local = true | ||||
| path_continuous_u = true | ||||
| path_u_distance = 1.0 | ||||
| path_joined = false | ||||
| 
 | ||||
| [node name="PostMultiMesh" type="MultiMeshInstance3D" parent="."] | ||||
| multimesh = SubResource("MultiMesh_o7ch8") | ||||
| 
 | ||||
| [connection signal="curve_changed" from="." to="." method="_on_curve_changed"] | ||||
							
								
								
									
										168
									
								
								src/shaders/canvas_retro.gdshader
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								src/shaders/canvas_retro.gdshader
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,168 @@ | ||||
| // CanvasItem Retro Post-processing | ||||
| // Adapted from https://godotshaders.com/shader/retro-post-processing/ | ||||
| 
 | ||||
| shader_type canvas_item; | ||||
| 
 | ||||
| 
 | ||||
| // Handles the resolution changes, color depth, and dithering | ||||
| uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest; | ||||
| 
 | ||||
| 
 | ||||
| group_uniforms resolution_and_colors; | ||||
| uniform bool change_color_depth = false; | ||||
| uniform int target_color_depth : hint_range(1, 8) = 5; | ||||
| uniform bool dithering = false; | ||||
| uniform bool scale_resolution = false; | ||||
| uniform int target_resolution_scale = 3; | ||||
| 
 | ||||
| 
 | ||||
| // Handles the LUTish recoloring | ||||
| group_uniforms gradient_recoloring; | ||||
| uniform bool enable_recolor = false; | ||||
| uniform sampler2D to_gradient: hint_default_black; | ||||
| 
 | ||||
| 
 | ||||
| int dithering_pattern(ivec2 fragcoord) { | ||||
| 	const int pattern[] = { | ||||
| 		-4, +0, -3, +1, | ||||
| 		+2, -2, +3, -1, | ||||
| 		-3, +1, -4, +0, | ||||
| 		+3, -1, +2, -2 | ||||
| 	}; | ||||
| 
 | ||||
| 	int x = fragcoord.x % 4; | ||||
| 	int y = fragcoord.y % 4; | ||||
| 
 | ||||
| 	return pattern[y * 4 + x]; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| vec3 rgb2hsv(vec3 rgb) { //Converts RGB values to HSV | ||||
| 	float r = rgb.r; | ||||
| 	float g = rgb.g; | ||||
| 	float b = rgb.b; | ||||
| 
 | ||||
| 
 | ||||
| 	float cmax = max(r,max(g,b)); | ||||
| 	float cmin = min(r,min(g,b)); | ||||
| 	float delta = cmax - cmin; | ||||
| 
 | ||||
| 
 | ||||
| 	float h = 0.f; //hue | ||||
| 
 | ||||
| 
 | ||||
| 	if (delta > 0.f){ | ||||
| 		if (cmax == r){ | ||||
| 			h = (g-b)/delta; | ||||
| 			h = mod(h,6.f); | ||||
| 		} else if (cmax == g){ | ||||
| 			h = ((b - r) / delta) + 2.f; | ||||
| 		} else { | ||||
| 			h = ((r-g)/delta) + 4.f; | ||||
| 		} | ||||
| 		h = h * 60.f; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	float s = 0.f; //saturation | ||||
| 	if (cmax > 0.f){ | ||||
| 		s = delta / cmax; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	return vec3(h,s,cmax); // Keep original alpha value | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| vec3 hsv2rgb(vec3 hsv) { //Converts HSV values to RGB | ||||
| 	float h = hsv.r; | ||||
| 	float s = hsv.g; | ||||
| 	float v = hsv.b; | ||||
| 	float c = v * s; | ||||
| 	//X = C × (1 - |(H / 60°) mod 2 - 1|) | ||||
| 	float x = h / 60.f; | ||||
| 	x = mod(x,2.f); | ||||
| 	x = abs(x - 1.f); | ||||
| 	x = c * (1.f - x); | ||||
| 
 | ||||
| 
 | ||||
| 	float m = v - c; | ||||
| 
 | ||||
| 
 | ||||
| 	vec3 rgb = vec3(0.f,0.f,0.f); | ||||
| 
 | ||||
| 
 | ||||
| 	if (h < 60.f) { | ||||
| 		rgb = vec3(c,x,0.f); | ||||
| 	} else if (h < 120.f){ | ||||
| 		rgb = vec3(x,c,0.f); | ||||
| 	} else if (h < 180.f){ | ||||
| 		rgb = vec3(0.f,c,x); | ||||
| 	} else if (h < 240.f){ | ||||
| 		rgb = vec3(0.f,x,c); | ||||
| 	} else if (h < 300.f){ | ||||
| 		rgb = vec3(x,0.f,c); | ||||
| 	} else if (h < 360.f){ | ||||
| 		rgb = vec3(c,0.f,x); | ||||
| 	} | ||||
| 	rgb[0] = rgb[0] + m; | ||||
| 	rgb[1] = rgb[1] + m; | ||||
| 	rgb[2] = rgb[2] + m; | ||||
| 
 | ||||
| 
 | ||||
| 	return rgb; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void fragment() { | ||||
| 
 | ||||
| 	vec2 iResolution = 1.0 / SCREEN_PIXEL_SIZE; | ||||
|     vec2 q = FRAGCOORD.xy / iResolution.xy; | ||||
| 	ivec2 uv = ivec2(q); | ||||
| 
 | ||||
| 	vec3 color = texture(screen_texture, vec2(q.x,q.y) ).xyz; | ||||
| 
 | ||||
| 	if(scale_resolution){ | ||||
| 		uv = ivec2(FRAGCOORD.xy / float(target_resolution_scale)); | ||||
| 		color = texelFetch(screen_texture, uv * target_resolution_scale, 0).rgb; | ||||
| 	} else { | ||||
| 		uv = ivec2(FRAGCOORD.xy); | ||||
| 		color = texelFetch(screen_texture, uv, 0).rgb; | ||||
| 	} | ||||
| 
 | ||||
| 	if(enable_recolor){ | ||||
| 		vec3 hsv = rgb2hsv(color); | ||||
| 		float color_pos = (hsv.x / 360.0); | ||||
| 		vec3 new_color = texture(to_gradient, vec2((color_pos), 0.5)).rgb; | ||||
| 		vec3 new_hsv = rgb2hsv(new_color); | ||||
| 		hsv.x = new_hsv.x; | ||||
| 		vec3 final_rgb = hsv2rgb(hsv); | ||||
| 
 | ||||
| 
 | ||||
| 		color.rgb = final_rgb; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	// Convert from [0.0, 1.0] range to [0, 255] range | ||||
| 	ivec3 c = ivec3(round(color * 255.0)); | ||||
| 
 | ||||
| 	// Apply the dithering pattern | ||||
| 	if (dithering) { | ||||
| 		c += ivec3(dithering_pattern(uv)); | ||||
| 	} | ||||
| 
 | ||||
| 	vec3 final_color; | ||||
| 	if(change_color_depth){ | ||||
| 		// Truncate from 8 bits to color_depth bits | ||||
| 		c >>= (8 - target_color_depth); | ||||
| 		final_color = vec3(c) / float(1 << target_color_depth); | ||||
| 	} else { | ||||
| 		final_color = vec3(c) / float(1 << 8); | ||||
| 	} | ||||
| 
 | ||||
| 	// Convert back to [0.0, 1.0] range | ||||
| 	COLOR.rgb = final_color; | ||||
| } | ||||
							
								
								
									
										143
									
								
								src/shaders/retro_postprocessing.gdshader
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								src/shaders/retro_postprocessing.gdshader
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,143 @@ | ||||
| // Retro Post-Processing shader | ||||
| // From https://godotshaders.com/shader/retro-post-processing/ | ||||
| 
 | ||||
| shader_type canvas_item; | ||||
| 
 | ||||
| // Handles the resolution changes, color depth, and dithering | ||||
| group_uniforms resolution_and_colors; | ||||
| uniform bool change_color_depth = false; | ||||
| uniform int target_color_depth : hint_range(1, 8) = 5; | ||||
| uniform bool dithering = false; | ||||
| uniform bool scale_resolution = false; | ||||
| uniform int target_resolution_scale = 3; | ||||
| 
 | ||||
| // Handles the LUTish recoloring | ||||
| group_uniforms gradient_recoloring; | ||||
| uniform bool enable_recolor = false; | ||||
| uniform sampler2D to_gradient: hint_default_black; | ||||
| 
 | ||||
| int dithering_pattern(ivec2 fragcoord) { | ||||
| 	const int pattern[] = { | ||||
| 		-4, +0, -3, +1, | ||||
| 		+2, -2, +3, -1, | ||||
| 		-3, +1, -4, +0, | ||||
| 		+3, -1, +2, -2 | ||||
| 	}; | ||||
| 
 | ||||
| 	int x = fragcoord.x % 4; | ||||
| 	int y = fragcoord.y % 4; | ||||
| 
 | ||||
| 	return pattern[y * 4 + x]; | ||||
| } | ||||
| 
 | ||||
| vec3 rgb2hsv(vec3 rgb) { //Converts RGB values to HSV | ||||
| 	float r = rgb.r; | ||||
| 	float g = rgb.g; | ||||
| 	float b = rgb.b; | ||||
| 
 | ||||
| 	float cmax = max(r,max(g,b)); | ||||
| 	float cmin = min(r,min(g,b)); | ||||
| 	float delta = cmax - cmin; | ||||
| 
 | ||||
| 	float h = 0.f; //hue | ||||
| 
 | ||||
| 	if (delta > 0.f){ | ||||
| 		if (cmax == r){ | ||||
| 			h = (g-b)/delta; | ||||
| 			h = mod(h,6.f); | ||||
| 		} else if (cmax == g){ | ||||
| 			h = ((b - r) / delta) + 2.f; | ||||
| 		} else { | ||||
| 			h = ((r-g)/delta) + 4.f; | ||||
| 		} | ||||
| 		h = h * 60.f; | ||||
| 	} | ||||
| 
 | ||||
| 	float s = 0.f; //saturation | ||||
| 	if (cmax > 0.f){ | ||||
| 		s = delta / cmax; | ||||
| 	} | ||||
| 
 | ||||
| 	return vec3(h,s,cmax); // Keep original alpha value | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| vec3 hsv2rgb(vec3 hsv) { //Converts HSV values to RGB | ||||
| 	float h = hsv.r; | ||||
| 	float s = hsv.g; | ||||
| 	float v = hsv.b; | ||||
| 	float c = v * s; | ||||
| 	//X = C × (1 - |(H / 60°) mod 2 - 1|) | ||||
| 	float x = h / 60.f; | ||||
| 	x = mod(x,2.f); | ||||
| 	x = abs(x - 1.f); | ||||
| 	x = c * (1.f - x); | ||||
| 
 | ||||
| 	float m = v - c; | ||||
| 
 | ||||
| 	vec3 rgb = vec3(0.f,0.f,0.f); | ||||
| 
 | ||||
| 	if (h < 60.f) { | ||||
| 		rgb = vec3(c,x,0.f); | ||||
| 	} else if (h < 120.f){ | ||||
| 		rgb = vec3(x,c,0.f); | ||||
| 	} else if (h < 180.f){ | ||||
| 		rgb = vec3(0.f,c,x); | ||||
| 	} else if (h < 240.f){ | ||||
| 		rgb = vec3(0.f,x,c); | ||||
| 	} else if (h < 300.f){ | ||||
| 		rgb = vec3(x,0.f,c); | ||||
| 	} else if (h < 360.f){ | ||||
| 		rgb = vec3(c,0.f,x); | ||||
| 	} | ||||
| 	rgb[0] = rgb[0] + m; | ||||
| 	rgb[1] = rgb[1] + m; | ||||
| 	rgb[2] = rgb[2] + m; | ||||
| 
 | ||||
| 	return rgb; | ||||
| } | ||||
| 
 | ||||
| void fragment() { | ||||
| 	ivec2 uv; | ||||
| 	vec3 color; | ||||
| 
 | ||||
| 	if(scale_resolution){ | ||||
| 		uv = ivec2(FRAGCOORD.xy / float(target_resolution_scale)); | ||||
| 		color = texelFetch(TEXTURE, uv * target_resolution_scale, 0).rgb; | ||||
| 	} else { | ||||
| 		uv = ivec2(FRAGCOORD.xy); | ||||
| 		color = texelFetch(TEXTURE, uv, 0).rgb; | ||||
| 	} | ||||
| 
 | ||||
| 	if(enable_recolor){ | ||||
| 		vec3 hsv = rgb2hsv(color); | ||||
| 		float color_pos = (hsv.x / 360.0); | ||||
| 		vec3 new_color = texture(to_gradient, vec2((color_pos), 0.5)).rgb; | ||||
| 		vec3 new_hsv = rgb2hsv(new_color); | ||||
| 		hsv.x = new_hsv.x; | ||||
| 		vec3 final_rgb = hsv2rgb(hsv); | ||||
| 
 | ||||
| 		color.rgb = final_rgb; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	// Convert from [0.0, 1.0] range to [0, 255] range | ||||
| 	ivec3 c = ivec3(round(color * 255.0)); | ||||
| 
 | ||||
| 	// Apply the dithering pattern | ||||
| 	if (dithering) { | ||||
| 		c += ivec3(dithering_pattern(uv)); | ||||
| 	} | ||||
| 
 | ||||
| 	vec3 final_color; | ||||
| 	if(change_color_depth){ | ||||
| 		// Truncate from 8 bits to color_depth bits | ||||
| 		c >>= (8 - target_color_depth); | ||||
| 		final_color = vec3(c) / float(1 << target_color_depth); | ||||
| 	} else { | ||||
| 		final_color = vec3(c) / float(1 << 8); | ||||
| 	} | ||||
| 
 | ||||
| 	// Convert back to [0.0, 1.0] range | ||||
| 	COLOR.rgb = final_color; | ||||
| } | ||||
							
								
								
									
										33
									
								
								src/world/world.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/world/world.tscn
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| [gd_scene load_steps=4 format=3 uid="uid://cwnwcd8kushl3"] | ||||
| 
 | ||||
| [ext_resource type="Shader" path="res://src/shaders/retro_postprocessing.gdshader" id="1_3gv54"] | ||||
| [ext_resource type="PackedScene" uid="uid://bm2o3mex10v11" path="res://levels/debug_level/debug_level.tscn" id="1_pge3b"] | ||||
| 
 | ||||
| [sub_resource type="ShaderMaterial" id="ShaderMaterial_sc4r2"] | ||||
| shader = ExtResource("1_3gv54") | ||||
| shader_parameter/change_color_depth = true | ||||
| shader_parameter/target_color_depth = 8 | ||||
| shader_parameter/dithering = true | ||||
| shader_parameter/scale_resolution = true | ||||
| shader_parameter/target_resolution_scale = 3 | ||||
| shader_parameter/enable_recolor = false | ||||
| 
 | ||||
| [node name="World" type="Node"] | ||||
| 
 | ||||
| [node name="SubViewportContainer" type="SubViewportContainer" parent="."] | ||||
| material = SubResource("ShaderMaterial_sc4r2") | ||||
| anchors_preset = 15 | ||||
| anchor_right = 1.0 | ||||
| anchor_bottom = 1.0 | ||||
| grow_horizontal = 2 | ||||
| grow_vertical = 2 | ||||
| stretch = true | ||||
| 
 | ||||
| [node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] | ||||
| handle_input_locally = false | ||||
| size = Vector2i(1280, 720) | ||||
| render_target_update_mode = 4 | ||||
| 
 | ||||
| [node name="Level" type="Node3D" parent="SubViewportContainer/SubViewport"] | ||||
| 
 | ||||
| [node name="TestLevel" parent="SubViewportContainer/SubViewport/Level" instance=ExtResource("1_pge3b")] | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user