From 3fb8a54b42088124015d9070990260dfe41aea44 Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Mon, 21 Apr 2025 14:41:37 -0600 Subject: [PATCH] Alarm pulse animation --- asset_dev/grunk_nodes/alarm/alarm_core.xcf | Bin 53006 -> 87506 bytes assets/grunk/alarm/alarm_core.material | Bin 1118 -> 1172 bytes assets/grunk/alarm/alarm_core_E.png | 3 + assets/grunk/alarm/alarm_core_E.png.import | 34 ++++ src/world/mechanics/alarm/gunk_alarm.gd | 16 +- src/world/mechanics/alarm/gunk_alarm.tscn | 201 +++++++++++++++++++-- 6 files changed, 234 insertions(+), 20 deletions(-) create mode 100644 assets/grunk/alarm/alarm_core_E.png create mode 100644 assets/grunk/alarm/alarm_core_E.png.import diff --git a/asset_dev/grunk_nodes/alarm/alarm_core.xcf b/asset_dev/grunk_nodes/alarm/alarm_core.xcf index eb250c485c112dee5365596a83a22c53cf2a3dff..7f7ad554543451517ac62dc11d4ac8d775911abf 100644 GIT binary patch delta 2151 zcmb7EU1%It6rS0g?OM~=G$keeV8^v+s+}}z(rlVOh&EajWs}rJh(x{Fy}LU)f83eb zv=!N@f-gczxhOtq--O18mVggMinQQENovq_BYp8*`ywJnsN%Ulvp*nBdf?pep6{G{ z=G;5?+;g8Ne^^c}JwNcYqA2@7HBc3FKv7cV%ddZ<)(@R9ZEu>mMO+FAKJGeYvoaex zM%lEm;W-rppYmK17#8vaSjbkZPYjt(fQf}*k?yz$?;k3SRy#Ej_$#ct-5?R67H*K*06;SrbZwc8g|LwmtNrqxZuHtkl46*xE} zW-`YKMgbhhq8U{66ED3wouR#njCy!wBr&CGxn~Y%>AA#y`dP9!HXfwclVA0x{$!`B zC^HWTY}V*mZ7*HYG|*$JLRYmbi5+)9bEaX=T>6nm-}wLxO3+Vw#k1Uy_)|yD=UeEXLIpP;M%6Z^^XKLKA=mf zhbCv=knY<8`53{-6lC^ef&Q|<^EH8&7gu^_ZoK!%+v!g(0CNCTlk>;pIsJY0@5J{d zdV4L?8v*$kb3Cg=XX&@vlk^X5kj~v4o!<>?hpe*;A4z4G9%Ow|;u(Q_j9_F6vi^=l zMvI?Y6VR_v2a@I*#T4PK8w{&fp$uMV41Z zcd0e6-%DC{6FTI_x4?*`?&3F--dQ_8&+bl#H2T4aq{>ccjEjJVY(s9vF<>;x(l0xr zAv>Z$SSK696)o9GfMMKi3<|TZ2$CPevsbC z>->FQrk_sl?%()O1jtc6ImMsFjW0Q&o}B1#M=)m!vaum>^DmC-zH0)&{cm#I6%_zD$zq29 diff --git a/assets/grunk/alarm/alarm_core.material b/assets/grunk/alarm/alarm_core.material index 9f511ac2523dc3478e7c40bc19c84702a7faa9da..9215dcdbdd28745fce49c57db86e0872a1dcda7d 100644 GIT binary patch literal 1172 zcmV;F1Z(?JQ$s@n000005C8z+3jhFo1ONaiwJ-f(;0l!^0G2V9J0Mrm0T9>%EJUIu z1z-WBh~xu;Df$l~r0pa0xs!7w}v8bG)+OK8YsY|~Qr^i2@7EaGLUdH?iP^Cq1s%{yhSO-orzim|o_5mT_USUuh2 z^hd-5_+C2o9A!jA!OpMux>K%0>Zgu~5)iR5#SafnjsPJr zA))|85u)X~eyU)ejPqF_q60)MFaR;BTBTh|n{H4_$F+aI5AgDpaOs<`5DrQoF zc`0qaG8P8E(jj#en3d1J?ni?z&i|D-@WN<5V)cKn|Bz4bnchCn8gagI+n@-@$=1@- zDW}RLxRg|bhz%Tc{!$1ECtg^*aEuHXE{q6*1jRxQ#1b@;C?Sy}hYrLF6A&>#O3DV5 zK6pSx047pi_z>dc#)uUw3tD6ldBQ_UiWx473@Nf=N6QNi7&e%6=&{5IM(jSEQ0l#u zE8-sbc53I^-S6oH6eoM0?t~P zw5;&IuvJPh#BB4v2MByP6ZhB=-n9$1AR3riTlHV?SD7~-XQ=ZpmxI*1x&@HqSjb@j zebv8Y&1@?v=U@m~0=D{5K$xahu0~9JV{lEgP7Tv3uS7TWK`@~3#&O{ zi+{+|*)T%#VSrX}&zkF}?sZ;CzwEfcf zPZ9n^L4*ZlWl7FABN&S1>r8U4SHLv7=Ai(gZL(;woPwKwRz%p-#gS&0=}s~1)`qzQ m`j_e93b8_Y&K>rYM8M<5S4-KGS4QO?of5zQ1uhIyQ$s^2AtR^& literal 1118 zcmV-k1flyuB zdW5z3!6hViDAqtN@i&z0{vrs%A-*NBz_haRMSXmbkG2NDmwYB19B`Bs{QO z*H076b8&tOM09|N1qL7n%n8Z3_V2fxlFwG2$`tRn^|sDZy#y?qH&ZN8V((8^*RIRl zK8sq)Jg%&1u_o?)Z<|(lPZ@fmcBae;sYHPRrUs~%v3zZacmSRCT6)k{xg3G25A~tZ)`AQupQ;W3AcIhKf zq(H$g5HWxS3X&h#I6SqSkkU4pD1RRi5rBvg7B+GOkrCp=ixoR`>^MO~1Bw|fV*JQZ z!v_z1*l`$<)LW(I$#PQR$e+o3eJ>{y5KlEA35tq$>&gHoc}J9&eboAJdSZ%Mm)@?G zPRjhY#k9M}R+-xOeDJ*O6vn=^6tfOT-7;O;A4DYJR4WiXfbFQUsX=IlMkFaHNHUB8 zKmtOTDx!K4pkqDAl1?FpXh>U9R4daM$LwBm9|1?>uRfR*-&WkM#RVk=eZE!NIy?bN!fQl=WsoM~=8peKurdi3Re$%A@ppmiV+=ATISHQB ztEdAzpYgYckk^bXpgk08nJ3Z31VePq%9nU3kw`9~9R;@;rlq@YNII=&PJfBl?10)*$LD(&X*41MqAa*+0}Ism_p#eNOz z_5Op`JX;AV%EH?c+3HjQ+L{`;TA8?vficY{K(L<4m{*;i!Sxw$cYa@+u;beBQh*)P7b0oyzC`4}spvL%DEytI@crdcyrx^P z&~k1Q;6n_u!}$UlCF03TTImF9zXeHRGgwy_7{}v!ctR1Lw<7+{Qv*} diff --git a/assets/grunk/alarm/alarm_core_E.png b/assets/grunk/alarm/alarm_core_E.png new file mode 100644 index 0000000..ec5d1cb --- /dev/null +++ b/assets/grunk/alarm/alarm_core_E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c2585ac226ebdf9fa0297bd2372a837cec2db6b9b2c69586c37ad74ba3206a0 +size 14573 diff --git a/assets/grunk/alarm/alarm_core_E.png.import b/assets/grunk/alarm/alarm_core_E.png.import new file mode 100644 index 0000000..da6e83e --- /dev/null +++ b/assets/grunk/alarm/alarm_core_E.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vvcv5kyi4jvl" +path="res://.godot/imported/alarm_core_E.png-6e652d56d7fcc875e433f96b391d744d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/grunk/alarm/alarm_core_E.png" +dest_files=["res://.godot/imported/alarm_core_E.png-6e652d56d7fcc875e433f96b391d744d.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=0 diff --git a/src/world/mechanics/alarm/gunk_alarm.gd b/src/world/mechanics/alarm/gunk_alarm.gd index 09ce59c..60d4650 100644 --- a/src/world/mechanics/alarm/gunk_alarm.gd +++ b/src/world/mechanics/alarm/gunk_alarm.gd @@ -7,15 +7,14 @@ const ALERT_DELTA := 1 const JITTER_SCALE_FACTOR := 0.15 const JITTER_INFLATION_FACTOR := 1.5 -## Time to wait for a pulse signal before triggering. -@export var pulse_timeout := 6.0 - var _busy := false @onready var pulse_listener_timer: Timer = %PulseListenerTimer -@onready var animation_player: AnimationPlayer = $FrameSkipper/AlarmMesh/AnimationPlayer -@onready var effect_animation: AnimationPlayer = %EffectAnimation -@onready var bud: MeshInstance3D = $FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud +@onready var animation_player: AnimationPlayer = $FrameSkipper/Rumbler3D/AlarmMesh/AnimationPlayer +@onready var trigger_animation: AnimationPlayer = %TriggerAnimation +@onready var pulse_animation: AnimationPlayer = %PulseAnimation + +@onready var bud: MeshInstance3D = $FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud @onready var alarm_sfx: AudioStreamPlayer3D = %AlarmSFX @@ -27,7 +26,7 @@ func trigger() -> void: _busy = true Game.manager.raise_alert(ALERT_DELTA) animation_player.play("trigger") - effect_animation.play("trigger") + trigger_animation.play("trigger") alarm_sfx.play() @@ -36,7 +35,8 @@ func trigger() -> void: ## Note that alarms will not begin the pulse countdown until receiving the first pulse. ## On networks without a heart, the pulse timeout will be completely ignored. func pulse() -> void: - pulse_listener_timer.start(pulse_timeout) + pulse_animation.seek(0) + pulse_animation.play("pulse") func _process(delta: float) -> void: diff --git a/src/world/mechanics/alarm/gunk_alarm.tscn b/src/world/mechanics/alarm/gunk_alarm.tscn index 1d9fc9a..1da2c0d 100644 --- a/src/world/mechanics/alarm/gunk_alarm.tscn +++ b/src/world/mechanics/alarm/gunk_alarm.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=12 format=3 uid="uid://dgeg3kkogm71m"] +[gd_scene load_steps=16 format=3 uid="uid://dgeg3kkogm71m"] [ext_resource type="Script" uid="uid://djb5tabjcvwkt" path="res://src/world/mechanics/alarm/gunk_alarm.gd" id="1_piaxx"] [ext_resource type="PackedScene" uid="uid://60ks4l42qxia" path="res://assets/grunk/alarm/alarm.gltf" id="2_6vdvf"] [ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_gujky"] [ext_resource type="Material" uid="uid://bmab6i16v748m" path="res://assets/materials/grunk_jittery.material" id="3_g4yos"] +[ext_resource type="Script" uid="uid://b274q7uvn0cvp" path="res://src/ui/rumbler_3d.gd" id="3_vokcn"] [ext_resource type="Material" uid="uid://cdpvcruywnp4x" path="res://assets/grunk/alarm/alarm_core.material" id="5_6vdvf"] [ext_resource type="AudioStream" uid="uid://ypk1d4adrcs" path="res://assets/sfx/grunk/alarm_screech.wav" id="6_6vdvf"] @@ -12,7 +13,7 @@ length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_color") +tracks/0/path = NodePath("FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_color") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -24,7 +25,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_strength") +tracks/1/path = NodePath("FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_strength") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -40,7 +41,7 @@ length = 10.0 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_color") +tracks/0/path = NodePath("FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_color") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -52,7 +53,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_strength") +tracks/1/path = NodePath("FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_strength") tracks/1/interp = 2 tracks/1/loop_wrap = true tracks/1/keys = { @@ -68,6 +69,171 @@ _data = { &"trigger": SubResource("Animation_6vdvf") } +[sub_resource type="Animation" id="Animation_vokcn"] +resource_name = "pulse" +length = 9.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission_energy_multiplier") +tracks/0/interp = 2 +tracks/0/loop_wrap = false +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.166667, 3.5, 6, 9), +"transitions": PackedFloat32Array(1.618, 0.618, 4, 0.554785, 1), +"update": 0, +"values": [0.02, 2.0, 0.0, 40.0, 0.02] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission") +tracks/1/interp = 1 +tracks/1/loop_wrap = false +tracks/1/keys = { +"times": PackedFloat32Array(0, 1.6, 1.63333, 8.5, 9), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Color(0.25098, 0.878431, 1, 1), Color(0.25098, 0.878431, 1, 1), Color(1, 0.25098, 0.262745, 1), Color(1, 0.25098, 0.262745, 1), Color(0.25098, 0.878431, 1, 1)] +} +tracks/2/type = "method" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("..") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(6), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"trigger" +}] +} +tracks/3/type = "bezier" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Rumbler3D/AlarmMesh:scale:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0), +"points": PackedFloat32Array(1, -0.25, 0, 0, -0.00028199, 1.05, -0.15, 0, 0.25, 0, 1, -0.4, -0.05, 0.25, 0.05, 1, -0.25, -0.025, 0.095, 0.01, 0.9, 0, 0.1, 0, 0.25, 1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.166667, 0.966667, 2.2, 6, 9) +} +tracks/4/type = "bezier" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Rumbler3D/AlarmMesh:scale:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0), +"points": PackedFloat32Array(1, -0.25, 0, 0, 0, 1.05, -0.15, 0, 0.25, 0, 1, -0.4, -0.05, 0.25, 0.05, 1, -0.25, -0.025, 0.095, 0.01, 0.9, 0, 0.1, 0, 0.25, 1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.4, 1.2, 2.2, 6, 9) +} +tracks/5/type = "bezier" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Rumbler3D/AlarmMesh:scale:z") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0), +"points": PackedFloat32Array(1, -0.25, 0, 0, 0, 1.05, -0.15, 0, 0.25, 0, 1, -0.4, -0.05, 0.25, 0.05, 1, -0.25, -0.025, 0.095, 0.01, 0.9, 0, 0.1, 0, 0.25, 1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.633333, 1.43333, 2.2, 6, 9) +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Rumbler3D:intensity") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(3.5, 6, 9), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.002, 0.0] +} + +[sub_resource type="Animation" id="Animation_bknln"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission_energy_multiplier") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.02] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.25098, 0.878431, 1, 1)] +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Rumbler3D/AlarmMesh:scale:x") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/3/type = "bezier" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Rumbler3D/AlarmMesh:scale:y") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/4/type = "bezier" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Rumbler3D/AlarmMesh:scale:z") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Rumbler3D:intensity") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_bknln"] +_data = { +&"RESET": SubResource("Animation_bknln"), +&"pulse": SubResource("Animation_vokcn") +} + [sub_resource type="SphereMesh" id="SphereMesh_b6er8"] radius = 0.285 height = 0.44 @@ -88,11 +254,15 @@ metadata/_custom_type_script = "uid://bypgxi0gy56yk" [node name="FrameSkipper" type="Node3D" parent="."] script = ExtResource("2_gujky") -[node name="AlarmMesh" parent="FrameSkipper" instance=ExtResource("2_6vdvf")] +[node name="Rumbler3D" type="Node3D" parent="FrameSkipper"] +script = ExtResource("3_vokcn") +metadata/_custom_type_script = "uid://b274q7uvn0cvp" + +[node name="AlarmMesh" parent="FrameSkipper/Rumbler3D" instance=ExtResource("2_6vdvf")] unique_name_in_owner = true transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.035, 0) -[node name="Skeleton3D" parent="FrameSkipper/AlarmMesh/Armature" index="0"] +[node name="Skeleton3D" parent="FrameSkipper/Rumbler3D/AlarmMesh/Armature" index="0"] bones/1/rotation = Quaternion(0.615412, 8.96411e-08, 6.99896e-08, 0.788205) bones/2/rotation = Quaternion(6.23537e-08, 0.911935, -0.410335, 6.88492e-08) bones/3/rotation = Quaternion(0.388328, -7.55108e-08, -2.12852e-09, 0.921521) @@ -121,15 +291,15 @@ bones/26/rotation = Quaternion(-8.38833e-08, 0.911935, -0.410335, -6.97367e-08) bones/27/rotation = Quaternion(0.388328, 2.1633e-07, -1.09183e-07, 0.921521) bones/28/rotation = Quaternion(0.362943, -7.93195e-08, 1.03952e-07, 0.931811) -[node name="Bud" parent="FrameSkipper/AlarmMesh/Armature/Skeleton3D" index="0"] +[node name="Bud" parent="FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D" index="0"] gi_mode = 2 surface_material_override/0 = ExtResource("3_g4yos") surface_material_override/1 = ExtResource("5_6vdvf") -[node name="AnimationPlayer" parent="FrameSkipper/AlarmMesh" index="1"] +[node name="AnimationPlayer" parent="FrameSkipper/Rumbler3D/AlarmMesh" index="1"] speed_scale = 7.4 -[node name="EffectAnimation" type="AnimationPlayer" parent="FrameSkipper"] +[node name="TriggerAnimation" type="AnimationPlayer" parent="FrameSkipper"] unique_name_in_owner = true root_node = NodePath("../..") libraries = { @@ -137,6 +307,13 @@ libraries = { } speed_scale = 7.4 +[node name="PulseAnimation" type="AnimationPlayer" parent="FrameSkipper"] +unique_name_in_owner = true +libraries = { +&"": SubResource("AnimationLibrary_bknln") +} +speed_scale = 2.0 + [node name="CollisionMesh" type="MeshInstance3D" parent="."] transform = Transform3D(0.906308, 0, -0.422618, 0, 1, 0, 0.422618, 0, 0.906308, 0, 0.2, 0) visible = false @@ -155,7 +332,7 @@ unique_name_in_owner = true stream = ExtResource("6_6vdvf") pitch_scale = 1.1 -[connection signal="animation_finished" from="FrameSkipper/AlarmMesh/AnimationPlayer" to="." method="_on_animation_finished"] +[connection signal="animation_finished" from="FrameSkipper/Rumbler3D/AlarmMesh/AnimationPlayer" to="." method="_on_animation_finished"] [connection signal="timeout" from="PulseListenerTimer" to="." method="trigger"] -[editable path="FrameSkipper/AlarmMesh"] +[editable path="FrameSkipper/Rumbler3D/AlarmMesh"]