From a7a9ebf99536ec22aa3bd1ced2b34ded7dbb5843 Mon Sep 17 00:00:00 2001 From: Malcolm Nixon Date: Sun, 2 Apr 2023 15:39:42 -0400 Subject: [PATCH] Added basic swim demo from work performed by pietru2004. Added swim demo into main menu level. Co-Authored-By: pietru2004 --- scenes/main_menu/main_menu_level.tscn | 31 +++-- scenes/swim_demo/objects/instructions.tscn | 24 ++++ scenes/swim_demo/objects/instructions_2d.tscn | 36 ++++++ scenes/swim_demo/objects/swim_area.gd | 16 +++ scenes/swim_demo/objects/swim_map.tscn | 114 ++++++++++++++++++ .../swim_demo/objects/water_shader.gdshader | 33 +++++ scenes/swim_demo/swim demo.png | Bin 0 -> 3772 bytes scenes/swim_demo/swim demo.png.import | 36 ++++++ scenes/swim_demo/swim_demo.tscn | 114 ++++++++++++++++++ 9 files changed, 392 insertions(+), 12 deletions(-) create mode 100644 scenes/swim_demo/objects/instructions.tscn create mode 100644 scenes/swim_demo/objects/instructions_2d.tscn create mode 100644 scenes/swim_demo/objects/swim_area.gd create mode 100644 scenes/swim_demo/objects/swim_map.tscn create mode 100644 scenes/swim_demo/objects/water_shader.gdshader create mode 100644 scenes/swim_demo/swim demo.png create mode 100644 scenes/swim_demo/swim demo.png.import create mode 100644 scenes/swim_demo/swim_demo.tscn diff --git a/scenes/main_menu/main_menu_level.tscn b/scenes/main_menu/main_menu_level.tscn index fbb9ff83..1eb04fb3 100644 --- a/scenes/main_menu/main_menu_level.tscn +++ b/scenes/main_menu/main_menu_level.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=38 format=3 uid="uid://utga61rlgb3t"] +[gd_scene load_steps=39 format=3 uid="uid://utga61rlgb3t"] [ext_resource type="PackedScene" uid="uid://qbmx03iibuuu" path="res://addons/godot-xr-tools/staging/scene_base.tscn" id="1"] [ext_resource type="Script" path="res://scenes/main_menu/main_menu_level.gd" id="2_taoax"] @@ -19,6 +19,7 @@ [ext_resource type="Texture2D" uid="uid://ny4n43p3e3du" path="res://scenes/pickable_demo/pickable_demo.png" id="22"] [ext_resource type="PackedScene" uid="uid://bq86r4yll8po" path="res://addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn" id="23_pr05t"] [ext_resource type="PackedScene" uid="uid://xqimcf20s2jp" path="res://addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn" id="25_2b81d"] +[ext_resource type="Texture2D" uid="uid://dd2u7l7q2de65" path="res://scenes/swim_demo/swim demo.png" id="25_5hl33"] [ext_resource type="Texture2D" uid="uid://bbe7o7pdq38m2" path="res://scenes/poke_demo/poke_demo.png" id="25_rg3rn"] [ext_resource type="PackedScene" uid="uid://3bsyhd7ehoa1" path="res://scenes/main_menu/objects/settings_ui.tscn" id="26_0uyxa"] [ext_resource type="Material" uid="uid://bhiiya7ow6h8v" path="res://addons/godot-xr-tools/hands/materials/labglove.material" id="26_id1x7"] @@ -186,71 +187,77 @@ scene = "res://scenes/basic_movement_demo/basic_movement_demo.tscn" title = ExtResource("10") [node name="ToFootstepDemo" parent="Demos" index="1" instance=ExtResource("9")] -transform = Transform3D(0.866025, 0, 0.5, 0, 1, 0, -0.5, 0, 0.866025, -5, 0, -8.66025) +transform = Transform3D(0.885456, 0, 0.464723, 0, 1, 0, -0.464723, 0, 0.885456, -4.64723, 0, -8.85456) scene_base = NodePath("../..") scene = "res://scenes/footstep_movement_demo/footstep_movement_demo.tscn" title = ExtResource("15_k6bhw") [node name="ToTeleportDemo" parent="Demos" index="2" instance=ExtResource("9")] -transform = Transform3D(0.5, 0, 0.866025, 0, 1, 0, -0.866025, 0, 0.5, -8.66025, 0, -5) +transform = Transform3D(0.568065, 0, 0.822984, 0, 1, 0, -0.822984, 0, 0.568065, -8.22984, 0, -5.68065) scene_base = NodePath("../..") scene = "res://scenes/teleport_demo/teleport_demo.tscn" title = ExtResource("12") [node name="ToClimbingGlidingDemo" parent="Demos" index="3" instance=ExtResource("9")] -transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -10, 0, 4.37114e-07) +transform = Transform3D(0.120537, 0, 0.992709, 0, 1, 0, -0.992709, 0, 0.120537, -9.92709, 0, -1.20537) scene_base = NodePath("../..") scene = "res://scenes/climbing_gliding_demo/climbing_gliding_demo.tscn" title = ExtResource("13") [node name="ToGrapplingDemo" parent="Demos" index="4" instance=ExtResource("9")] -transform = Transform3D(-0.5, 0, 0.866025, 0, 1, 0, -0.866025, 0, -0.5, -8.66025, 0, 5) +transform = Transform3D(-0.354605, 0, 0.935016, 0, 1, 0, -0.935016, 0, -0.354605, -9.35016, 0, 3.54605) scene_base = NodePath("../..") scene = "res://scenes/grappling_demo/grappling_demo.tscn" title = ExtResource("16") [node name="ToInteractablesDemo" parent="Demos" index="5" instance=ExtResource("9")] -transform = Transform3D(-0.866025, 0, 0.5, 0, 1, 0, -0.5, 0, -0.866025, -5, 0, 8.66025) +transform = Transform3D(-0.748511, 0, 0.663123, 0, 1, 0, -0.663123, 0, -0.748511, -6.63123, 0, 7.48511) scene_base = NodePath("../..") scene = "res://scenes/interactables_demo/interactables_demo.tscn" title = ExtResource("17") [node name="ToPointerDemo" parent="Demos" index="6" instance=ExtResource("9")] -transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 8.74228e-07, 0, 10) +transform = Transform3D(-0.970942, 0, 0.239316, 0, 1, 0, -0.239316, 0, -0.970942, -2.39316, 0, 9.70942) scene_base = NodePath("../..") scene = "res://scenes/interactables_demo/interactables_demo.tscn" title = ExtResource("20") [node name="ToPickableDemo" parent="Demos" index="7" instance=ExtResource("9")] -transform = Transform3D(-0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, -0.866025, 5, 0, 8.66025) +transform = Transform3D(-0.970942, 0, -0.239316, 0, 1, 0, 0.239316, 0, -0.970942, 2.39316, 0, 9.70942) scene_base = NodePath("../..") scene = "res://scenes/pickable_demo/pickable_demo.tscn" title = ExtResource("22") [node name="ToPokeDemo" parent="Demos" index="8" instance=ExtResource("9")] -transform = Transform3D(-0.5, 0, -0.866025, 0, 1, 0, 0.866025, 0, -0.5, 8.66025, 0, 5) +transform = Transform3D(-0.748511, 0, -0.663123, 0, 1, 0, 0.663123, 0, -0.748511, 6.63123, 0, 7.48511) scene_base = NodePath("../..") scene = "res://scenes/poke_demo/poke_demo.tscn" title = ExtResource("25_rg3rn") [node name="ToSprintDemo" parent="Demos" index="9" instance=ExtResource("9")] -transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 10, 0, -1.19249e-07) +transform = Transform3D(-0.354605, 0, -0.935016, 0, 1, 0, 0.935016, 0, -0.354605, 9.35016, 0, 3.54605) scene_base = NodePath("../..") scene = "res://scenes/sprinting_demo/sprinting_demo.tscn" title = ExtResource("29_h1jn0") [node name="ToOriginGravityDemo" parent="Demos" index="10" instance=ExtResource("9")] -transform = Transform3D(0.5, 0, -0.866025, 0, 1, 0, 0.866025, 0, 0.5, 8.66025, 0, -5) +transform = Transform3D(0.120537, 0, -0.992709, 0, 1, 0, 0.992709, 0, 0.120537, 9.92709, 0, -1.20537) scene_base = NodePath("../..") scene = "res://scenes/origin_gravity_demo/origin_gravity_demo.tscn" title = ExtResource("32_c4n1q") [node name="ToSphereWorldDemo" parent="Demos" index="11" instance=ExtResource("9")] -transform = Transform3D(0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, 0.866025, 5, 0, -8.66025) +transform = Transform3D(0.568065, 0, -0.822984, 0, 1, 0, 0.822984, 0, 0.568065, 8.22984, 0, -5.68065) scene_base = NodePath("../..") scene = "res://scenes/sphere_world_demo/sphere_world_demo.tscn" title = ExtResource("34_xw8ig") +[node name="ToSwimDemo" parent="Demos" index="12" instance=ExtResource("9")] +transform = Transform3D(0.885456, 0, -0.464723, 0, 1, 0, 0.464723, 0, 0.885456, 4.64723, 0, -8.85456) +scene_base = NodePath("../..") +scene = "res://scenes/swim_demo/swim_demo.tscn" +title = ExtResource("25_5hl33") + [node name="SettingsUI" parent="." index="3" instance=ExtResource("26_0uyxa")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1.5) camera = NodePath("../XROrigin3D/XRCamera3D") diff --git a/scenes/swim_demo/objects/instructions.tscn b/scenes/swim_demo/objects/instructions.tscn new file mode 100644 index 00000000..27dca639 --- /dev/null +++ b/scenes/swim_demo/objects/instructions.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=5 format=3 uid="uid://cap4i60th5v7v"] + +[ext_resource type="PackedScene" uid="uid://clujaf3u776a3" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d.tscn" id="1_ppayj"] +[ext_resource type="PackedScene" uid="uid://b45jxqo2nss1h" path="res://scenes/swim_demo/objects/instructions_2d.tscn" id="2_m8jyc"] +[ext_resource type="Material" path="res://assets/wahooney.itch.io/brown_grid_triplanar.tres" id="3_corps"] + +[sub_resource type="BoxMesh" id="1"] +material = ExtResource("3_corps") +size = Vector3(4.2, 2.7, 0.1) + +[node name="Instructions" type="Node3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4, -4) + +[node name="Viewport2Din3D" parent="." instance=ExtResource("1_ppayj")] +screen_size = Vector2(4, 2.5) +viewport_size = Vector2(400, 250) +unshaded = true +scene = ExtResource("2_m8jyc") +update_mode = 0 +collision_layer = 0 + +[node name="MeshInstance" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.1) +mesh = SubResource("1") diff --git a/scenes/swim_demo/objects/instructions_2d.tscn b/scenes/swim_demo/objects/instructions_2d.tscn new file mode 100644 index 00000000..276326bf --- /dev/null +++ b/scenes/swim_demo/objects/instructions_2d.tscn @@ -0,0 +1,36 @@ +[gd_scene format=3 uid="uid://b45jxqo2nss1h"] + +[node name="Instructions" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +offset_right = 400.0 +offset_bottom = 250.0 +color = Color(0, 0, 0, 0.87451) + +[node name="Description" type="RichTextLabel" parent="."] +layout_mode = 0 +offset_left = 10.0 +offset_top = 10.0 +offset_right = 390.0 +offset_bottom = 240.0 +theme_override_constants/line_separation = -3 +theme_override_font_sizes/normal_font_size = 12 +text = "Swim Demo + +This scene demonstrates example swimming. Advanced rendering options such as Volume Fog can be added based on the choice of renderer. + + > Left Controller: + - Direct Movement: U/D/L/R Joystick + - Flight Movement: U/D/L/R Joystick + + > Right Controller: + - Direct Movement: U/D Joystick + - Turning: L/R Joystick +" diff --git a/scenes/swim_demo/objects/swim_area.gd b/scenes/swim_demo/objects/swim_area.gd new file mode 100644 index 00000000..7c7a8108 --- /dev/null +++ b/scenes/swim_demo/objects/swim_area.gd @@ -0,0 +1,16 @@ +extends Area3D + +func _on_body_entered(body): + if body is XRToolsPlayerBody: + if !body.get_parent().has_node("MovementFlight"): + printerr("Flight Area tried to find MovementFlight, but it could not...") + return + body.get_parent().get_node("MovementFlight").set_flying(true) + + +func _on_body_exited(body): + if body is XRToolsPlayerBody: + if !body.get_parent().has_node("MovementFlight"): + printerr("Flight Area tried to find MovementFlight, but it could not...") + return + body.get_parent().get_node("MovementFlight").set_flying(false) diff --git a/scenes/swim_demo/objects/swim_map.tscn b/scenes/swim_demo/objects/swim_map.tscn new file mode 100644 index 00000000..a9e52222 --- /dev/null +++ b/scenes/swim_demo/objects/swim_map.tscn @@ -0,0 +1,114 @@ +[gd_scene load_steps=6 format=3 uid="uid://bjuel0yobnb7l"] + +[ext_resource type="Material" path="res://assets/wahooney.itch.io/green_grid_triplanar.tres" id="1_isyto"] +[ext_resource type="Material" path="res://assets/wahooney.itch.io/brown_grid_triplanar.tres" id="2_bp8ee"] + +[sub_resource type="QuadMesh" id="7"] +size = Vector2(96, 96) + +[sub_resource type="QuadMesh" id="8"] +size = Vector2(96, 16) + +[sub_resource type="BoxShape3D" id="4"] +size = Vector3(100, 16, 2) + +[node name="SwimMap" type="Node3D"] + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(0.866025, -0.321394, 0.383022, 0, 0.766044, 0.642788, -0.5, -0.55667, 0.663414, 0, 5, 0) +light_energy = 0.8 + +[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."] +use_collision = true + +[node name="CSGMesh3D" type="CSGMesh3D" parent="CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0) +mesh = SubResource("7") +material = ExtResource("1_isyto") + +[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, -12) +size = Vector3(8, 4, 16) +material = ExtResource("2_bp8ee") + +[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.7, -12) +operation = 2 +size = Vector3(6, 3.6, 14) +material = ExtResource("2_bp8ee") + +[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D"] +transform = Transform3D(0.642788, 0.766045, 0, -0.766045, 0.642788, 0, 0, 0, 1, 3.1, 0, -12) +operation = 2 +size = Vector3(1, 1.4, 14) +material = ExtResource("2_bp8ee") + +[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D"] +transform = Transform3D(0.766045, 0.642788, 0, -0.642788, 0.766045, 0, 0, 0, 1, -3.1, 0, -12) +operation = 2 +size = Vector3(1.4, 1, 14) +material = ExtResource("2_bp8ee") + +[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D"] +transform = Transform3D(-3.09086e-08, -3.09086e-08, -1, -0.766045, 0.642788, 3.8097e-09, 0.642788, 0.766045, -4.35451e-08, -1.31134e-07, 0, -4.9) +operation = 2 +size = Vector3(1, 1.4, 6) +material = ExtResource("2_bp8ee") + +[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D"] +transform = Transform3D(-3.09086e-08, -3.09086e-08, -1, -0.642788, 0.766045, -3.8097e-09, 0.766045, 0.642788, -4.35451e-08, 1.31134e-07, 0, -19.1) +operation = 2 +size = Vector3(1.4, 1, 6) +material = ExtResource("2_bp8ee") + +[node name="Wall1" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -48) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall1"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, 0) +mesh = SubResource("8") +skeleton = NodePath("../..") +surface_material_override/0 = ExtResource("1_isyto") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall1"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, -1) +shape = SubResource("4") + +[node name="Wall2" type="StaticBody3D" parent="."] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 48, 0, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall2"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, 0) +mesh = SubResource("8") +skeleton = NodePath("../..") +surface_material_override/0 = ExtResource("1_isyto") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall2"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, -1) +shape = SubResource("4") + +[node name="Wall3" type="StaticBody3D" parent="."] +transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 48) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall3"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, 0) +mesh = SubResource("8") +skeleton = NodePath("../..") +surface_material_override/0 = ExtResource("1_isyto") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall3"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, -1) +shape = SubResource("4") + +[node name="Wall4" type="StaticBody3D" parent="."] +transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -48, 0, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall4"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, 0) +mesh = SubResource("8") +skeleton = NodePath("../..") +surface_material_override/0 = ExtResource("1_isyto") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall4"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, -1) +shape = SubResource("4") diff --git a/scenes/swim_demo/objects/water_shader.gdshader b/scenes/swim_demo/objects/water_shader.gdshader new file mode 100644 index 00000000..c7e9a7bc --- /dev/null +++ b/scenes/swim_demo/objects/water_shader.gdshader @@ -0,0 +1,33 @@ +shader_type spatial; +render_mode cull_disabled; + +// Water material properties +uniform vec3 albedo : source_color = vec3(0.0, 0.0, 0.4); +uniform float metallic : hint_range(0.0, 1.0) = 0.0; +uniform float roughness : hint_range(0.0, 1.0) = 0.02; +uniform float alpha = 0.7; + +// Noise scale and texture +uniform float scale = 0.05; +uniform sampler2D normal_texture; + +void fragment() { + // Get the world X/Z coordinates + vec2 world = (INV_VIEW_MATRIX * vec4(VERTEX, 1.0)).xz * scale; + + // Calculate two time-varying offsets to the noise texture + vec2 offset1 = vec2(0.05, 0.0) * sin(TIME / 5.0 * PI); + vec2 offset2 = vec2(0.0, 0.05) * cos(TIME / 5.0 * PI); + + // Sample the noise texture at the two offsets and blend + vec3 normal1v = texture(normal_texture, world + offset1).rgb; + vec3 normal2v = texture(normal_texture, world + offset2).rgb; + vec3 normal = mix(normal1v, normal2v, 0.5); + + // Set the outputs + ALBEDO = albedo; + METALLIC = metallic; + ROUGHNESS = roughness; + NORMAL_MAP = normal; + ALPHA = alpha; +} \ No newline at end of file diff --git a/scenes/swim_demo/swim demo.png b/scenes/swim_demo/swim demo.png new file mode 100644 index 0000000000000000000000000000000000000000..c7abecc25ccba40ad2bf70255772d4b869cefc74 GIT binary patch literal 3772 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 literal 0 HcmV?d00001 diff --git a/scenes/swim_demo/swim demo.png.import b/scenes/swim_demo/swim demo.png.import new file mode 100644 index 00000000..c0edcaa0 --- /dev/null +++ b/scenes/swim_demo/swim demo.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dd2u7l7q2de65" +path.s3tc="res://.godot/imported/swim demo.png-68e418131c0f315222da038696c9d228.s3tc.ctex" +path.etc2="res://.godot/imported/swim demo.png-68e418131c0f315222da038696c9d228.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://scenes/swim_demo/swim demo.png" +dest_files=["res://.godot/imported/swim demo.png-68e418131c0f315222da038696c9d228.s3tc.ctex", "res://.godot/imported/swim demo.png-68e418131c0f315222da038696c9d228.etc2.ctex"] + +[params] + +compress/mode=2 +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/scenes/swim_demo/swim_demo.tscn b/scenes/swim_demo/swim_demo.tscn new file mode 100644 index 00000000..adc66eb5 --- /dev/null +++ b/scenes/swim_demo/swim_demo.tscn @@ -0,0 +1,114 @@ +[gd_scene load_steps=23 format=3 uid="uid://cup0itbt0cr3a"] + +[ext_resource type="PackedScene" uid="uid://qbmx03iibuuu" path="res://addons/godot-xr-tools/staging/scene_base.tscn" id="1_hh5kg"] +[ext_resource type="Script" path="res://scenes/demo_scene_base.gd" id="2_oyddf"] +[ext_resource type="PackedScene" uid="uid://b4kad2kuba1yn" path="res://addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn" id="3_pllxu"] +[ext_resource type="PackedScene" uid="uid://bl2nuu3qhlb5k" path="res://addons/godot-xr-tools/functions/movement_direct.tscn" id="4_nrdle"] +[ext_resource type="PackedScene" uid="uid://c2q5phg8w08o" path="res://addons/godot-xr-tools/functions/movement_jump.tscn" id="5_fq8ff"] +[ext_resource type="PackedScene" uid="uid://clt88d5d1dje4" path="res://addons/godot-xr-tools/functions/movement_crouch.tscn" id="6_7hgaq"] +[ext_resource type="PackedScene" uid="uid://l2n30mpbkdyw" path="res://addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn" id="7_4gmht"] +[ext_resource type="PackedScene" uid="uid://b6bk2pj8vbj28" path="res://addons/godot-xr-tools/functions/movement_turn.tscn" id="8_0mkhw"] +[ext_resource type="PackedScene" uid="uid://diyu06cw06syv" path="res://addons/godot-xr-tools/player/player_body.tscn" id="9_8t4w8"] +[ext_resource type="PackedScene" uid="uid://bjuel0yobnb7l" path="res://scenes/swim_demo/objects/swim_map.tscn" id="10_1enq8"] +[ext_resource type="PackedScene" uid="uid://kyhaogt0a4q8" path="res://addons/godot-xr-tools/functions/movement_flight.tscn" id="10_a44gs"] +[ext_resource type="PackedScene" uid="uid://3a6wjr3a13vd" path="res://assets/meshes/teleport/teleport.tscn" id="11_2rbjy"] +[ext_resource type="Texture2D" uid="uid://ckw6nliyayo6a" path="res://scenes/main_menu/return to main menu.png" id="12_qpg8h"] +[ext_resource type="PackedScene" uid="uid://cap4i60th5v7v" path="res://scenes/swim_demo/objects/instructions.tscn" id="14_eqdep"] +[ext_resource type="Script" path="res://scenes/swim_demo/objects/swim_area.gd" id="15_pjwfr"] +[ext_resource type="Shader" path="res://scenes/swim_demo/objects/water_shader.gdshader" id="16_k8nhe"] +[ext_resource type="Environment" uid="uid://c75hc5t2ml5re" path="res://default_env.tres" id="17_sr5p1"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_nkslp"] +size = Vector3(8, 3, 16) + +[sub_resource type="PlaneMesh" id="PlaneMesh_26y0g"] +size = Vector2(6, 14) + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_kifw3"] +noise_type = 3 +fractal_type = 2 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_jc332"] +generate_mipmaps = false +seamless = true +as_normal_map = true +bump_strength = 1.5 +noise = SubResource("FastNoiseLite_kifw3") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_u86hi"] +render_priority = 0 +shader = ExtResource("16_k8nhe") +shader_parameter/albedo = Color(0, 0, 0.4, 1) +shader_parameter/metallic = 0.0 +shader_parameter/roughness = 0.02 +shader_parameter/alpha = 0.7 +shader_parameter/scale = 0.2 +shader_parameter/normal_texture = SubResource("NoiseTexture2D_jc332") + +[node name="SwimDemo" instance=ExtResource("1_hh5kg")] +script = ExtResource("2_oyddf") + +[node name="LeftHand" parent="XROrigin3D/LeftHand" index="0" instance=ExtResource("3_pllxu")] + +[node name="MovementDirect" parent="XROrigin3D/LeftHand" index="1" instance=ExtResource("4_nrdle")] +max_speed = 3.0 +strafe = true + +[node name="MovementJump" parent="XROrigin3D/LeftHand" index="2" instance=ExtResource("5_fq8ff")] +jump_button_action = "ax_button" + +[node name="MovementCrouch" parent="XROrigin3D/LeftHand" index="3" instance=ExtResource("6_7hgaq")] +crouch_height = 1.3 +crouch_button_action = "by_button" + +[node name="RightHand" parent="XROrigin3D/RightHand" index="0" instance=ExtResource("7_4gmht")] + +[node name="MovementDirect" parent="XROrigin3D/RightHand" index="1" instance=ExtResource("4_nrdle")] +max_speed = 3.0 + +[node name="MovementTurn" parent="XROrigin3D/RightHand" index="2" instance=ExtResource("8_0mkhw")] + +[node name="MovementJump" parent="XROrigin3D/RightHand" index="3" instance=ExtResource("5_fq8ff")] +jump_button_action = "ax_button" + +[node name="MovementCrouch" parent="XROrigin3D/RightHand" index="4" instance=ExtResource("6_7hgaq")] +crouch_height = 1.3 +crouch_button_action = "by_button" +crouch_type = 1 + +[node name="PlayerBody" parent="XROrigin3D" index="3" instance=ExtResource("9_8t4w8")] + +[node name="MovementFlight" parent="XROrigin3D" index="4" instance=ExtResource("10_a44gs")] +flight_button = "none" +speed_scale = 3.0 + +[node name="SwimMap" parent="." index="1" instance=ExtResource("10_1enq8")] + +[node name="MainMenuTeleport" parent="." index="2" instance=ExtResource("11_2rbjy")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 7) +scene_base = NodePath("..") +title = ExtResource("12_qpg8h") + +[node name="Instructions" parent="." index="3" instance=ExtResource("14_eqdep")] + +[node name="SwimArea" type="Area3D" parent="." index="4"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, -12) +collision_layer = 0 +collision_mask = 524288 +monitorable = false +script = ExtResource("15_pjwfr") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="SwimArea" index="0"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.2, 0) +shape = SubResource("BoxShape3D_nkslp") + +[node name="WaterPlane" type="MeshInstance3D" parent="." index="5"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.7, -12) +mesh = SubResource("PlaneMesh_26y0g") +surface_material_override/0 = SubResource("ShaderMaterial_u86hi") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="." index="6"] +environment = ExtResource("17_sr5p1") + +[connection signal="body_entered" from="SwimArea" to="SwimArea" method="_on_body_entered"] +[connection signal="body_exited" from="SwimArea" to="SwimArea" method="_on_body_exited"]