From da9ba9361d830386a36574f579e3e652ad6649e5 Mon Sep 17 00:00:00 2001 From: Yogi Wiguna Date: Tue, 24 Mar 2026 11:54:27 +0800 Subject: [PATCH] feat: Implement initial main game scene with player board UI, powerup inventory script, and associated assets. --- assets/fonts/Supercell-Magic Regular.ttf | Bin 0 -> 71044 bytes .../fonts/Supercell-Magic Regular.ttf.import | 36 +++ .../graphics/game_setting/setting_theme.tres | 7 +- scenes/main.tscn | 70 ++---- scripts/ui/powerup_inventory_ui.gd | 222 +++++++----------- 5 files changed, 143 insertions(+), 192 deletions(-) create mode 100644 assets/fonts/Supercell-Magic Regular.ttf create mode 100644 assets/fonts/Supercell-Magic Regular.ttf.import diff --git a/assets/fonts/Supercell-Magic Regular.ttf b/assets/fonts/Supercell-Magic Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..241c49db7e1abecc34ad7b17cb48030095e73be4 GIT binary patch literal 71044 zcmbrm3wRslnKnG{Xfzs+WqCB#!Llq%vMei#EX$HCEAlyx<2bhC7{@V=F~&(8=X@rF z5YjYF(=-X;6b>PzGz6MLnx!+c8)%w>DYU>+%2G$wcJa z`0_P)ebwsa+qdAj#4!B7;8|F`Vb|E?9q*jP{=YKJyT{k8T0TmCx#~5B`GCH!W(^L= zwK-kbe+2twYc^hgqx+qfPVD~_zcIRD^UCFa$%OIR$5l9oiH*x|+(JHJJq+{7@9=)l zrsW$~EqZZ5EyMg3*I*movU&UU?wm#Q8DbvA`5fD_ZPk{M`!D^OAq5}d^ZR$MS~2!Z zf6o&PvEGc&^Y~At!~C@2^vm@5xt^bF(Dr|I%fs3$ChQf`BMggu!u%`#=}+k6_#$`qS@#Mv#=eBJXZ5U}XIWPNWrq1~Gvn#NXS6>nSB$M>nwh-6viw+P zjA3#**_%8#W%?p-Fwir@E*^C=|BJOfhScK-JzmUk#DnKnd<%XbTY1cvn1`5eF^@4S zGr>H;{D66xxx~E5{1@{#W|}M^H?lurf9VlD7Eh6<#8c`i_e4Ckp6fj4yrpk3e`Tkq z@g4MAJj^M4%eNT?-*TS0z&ypgf@}UY^A~(e@65L_9?4VaDW3V3)Mwv9@GWHegXy=Y ze>DB{^yKtY(?6WPIQ@g^C#D~tK0p1v>51v_>E+W6fBW;_-gxVYx5nR6-umua=iYks ztq0#a{?_$x&HDAY=aT+X_DZ$0`Tz9*tN!e(h^DQ7_&Uf@$LV>4kR#?A^Gx}YSuU_x zZT3P(k+axU;`Vq;eP#agz^vfxP(`>hQWcHGs}nWJIjP#Z`i91)=D98N;5`f47j|@Z zE$Uv}b5-w>zNP(F4=fwJX6V}C>qeF{H}BcI@9RhJyyxzF?>m0tK^NUx0e)(US?f?7|bJJIL?f>$DuO0mA;UmnU+wZuIIsZ8Q zg6ru6+*1FNAwph)@m@vNl1=1#ax;09TqMtu=SiGxXYXUH*?M*^widJ3u^ZVhvxnJR z*?e-8Jk2(-U2G9MN)D2pU~Pwjg-|ta${)Ik| z!j*R@OwYjKRfm^*=*AqU*SpMlSljE(?$I965e8k{Z1mRKrQba`qQ>hXrQlB<( z@jt~>UjNJbw2s9lqw45kJw2Q@@YSEzrwKhCH+#)~ui4wmdNO6?cxH`$=_lW5P zhP{Go*Zv)a;oh!7e{Gqa<9L(Z*m0)UG23ZmZFalvFYI2DvgAge%k0g3|C1KMl*b{= zvCKx@0d9bQ6f$u$Hijs$gxpILf|D`eG`%>@s%SwYu@@5)PK^XAb$;xbbacCsRFaKj zmpA4}QsR~--Wv$8-tE6xCkKKNSKU1gBF71Qf72|-=*v$jbDaTx=*4HwB@+3*k>`GR zrpe-v23~mjtR^!AF8wA$j2UD`m_D4t@`%!YN#SD?^E7EG&9Mnnc59xb4wH~7*T-TL zq3ofe*um;(>$}RUNe$PDZ}Qpx#`+eDupYM8%grYKRa(R%xvo*Z+nf+Ucy4k z#DEuKpY727@_<>pYJ-U_4U`A4T}klKSWPm4?Q%V~6NXVPPmp?&$k;=#53yXZJHT?B zwDyLLcI5Bid^5+fEN`D5VAmwhF@5RJ^%K7+sjx38y$?W zoPYb?>;0%41|R8k8ClYXpK00IAelvW_d!nJ>JIJS?C03CoS;u##Ag&S>l35XXZcx% zPncn56O(R$#VTzPwNpQ(xFTwy3ATG(L=i8k7Uz^|bxx(Nq8J))w#qr7v}mQ9VqQ*2 z9f9<%qFFvKnfMe;xemD1)dA#w4k@*2rR3bnm$QZ>H>{y z%nqT#xJqDL_y?;kp$eiJpysA20j`0aN*(o=Mjfm%P+nR|M)OK*Lrr(y0AX@m%dz8k zG+4ykgX3MC5jNO<{=#F8vfCsS)V=)n%XN0%kqm~q7WKw>qr>~9TlQ1&CWi+Gt7Vrg zvaJ)!ZC=q?Xl8kTEai+IIdPvZ)id$A|$(t9L6=@8xqY%Vci35LO#yJJ~TQc3r@G÷?f}_aD>3EhZ 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

v7>85i`ZV_u5pT!=wKcFcR{FYUdsjMhBG zjWN4Zj^-GK9XYw^E`f`gTc^12Tg-)pV?IneF{n6^j(NFQ9-Ihu&Dbmp?m-K`&=^+- zA!yD@r=P%?6C5}(QMwLi3JsH-mpwUEx)xUoCnmX0*fb?g!v4j4NlG*<5_xgjxwisy zk0#+rwX$r@V)Jn6=saZSi|vY!5p-PL$74SHd(6Ogz$C zrjhdY)l!$gqJ3k+BCpa;o4RnqgsODIeiK64UMTi0Us*S(Js#@8I)x z$QyyXoQsG^QH}`Wqw>+RU=#?`d%E31F>`-z5Bo z?*(M;KK>^Q>rAeo(=5vQ8P$gxoBcSyqAu~n`1Pc)_G1hKGX$+J(8|&zt zrC2}B#$h?XvYCvUgGDo*x1b)|DHmHxT{yaQHojsDz-b$w)2t{+UIE<1h~q(04&oFIji;1{`E1bT>2Zz2h=3?&YZMJTOH z$pr^3(U(4EPtEa$W>K*dq+D^mjj}rMb>(1SgX=7095K36SS=Li_@jb|vv?8Pl2UfT z1WU>wPE0BQI#nQuB_@_a)sUvE21-2vnj_(3jkW@w-x8r}oj-{wz?n~Oyhw~wl`iq4S zgy=$4+tO7MWeyGc1v!;8=pmU18+%}5oEry{HeQ5#4{RJu$%Taj%)-IBl~l=xg@^UF zq8dDey!e=jG8o0EaVKsBW1^EEV`wN&PBm=Dq%C8j^yJmd ztcXrdHLH-Avack^s_cS|8&MzLleBRQY|P~T+F|1YT2jKeLEgr6#0fVD(*ifxmNYF1 zg%fCS1jE51=p0xI|I8!*(8~yqPK-hNcD+}ElK)lDfy_G ze5Ct?bKoNu^ed*vCw0)PAG@scw_KNN)Zvd^&_8rd>lw}g@6fUo@5K!t?PpG@f>Xc%NSb|E`J;UVWm%=1wSde3q=Cvb@{oj3w9oihYECHJ zcvBlat2f2%4a>+ItBf%{>hZKQ7;Q*%;Ii7J%NodK3$JBbjmA9_bDArBHTtIU#O9NF zj|b=HRkE4zm0nvrZALReZTD(Rp1SF3iOh#()45P}aQb{k1te~s>d(@f;NL64{_W$U zaxj(#aUXMWG|doGsospKNuhp}nN3z>OO|MN0O=Zq*GgA0$@54op_~$T8VJKNmn!-8KYHfTgMRIkDj2T3u_?%QM4LzH>>$O_d(_c7Psn2}8qhe5JrqGyiQo<8Ycq;nYE_2@t0Mx%@?@U0A|g5t89 zcnL<~t;yyG05$OnA`k)q>G{zyQ+X`@oi6K4TjSlkIshrpDPIp>1|{k!{mRM5y9{=H zu-eMYsqxsF)0`r&O?gO2tu` zaU{pGGC&BbNQB7%3B?MDYBiO5_&{7dQs4>Ct)%&#WsF;_P`}1(){`!=1JMWMCch=6 zW@hIURnU84VLF+cO`{D4W!Oy$_{hLl)tdxm)r72ilK|OCKJys5&7nEDVN>77=uL`z z_LRs^_3n$O!zRgeEb+$=Aw8KUeFELdpNZzlf!~;&AAy}Kk&j>1&XF-Y&t}VL72&Qv z($3XbN6F67!bw(6!eg_Hpuf$x!Yc=mUjqEj>S6DVFy1Opp3eQXq>_*4% zZy6@`(W~2*4PP>AyozpGnSmKj_9G2U@K`eNaN+C-Yy21;%fkhp`c`EqKL#VutFjY% zcCww%D#Mw*%M@D*9OkuK`|2>7Yqme1^~s{Y>vYV=$9~A~RmnByf8ehM;AJ2B7>|+G zN4%3c3uxMpo(<71iZE_gA`C*wrplNZ+Ok+C95_-iyLvI}4Y}DEv%nRk(QVDAiuu)? zc5Tj@ZUY?cMIR3(uGwk-bG49SdcBqF@|~*lY5~RcA}y>=!}KyWp8`&{3Rx>VwTzcw z0pp|9!6<=cQNXH!69_E(m^$6%jg%-_ktH~*h>3t>OvKHCQIb}91ZJq6OcKi+h0PN1 zj)XIJr%zSQ?D^)^Br}BrlU5w2pb74#NdlTs(Yl&|rZjo2QGw4E8lm!ReCNf;Asdx% z%`!#h3lFc%^PyVTp$tLF6<6Zhe@mTSQ01*z!bV>n2`#fcqr(JB9g1<4cJU;D`09oj zjY}s6uU8JRYc&y%)BfpW*69b>wc3!^UdPy4b@{CJOPc%8YqW;@A{R%GFfhkSlA~xw zIA%wHLQ+7n6(AEf;z2Yu9Lt7Gn|Ee4gdSpE;?idtK(QOq01KfXq=r-vX`tCYvji2? zzzxkewG(P6e%tmSLy;R;i zo|@e5SEAKRLIxk?LwwFA=cl&!8?`#M3aDN1%x_$eK5V_McRORP5*tr9fE7Vbcl2*w zpQlG(rqum%HvkWyQ6;*BG@X0v-o3^AzNa7X*bJtitN-8roY)K6D@V5N;5oLww_bip zds_Wh@OdwT_uk`}v~Y}SSp@!w%>uBY6c1R{g$T!R!Uk5wk^J^hCOik~q*2c;K(#O_ z(e&;s7fvz&P#Bno$OQ-*U5a`yM7@UL8D6MBtA~AbH-0!ilb)jLI6NmpB4v2f1en9j zvN$dimDO4AjG6v9ktEdNTizMInf~zT^Q6|&0yb{2TA^HqUy7A1!q$;*9O33KsBfe( z({38(9ko>OiQZrw7Fw6D#zSl!Q!15L#|Mp7FUN+*Xi?2G;aGh%pXg2&)y$rZj+cM= z^2k0%CFI^2&iTaCJCn)96`82$p`$ja z3|7}Q1r2U~6vfFOx8Dt8`1%I8C_cm-`Iap6=IVC1BQ)V$J=9q3bbdHK> zTH^mq;*G#RdSS|rJ+ZlE;u_niZ|L5(bub`m>%Ma2{)JMC*z!-O9&NO4xc|xZ4O^?_ zqI{j*W)ifuO?5ic!Eb;6&jP5)B6SNhP2o8qFj|h2#3c36Oo3vBBqm8-Dcx80%_m=c z{Ofa0B)*O2Jl#RQ>f}z|f)+c?21yU((2fsp)y)yCIS$dj{otVxBzN?@VInmQ@mBiE zt(hL%N`)GR2r8#i!vKqQN^BI*No#PnX6K+n6w?rGfHxSMLG%imd=@RSUHK!>+owKR z5Gi(iqIi(!n#Er6k5WHQRMWYr6%{>vE*zRFo8r}=%*`KLCllZK*n$_0!M}$F(f@z` z#vuPE)t^Mz&pg>(CdAgn=~g=gp9PkCgGtkqY-Zd>_3sq?Sr-y#LZ!a>QLUUu%4 z-~B9JDia69p~Nq+O8xpv=BxgD-KuTET8#mt#Ex~s5R7scV;aPmMyv!HG`dA)C6FR& zJDTc6s_x!@-)V4Kv{K}7y}7n=f%@HTcQ|^VdnVc#z9p;u-0Az6|65dX;pfsX@pm)E z{;q6ee>XV>v6&+%E#h0;W#AOr`=7o3uI{ec)kj5J+jpNmT`qOEcMgB!OCcGw{;*5S zW&AyX{$3UrPs2_(`eDcaC`A!h`=itRO@S*{m5DjhhxnUL{IC;y`63At{2CD25p{J4`zD zZ=ZFPSJvj2-o@{7SB8D*?>y#T+1(W=zgKj2yzu>aRqlbVXW~c8AV1Z7{@jUD{z%*D zV+TW`5C6vY%WsOORrKAQ9LHiT#v>vXQt%IsNM`=+_*c@zZ9nUAl-E?d%kJV2xT_*w z{jQ&N1-iOd`pdu4(DB0`#H&n^+U{p!56u&;S?9xfIQ8{hyu5WDVl~&pENRY22Q+;NeSe*KvpKWr7JqFR4t@Je=yL>^G zc+!grA(IH8V}ZgW7XsPW;#H_Y9&%7 z9w*3a#GpjFe$%P?_3r&G6iE)QHdQjMl0l|ba`+bgzK_=FV}ExY{w`^yu+fF>zY2Yb zqe>}Pmqqy~?GyUEJ(pjThBP-Jb^%WeWYlpsh|Hvo9^8mHHBLok?D2ewdl&gh+ z&}?u`rE8BQUV1>*x^{i#(K|O<5sErY_km{jdx;nBbVFUG)L|F4 z^|jjsSG8Ld{QbRnI5<-6t_gVzQl@=z_t1Q8s^0Cp zOKL}!Ehk+<6JdDU+8fh_)co4=(5XQ|B+apA;Z;qmG=i068IOn}JvgG)GaV!+szXt2 zctlX1YG7_aMshBW7@5l7s2HQs5X%D#;!@=zs1Zp+$wQT;87wM|E;Yo$cteSj-oalAro+f@*4 zEUTz4om*L@lY)4WofEZMD58|rqB-QElI-{Dx|#BppU$RsxhR`rJz^5a|)HQ zM5CmL;%JRj*r1b|qvy`vAWM2{$-J;ZP8ZB|4T~HSqJ;pc4gMgco2^p!Q=O3Bg65MG zGCJ0t$J=#T*6PnK)EebXaJ^>RwdG$dw@0!>8_t8oP@nphU5!wflpAiVLkuE{#}bb{ zqBr7^Bl^;J=jgSme{J7{6iEK<0$HP9vwa}bE4o83tOsY;n~6DZ>eAACpY4O5i+AJp z4L&g?t@p{bIyumNZY3nJc-jD<7N|w$!G(-2q%@ND(z|%J@$&!3Kh->k>U=x;SPpRU zb+iOiz8W{s9L`j~8DD}2taq#w0(H=7jRkP<0a#H<`kT>`U{nsrf;juI7t=KY7WDvX z)Ll#p5wQRY4$)L17&>b(=T}uTs6dZtc;S*RN*2+Wx(*cyDcIb)l-Qxbpoe!ScN;#8 z4F~^MwsqK@*vwH^z#~j7wCwoO>mfO1j zwO9V*OUM&tVcY+9n`|j%Yr0p5QFt)u8atXh8gYJ9`{1#=OT`pfY&%-5mGTv7vJSg- zOqy)lzO8L(s86IZd?Lg^wG5%CdVXVk98rq5DFEP^E z+8WksWLKP0d;#RkA(gMW(Trm}bXe0dUj2j3HlIx|WtgoWXoV;E z5MYk+#1o095|2GbKu2<`Kt4>V*PMY5Z-!#SxZi4+-#UWPPvEzua8?ui3BX4Uyo+X( zo5Qi?6FgXB93~IKNwKD-m~IQ}SOG6)!2W#QK7$@7c0ftXX9-D?7vXPl(spo`w{PFS zs}D0usP7tl=nin0X#XaM2+e%3TS})aK{dKkecx zoKI}$`cxJ!tO|1*@jFMPTRETRr(BonH(ax1<{I%kn=~8QeXGXA_2Sw(&5d~N39gae zugd52;s&mlexL5u|HReeeNA#MCn4YHln!$Z@>ab6hg^fy$+c)6;8trM;%-&#Zrcb4}RMPN<_?0QX;0$GM=|!mXq4Bc0}|HKp8L>NmLgnho4C=?~lzsgk<|TATBc z%dA%wa<{9tCd#Dqc>h7}A#koP(QM&1XtZ3brkp#B-|f~&+-KF7@VOUrZs~ux&C-Kh zWy%ITe}ePjd9C`>TpjG#Eq;|-g8LTr8Lk<2V78Yc+**9TwfM}{uz#<*oV%UAlUfV= zb#c9#9&U(iM%Tn%u5Z*2cpk>*IWFDCx3l+_DmG>IB%4n8N!4;PY`lcomu#H;fqlJX zWBl0hV;r+B*?02K3T9if@90kl*Qogk_aNDDx*u(ntA<@`VAJM_KdQpZAHuG8;r<=` z{9??WWYY;h;!WHjJ!dv0yN>_Vl3lg0bE{Hw@jLh&YCm^MosSyGH)sw3YLmQIAyO4u zF`d4Y{PE%bmzWNphy7_RCx66#Zcu$Uw-w{Q8$T`dgLzSopF#15+;-Ud?vz~a82v7d zU;3fHi|^fovD!=$5h;tfjVV9pHsY_(O8)nG?)&@~gnCtt>i1%{xKVskJx6_9{bO)& zG)cE=^qN+AhWw+H4Jp6Y-l_f9)H`&Nu21)v?zd@eX`f4bNB>7dow2}p%G8@tW6sKy zGk;~tv3%B=YrP|DPS$sA8?sH=|HpoRPG8QS9QWlOa~{tt&O7d!=ep1J!~ER*uKfG+ zFSxr3v;}v1stU6UFL*yaqiM!Ze0R(&nE6?MzW@BJ&RKs7953n)b_V}6`~FaCabEGM zuq8Y)r)W+*GBeVT{~jwjQCd>^i!yE5=6O$+-(LRHioS|3RQ{@}ty)_>yZT2p+M2%k z!u+=R|6cpdf|GU8h0*#SH&`0pS^P}nXOMeUbbfI~cURrY_LcwH{p70SJ&&$_qSw;9x%ang zHuu%_{ci1%{tfHq4ipTWTwk#MUpIW=mhO$U8=u&;Wpndj-0nBlwO~kd3EO1>do0N&VGIF`T0je zq`YI#=!_OWO``Sm6vA-f3!#Q{|9{X7r_kIcdRo6;*24fqdAUhz`xmnEI-R=zd{%DO zsi1goi#?&B?Co3a?!psUdA;hN&dM8XPvLJ_xy{~Q_-|I;WXGDivhrr@ZaSNlllF4c zjjX)Ij&=MeE4SO;&ik|SYu42{l$Bq%?#{>cT^J=RE5ldx6v1)L)~c4;efm$syL27U zwW|6#ol#4*pL|VEzZh4UZ?aAGNJ0K{*DtAPIi*)x*ULqyFJ&^)b>#qpZ|Rs?QG;#ZysI zUk)QNLVttgpfIViCj&|&83M>vlmtk=IxokC{;;^8)pH!DbRD&;(g634g`UB1M88$Z zNgcd^%vIHu^fcAgG<0wk?Y&QTPXx^F)n3U-J(meoO5&K&(F%4@m8OpAT)~4jA6^H= zUr8LGsmm&r#E0Ug`l;&9`0iSFBFPoq5!*+ z*rAV&y^IE=%2_{eUUK~SlsM1(8WR_Z_$-CKmi7!5RUuN57Ti{+gXLl;l-w^U^R8R$ zO1eM>#!IvDmZHm@jF@BVn5Oomv_YgHRx#Q^ah-&CfaRPLZi9My%=v)ZYWC(f62~dp zQ$lh|eG_9m2A1Rr(?Q~Td5Rj%y`Fek2|QqDZWrj@Js2FWguAgLeB3>%tT7x%EVQVy zQ%h|G9bHt5B-rhUc)?m+_aI0O{Vrz>{=VZot+>0Ke2e|V?GOYQGe-t4|6f^iy}`-l zAagyZ?px8?e5^!RE|2&%X*tcJCmvUyzv{UL`=xd>8*svM{e3i_2>Z38gWE{dt!puk z(0D)mx#u@ZJ}>M%I=L-?D|R1yd25!GkC9se)`0bS4l4zZ%;P1|EDhG}emo)T$*n03 zx#nu%HTT@*{V$FK55xlZzuurB&MjQf*|bNMVNU6}CWFeWsp{~?b1DtUGxM6LQDh(^ z;%jcVM39IO{!)?s!LiRT+#7QX&C&3?-L^)8%}oR@(PPve=(~;QW8^*X9$uAO3n(<| zItft;JbiXE6L?34XzRofq?yqRZfQ$|Bx+&1?hnpUSv4j5h+5-gbUyx z{EUvt8TC0XA{65e5ubTOB}fY|^C5n??V+_8TakgxGpV+4&J1mB=^ZEcOY$nQiLu7i zQ(0qs-iR8FmJ+R#nSlE@*ZlrQyNh=*U!tdKxXZJ$XUS^NAl8`Z7j&zVGh$H=GLi4E zXWmDq!b+L_O$R&~<^Ijk{#y^SBhEwLU>9Sa|EDev@DZ-a|Rua8Cafv-CDKC6h55>4Te zOa_wf-JpXU>_Nl`0}j3lKpM}$t`SY_ z^*7-;j0iryt3h8;OH1dVK97%46UtlrEbL1ZJ( z7%>VXZ+&*l?bfqpv?I5%Xv_J$De@Z;Vl3`ido|Z6i^reF)g(6ItEed9;&q#k%HD#{ zFCwmueJ{8ACwg!fnH2qy-zwsoxQMTTv*$82N8ChLo)@E~AmxG3me}X^=(9f089oM> zJO6O!?<8tJ6>NewcxK%H!T*Vn#HBpy{m)gqQN*PdUn{gw6^676R8Yh6v;J||AEXVC{MIS~*=zlqk| zWFhoKjPdb3!XH;%sy^7KJFNL!qFBlM%v%p-J@@L`Crxy#=7@F~6YT?yDAUvCs9wwh z;iFq^`b0mZU*bQngKC-Q2>gdwhrh=CrnUB`Rz`TW-8$CfmjfDTH10(X1x!-SdP=f< zBm}u0z4#8iqxyR|)UcDvSG2I>9Dd$t(H`t_KXhuh{l@H9Li#oPrTtdl;rwg+ zjWGYC{my=G-<6(UvcK4$?9a0Ff7z$BewtLSyC&4f`G~f{#=<5&b}!LEfvw@2vf2wf z>=pZ-{m_1-rwo4IeqcY>Nr!J0I_xL*Q+<0%m%UKfS=d$B-8w#Xy*$yges+4YySw{@ zUkAFgYoL4e2DGlBovytZeJHyg&aQpg^+#{&(;br+UeScvzKla3O9#u4YlsSw6C^p z_;jt~oC-IF-&Skg|M(@VtxE@M>-L|hHK&8GtlQPJKM*Yc9GjpERZ`ywu{xQafiqq_b!l~B0KgjkX<4>C2`hxr^v3p1#*|j nojVuE-6D5Ayg=>|xw~tDyi4Ss1ty1U9sA| SpeedBtn - # 12: AREA_FREEZE (1) -> FreezeAreaBtn - # 13: BLOCK_FLOOR (2) -> WallBtn - # 14: INVISIBLE_MODE (3) -> GhostBtn - - # We use 0, 1, 2, 3 to match SpecialTilesManager.SpecialEffect enum - var speed_btn = container.get_node_or_null("SpeedBtn") - var freeze_btn = container.get_node_or_null("FreezeAreaBtn") - var wall_btn = container.get_node_or_null("WallBtn") - var ghost_btn = container.get_node_or_null("GhostBtn") - - var mode = LobbyManager.get_game_mode() - var is_restricted = GameMode.is_restricted(mode) - - _setup_btn(0, speed_btn) - _setup_btn(1, freeze_btn) - _setup_btn(2, wall_btn) - _setup_btn(3, ghost_btn) + # New Single Button UI + power_up_button = get_node_or_null("PowerUpBtn") + if not power_up_button: + # Fallback to Container/PowerUpBtn just in case + power_up_button = get_node_or_null("Container/PowerUpBtn") + + if not power_up_button: + print("[PowerUpUI] ERROR: PowerUpBtn not found") + return - # Remove mode-based restrictions on visibility for now, as ownership controls visibility - if wall_btn: wall_btn.visible = false - if freeze_btn: freeze_btn.visible = false - if speed_btn: speed_btn.visible = false - if ghost_btn: ghost_btn.visible = false + # Helper to setup the single button + _setup_powerup_btn(power_up_button) - _update_shortcuts_for_mode(is_restricted) + # Start hidden until player has a powerup + power_up_button.visible = false - - print("[PowerUpUI] UI Initialization Complete. Mapped %d buttons." % icon_containers.size()) + print("[PowerUpUI] UI Initialization Complete (Single Button Mode).") + func _on_control_remapped(_action: String, _key: int): # Refresh all labels _update_shortcuts_for_mode(LobbyManager.is_game_mode(GameMode.Mode.STOP_N_GO)) -func _setup_btn(effect_id: int, btn: Button): - if not btn: - print("[PowerUpUI] Warning: Button for effect %d is null" % effect_id) - return - - icon_containers[effect_id] = btn - +func _setup_powerup_btn(btn: Button): # Start DISABLED btn.disabled = true - btn.modulate = Color(0.5, 0.5, 0.5, 0.5) # Grayed out + btn.modulate = Color(0.5, 0.5, 0.5, 0.5) btn.focus_mode = Control.FOCUS_NONE - # Fix "Floating" issue: don't expand button to fill whole container height - # This keeps the buttons grouped tightly together - btn.size_flags_vertical = Control.SIZE_SHRINK_CENTER - btn.custom_minimum_size.y = 80 # Consistent height - - - # Add Cooldown Overlay if not btn.has_node("CooldownOverlay"): var overlay = ColorRect.new() overlay.name = "CooldownOverlay" overlay.mouse_filter = Control.MOUSE_FILTER_IGNORE - overlay.color = Color(0, 0, 0, 0.6) # Semi-transparent black + overlay.color = Color(0, 0, 0, 0.6) overlay.set_anchors_preset(Control.PRESET_FULL_RECT) - overlay.anchor_top = 1.0 # Start empty at bottom + overlay.anchor_top = 1.0 overlay.grow_vertical = Control.GROW_DIRECTION_BEGIN btn.add_child(overlay) @@ -100,29 +73,30 @@ func _setup_btn(effect_id: int, btn: Button): var sc_lbl = Label.new() sc_lbl.name = "ShortcutLabel" sc_lbl.mouse_filter = Control.MOUSE_FILTER_IGNORE - sc_lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT + sc_lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT sc_lbl.vertical_alignment = VERTICAL_ALIGNMENT_TOP - sc_lbl.set_anchors_preset(Control.PRESET_FULL_RECT) - sc_lbl.offset_left = 5 - sc_lbl.offset_top = -4 # Lowered slightly from -12 + sc_lbl.set_anchors_preset(Control.PRESET_TOP_RIGHT) + sc_lbl.offset_left = -60 # Width of label roughly + sc_lbl.offset_right = 6 + sc_lbl.offset_top = -4 + sc_lbl.offset_bottom = 12 sc_lbl.add_theme_font_size_override("font_size", 16) sc_lbl.add_theme_color_override("font_outline_color", Color.BLACK) sc_lbl.add_theme_constant_override("outline_size", 4) sc_lbl.add_theme_color_override("font_color", Color(0.9, 0.9, 0.9)) btn.add_child(sc_lbl) - _update_btn_shortcut(effect_id, btn) + _update_btn_shortcut(btn) # Connect click if not btn.pressed.is_connected(_on_btn_pressed): - btn.pressed.connect(_on_btn_pressed.bind(effect_id)) + btn.pressed.connect(_on_btn_pressed) -func _update_shortcuts_for_mode(is_restricted: bool): - for effect_id in icon_containers: - var btn = icon_containers[effect_id] - _update_btn_shortcut(effect_id, btn) +func _update_shortcuts_for_mode(_is_restricted: bool): + if power_up_button: + _update_btn_shortcut(power_up_button) -func _update_btn_shortcut(_effect_id: int, btn: Button): +func _update_btn_shortcut(btn: Button): var sc_lbl = btn.get_node_or_null("ShortcutLabel") if not sc_lbl: return @@ -130,15 +104,16 @@ func _update_btn_shortcut(_effect_id: int, btn: Button): sc_lbl.text = "" return - # Show only Shortcut 1 as per single-slot request + # Show universal powerup shortcut sc_lbl.text = " %s " % SettingsManager.get_control_text("use_powerup") -func _on_btn_pressed(effect_id: int): - print("[PowerUpUI] Clicked Button %d" % effect_id) +func _on_btn_pressed(effect_id: int = -1): + var target_effect = effect_id if effect_id != -1 else current_effect + if target_effect == -1: return + + print("[PowerUpUI] Activating effect: %d" % target_effect) if special_manager_ref: - special_manager_ref.activate_effect(effect_id) - else: - print("[PowerUpUI] ERROR: special_manager_ref is null during click") + special_manager_ref.activate_effect(target_effect) func setup(player_node): print("[PowerUpUI] Setup called for player: ", player_node.name) @@ -160,28 +135,25 @@ func _on_player_child_entered(node: Node, player_node: Node): player_node.child_entered_tree.disconnect(_on_player_child_entered) func _on_global_cooldown_updated(time_left: float, max_time: float): - for effect in icon_containers: - var btn = icon_containers[effect] - var overlay = btn.get_node_or_null("CooldownOverlay") - if overlay: - if time_left > 0: - overlay.visible = true - overlay.anchor_top = 1.0 - (time_left / max_time) - btn.disabled = true - else: - overlay.visible = false - overlay.anchor_top = 1.0 - if special_manager_ref and special_manager_ref.inventory.get(effect, false): - btn.disabled = false + if not power_up_button: return + + var overlay = power_up_button.get_node_or_null("CooldownOverlay") + if overlay: + if time_left > 0: + overlay.visible = true + overlay.anchor_top = 1.0 - (time_left / max_time) + power_up_button.disabled = true + else: + overlay.visible = false + overlay.anchor_top = 1.0 + if current_effect != -1: + power_up_button.disabled = false func _connect_special_manager(special_manager): special_manager_ref = special_manager print("[PowerUpUI] Connected to SpecialTilesManager") # Connect signals if not already connected - if not special_manager.is_connected("powerup_unlocked", _on_powerup_unlocked): - special_manager.connect("powerup_unlocked", _on_powerup_unlocked) - if not special_manager.is_connected("inventory_updated", _on_inventory_updated): special_manager.connect("inventory_updated", _on_inventory_updated) @@ -189,56 +161,36 @@ func _connect_special_manager(special_manager): special_manager.connect("global_cooldown_updated", _on_global_cooldown_updated) # Initial State Sync - if icon_containers.is_empty(): - print("[PowerUpUI] Warning: Icon containers empty during setup. Attempting _ready logic now...") - var container = get_node_or_null("Container") - if container: - _setup_btn(0, container.get_node_or_null("SpeedBtn")) - _setup_btn(1, container.get_node_or_null("FreezeAreaBtn")) - _setup_btn(2, container.get_node_or_null("WallBtn")) - _setup_btn(3, container.get_node_or_null("GhostBtn")) + if not power_up_button: + _ready() # Sync Inventory _on_inventory_updated(special_manager.inventory) - - # Sync Levels for owned items - for effect in special_manager.inventory: - if special_manager.inventory[effect]: - var lvl = special_manager.powerup_levels.get(effect, 1) - _on_powerup_unlocked(effect, lvl) - -func _on_powerup_unlocked(effect: int, level: int): - # Enable button and set level - if icon_containers.has(effect): - var btn = icon_containers[effect] - print("[PowerUpUI] Enabling button for Effect %d (Node: %s)" % [effect, btn.name]) - btn.disabled = false - btn.modulate = Color.WHITE # Restore color - btn.visible = true # Ensure visible - - - # Enforce 1-slot rule by hiding others - if special_manager_ref: - _on_inventory_updated(special_manager_ref.inventory) - else: - print("[PowerUpUI] ERROR: Unlocked Effect %d but no UI button found! Keys: %s" % [effect, icon_containers.keys()]) - func _on_inventory_updated(inventory: Dictionary): - # Update UI icons (Only show ONE active slot as per user request) - print("[PowerUpUI] Inventory Updated Signal Received! Data: ", inventory) - for effect in icon_containers: - var has_item = inventory.get(effect, false) - var btn = icon_containers[effect] + if not power_up_button: return + + # Update UI icon (Single slot logic) + var active_effect: int = -1 + for effect in inventory: + if inventory[effect] == true: + active_effect = effect + break + + current_effect = active_effect + + if active_effect != -1: + power_up_button.visible = true + power_up_button.icon = effect_textures.get(active_effect) - # Single slot logic: Only the owned one is visible - btn.visible = has_item - if has_item: - # Check global cooldown before enabling - var is_cooling = false - if special_manager_ref and special_manager_ref.global_cooldown_timer > 0: - is_cooling = true - - btn.disabled = is_cooling - btn.modulate = Color.WHITE - _update_btn_shortcut(effect, btn) + # Check global cooldown + var is_cooling = false + if special_manager_ref and special_manager_ref.global_cooldown_timer > 0: + is_cooling = true + + power_up_button.disabled = is_cooling + power_up_button.modulate = Color.WHITE + _update_btn_shortcut(power_up_button) + else: + power_up_button.visible = false + power_up_button.disabled = true