From e1c521f23a02da574fb51aece383c4a11a3bd2c4 Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Fri, 4 Apr 2025 15:39:14 -0600 Subject: [PATCH] Added listener node --- levels/mechanic_test/mechanic_test.tscn | 2 +- levels/mechanic_test/signal_test.tscn | 122 ++++++++++++++++++- src/effects/grunk_splatter.tscn | 16 ++- src/world/game_sound/game_sound_listener.gd | 2 +- src/world/mechanics/listener/listener.gd | 36 ++++++ src/world/mechanics/listener/listener.gd.uid | 1 + src/world/mechanics/listener/listener.tscn | 98 +++++++++++++++ 7 files changed, 273 insertions(+), 4 deletions(-) create mode 100644 src/world/mechanics/listener/listener.gd create mode 100644 src/world/mechanics/listener/listener.gd.uid create mode 100644 src/world/mechanics/listener/listener.tscn diff --git a/levels/mechanic_test/mechanic_test.tscn b/levels/mechanic_test/mechanic_test.tscn index 001c4c1..b153eb2 100644 --- a/levels/mechanic_test/mechanic_test.tscn +++ b/levels/mechanic_test/mechanic_test.tscn @@ -141,7 +141,7 @@ transform = Transform3D(0.866025, -0.156955, -0.474726, 0.5, 0.271854, 0.82225, [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_bg05n") -[node name="WorldFloor" type="StaticBody3D" parent="."] +[node name="WorldFloor" type="StaticBody3D" parent="." groups=["PlasticMaterial"]] [node name="MeshInstance3D" type="MeshInstance3D" parent="WorldFloor"] mesh = SubResource("PlaneMesh_mn2wa") diff --git a/levels/mechanic_test/signal_test.tscn b/levels/mechanic_test/signal_test.tscn index 9ff4c4c..a4ba4fd 100644 --- a/levels/mechanic_test/signal_test.tscn +++ b/levels/mechanic_test/signal_test.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=24 format=3 uid="uid://b5jubpjj3d277"] +[gd_scene load_steps=28 format=3 uid="uid://b5jubpjj3d277"] [ext_resource type="PackedScene" uid="uid://c2omlx4ptrc01" path="res://src/world/gunk_body/gunk_body.tscn" id="1_3u410"] [ext_resource type="Shader" uid="uid://ckxc0ngd37rtk" path="res://src/shaders/gunk.gdshader" id="2_tfbib"] @@ -11,6 +11,7 @@ [ext_resource type="PackedScene" uid="uid://bttust5ohud8e" path="res://src/world/mechanics/relay/gunk_relay.tscn" id="9_d4a3d"] [ext_resource type="PackedScene" uid="uid://dgeg3kkogm71m" path="res://src/world/mechanics/alarm/gunk_alarm.tscn" id="10_l8xa5"] [ext_resource type="PackedScene" uid="uid://d0j20q65wnqsr" path="res://src/world/mechanics/heart/gunk_heart.tscn" id="11_tfbib"] +[ext_resource type="PackedScene" uid="uid://kctp5erogwcb" path="res://src/world/mechanics/listener/listener.tscn" id="12_e8utx"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cgmn0"] resource_local_to_scene = true @@ -164,6 +165,60 @@ shader_parameter/jitter_time_scale = 0.1 shader_parameter/vertex_inflation = 0.0 shader_parameter/inflation_pixellation = 10.0 +[sub_resource type="ArrayMesh" id="ArrayMesh_r07l4"] +_surfaces = [{ +"aabb": AABB(-1.5, 0, -1.5, 3, 1e-05, 3), +"format": 34896613377, +"index_count": 6, +"index_data": PackedByteArray(0, 0, 1, 0, 2, 0, 2, 0, 1, 0, 3, 0), +"name": "Plane", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 4, +"vertex_data": PackedByteArray(255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_67o2j"] +_surfaces = [{ +"aabb": AABB(-1.5, 0, -1.5, 3, 1e-05, 3), +"attribute_data": PackedByteArray(255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0), +"format": 34896613399, +"index_count": 6, +"index_data": PackedByteArray(0, 0, 1, 0, 2, 0, 2, 0, 1, 0, 3, 0), +"material": SubResource("StandardMaterial3D_3u410"), +"name": "Plane", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 4, +"vertex_data": PackedByteArray(255, 255, 0, 0, 255, 255, 255, 191, 0, 0, 0, 0, 255, 255, 255, 191, 255, 255, 0, 0, 0, 0, 255, 191, 0, 0, 0, 0, 0, 0, 255, 191, 255, 255, 255, 127, 255, 255, 255, 127, 255, 255, 255, 127, 255, 255, 255, 127) +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_r07l4") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_e8utx"] +resource_local_to_scene = true +render_priority = 0 +shader = ExtResource("2_tfbib") +shader_parameter/color_1 = Color(0, 0.03, 0.1, 1) +shader_parameter/color_2 = Color(0, 0.1, 0.3, 1) +shader_parameter/emission_color = Color(0.25, 0.88, 1, 1) +shader_parameter/pixellation = 128.0 +shader_parameter/time_pixellation = 30.0 +shader_parameter/roughness = 0.15 +shader_parameter/specular_contribution = 0.8 +shader_parameter/emission_strength = 0.02 +shader_parameter/uv_scale = Vector2(4, 4) +shader_parameter/time_scale = 0.2 +shader_parameter/edge_bleed = 0.25 +shader_parameter/gunk_mask = SubResource("CompressedTexture2D_f342o") +shader_parameter/gunk_noise = SubResource("NoiseTexture3D_iyuyb") +shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_qjnj2") +shader_parameter/jitter_magnitude = 0.0 +shader_parameter/jitter_time_scale = 0.1 +shader_parameter/vertex_inflation = 0.0 +shader_parameter/inflation_pixellation = 10.0 + [node name="SignalTest" type="Node3D"] [node name="TriggerNetWall" type="MeshInstance3D" parent="."] @@ -239,6 +294,52 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, -1.96701e-08, -0.45) [node name="GunkAlarm" parent="PulseNetWall/Puzzle" instance=ExtResource("10_l8xa5")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -4.37114e-08, -1) +[node name="ListenerWall" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 7, 1.5, 0) +mesh = SubResource("ArrayMesh_67o2j") + +[node name="GunkBody" parent="ListenerWall" instance=ExtResource("1_3u410")] +mask_dim = 64 +source_gunk_material = SubResource("ShaderMaterial_e8utx") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ListenerWall/GunkBody"] +shape = SubResource("ConcavePolygonShape3D_x2vho") + +[node name="Puzzle" type="Node3D" parent="ListenerWall"] + +[node name="Listener" parent="ListenerWall/Puzzle" instance=ExtResource("12_e8utx")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.37114e-08, 1) + +[node name="GunkRelay" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.35, 2.18557e-08, 0.5) + +[node name="GunkRelay2" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.7, 4.37115e-09, 0.1) + +[node name="GunkRelay3" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.9, -1.96701e-08, -0.45) + +[node name="GunkRelay4" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.65, -4.15258e-08, -0.95) + +[node name="GunkRelay5" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0999994, -5.02681e-08, -1.15) + +[node name="GunkRelay6" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.400001, -3.71547e-08, -0.85) + +[node name="GunkRelay7" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, -1.5299e-08, -0.35) + +[node name="GunkRelay8" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.2, -2.18557e-09, -0.0500002) + +[node name="GunkRelay9" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.15, -6.55671e-09, -0.15) + +[node name="GunkRelay10" parent="ListenerWall/Puzzle" instance=ExtResource("9_d4a3d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.15, -2.18557e-08, -0.5) + [connection signal="destroyed" from="TriggerNetWall/Puzzle/GunkTrigger" to="TriggerNetWall/Puzzle/GunkRelay" method="trigger"] [connection signal="triggered" from="TriggerNetWall/Puzzle/GunkRelay" to="TriggerNetWall/Puzzle/GunkRelay2" method="trigger"] [connection signal="triggered" from="TriggerNetWall/Puzzle/GunkRelay5" to="TriggerNetWall/Puzzle/GunkRelay2" method="trigger"] @@ -255,3 +356,22 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -4.37114e-08, -1) [connection signal="pulsed" from="PulseNetWall/Puzzle/GunkRelay4" to="PulseNetWall/Puzzle/GunkRelay6" method="pulse"] [connection signal="pulsed" from="PulseNetWall/Puzzle/GunkRelay5" to="PulseNetWall/Puzzle/GunkAlarm" method="pulse"] [connection signal="pulsed" from="PulseNetWall/Puzzle/GunkRelay6" to="PulseNetWall/Puzzle/GunkAlarm" method="pulse"] +[connection signal="triggered" from="ListenerWall/Puzzle/Listener" to="ListenerWall/Puzzle/GunkRelay" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay" to="ListenerWall/Puzzle/GunkRelay2" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay" to="ListenerWall/Puzzle/GunkRelay2" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay2" to="ListenerWall/Puzzle/GunkRelay3" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay2" to="ListenerWall/Puzzle/GunkRelay3" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay3" to="ListenerWall/Puzzle/GunkRelay4" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay3" to="ListenerWall/Puzzle/GunkRelay4" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay4" to="ListenerWall/Puzzle/GunkRelay5" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay4" to="ListenerWall/Puzzle/GunkRelay5" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay5" to="ListenerWall/Puzzle/GunkRelay6" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay5" to="ListenerWall/Puzzle/GunkRelay6" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay6" to="ListenerWall/Puzzle/GunkRelay7" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay6" to="ListenerWall/Puzzle/GunkRelay7" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay7" to="ListenerWall/Puzzle/GunkRelay8" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay7" to="ListenerWall/Puzzle/GunkRelay8" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay8" to="ListenerWall/Puzzle/GunkRelay9" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay8" to="ListenerWall/Puzzle/GunkRelay9" method="trigger"] +[connection signal="pulsed" from="ListenerWall/Puzzle/GunkRelay9" to="ListenerWall/Puzzle/GunkRelay10" method="trigger"] +[connection signal="triggered" from="ListenerWall/Puzzle/GunkRelay9" to="ListenerWall/Puzzle/GunkRelay10" method="trigger"] diff --git a/src/effects/grunk_splatter.tscn b/src/effects/grunk_splatter.tscn index 01ad15b..d8453d2 100644 --- a/src/effects/grunk_splatter.tscn +++ b/src/effects/grunk_splatter.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=20 format=3 uid="uid://xlt78xc1tmkl"] +[gd_scene load_steps=22 format=3 uid="uid://xlt78xc1tmkl"] [ext_resource type="Texture2D" uid="uid://cgwgmxwjgwbwr" path="res://assets/particles/splatter_2.png" id="1_5xu2x"] [ext_resource type="Texture2D" uid="uid://bhoai6xv53tqm" path="res://assets/particles/splatter_1.png" id="2_bt63p"] [ext_resource type="AudioStream" uid="uid://di0j2xhgfc78s" path="res://assets/sfx/grunk/splat1.wav" id="3_t00bd"] [ext_resource type="AudioStream" uid="uid://d1w5gfmjj7tjk" path="res://assets/sfx/grunk/splat2.wav" id="4_2iem1"] +[ext_resource type="Script" uid="uid://c5o1d2shq2qig" path="res://src/world/game_sound/game_sound_emitter.gd" id="5_2iem1"] [sub_resource type="Gradient" id="Gradient_5xu2x"] offsets = PackedFloat32Array(0, 0.291304, 0.526087, 1) @@ -99,6 +100,9 @@ streams_count = 2 stream_0/stream = ExtResource("3_t00bd") stream_1/stream = ExtResource("4_2iem1") +[sub_resource type="SphereShape3D" id="SphereShape3D_6adkd"] +radius = 2.0 + [node name="GrunkSplatter" type="GPUParticles3D"] sorting_offset = 9.0 emitting = false @@ -133,7 +137,17 @@ unit_size = 6.0 autoplay = true bus = &"SFX" +[node name="SplatterSoundEmitter" type="Area3D" parent="."] +collision_layer = 0 +collision_mask = 16 +script = ExtResource("5_2iem1") +metadata/_custom_type_script = "uid://c5o1d2shq2qig" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="SplatterSoundEmitter"] +shape = SubResource("SphereShape3D_6adkd") + [connection signal="ready" from="." to="SplatterSFX" method="play"] +[connection signal="ready" from="." to="SplatterSoundEmitter" method="emit_sound_here"] [connection signal="ready" from="." to="." method="set_emitting" binds= [true]] [connection signal="ready" from="." to="SubSplatter" method="set_emitting" binds= [true]] [connection signal="timeout" from="FreeTimer" to="." method="queue_free"] diff --git a/src/world/game_sound/game_sound_listener.gd b/src/world/game_sound/game_sound_listener.gd index cd6b2b3..4ea05c8 100644 --- a/src/world/game_sound/game_sound_listener.gd +++ b/src/world/game_sound/game_sound_listener.gd @@ -1,5 +1,5 @@ @tool -class_name GameSoundListener extends Area3D +class_name GameSoundListener extends StaticBody3D ## Receives alerts from intersecting GameSoundEmitters signal sound_detected(source: Vector3) diff --git a/src/world/mechanics/listener/listener.gd b/src/world/mechanics/listener/listener.gd new file mode 100644 index 0000000..6838f06 --- /dev/null +++ b/src/world/mechanics/listener/listener.gd @@ -0,0 +1,36 @@ +@tool +extends GunkNode +## Fires a trigger signal when a sound is made nearby + +signal triggered + +@export var quick_connect_to: SignalNode: + set = _editor_connect + +@export var splatter_scene: PackedScene + +# NOTE +# trigger oscillation animation was generated using the formula +# f(x) = e^(-0.25x) * cos(x * pi / 2 - pi/2) + 1 for x in {0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 20} +@onready var trigger_animation_player: AnimationPlayer = %TriggerAnimationPlayer +@onready var cooldown_timer: Timer = %CooldownTimer + + +func trigger() -> void: + if not cooldown_timer.is_stopped(): + return + + # TODO play sfx + + trigger_animation_player.play("trigger") + triggered.emit() + cooldown_timer.start() + + +func _destroy() -> void: + add_sibling(splatter_scene.instantiate()) + + +func _editor_connect(node: SignalNode) -> void: + triggered.connect(node.trigger, CONNECT_PERSIST) + self.notify_property_list_changed() diff --git a/src/world/mechanics/listener/listener.gd.uid b/src/world/mechanics/listener/listener.gd.uid new file mode 100644 index 0000000..e876477 --- /dev/null +++ b/src/world/mechanics/listener/listener.gd.uid @@ -0,0 +1 @@ +uid://bde7cglaqobkd diff --git a/src/world/mechanics/listener/listener.tscn b/src/world/mechanics/listener/listener.tscn new file mode 100644 index 0000000..d858dbb --- /dev/null +++ b/src/world/mechanics/listener/listener.tscn @@ -0,0 +1,98 @@ +[gd_scene load_steps=9 format=3 uid="uid://kctp5erogwcb"] + +[ext_resource type="Script" uid="uid://bde7cglaqobkd" path="res://src/world/mechanics/listener/listener.gd" id="1_htscg"] +[ext_resource type="PackedScene" uid="uid://xlt78xc1tmkl" path="res://src/effects/grunk_splatter.tscn" id="2_2ibh1"] +[ext_resource type="Script" uid="uid://cfsiyhhrcua6o" path="res://src/world/game_sound/game_sound_listener.gd" id="2_htscg"] + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_2ibh1"] +data = PackedVector3Array(0, 0.05, 0.25, 0.0957, 0.05, 0.231, 0, -0.05, 0.2, 0.0957, 0.05, 0.231, 0.0765, -0.05, 0.1848, 0, -0.05, 0.2, 0.0957, 0.05, 0.231, 0.1768, 0.05, 0.1768, 0.0765, -0.05, 0.1848, 0.1768, 0.05, 0.1768, 0.1414, -0.05, 0.1414, 0.0765, -0.05, 0.1848, 0.1768, 0.05, 0.1768, 0.231, 0.05, 0.0957, 0.1414, -0.05, 0.1414, 0.231, 0.05, 0.0957, 0.1848, -0.05, 0.0765, 0.1414, -0.05, 0.1414, 0.231, 0.05, 0.0957, 0.25, 0.05, 0, 0.1848, -0.05, 0.0765, 0.25, 0.05, 0, 0.2, -0.05, 0, 0.1848, -0.05, 0.0765, 0.25, 0.05, 0, 0.231, 0.05, -0.0957, 0.2, -0.05, 0, 0.231, 0.05, -0.0957, 0.1848, -0.05, -0.0765, 0.2, -0.05, 0, 0.231, 0.05, -0.0957, 0.1768, 0.05, -0.1768, 0.1848, -0.05, -0.0765, 0.1768, 0.05, -0.1768, 0.1414, -0.05, -0.1414, 0.1848, -0.05, -0.0765, 0.1768, 0.05, -0.1768, 0.0957, 0.05, -0.231, 0.1414, -0.05, -0.1414, 0.0957, 0.05, -0.231, 0.0765, -0.05, -0.1848, 0.1414, -0.05, -0.1414, 0.0957, 0.05, -0.231, 0, 0.05, -0.25, 0.0765, -0.05, -0.1848, 0, 0.05, -0.25, 0, -0.05, -0.2, 0.0765, -0.05, -0.1848, 0, 0.05, -0.25, -0.0957, 0.05, -0.231, 0, -0.05, -0.2, -0.0957, 0.05, -0.231, -0.0765, -0.05, -0.1848, 0, -0.05, -0.2, -0.0957, 0.05, -0.231, -0.1768, 0.05, -0.1768, -0.0765, -0.05, -0.1848, -0.1768, 0.05, -0.1768, -0.1414, -0.05, -0.1414, -0.0765, -0.05, -0.1848, -0.1768, 0.05, -0.1768, -0.231, 0.05, -0.0957, -0.1414, -0.05, -0.1414, -0.231, 0.05, -0.0957, -0.1848, -0.05, -0.0765, -0.1414, -0.05, -0.1414, -0.231, 0.05, -0.0957, -0.25, 0.05, 0, -0.1848, -0.05, -0.0765, -0.25, 0.05, 0, -0.2, -0.05, 0, -0.1848, -0.05, -0.0765, -0.25, 0.05, 0, -0.231, 0.05, 0.0957, -0.2, -0.05, 0, -0.231, 0.05, 0.0957, -0.1848, -0.05, 0.0765, -0.2, -0.05, 0, -0.231, 0.05, 0.0957, -0.1768, 0.05, 0.1768, -0.1848, -0.05, 0.0765, -0.1768, 0.05, 0.1768, -0.1414, -0.05, 0.1414, -0.1848, -0.05, 0.0765, -0.1768, 0.05, 0.1768, -0.0957, 0.05, 0.231, -0.1414, -0.05, 0.1414, -0.0957, 0.05, 0.231, -0.0765, -0.05, 0.1848, -0.1414, -0.05, 0.1414, -0.0957, 0.05, 0.231, 0, 0.05, 0.25, -0.0765, -0.05, 0.1848, 0, 0.05, 0.25, 0, -0.05, 0.2, -0.0765, -0.05, 0.1848, 0, 0.05, 0, 0.0957, 0.05, 0.231, 0, 0.05, 0.25, 0, 0.05, 0, 0.1768, 0.05, 0.1768, 0.0957, 0.05, 0.231, 0, 0.05, 0, 0.231, 0.05, 0.0957, 0.1768, 0.05, 0.1768, 0, 0.05, 0, 0.25, 0.05, 0, 0.231, 0.05, 0.0957, 0, 0.05, 0, 0.231, 0.05, -0.0957, 0.25, 0.05, 0, 0, 0.05, 0, 0.1768, 0.05, -0.1768, 0.231, 0.05, -0.0957, 0, 0.05, 0, 0.0957, 0.05, -0.231, 0.1768, 0.05, -0.1768, 0, 0.05, 0, 0, 0.05, -0.25, 0.0957, 0.05, -0.231, 0, 0.05, 0, -0.0957, 0.05, -0.231, 0, 0.05, -0.25, 0, 0.05, 0, -0.1768, 0.05, -0.1768, -0.0957, 0.05, -0.231, 0, 0.05, 0, -0.231, 0.05, -0.0957, -0.1768, 0.05, -0.1768, 0, 0.05, 0, -0.25, 0.05, 0, -0.231, 0.05, -0.0957, 0, 0.05, 0, -0.231, 0.05, 0.0957, -0.25, 0.05, 0, 0, 0.05, 0, -0.1768, 0.05, 0.1768, -0.231, 0.05, 0.0957, 0, 0.05, 0, -0.0957, 0.05, 0.231, -0.1768, 0.05, 0.1768, 0, 0.05, 0, 0, 0.05, 0.25, -0.0957, 0.05, 0.231, 0, -0.05, 0, 0, -0.05, 0.2, 0.0765, -0.05, 0.1848, 0, -0.05, 0, 0.0765, -0.05, 0.1848, 0.1414, -0.05, 0.1414, 0, -0.05, 0, 0.1414, -0.05, 0.1414, 0.1848, -0.05, 0.0765, 0, -0.05, 0, 0.1848, -0.05, 0.0765, 0.2, -0.05, 0, 0, -0.05, 0, 0.2, -0.05, 0, 0.1848, -0.05, -0.0765, 0, -0.05, 0, 0.1848, -0.05, -0.0765, 0.1414, -0.05, -0.1414, 0, -0.05, 0, 0.1414, -0.05, -0.1414, 0.0765, -0.05, -0.1848, 0, -0.05, 0, 0.0765, -0.05, -0.1848, 0, -0.05, -0.2, 0, -0.05, 0, 0, -0.05, -0.2, -0.0765, -0.05, -0.1848, 0, -0.05, 0, -0.0765, -0.05, -0.1848, -0.1414, -0.05, -0.1414, 0, -0.05, 0, -0.1414, -0.05, -0.1414, -0.1848, -0.05, -0.0765, 0, -0.05, 0, -0.1848, -0.05, -0.0765, -0.2, -0.05, 0, 0, -0.05, 0, -0.2, -0.05, 0, -0.1848, -0.05, 0.0765, 0, -0.05, 0, -0.1848, -0.05, 0.0765, -0.1414, -0.05, 0.1414, 0, -0.05, 0, -0.1414, -0.05, 0.1414, -0.0765, -0.05, 0.1848, 0, -0.05, 0, -0.0765, -0.05, 0.1848, 0, -0.05, 0.2) + +[sub_resource type="CylinderMesh" id="CylinderMesh_ud3xk"] +top_radius = 0.25 +bottom_radius = 0.2 +height = 0.1 +radial_segments = 16 +rings = 0 + +[sub_resource type="Animation" id="Animation_htscg"] +resource_name = "trigger" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CollisionShape3D:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.9, 2), +"transitions": PackedFloat32Array(0.618, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector3(1, 1, 1), Vector3(1.779, 1.779, 1.779), Vector3(0.528, 0.528, 0.528), Vector3(1.287, 1.287, 1.287), Vector3(0.826, 0.826, 0.826), Vector3(1.105, 1.105, 1.105), Vector3(0.936, 0.936, 0.936), Vector3(1.039, 1.039, 1.039), Vector3(0.976, 0.976, 0.976), Vector3(1.014, 1.014, 1.014), Vector3(0.991, 0.991, 0.991), Vector3(1, 1, 1)] +} + +[sub_resource type="Animation" id="Animation_2ibh1"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CollisionShape3D:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_2ibh1"] +_data = { +&"RESET": SubResource("Animation_2ibh1"), +&"trigger": SubResource("Animation_htscg") +} + +[node name="Listener" type="StaticBody3D"] +collision_layer = 5 +collision_mask = 0 +script = ExtResource("1_htscg") +splatter_scene = ExtResource("2_2ibh1") +durability = 3.0 +value = 4000.0 +metadata/_custom_type_script = "uid://bypgxi0gy56yk" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.05, 0) +shape = SubResource("ConcavePolygonShape3D_2ibh1") + +[node name="GameSoundListener" type="StaticBody3D" parent="CollisionShape3D"] +collision_layer = 16 +collision_mask = 0 +script = ExtResource("2_htscg") +metadata/_custom_type_script = "uid://cfsiyhhrcua6o" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="CollisionShape3D/GameSoundListener"] +shape = SubResource("ConcavePolygonShape3D_2ibh1") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="CollisionShape3D"] +mesh = SubResource("CylinderMesh_ud3xk") +skeleton = NodePath("../..") + +[node name="Label3D" type="Label3D" parent="CollisionShape3D/MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0.051, 0) +pixel_size = 0.001 +text = "LISTENER" +font_size = 92 +outline_size = 20 + +[node name="CooldownTimer" type="Timer" parent="."] +unique_name_in_owner = true +wait_time = 4.0 +one_shot = true + +[node name="TriggerAnimationPlayer" type="AnimationPlayer" parent="."] +unique_name_in_owner = true +libraries = { +&"": SubResource("AnimationLibrary_2ibh1") +} + +[connection signal="sound_detected" from="CollisionShape3D/GameSoundListener" to="." method="trigger" unbinds=1]