From f2e4768b7e91b7d6ce1529c40e92d330b09f4415 Mon Sep 17 00:00:00 2001 From: Rendo Date: Thu, 17 Jul 2025 00:46:35 +0500 Subject: [PATCH] final wave animation --- scenes/templates/standard_players_house.tscn | 63 ++++++++++++++++++- scripts/level/LevelRunner.cs | 8 ++- translations/gui.csv | 5 ++ translations/gui.en.translation | Bin 1124 -> 2278 bytes translations/gui.ru.translation | Bin 1400 -> 3161 bytes 5 files changed, 74 insertions(+), 2 deletions(-) diff --git a/scenes/templates/standard_players_house.tscn b/scenes/templates/standard_players_house.tscn index ad45845..07fbd15 100644 --- a/scenes/templates/standard_players_house.tscn +++ b/scenes/templates/standard_players_house.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=3 uid="uid://bu0dh5ct387xu"] +[gd_scene load_steps=15 format=3 uid="uid://bu0dh5ct387xu"] [ext_resource type="PackedScene" uid="uid://dd3yegl1xo44m" path="res://scenes/templates/level_template.tscn" id="1_vdv3d"] [ext_resource type="Resource" uid="uid://br3364jty1j0i" path="res://resources/levels/test_level_for_execution.tres" id="2_bpfdr"] @@ -188,9 +188,67 @@ tracks/4/keys = { "values": [false] } +[sub_resource type="Animation" id="Animation_pqj5f"] +resource_name = "HW_Sequence" +length = 6.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("GUI/ReadySetPlant:text") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": ["huge_wave"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("GUI/ReadySetPlant:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 6), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_lrlbv"] +resource_name = "FW_Sequence" +length = 3.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("GUI/ReadySetPlant:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("GUI/ReadySetPlant:text") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": ["final_wave"] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_yw4uo"] _data = { &"CYS_Sequence": SubResource("Animation_vbgdr"), +&"FW_Sequence": SubResource("Animation_lrlbv"), +&"HW_Sequence": SubResource("Animation_pqj5f"), &"PG_Sequence": SubResource("Animation_8ajos"), &"RESET": SubResource("Animation_yw4uo") } @@ -260,6 +318,7 @@ wait_time = 2.5 script = ExtResource("5_vbgdr") rowSpawner = NodePath("../RowSpawner") waveTimer = NodePath("WaveTimer") +approachNotificationTime = 5.0 [node name="WaveTimer" type="Timer" parent="LevelRunner" index="0"] one_shot = true @@ -271,6 +330,8 @@ fadeAnimation = NodePath("../GameOverScreen/AnimationPlayer") [node name="CollisionShape2D" parent="Checkbox" index="0"] shape = SubResource("WorldBoundaryShape2D_yw4uo") +[connection signal="FinalWaveInitiated" from="LevelRunner" to="MainAnimationPlayer" method="play" binds= ["FW_Sequence"]] +[connection signal="HugeWaveApproachingCallback" from="LevelRunner" to="MainAnimationPlayer" method="play" binds= ["HW_Sequence"]] [connection signal="HugeWaveInitiated" from="LevelRunner" to="GUI/WaveProgress" method="OnHugeWaveApproached"] [connection signal="ResourceChanged" from="LevelRunner" to="GUI/WaveProgress" method="SetLevelData"] [connection signal="WaveChanged" from="LevelRunner" to="GUI/WaveProgress" method="OnWaveChanged"] diff --git a/scripts/level/LevelRunner.cs b/scripts/level/LevelRunner.cs index fbd2181..4c73000 100644 --- a/scripts/level/LevelRunner.cs +++ b/scripts/level/LevelRunner.cs @@ -15,6 +15,7 @@ public partial class LevelRunner : Node [Signal] public delegate void WaveChangedEventHandler(int to); [Signal] public delegate void HugeWaveApproachingCallbackEventHandler(); [Signal] public delegate void HugeWaveInitiatedEventHandler(int waveNumber); + [Signal] public delegate void FinalWaveInitiatedEventHandler(); public override void _Ready() { @@ -23,6 +24,7 @@ public partial class LevelRunner : Node public override void _Process(double delta) { + if (waveIndex == resource.waves.Count - 1) return; if (waveTimer.TimeLeft < approachNotificationTime && resource.waves[waveIndex + 1].isHugeWave && hugeWaveApproaching == false) { hugeWaveApproaching = true; @@ -48,7 +50,11 @@ public partial class LevelRunner : Node if (resource.waves[waveIndex].isHugeWave) EmitSignal(SignalName.HugeWaveInitiated, waveIndex); rowSpawner.Add(resource.waves[waveIndex].zombiesOrdered); - if (waveIndex == resource.waves.Count - 1) return; + if (waveIndex == resource.waves.Count - 1) + { + EmitSignal(SignalName.FinalWaveInitiated); + return; + } waveTimer.WaitTime = resource.waves[waveIndex].customWaveDelay > 0 ? resource.waves[waveIndex].customWaveDelay : resource.standardWaveDelay; waveTimer.Start(); diff --git a/translations/gui.csv b/translations/gui.csv index 6a2a060..4eda525 100644 --- a/translations/gui.csv +++ b/translations/gui.csv @@ -50,3 +50,8 @@ sfx,SFX,Звуки music,Music,Музыка paused,Paused,Игра на паузе splash,Splash,Сплэш +huge_wave,[font_size=32][color=red][outline_color=black][outline_size=8]The big wave of zombies is approaching![/outline_size][/outline_color][/color][/font_size],[font_size=32][color=red][outline_color=black][outline_size=8]Большая волна зомби приближается![/outline_size][/outline_color][/color][/font_size] +final_wave,[font_size=48][color=red][outline_color=black][outline_size=8]FINAL WAVE[/outline_size][/outline_color][/color][/font_size],[font_size=48][color=red][outline_color=black][outline_size=8]ПОСЛЕДНЯЯ ВОЛНА[/outline_size][/outline_color][/color][/font_size] +ready,[font_size=32][color=red][outline_color=black][outline_size=8]Ready[/outline_size][/outline_color][/color][/font_size],[font_size=32][color=red][outline_color=black][outline_size=8]На старт[/outline_size][/outline_color][/color][/font_size] +set,[font_size=32][color=red][outline_color=black][outline_size=8]Set[/outline_size][/outline_color][/color][/font_size],[font_size=32][color=red][outline_color=black][outline_size=8]Внимание[/outline_size][/outline_color][/color][/font_size] +plant,[font_size=48][color=red][outline_color=black][outline_size=8]PLANT![/outline_size][/outline_color][/color][/font_size],[font_size=48][color=red][outline_color=black][outline_size=8]САЖАЙ![/outline_size][/outline_color][/color][/font_size] diff --git a/translations/gui.en.translation b/translations/gui.en.translation index 7e035f7e3666fc4c74ead6aca3bd9c03b0d45d72..23b0fe9a0b092ef8a5ac8abe18ec4e843e584908 100644 GIT binary patch literal 2278 zcmbtWZAe>J7(OOhnh!tLZi`VvH8un)l^Uxyn43z>;>SqLCCU6qOk)ynH72=Ny$RK= z?Wk@raf6kuZvD}LV8>wY*PuVPitQkDl#a1gMCLv~Hsb1rL)edw?cBX5db|8sp{@rW z&N}Nb{*UR(b zXm`rEGAM+HI}-rW|7R6zf5Y~n{~HZ;ji$VKVt%%wJKrt=KMA(y0Ak#OuezOCFd`Ze z44hsn{uTCOeZ`5jZ931MKYRbw1{jHP zi2q8!8$i&BFq`6$pG!t!@K|x+b-F?*2nJTUvRX=zSR3nDTsN#2BxBY_Sj{VEbq=i{ zwVHx~?`RxaS(gYZYkfno$KkZQT@EA^_}oZPIy+k(9-FVz-35%h4GBeEj?VUuR`-jZ z?oOu@>{PVJ?Q{G3Xoo(K5nVyx%qmCXXCMz8G+|#viQ~u{K-uB zN2_s{L}5APUrYYpV=mRr>FL|CiNf11*@Mf?Bb-J~{Ux2m9r8)YVoTym`SjwLe$z{w+De~C7<8^@aWBfQR2qoKCHdyZ)I2RKQ3(aj z0i%Y9VbgN-oVr#%VuA#0=V$1}mi4#&iY9~HpL}cKz6rZ()T`d*0cyr;g5-@PdD7uY z8H&fkb(=5%j<}1Qytrr)U~C-A-~2b zfjI4Q?T-jMd?jie*szcn(iGI^M4ql>RY?mt1Dg2Bi3w$cqgQY<#NRCr`Z{p;Ja3t* zO%xg|vc$-WWwy|Sy)zr_cadd^I-@JiQF&)}8TRqYX?P%yvLGUWavF@14&~mQe?})r;vz*pEE20Z*l}8Mb(O0^q<0rmGK%82 z&-jD__#EtBC3ZxphmJ(qaksb#~dDNRai|x*cMu{}p&Y)k`6; rXF}_R$M6KD?l+=WLZ0#y1l*6dN+^+b+PZxEZzuWvA>ZX5_=ockyFdGF literal 1124 zcmV-q1e^O(Q$s@n000005C8xv1^@s|1ONaiwJ-f(DFqcG07kprOpq2{26WAvTYM6l-7iQfbUEdzV@$UZ~gGETjp)h#oK7T)#KCl)I zVXkE1@;SIP=V$lcDY5|10NMaSBkS22S`k~1%I0juedAY$zk2)E6$$2w&blr5T9Lmx z{_pZ%L4(uGF^wEes-dAZH9WfiDwIiXTGC0g+ytee zF>@I``Y+&d^GFFzD$z=%|Fy^e1DuYNlr$YX|IZ#fmGjEuIbPDqCp6hqE}zY0yljd- z>A30t?Z507en~gXWeckR?B}NpRW|8a*YqM z&gpGfYn+nJo^5h^Ywhk3JhNb=TEo01;C(ulkDSlrY3QtMzCXM3UxrJ<5)L%0U`Pxd zKW0~>C}C=@s7zL@G8n1T;IIS%mX~9LlVge&43721h8D4a`n5$O$5>8Bc3iR5Q}srL z@U23dw-npeq~7PvXVbwvYE5H-y;ClYu9#I$25WkvJ>TrvW`BZcyUrOE;~a{ zoLa}0R<;W51rAU=VUPtkk2fQwHYq8*rz*(=$RZ!$4$uyBD5r>4OWSt7sYGccq*9(u zb6K{fw{21{#hBinu|?s1Eu*VecU)GOad9A;=$NXJV{RwMo7aP%2uWlyIM>ZFv;#k4 zk@#O#qLodi;*nxHs(inc>8S8T6pD}OXY=<>Yr@*Qu-|rL?=FHNW5ZAjB6)fsLUvqn z+^3>VUEZjdZE0mzE_`Qhs2OeCu%Ane2KT8wkRPt7;^wKGXt9=>ur{aC+)2p~o` z2*iD!J%ZPAN#Wf(X|oIz4yn^}!Mny{1nwWX#eR@#z3Obo;qf+2;jd=g;wFp~--Ho;I_X1RU_#O?hx6P&vQCoyXk1yZUT#-kA2Z qO&(n@c9wf|ULrnW(a;K2|Jxu;NU82Rd5=EOFow-5z>5S@Q$s^j5+m~f diff --git a/translations/gui.ru.translation b/translations/gui.ru.translation index da4e7afdc2c077dbaf2e8d53f42cb06782be899b..48ad9acef2cd30427f5dc8e2b7a519747da33bdd 100644 GIT binary patch literal 3161 zcmcInTWl0n7#=QyuAzj0ScJq=Bqkc%EtNt;T$PdvO&Z!PScP$1XLpC~q_aEg%xn>( z#Xl` z=lqxNzszi8S7e)1eimXRS_FCs)S7Yhl>Vlc*lnq4+fW_dOoQz`3ovY6yrNy1IBWa7 zI~niCp=yw&*=E*?Yf;0Dt47o@qjp?NYf@F^URq6Q(gWb6G}~5_nk_BHLfp`#2QlqX z?T)CU#tcnbf@Lfl@6?L6*baQ4?=Vs{% zI*aFD0l5#G1cpCaSpgyg>tPT*vv>$p8Y`a_;5`CbSKh0uIP(nVjTLLU*M@a_nfD4t zQprFu5SdBz>*LGxH5f->6A_t4{OfD0zgvcpP$ROZS0~mX+AcPU#%Cfcm%>Pbk%;aP zwcQw9`#ku0%!%fg`OmHVF|Y>wRag_9`ueN(w-B9oFz*KWdVgx^zWN6itHC2$9=S65 zCk$VTIZ^fXRpx$#>J7}_2Kn+QR$uuGONneIn%r1hUk`o0{l0x$mt6Y(ckuggrXS?% zU3Rdwx0ksGA$$bO0v~sK*E7JE=i|&hj0rSO<5m#{z#5z? zl43rFtpb4VgPxmONthfr4buw852$HH&RRye!*Mb;Dn6mxanni!lgZGY`j*kmPp}YGz#(#` zNVYJ@A+t&llmiz0Bnhq12Mq!?N|hq34b}x;h5=+D<kW6WC+|0X_;m zdbY?}LkVz7DXht95qjJ}wz!AECR4^pvoM0p256P_CX(<1wnfQ7eM#IK!o3mPE(K6V zC5Y>zEcJ350D?uiIE33G`}1y(+ZRCe4MjpdQ9%fn#0My>Fuo{JEs{sw5~`0}DDVpa zYufGg0zx9Ng$?o%Iz1o3oa+N~WhiRgmv?J<&ei20Aq6QE4;00apXj!uX+|_=WHn{G znJ^vJluqhtjmdf{8Q!o-!CM!}ucNsH?XIL80(&l_5yWFcBq9s(6qo)jOhh4~r4uH5 z$_oKfh#&x{lTxxgCn+L)@NmFOdrGA|G88#Wb=YR8X~$+=nq_Bgw%1I>bj?O55~rq+9qq@01c z0e2?g@+f5jYcn(3)C^1FW5o_qk4L`(csVcV$5A1@@(d7N6`Q;u z@j)ym&e+dUEH5~on~4g>-uKqb&WE`ki%zcy!&-Wk4dO-i5#Dbn`8j@0nnk$4Jb~p=`Qpvv z5LaG79tpqbkG}eO$}P4Kcz0^cBC_Qq0yG;Cr7PN#uaAuVU$rkM?E}b3G&}@@#=<=* eznd^rk@7)&MbH<;r!{x2SA3k)cT@y_D*gs=HMhY4 literal 1400 zcmV-;1&8`lQ$s@n000005C8x`2><|K1pojjwJ-f(KnS%e0IEV%4okpPaXLI|1lv4{ zjr`u%v3-i0{Rfgf+VIu&X{1HrsmRt-4_r55gCiy z{C4gXt%8gQK#ap98QK8T0LuU{S8{ZI5XjWj&~VUsnGzw_2f71vNt&`s&=I;}xKNSh zSOL%vx@9DIRTzvowaftqt1q}y?vAm*iole1Baq^t!WNjM?v_9zxS%D4O^D9|gzi?* z)YR0})ZGob`@+xw82W>u9|>!vQZWf6jv}Ka0nyUE52;=E)1C2`_QQhfD z#h&gi(73w=bc$PInqpUX6KL!b&6&m~9@Cvu-6_TKEO+pT!p;<<-R+>e2Xx9L7rsy+ zz(aS#w0V-MSf-|kwqW5Mq>EHvI^DgXyJcd!0~yILg`ix+{Vsidk6ioim;FVxzuo8; zHI#L~v)ul+KRSD+%ko{{eizF~C%Tsc!xR{%KngcGIXEv?E_7^Cpuo9NaZl)66*@RA zN~~^daB^WEGA952mRqr!nv8<*yzsZqUL;>A8<4lqQqYT^-W_D9#feUbN2X21LTS(fG6jovLo zqPr)+KoOB8M|z5h!omw7U`D-%IkG2+a4$%y_IF#FA}Qu+>y?(^EH^-F&5#~$}1 zB_JR90_}ERbwPP|`^9BR`k=6rr>8|?71zdjQOrZ;c%Ju#B??P{v}}7UueZmtEQc~| zZa$>=a05n-j8v=jvCwl&N!CkMdsHO~14C2PF{;qBJVy}sE0kq<>FjTpW%jYmG|N2l z#l7}fz9?G8ef`mIXaAEgE$jXx=YDIC{YVtGmTrLQR6b#F7=lV#%71u=x=wOnKhZ26?0d5$DT z!wwo$Ef)!1Y?3YW=Bg*_L=j?G$+J^ptfsc#Huv?nE4dZDh4L)3w5;^C=)G$pZzJ!p zgrz`FD91=?{sKGeJ5JDwFBBLNl(i$)VLX0tYb`oHhxn!zH zL5u2<{a6DQk&vHAfVfRc&KAd!{CO&JYSl#o3Uy{}!88`1-|{ad&^ICsV4%cSjWVQo zK|W9qpi5jRJ~BpH2qdPsH-OZzJ#pQnqkM~z_`hm%3ZO%=t2?RgW)mp7$Voo`YsI#^ zfOKSE?_C}L*9p$^1mgxI9$RxqZ6=D1c`mIMGJ%O&2?kPak}+;U7WsA$yzk6C*Nq6c z{_5W`h6DePGYBh)F4rJ$xc#&O2wYP}KxuOEQwO=T0IN;&9}va_&y2Kawx|mWAHW`v z9n3}8L?US|!kBVeN|G(E^c}Ei5rz^yjV*L7gmu;85>|cx61U~$7 zbr1ZVAOY`|_S|Ht0tyAl+MF}Pzr79`SPepO{87{ux!~h9W GQ$s^wNvq!g