From 4a15cff151ebdb78b36fc8367918f60f83525ba7 Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Wed, 15 Mar 2023 23:35:15 +0100 Subject: [PATCH] popup test --- assets/images/editors/ui/warning-popup.png | Bin 0 -> 2472 bytes assets/images/editors/ui/warning-popup.xml | 13 ++ assets/shaders/editorBlur.frag | 25 ++++ assets/sounds/menu/warningMenu.mp3 | Bin 0 -> 6573 bytes assets/sounds/menu/warningMenu.ogg | Bin 0 -> 9476 bytes buildnumber.txt | 2 +- source/funkin/editors/UIDebugState.hx | 16 +++ source/funkin/editors/ui/UIButton.hx | 117 ++---------------- source/funkin/editors/ui/UISpliceSprite.hx | 117 ++++++++++++++++++ source/funkin/editors/ui/UIWarningSubstate.hx | 72 +++++++++++ source/funkin/system/MusicBeatState.hx | 8 ++ source/funkin/system/MusicBeatSubstate.hx | 14 +++ 12 files changed, 277 insertions(+), 107 deletions(-) create mode 100644 assets/images/editors/ui/warning-popup.png create mode 100644 assets/images/editors/ui/warning-popup.xml create mode 100644 assets/shaders/editorBlur.frag create mode 100644 assets/sounds/menu/warningMenu.mp3 create mode 100644 assets/sounds/menu/warningMenu.ogg create mode 100644 source/funkin/editors/ui/UISpliceSprite.hx create mode 100644 source/funkin/editors/ui/UIWarningSubstate.hx diff --git a/assets/images/editors/ui/warning-popup.png b/assets/images/editors/ui/warning-popup.png new file mode 100644 index 0000000000000000000000000000000000000000..d7fc0ec66cf83e5cb1c3781105a89428bc90d3c7 GIT binary patch literal 2472 zcmX9=X*e5L7p7Ij7E6m-8cQv;PHEK$DG7qH^Vx%1l2J?5(pChmQd?_j$8IEQX{{Y= ziipk>X+tSeT5B;u?5U{4`i1#%?!C{s?|IL8?|trhZkoLEU%DwZV2H_sHt7y-9GKN)6b;8{<)7hGSfpq4*Y9;Pm5qVAE= z;7fn_a3g|m&cXwbl(ZJB3SUibDo&stLUapnJT@k3M)@ zLv7*yE_-7BBojk4?pfNlY4>W#Ardd)?ZEIJ2jigPA}MLgZ5#h$4@9kFbxp;{^Qf5e zgQ(cp&KkS@_;1Vsje#n#zCI!J_HBdGm-^gauIGLp8{;O6E46&aBLj6+Y0~J{i;}!1 z7PE{Ufo1HDiJcwDnx}|UcIIrQV@zXRONc8h?tOLsw_W}|I6Y)N#IMJ8zV*D>MZGIU zxQ-6Km4IE#Zny(k zc%JW1wHh@XVg4rWOWTWhpztk54UdaLu;f+DWy*NJRham+M@5K>_r{kK-mPEUROLVFJyl z$VDQY?m)nOmuqjSb8|yDnW1edc7lz~DdTHv#gUN_HU;HAa13%0nM3rC8y!L>JoYIp zJC(wu@CR^y$6efq2UGqrGAYsv#mO!=0RbZkTd3 z4R`dM^gv2X6HL&`J)#X-iVsOtP}%dFcAd_%a?~2r)|ELuxsK%{ee;z+L9kJpzLhF#e!LPZp8W=aL4(;*{3*#)G?vkozoK^AMeuEJC zjqneT!8mWQ*NU-^{Q|K&qvRyVp;}o&Qio$TR z8E{~tqUcDoTpj>BesR{}lq_kemnkd{T-feqW^Y9I?nbAd5_xC+!*);8D^H7A-1(Iq zUZGCBGjh2CWul=QqbD}&_7q6F)R&S<%hX0dPZYdBMfc^)pJx1+lQj>{pv%khucmJn z{8w6hf6on}1z1PQsdWB;d9cw=;^xf+JyyJlHt=K5IfVj$n3wLx7zIR34P6t zjfzGY{F;bY8tQM4}-X}%YYbG0@L{B>=jON^1styJsUEo~T%yGv#F zUq6h%9`ElWAQ09y_Lw-DxemSyFz*^`q%@$Vp9nN+XQn;dd6o6xq^(n!k~TJc#YVA^ z{=7Vk6iu%!ZZ0ma?0Ceo>&5}g%i=e?vtnWkBg{{mEC3f_;#KJW08^47VqZ`c5k+c` zTza{_=Dnch({@HfQ`55BoT2XI;2>m~@*LODU@InLIF}JLiXy;3^djs|$x`3A<%}w* z^YFzw&l`#J`t@!^8K|=DKb4Zv8jTl8I&xqze@IBE)k_I8ZT$U~e8ysXS7ugOD37

Jx_!hC@=A?bLax>IcfEo71)c?ub1k?OaxQ%RD!}dONwD6o@y{D2lhs~V zSC{2eJnRo%KO_(gzemJaxw?*TM=qHke(LR|{@cH{U%9YK8LJZiBR}76x^s8iJ)+%j z>oE_|R8!N+Nhl@Q%f*GPa=2JVyn6NO@D?i(Bq+#pO-f4Yi-Cc`A2ubD&uLU@E_rF& eIqutT0%zn+E}YVjNfq|ji^I~)*0cfYoA`gc&&BKj literal 0 HcmV?d00001 diff --git a/assets/images/editors/ui/warning-popup.xml b/assets/images/editors/ui/warning-popup.xml new file mode 100644 index 00000000..021dd81a --- /dev/null +++ b/assets/images/editors/ui/warning-popup.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/shaders/editorBlur.frag b/assets/shaders/editorBlur.frag new file mode 100644 index 00000000..929c65cf --- /dev/null +++ b/assets/shaders/editorBlur.frag @@ -0,0 +1,25 @@ +#pragma header +#define PI 3.14159265359 + +int steps = 16; +int stepsInside = 2; +float strength = 0.0075; +void main() { + vec4 color = flixel_texture2D(bitmap, openfl_TextureCoordv); + float fsteps = steps; + for(float inside = 1; inside < stepsInside+1; inside++) { + for(int i = 0; i < steps; i++) { + float fi = i; + color += flixel_texture2D(bitmap, openfl_TextureCoordv + vec2(strength * (inside / stepsInside) * cos(fi / fsteps * (PI * 2.0)), strength * (inside / stepsInside) * sin(fi / fsteps * (PI * 2.0)))); + } + } + /* + for(int x = -steps; x < steps+1; x++) { + for(int y = -steps; y < steps+1; y++) { + color += flixel_texture2D(bitmap, openfl_TextureCoordv + vec2(strength / steps * x, strength / steps * y)); + } + } + */ + color /= steps * stepsInside * 1.25; + gl_FragColor = color; +} \ No newline at end of file diff --git a/assets/sounds/menu/warningMenu.mp3 b/assets/sounds/menu/warningMenu.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c82f0a1f21b5bfac16a31f88a0df0ea3e6af98cd GIT binary patch literal 6573 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 Cx-0Ym literal 0 HcmV?d00001 diff --git a/assets/sounds/menu/warningMenu.ogg b/assets/sounds/menu/warningMenu.ogg new file mode 100644 index 0000000000000000000000000000000000000000..cccaa12922132e59424469961d25260b24aac528 GIT binary patch literal 9476 zcmeHtc{tV0+xVPA_AQQGI*ROtjzZ`lvhUc#J+=Lhl0>n)6$WBhxOuxC zHt=;pd%D@1?+`$1p=G3Gq@<2ZVbCJRPL2T%ZeA{Eb+14--wR&noxJ=-$z%|FcJ~lf zRWnBb8VHfrMR(u_6Cq_50Bi+CnNpm!M2V>dA|V;6n&e)GR9r@CTnCp!g7nir8#Km| z9RNyz7oojTG^gd>FYm%7e8V?i-c4Vw6ipp(G$l{lwsy$DtE8^P!>eCZh=vij2QmO) zH3gzk#^lC6Rv?B8Hdpz4y97$Jed)x?@-NfLbfKekWfqE4^c5D$if$&kU9Tn=^qTw}D=ShUUeXgjW$ z-}OiM|X7b)!D8qX~nA)joM9!fbvy zDr@+0oN1PDQ+Y<#js!jXxo4m(MY}UQ@-qhse*Ibu1mbQlgf)x0s{A>GanENnJ>|B8 zcy7-L)aBzAa4l|-Fjv-ug1xxZEaCbl)7|}kt3~o3az&}gpg*kr1Gf^=tgl)ftM zu7Llv93NC?65q2VL7f^wz2_2rD;R@S%n+Np5k}91-DZeAV3@zBD#|KK6!4T)JBvp`xkKv%7k+`QO&REa$YZAgs`G)O`j2W;rBj zJ~e1fH4=KOyJu7yf(-Rn=lr_>03anY=k!*NsEHGO}4X-^KP{0kCIuU$&6nr`q(DKMdYZ&OE5PfW9F9Hi`2!mx) z!m_FF4*#{+9#)mIF}55lrxxL$yFa9Eq1hfU7guWVF_24Bi3vSuvPLmu<>|Ly?(4J^ZJ2 zKnJ^m3FcR1E}>1tFy~SaM7jMHAp&#=oXCa9n&gT3$A9WI{E*MOY$dcqSKN_`!<e zFm@IH`s45b;1SdS57@e~e|=MtCMy7P$&NS}UuY&fApqV9mrD&mvQr5EzuxBm9r_P~ z2)qaYR|_pTy!m>NHym)-WC?m(9MGc(=E0&6WMm}y>v%Cj9MmEhM6w_>+?ugSpN}gPA(T`!ABKbmc3cz;?pz6f zfiZe0cnibZ*oKoZ7f0TqqN17}Vh&^UAm-?vLRUgbc?I+&*d4@?02|I&GOPl67bF?U z%w{yr3GW8iHCIbenC_0b^D8R;Xs#CT0Wg3XPjkXiO_4`65&%q*5CBc0QFvBXL&K}r z_!*#hY7T%{s0#^p+R{V@2UbWv3V`Ko}DYIQ$_>ajLQEhipF>f8;lZ$sD1jT{h+z-k9&0}91C=D{BgnGy_DzB)ZgQH={sAzJ$ zTT!vt)wz`z>-vAcEwS5gY^k)WePlKtfsX&O-& zb5RKtv#4r{MkoHC>W{#~HF%ca8OpH)yWc$@y1!>F|DC`5|Ll!fdQ{b$1FrsP3M}r* z^`o~1bJ%ZCaq`r#0vcK%+5j%wFK7(9xHgmx2z-Rt1;xUMde zWksI#sFD?(_0zdGV(DzLb>X1n_422dP;qFT60S>*r26&m0aztDfED6W5#~1Iuq&eFHHIP|eU+$eCC%&CY}h3@@R~xE=nSD7cbr+znTdCm=Z?;)~rCBIHO|yZo;S zVrr`K&RUwC5E-VTTaqrTo(;#?8eTJA#{+&&V)8hSy8IAyA!F&5RdqK0uqAz z|DJ$^;5NG}V22!nr;%~Vot?Iv+=Ij2c6WjZ2|?g4h)f6$fA6JCl|c3F9SfaSB8xSg^i440CHH(L?oc2 zXV}-Sj>R4pC?e&1>&gk|90NclwwEO?wgW9)z#}47LV@qt6LS%C4UTC(Xv80;upaEN zp;o0)Ww~s@hegoJ$xX)yzx{lLH#^_N^bahg0{}mmg4fqLIB=jabLPY6AAoi*w}7a$ zyvp94=@Z}w0Gh`5*jU#&IR!;!tm-KZO>JF$LwLO*c03^#AZTcI6HfA&hGzH0gCxGQ z9*|!=$Zm16&?*3pGv9XIw%86)*VNS1I<1K_(b?wOJ_>*Mwl{a;K%buF%#8DMEzCygFT5is+F3J>|yLs`@ zYyIZXDk8FHwPiq_|77bc(^1pajGk_)+w&5j_wp^C->?H89^5 zW2C_DnH!6A?3-SEa&j3L_A#okioatI!Ab4BSzXy?tFKtU?gxOnZuE=4D0H4#C;y<9 zx<3t=4ZWvc&INw{i2f#|L>Qa+6eoYWx$8(nLxH5`?5Bk%H~b?276IPMzd3sKvp*Aw z)Sj~+p*d&HTc6QZ!N>}r+rzKxJSd&~n80IDlb%3{U$1ZWBp$hZ+VsWUM?PnCn0+5? zT?+QFI1*`y3?>DAmYKM}_34fb?^tnOdBV)dcqfPX^BQY4wUR#lFLxEr+B{ln*?;zu z^(|g3A8TnX`r44zFb*T*YW6Z-K%EytMuMJaZhBp(!&0Dji>Q-W0!$6-$O0yCy;bxUGz z+hHqhgl!IeYo-k;NtQmX&Zoxl*7%#VGA&${SF5`6g*Fjjb8UDYuEPP4y5dkFHaTKf zQ;E5f?dR536(t!hbx>t0FW%K{-^Uau4nEOET6n0vWe~%u1#;-Nd%Z73=L85pbCmRW z{|2DNnO=751KSTciP|H6>=MHqSc!Srq34O9tIWetsWDBgq*I+zSAJ9mfQ^kKFuDWy z^4evD@dYdV2w*hi!keB_bw=WO(s5PJ`yRJdq)FVcIKGpfH9p#JVgY~E@FfX2; z3v@-~`n3?Qyw;Vas4p$Qn0LlH{l%GYDd%|bULS!b6FA1nK3@LTiNUJqmXv1Q zf#Wy#{J~^ak83*#EtZrp*A~kw7ju*()#&rCFM85{Cz+!%{aQ^r8rP0av z`!YeW@+*;n8<)gtInFQ^D@EjdD^wMt(KKfU9hEaj)uP-AQf*Gitv5A*1iFV}Lp9FA z_Oq^P9|P|WQ7L7abA>cmaChu!(%7`Eew?vk&>oeya`UYa_2NY5zSy_^>^Fnn)Uu&2 z=por2yp0@>n$~LDht-_Qcs;Gtv6yw(*4ueRCg#Bkw+RC%Ui7);b>>hGC9gfPhnj&H z8-1220nkMoED_p!JNNY~So>)CGY~J)g8b$an9L};*J_A8_*)_fv`+B8M0o&iz{fo# z1t1MB$Q()kK6%k@qwibwm$sk<20_5USyj!=4CDq{)-PI#4?_M(m0QYcjl|8qL`+Zj z-r3%qn7p*wcM6fIP^x(Ty&T1}J6bAQfpqY0HI_KV9&KhPNQalYwwJ^3w&n6Z;XBQ; z%}W}k6W|N$Rgb=OD7j@QAM^?aGPr<|E zlXaQfcNL3Y4DxT)s1U%@GSB5;%*6ge;=l!y&}>WZr?PG)j(;!@eialzf@UE^$m*wG zhcu6tm$Nub%j)0rKJt^t^^U3IMcg2>^C-sU%k-f4Ck6%*^0wv4W927~pVYGab}?(9 zRG?!?KlvKt+e+V8Yx!}4da3}=qgVWELsKcMH(M=F=*X89Q`Xpz6NRrAM_+vxeRFbS z<)8-BJw&$Ug|L!{FhXt-Dbjtl=`i+Wjem~agRRubx{r1my3eBlDEb<)7IdQ}JLwte z&VZp{oiqCSg!;nIYgP*C^QxPhMVIIG=>hy47xYVNY0QrW|0T}+#a}%r@$8^%nNKq@ z&S_#yq>b5DmI>Z_EsreM9|rqG-#)@aWZ#=qpVx?QaH|7cb1`FfIcB}I@AUnw5E)e6g=RMZj&<- zq3$Rz19D&xhHlElI#Kl=WRbp%Kly5{bfs*X!d z@)@S!C1tlZ#HGYbwOtJoi*&?0!t~lPF(8DSn`^w`+*bWZ*93pIn6ntwkq$xB!T9}p zovc+cVnAI@T|~b0OS^BIQ3T}`+Wjx3N<=CxPiZog7^lXoOHkoYsoXB(F}o*5OQOVE z9E|Be9=v;n_#_rrjLdI~OpL727D<)$#hZqR^=Yb(C{PL70^2TrohPa*2s2NTg{iv3 zz2rOD6QJ*Kv5xCC6;mVjDvccN1ND~*p-;hg*PG)w+DUB(T&f>71ypeCu1l7T!KAqsTym8K)!5 zlFs6G$CVZ@z03OH(Bt8NF3+_Vb1=&KbQ+6y%#kh?6>(~8wj^Yai*9MW&~tJcz~LHe z`;I;D8scz|=W9dPsmAdG>UV{O$LSgi(PFrzJ;7*TtZ`ZTseOHkJ!dEbtsz*$n@7te z@Olf{F^pLhJDT%qAWp22Ft=YhI;F0E0aSxA6(dL-CFwaU9gEl#><6?t3tiN~ySkBW_GsfdDjKG+XnrP^&K#iS#LVyEI2chb+Di!hzWp*JQ0LNh# zwQo!jF0=z2Q}`2zP@qf*Pji{+H-Ee)T}G3bq!1t8dAgWIut&CBlObu70?0j>zt67` z7Xt<~kLL##R5o{#XtDfL0AEi@ink07OzpcaSr@dn@O|-CPw3{FMs2cf zvz@9=OkA}lt+LqTLtmT_h{q3-)O?WUG3T=U)iXBLT>_PJX6AA>7He<5;&zW>Yc|cL z1J%N699$oQxjWb&V>K%@)yjJtZb%B1Ld`uKg+z&|JA)l542Rg?%4u|cx>zi0ISE;9y zD@n%hXjX=DL@l=k!_nT9YL3NNmx-fHlfqP&vI@8mcwJM^>m>sIbL)O{lwx6k~bP8%+4_EOK*vWdVasUiztj^Ld8O5T?xxg8qs4q zg_b~GrIMmW8ZtN~NXa7_E#3*(`*a^dCEi%7qln5Zn{vNC`?fb3XbxKY)zc2UQV9a7 zs$g~+z!l9RhLO=XjP>Tq%!Z}~9HanC9sXWbW9-N3ZeNwmj4>Pq81yZZ0Jc+acxq)a zpn!)1j{r}R^isgqwrWoe;G+}7Ba{hS_xBlb(x=ZRmRYOjEmWdZzs5J}8ypgvy#PR8 z+G)SnqfZo)J%|%ki+(;EH@gqo)IP>PzSSfjLr^lgRwl~I z7>J;ldaS+=|q zjiB-d$~56UVGBa(YSMyn8O6WETzK9kr~32hYgDXL*+zQh2ZtYGR z$*Ex7#`b93()>d6GP9G3#?KR98d?Ykw;~b@>fg|tDeq;=m$`RBnSG#J`h-o*;0)*1 zk#NyXiXR`@m9ILySlMg;zVp?s4~1G^KQr~=Bl2q4Yp zH+EI#Jt?zQVd-J`d|u0xlrpn{?c7{AUrFA!+|gechy6T1ow&GaQl1seMRU)Udemfb z|HNGERb2mm)Egi{u)v-V)QX7sGN?nXv71@nUeRo&jI&(g&x%;A&(^SsN}`*d7YC%Z zV`tj9szy#@F1DM(EC*)Nckf)kIeCXB{1}_sHs?~aN1bEUUFIhGQG`7)I?+kUOfy6Yk3L*E_>3agRh zq|*A?I;gvMUwrGwKx3Cn8r6cK`0nyIc$MrRvC?3N00xZz@KI;7iKwfY;&uOB(*75?h9MkS^+ zb@H;RJg+^OHH~Cs)DI1<5C~{DEA>EgyN@~AeA(`N|Erx8YDiGRz0mu`T^rzXyr6(U zFDYGtU^;e5L!mlah1>;KS?c8_ciKn3eOSLJ3S=oIP@rDY1w{Iy>7d?|I9I z*5L0yF6Nw%@Oiq}u>Jgt0q(1vc-Z7dROhe7;Ya-GuLpz7Z@npc;Pa@rlWTaPtUh+! z_*-w!bmOy&pYrZki)Z!sRW@yUXI3;XAMV=1TbN04Tt1=07tb1@ z_Wp2*Lq+w-xT)FMkmQDm$z{FK3rc3@W=_(Ra$X(^-A&lqFoQWqmos){%<}C)!vTkw zW8>uH6|IUc^ULP9XHPE_X67y_1URoU66SrsUCR_W8o_nuxZ@~hA|R+DbKyW~UWR>! zcvx80(EXrqtTuc+3e2X*P0dP!=107i-)^5c-oLIyQRqF}Uh|HD64MUfc7u|GKD-Iv z;^w^YJ&@t>xt4Xpx6RO#Js;hZUlzwb(-k3|@IUfH<EZIQ``*JS#x5DeTS(=IWbbxUszVh9{NdW^CxaVlFQQm_Zqaige<&zv$&R`#(dX##wDYqHf9l7eaZ9Fxr-HbGnApP7yh_8 zP-2&TZGCTTZ_5w#r;pDEQ|cqSwzk#`aZLk)xBFJEhShp8r=9;2_{e~1HuHLiC2g8b zRx{J)MpMhU-15vy1xv%aaz@Iz1`6fZn5el-|1-G}CeQY*zXxB#95QoM@6%JAOKVpq z(HveaDfN2KABv{WkibW-$|oj{OgJiKy;5=#vRtjyn+bkQxQ1Rit`hfhg%SV)NGgzbH^I`FQqtjLGa!|#HB u>v`Ps+>du98zBq#GhIFuP%|z4=$wwKoM(c6mkG933Yvv)0YNar0{;c6Ctz0q literal 0 HcmV?d00001 diff --git a/buildnumber.txt b/buildnumber.txt index 64d4e291..d567531c 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -2526 \ No newline at end of file +2534 \ No newline at end of file diff --git a/source/funkin/editors/UIDebugState.hx b/source/funkin/editors/UIDebugState.hx index 0aa8fdea..cd2377e9 100644 --- a/source/funkin/editors/UIDebugState.hx +++ b/source/funkin/editors/UIDebugState.hx @@ -16,5 +16,21 @@ class UIDebugState extends UIState { add(new UIButton(10, 70, "Test button", function() { trace("Hello, World!"); }, 120, 32)); + add(new UIButton(10, 110, "Warning test", function() { + openSubState(new UIWarningSubstate("Test", "This is a test message", [ + { + label: "Alt. Choice", + onClick: function(t) { + + } + }, + { + label: "OK", + onClick: function(t) { + + } + } + ])); + }, 120, 32)); } } \ No newline at end of file diff --git a/source/funkin/editors/ui/UIButton.hx b/source/funkin/editors/ui/UIButton.hx index 971b30e2..2bc140ef 100644 --- a/source/funkin/editors/ui/UIButton.hx +++ b/source/funkin/editors/ui/UIButton.hx @@ -2,36 +2,26 @@ package funkin.editors.ui; import flixel.graphics.frames.FlxFrame; -class UIButton extends UISprite { - public var bWidth:Int = 120; - public var bHeight:Int = 20; +class UIButton extends UISpliceSprite { public var callback:Void->Void = null; public var field:UIText; - public function resize(w:Int, h:Int) { - bWidth = w; - bHeight = h; - field.fieldWidth = w; - } - - public override function new(x:Float, y:Float, text:String, callback:Void->Void, w:Float = 120, h:Float = 32) { - super(x, y); - frames = CoolUtil.loadFrames(Paths.image('editors/ui/button')); + public override function new(x:Float, y:Float, text:String, callback:Void->Void, w:Int = 120, h:Int = 32) { + super(x, y, w, h, 'editors/ui/button'); this.callback = callback; members.push(field = new UIText(x, y, w, text)); field.borderStyle = OUTLINE; field.borderColor = 0x88000000; field.borderSize = 1; field.alignment = CENTER; + field.fieldWidth = w; } - public override function updateButton() { - __rect.x = x; - __rect.y = y; - __rect.width = bWidth; - __rect.height = bHeight; - UIState.state.updateRectButtonHandler(this, __rect, onHovered); + public override function resize(w:Int, h:Int) { + super.resize(w, h); + if (field != null) + field.fieldWidth = w; } public override function onHovered() { @@ -41,93 +31,8 @@ class UIButton extends UISprite { } public override function draw() { - var x:Float = this.x; - var y:Float = this.y; - var offset:Int = hovered ? (pressed ? 18 : 9) : 0; - - var topleft:FlxFrame = frames.frames[offset]; - var top:FlxFrame = frames.frames[offset + 1]; - var topright:FlxFrame = frames.frames[offset + 2]; - var middleleft:FlxFrame = frames.frames[offset + 3]; - var middle:FlxFrame = frames.frames[offset + 4]; - var middleright:FlxFrame = frames.frames[offset + 5]; - var bottomleft:FlxFrame = frames.frames[offset + 6]; - var bottom:FlxFrame = frames.frames[offset + 7]; - var bottomright:FlxFrame = frames.frames[offset + 8]; - - @:privateAccess { - // TOP LEFT - frame = topleft; - setPosition(x, y); - __setSize(topleft.frame.width, topleft.frame.height); - super.drawSuper(); - - // TOP - frame = top; - setPosition(x + topleft.frame.width, y); - __setSize(bWidth - topleft.frame.width - topright.frame.width, top.frame.height); - super.drawSuper(); - - // TOP RIGHT - frame = topright; - setPosition(x + bWidth - topright.frame.width, y); - __setSize(topright.frame.width, topright.frame.height); - super.drawSuper(); - - // MIDDLE LEFT - frame = middleleft; - setPosition(x, y + top.frame.height); - __setSize(middleleft.frame.width, bHeight - topleft.frame.height - bottomleft.frame.height); - super.drawSuper(); - - // MIDDLE - frame = middle; - setPosition(x + topleft.frame.width, y + top.frame.height); - __setSize(bWidth - middleleft.frame.width - middleright.frame.width, bHeight - topleft.frame.height - bottomleft.frame.height); - super.drawSuper(); - - // MIDDLE RIGHT - frame = middleright; - setPosition(x + bWidth - topright.frame.width, y + top.frame.height); - __setSize(middleright.frame.width, bHeight - topleft.frame.height - bottomleft.frame.height); - super.drawSuper(); - - // BOTTOM LEFT - frame = bottomleft; - setPosition(x, y + bHeight - bottom.frame.height); - __setSize(bottomleft.frame.width, bottomleft.frame.height); - super.drawSuper(); - - // BOTTOM - frame = bottom; - setPosition(x + bottomleft.frame.width, y + bHeight - bottom.frame.height); - __setSize(bWidth - bottomleft.frame.width - bottomright.frame.width, bottom.frame.height); - super.drawSuper(); - - // BOTTOM RIGHT - frame = bottomright; - setPosition(x + bWidth - bottomright.frame.width, y + bHeight - bottom.frame.height); - __setSize(bottomright.frame.width, bottomright.frame.height); - super.drawSuper(); - } - - setPosition(x, y); - - field.follow(this, 0, ((bHeight - field.height) / 2)); - - super.drawMembers(); - } - - private function __setSize(Width:Float, Height:Float) { - var newScaleX:Float = Width / frameWidth; - var newScaleY:Float = Height / frameHeight; - scale.set(newScaleX, newScaleY); - - if (Width <= 0) - scale.x = newScaleY; - else if (Height <= 0) - scale.y = newScaleX; - - updateHitbox(); + framesOffset = hovered ? (pressed ? 18 : 9) : 0; + field.follow(this, x, (bHeight - field.height) / 2); + super.draw(); } } \ No newline at end of file diff --git a/source/funkin/editors/ui/UISpliceSprite.hx b/source/funkin/editors/ui/UISpliceSprite.hx new file mode 100644 index 00000000..9c31a8f1 --- /dev/null +++ b/source/funkin/editors/ui/UISpliceSprite.hx @@ -0,0 +1,117 @@ +package funkin.editors.ui; + +import flixel.graphics.frames.FlxFrame; + +class UISpliceSprite extends UISprite { + public var bWidth:Int = 120; + public var bHeight:Int = 20; + public var framesOffset:Int = 0; + + public function new(x:Float, y:Float, w:Int, h:Int, path:String) { + super(x, y); + + frames = CoolUtil.loadFrames(Paths.image(path)); + resize(w, h); + } + + public override function updateButton() { + __rect.x = x; + __rect.y = y; + __rect.width = bWidth; + __rect.height = bHeight; + UIState.state.updateRectButtonHandler(this, __rect, onHovered); + } + + public function resize(w:Int, h:Int) { + bWidth = w; + bHeight = h; + } + + public override function draw() { + var x:Float = this.x; + var y:Float = this.y; + + var topleft:FlxFrame = frames.frames[framesOffset]; + var top:FlxFrame = frames.frames[framesOffset + 1]; + var topright:FlxFrame = frames.frames[framesOffset + 2]; + var middleleft:FlxFrame = frames.frames[framesOffset + 3]; + var middle:FlxFrame = frames.frames[framesOffset + 4]; + var middleright:FlxFrame = frames.frames[framesOffset + 5]; + var bottomleft:FlxFrame = frames.frames[framesOffset + 6]; + var bottom:FlxFrame = frames.frames[framesOffset + 7]; + var bottomright:FlxFrame = frames.frames[framesOffset + 8]; + + @:privateAccess { + // TOP LEFT + frame = topleft; + setPosition(x, y); + __setSize(topleft.frame.width, topleft.frame.height); + super.drawSuper(); + + // TOP + frame = top; + setPosition(x + topleft.frame.width, y); + __setSize(bWidth - topleft.frame.width - topright.frame.width, top.frame.height); + super.drawSuper(); + + // TOP RIGHT + frame = topright; + setPosition(x + bWidth - topright.frame.width, y); + __setSize(topright.frame.width, topright.frame.height); + super.drawSuper(); + + // MIDDLE LEFT + frame = middleleft; + setPosition(x, y + top.frame.height); + __setSize(middleleft.frame.width, bHeight - topleft.frame.height - bottomleft.frame.height); + super.drawSuper(); + + // MIDDLE + frame = middle; + setPosition(x + topleft.frame.width, y + top.frame.height); + __setSize(bWidth - middleleft.frame.width - middleright.frame.width, bHeight - topleft.frame.height - bottomleft.frame.height); + super.drawSuper(); + + // MIDDLE RIGHT + frame = middleright; + setPosition(x + bWidth - topright.frame.width, y + top.frame.height); + __setSize(middleright.frame.width, bHeight - topleft.frame.height - bottomleft.frame.height); + super.drawSuper(); + + // BOTTOM LEFT + frame = bottomleft; + setPosition(x, y + bHeight - bottom.frame.height); + __setSize(bottomleft.frame.width, bottomleft.frame.height); + super.drawSuper(); + + // BOTTOM + frame = bottom; + setPosition(x + bottomleft.frame.width, y + bHeight - bottom.frame.height); + __setSize(bWidth - bottomleft.frame.width - bottomright.frame.width, bottom.frame.height); + super.drawSuper(); + + // BOTTOM RIGHT + frame = bottomright; + setPosition(x + bWidth - bottomright.frame.width, y + bHeight - bottom.frame.height); + __setSize(bottomright.frame.width, bottomright.frame.height); + super.drawSuper(); + } + + setPosition(x, y); + + super.drawMembers(); + } + + private function __setSize(Width:Float, Height:Float) { + var newScaleX:Float = Width / frameWidth; + var newScaleY:Float = Height / frameHeight; + scale.set(newScaleX, newScaleY); + + if (Width <= 0) + scale.x = newScaleY; + else if (Height <= 0) + scale.y = newScaleX; + + updateHitbox(); + } +} \ No newline at end of file diff --git a/source/funkin/editors/ui/UIWarningSubstate.hx b/source/funkin/editors/ui/UIWarningSubstate.hx new file mode 100644 index 00000000..60343367 --- /dev/null +++ b/source/funkin/editors/ui/UIWarningSubstate.hx @@ -0,0 +1,72 @@ +package funkin.editors.ui; + +import flixel.tweens.FlxTween; +import flixel.tweens.FlxEase; +import funkin.shaders.CustomShader; + +class UIWarningSubstate extends MusicBeatSubstate { + var camShaders:Array = []; + var blurShader:CustomShader = new CustomShader("editorBlur"); + + var title:String; + var message:String; + var buttons:Array; + + var titleSpr:UIText; + var messageSpr:UIText; + + public override function onSubstateOpen() { + super.onSubstateOpen(); + parent.persistentUpdate = false; + parent.persistentDraw = true; + } + + public override function create() { + for(c in FlxG.cameras.list) { + camShaders.push(c); + c.addShader(blurShader); + } + + camera = new FlxCamera(); + camera.bgColor = 0; + camera.alpha = 0; + camera.zoom = 0.1; + FlxG.cameras.add(camera, false); + + var spr = new UISpliceSprite(0, 0, 560, 280, "editors/ui/warning-popup"); + spr.x = (FlxG.width - spr.bWidth) / 2; + spr.y = (FlxG.height - spr.bHeight) / 2; + add(spr); + + + add(titleSpr = new UIText(spr.x + 25, spr.y, spr.bWidth - 50, title, 15, -1)); + titleSpr.y = spr.y + ((30 - titleSpr.height) / 2); + + add(messageSpr = new UIText(spr.x + 10, spr.y + 40, spr.bWidth - 20, message, 15, 0xFF000000)); + + FlxTween.tween(camera, {alpha: 1}, 0.25, {ease: FlxEase.cubeOut}); + FlxTween.tween(camera, {zoom: 1}, 0.66, {ease: FlxEase.elasticOut}); + } + + public override function destroy() { + super.destroy(); + for(e in camShaders) + e.removeShader(blurShader); + + FlxG.cameras.remove(camera); + } + + public function new(title:String, message:String, buttons:Array) { + super(); + this.title = title; + this.message = message; + this.buttons = buttons; + } +} +typedef WarningCamShader = { + var cam:FlxCamera; +} +typedef WarningButton = { + var label:String; + var onClick:UIWarningSubstate->Void; +} \ No newline at end of file diff --git a/source/funkin/system/MusicBeatState.hx b/source/funkin/system/MusicBeatState.hx index fbc21c22..afcbf3d1 100644 --- a/source/funkin/system/MusicBeatState.hx +++ b/source/funkin/system/MusicBeatState.hx @@ -242,4 +242,12 @@ class MusicBeatState extends FlxUIState implements IBeatReceiver super.onFocusLost(); call("onFocusLost"); } + + public override function resetSubState() { + super.resetSubState(); + if (subState != null && subState is MusicBeatSubstate) { + cast(subState, MusicBeatSubstate).parent = this; + cast(subState, MusicBeatSubstate).onSubstateOpen(); + } + } } diff --git a/source/funkin/system/MusicBeatSubstate.hx b/source/funkin/system/MusicBeatSubstate.hx index e51ea793..2299fd4f 100644 --- a/source/funkin/system/MusicBeatSubstate.hx +++ b/source/funkin/system/MusicBeatSubstate.hx @@ -243,4 +243,18 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver super.onFocusLost(); call("onFocusLost"); } + + public var parent:FlxState; + + public function onSubstateOpen() { + + } + + public override function resetSubState() { + super.resetSubState(); + if (subState != null && subState is MusicBeatSubstate) { + cast(subState, MusicBeatSubstate).parent = this; + cast(subState, MusicBeatSubstate).onSubstateOpen(); + } + } }