From 76bb0b32904e2f85ba8ec054d3eb54246d4f5d7d Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sun, 8 Oct 2023 01:50:32 +0530 Subject: [PATCH] implement sorting for customs --- data/ui/play/sort_alpha_d.png | Bin 0 -> 3482 bytes data/ui/play/sort_alpha_h.png | Bin 0 -> 3454 bytes data/ui/play/sort_alpha_i.png | Bin 0 -> 3182 bytes data/ui/play/sort_alpha_n.png | Bin 0 -> 3475 bytes data/ui/play/sort_date_d.png | Bin 0 -> 3140 bytes data/ui/play/sort_date_h.png | Bin 0 -> 3140 bytes data/ui/play/sort_date_i.png | Bin 0 -> 2842 bytes data/ui/play/sort_date_n.png | Bin 0 -> 3147 bytes src/Marbleland.hx | 3 +- src/Mission.hx | 2 ++ src/gui/PlayMissionGui.hx | 51 ++++++++++++++++++++++++++++++---- 11 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 data/ui/play/sort_alpha_d.png create mode 100644 data/ui/play/sort_alpha_h.png create mode 100644 data/ui/play/sort_alpha_i.png create mode 100644 data/ui/play/sort_alpha_n.png create mode 100644 data/ui/play/sort_date_d.png create mode 100644 data/ui/play/sort_date_h.png create mode 100644 data/ui/play/sort_date_i.png create mode 100644 data/ui/play/sort_date_n.png diff --git a/data/ui/play/sort_alpha_d.png b/data/ui/play/sort_alpha_d.png new file mode 100644 index 0000000000000000000000000000000000000000..715c3358ad354b7608c5ed87866883e839b54a78 GIT binary patch literal 3482 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 IM6N<$g6I9j(EtDd literal 0 HcmV?d00001 diff --git a/data/ui/play/sort_alpha_h.png b/data/ui/play/sort_alpha_h.png new file mode 100644 index 0000000000000000000000000000000000000000..30ba3d4263ea07a17b85f07bf275773967765d45 GIT binary patch literal 3454 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 literal 0 HcmV?d00001 diff --git a/data/ui/play/sort_alpha_i.png b/data/ui/play/sort_alpha_i.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffbac32eb4309a6cc27794d6d2631e22d188bbe GIT binary patch literal 3182 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 Ut*_!y#sB~S07*qoM6N<$f~bfQT>t<8 literal 0 HcmV?d00001 diff --git a/data/ui/play/sort_alpha_n.png b/data/ui/play/sort_alpha_n.png new file mode 100644 index 0000000000000000000000000000000000000000..30e946fccf995cc41ead71b4c6b301fc12ff50b8 GIT binary patch literal 3475 zcmV;E4Q%p>P)UpTbs1Jn2%nR?F(*md`PX zmnVQR;8+TMPTuy<0koV#UI45F`bfOUxirvHG_@Q_M~fs57*DNE(y22R?`$_ohWJ8Y zGq65|E}R6JjgD&pYBkq#jZ%wA!lg(OR(YVA*1I#ooXxX6z#3o>Se*V~)+hkwuI|#% z4L4rcKRC3!t#4q!ue5dJ`9&wFvU~tn$@w}XMiggaFigk)r#c5jS zl+ap2>xkm0IeBpOzek?@!S^R#ettBC3R=8c1CBF4`92i3D+S%u(pv$fP^lDt<&W?C z_^NF?wyKDynnXhem|PP;r}K3|9M1vA))8A9&yF0}v+r-e_MLF*_z4o#$h@5?M>YL? zM%W6;&<~N!cs~POvT1YA_4oey&22rs1DaN5Ahj@}8pbr@m?-t8q8Jg32)-CRBZSt@ z-H)uJR;#`{_Fq5vlgX!_ct3^B;<-vP;R0GFT`R1R%=j(9YLba0fUMbd^^)Cp-S^x1 za;Z%atSUhibE47YSS?^G2$^YyG-6Ba94_^^XAHg($~k||a>fv=QV(N7XR&d7eCqjU zzBuvyhhJx2_8KI59HpNX7OFufup+fgnq=wbOL{(W|5txEUn;kW2$55!8X==IHHJ^r zI8+Td(ToV4;t&vnn8XmlAvCR0i!Aln5i5u>I0c8GV#>KCE3ctY{BdL7o8u{9qXjh6 z@i|yO9riWAdFhv2v7@u_=?A}cd#R&ykr6}al!->j2h(*%XY0&F78Qdr-Z_~=h#W*t z)6N(agBq{oEnB@cJUsG9eC%+xNJt7PnP;=5u>$mxETdVyUU%Pi3g4E=K&@gA)~Va<3Y&jifhzi>>zS* zKhe|#B7)!Di!NIYeakR~;%T1)@I;7$8XAVEjZtfBH*H$E^1Seh^wrn- z#@^Sd3|)ce<>p;ye8g!w2Ab`0TVZ{lg&XALj^8@wKE~4|cvSJ@Cf9FRNi&Lg{@^5? zuf5GRTQB9t3kP^}-!xu18CuWx$(1W;9Pzns=f-9Vu6?6+0XfFH!$2t8rZ#lC8fBD zXZ(5n#jvf-@P}L1(Fj9+{~P~^TfTwv`76j3D=oU~BN!z8Ge|@-k1{iW_#_i+fq+`1 zW{lSfAfAvZPaIVF#NYq`JBQZulcDu<&y?~xuI{h!bO_@6ph`atzOrL2MudC6{VyDD z>!*GB8vJrwD)C8iQHZER(wOy(sht!CF{!IVl6~Xc4lHUm59a)QXX1My=LxDxw?=GV zwS-#G;D>u(#N_iyeKF6qS6s%gtsda%*Cz1uMf@<}FE3w4doj<$KYW^J#v62P+DfjY z3lT$WvCRe&g@{e|+Lc`4@JX-^P@iNwR-@&_8V12Wuf2Pt)uanK98t5$wTml=2tRr8 zRqlW6NBC_WsB3{tQQwUoM5vzMT0ob)=BRem@6qCz=z`=UVSKgk+ z>hs|UajAJl{MdiZ#EwGw0+6=ay-n0PKvBP_F{mXvC0-k`6A&O?1otYtwV)ndo zfb+IrOQE|LRi%D#m`9&|fiGOM6Kw=g44JJ?&ADaGl7R)DEHR6#&5|osa8Zb>S8??k zI1B37w7B<;bkwsMr$8jCDk9QLaxk<&)PLo5;E{BveQ(Ar;juH-Y*D_yia-Q zYC6_!PGS#ePK+`2=8M?+3>|})QtDqyb$B1aTQ6a!ClKS$4ZX?b(7p@k-f|_y{v|Xg z#+W_u7QxX`)L9HPAHV0;-&x+k}u zbs%dt(7yaa{7O51TRUQsFfT6ZrT3B@xUh-e-i2Q()4p;o`HoI(qrM=^AjXjE=%&zf z9>gKh^aSzDB(51C#$(k$&-2TByTjD8*&rQQXIj{NjL|Lpu-H(Wy;4XLx(s0lVE*9N9ko(lsCB?=vj z_~vtanH@h0!1vxdO7A5*@d_o3nLn4>MxEg3D6_-+s2>`}1~m|&tKg45bjyuYF3OBM2+i|{KQ_@#2{xc~sK zR7S*Ln*rg>37V6~s2?4rF>#c*I)jTs5TRJe&)k30ul~)iU$Nx_=976Li2}R}91;8 zPY_K{5!b8OsF}!^D&1}6Ltnk+Q-AldjcdkQKpjc4c|R~LBDIX~lw6mpW~YY?JcG`^ zf1=j)r%%3e=b`E97o4@e+BgyQD8x1boQ+Xu!MO#U$*zc?Hb$JY+Xh!Z`}N=Z>=T`p zQlkY_(-<8F_KV1gR<_e-5mVsoRGFP53M7eT|IwfCU-56Ry?5)8$?5CjI4WusCD0!N zYtU$L>A)*@eDbQNJ~p)OC=2tvmLz5LK?-{OWUe!&=~LkB1xG10FMY-b3d6^zJO5$t z>$~1PeC*=MncC`V5cEe;RB_gN;+*w`dRxJt=`B1AB#Dr0Z<&Qip81KGS?hOB-jlYrX;RpLBquupjGR35t>vum6htIe z)jCPeKT3hi>2p~;pX*DMEK{15EK_(CI0TG~Nd0U-@S!h2M8v9UE&cH-Nj|JAg`G<@ zpChnq`JL7`HZ$q6e|DC0Yy_Co;v7jFcakJWDkR=6kxatYPGmDYOJmkZyg8L#t0EF} zj^&qqX?HSs7SkDYfrT&bvW-Z#XReWMNA*P)NOO8Jln>D-Z{d^zyW9IaanY-`p zVw;7Lj_$j2-^~2(nRCvZnJawok^l{0C`tpU0X9B&KnZk!7O()cW1W7G0p$Y#4gu?c zF<=xJ0h$pu0Zbok9sw7Dd0;Nexd>mpAMn+}3a}Q~1Y8DeiLgzACVhnKm#VJpyDte^ zo&wGS??mWTX**d3=wO8W5U?HCNYEmy8KAFdl$7wIb%FvWqqGSxb-`jU_K+~eJAnhh z-UvOg0X)ogAyqh}r(p_@?= zhG5&p`G78DvttBJ?juZl|4Ye+?K?MKdF$;rjPBU8U#v~NSDg2FRlHZ6Dhi>_D}{5E z-cy!EHvi7Vi)a7)`6p)II6NMqI(=Gg0n_xH?>%8hBIuQUZ!3VLjmE%7f9sx`wj8+b zdKIy%!5X|*yeiHsUj5R25Xj1s!aEA*an9qsFWVF2PoDa>fBJT@FgHtx8kM%I$gvpj zF9_QtO#M{^k54Ml4Ikb$cEdfte`jNK>=KQY-YZ#I(#Z=tg(G(*rS~`=%vD4%B3LmP zBa~6YPLhWbc zy>R%)Uz&aPsn_X+y)Gdh7x7+Uc{ErHY>QHbCfT@a&)ALkK5%bZZw`qFr7DZvjI#@E z&MdT;Y`49MW3t`}wJ3lM%4n z2U^APCDUp&pvS@Pk-g} zh$}+f3Q5)R^jAL5!w0X&sK?j@j75z>jR^+n0*=4QsgOLz@^IZgTI{doY7TEGw!cWtXwx zCI_}`)+yd$3qNlWw(tMIe3RU z*E+ao+xG81a8J8WnYoB8CWQ658Q;VMy7SO&S7+80I3=1w$Z$cdL_$?gTQ~%TL%QFClS=rw-yhKZrbX^B0zy7SHZ?PSAi<& zdi=4kUVP3kP(&4D%u=6Ni`oR|N(3lN_D3aF#Q?P`vll`#5!w!|+vp`sX(_>LO?*k4 zB!~pqAH4Jm6Vo#w@14V|DqAKOn8veosgy z!k_KH;L>^_iW-lJJZe%z!X*6N6aUWhKRt%5!qc=Yx&4~`0agsgBpBOMo-sBoX@H_t zj@u8LBrH#m!;>WKjqXy!>e5oD)*=#;q1xz1hOZpOG**PH^Ay)!ARTFj{>5NyicQkk zsmF<6WC7dTs2zb+AZri zyO8nBsTn#8GnjgCFfj(JX-~825De1Gs|uFqEec2yALM-x@JLH+vNqhv3fKgRHX&j# ziN)Bo*Q+ntIjH>O-G`Ry{`&hr;@dx-zF<2o9io2846KnB%gvyK;9NN&Z_Fzxv(8(J zMX?x@kk}MkiLn@|29+?KePUd}&ie9w-*uObpq+&awlm&CSs=bdd`aENnFw2n0n`xE zu@=3}TwZirKl7$WDK$vyBxxO+1Tjf%Dfo*qSX*0qW|KOi%JK2>Ww3|e_*sCtKs(Jl zXx;(mz$?S`+KE2UYT8^9VcYS61L#bhc`4bn_t!mO1Z-l#c`znUo$XDhO)yDs#%!(0 zk&`X%d*o}}ux}S0Y@??5~s-Z*-g;9!-qlG z2Xs$7_1zzOm9`g4p%#@C0gOp8#x6NR*tR6GK1k9SVeryDynN2{==WaW@z;*S=H1kW zH=MVfU!10xoy2!qpkTaa_uY2zwFqk?Xa;nv@X(E-Kz{BgKk63knI~;??6)b}NNo^F z2S5zQ)+mY)yl=X4C%aq&Gtj@)PtmPA@cTBSWrkRbsSV#w{0 z5H7n)y~C9qY&l4MY%6(^^7g`XNKjW>l7ytO2E@=gbBt{2G%o9a2y0S1{#>7lNNpG~gR#F1iWV+AM>#h^K6{4lm;kJW+^YC52agyF)UJgtEM}gBK;+Mfz+9jBQ(hD64ko?g4%L?A%iwvK2DB5$Bi}Sc{dkGR%h6n4XAGqUJ zzjg1YZ#~-w>IsL<$AIG^(yI90&6kd z9;I5c1_%es$zMG2!)?zVe)IRH=H@@)Tv69DLca&BfnwXnu~$EL>rGGJ`)i+^VEH+( zBODo>jG)sixh@!UB5?JAqY=f%HVH8B+)s|K{m#=be(coQ$zPmrb#`>J?xwOVo8CDq zs?G}S!PHKzYc|GrZn@;>eV_g0k!$zv?DmaaozE7)OawiCKG2K8t^i(7I0&(^^U6f3 zWFzU5{{Qq#6*8(ZqjA$AoXMU7POY5!{&La%h=`P`+9sU&7ZG?cwyW%UwI5NclhUeG zCxsKhX<$-B+868KJvUDx;#9R2J6|N6hmAzorGw^G0{gyx`oGxBi-=yVA@5@lU?~=- z1Up_!Se}~%Z8r!`*#8ohhgZj#ErK>@;&oA~4c#ir`~7IQ61=kM3VML$AMUC|q{^9F e#H8edjQRglsjA*P)Y@BoQs9sjIkPSB~S?dUtKFy?bBhF%SNjbM8I6 z@hcf=bnZQK=FD%t`CcI3Aj{Qp6`*Q$m1|y9Lr|9nL9J>)THJS+gSnDqR{&dq?Z6Gi3(G+P7+bljdG{xN zeanq^ylcb6_19k?kF=Jfb;F88);g2sS-;cno|`{6dt&O)tA`GK?TG`O>C-7g_3#CB zs}O`D=yrZ7pv&p(3W6kWAuM}!QnGp1o>dQg_V;&h*uMQ%(JD3$jB^<8vEE}m;p!a5 zc~a|0oFg?RojGyxKaYI2?C_r~qW-EX+mo2M*{0o0~ z-;Q1HzRQVd?}Ii3K#y@?e1LWZv~iw}v82|LI7eE8- zX_ua(Q~V#4r8?UJHWQY<1O;I8?t3O5`GzK<7XZks3l8iG+ z#&nW1o90~14GYF%JcuZa_vCmiN~!VXw@lps^LJS%FLw{Ua-jlC@!MCfZ;-4IEdKTa zxL!*1_78nz?JxYvpZ{W`SsN7u<2_yDIGbji>ZQ!~bLNtap0VUEr~*Kwgjfko$q z+6hM%5-wyGFAA;nRjX1Ohmbi)9f%H-@gjJwo6(kScO}P`anoE&4r zXoE;;P?{Veb%I44@7{`-j40M`s7-I!zk4fB?c9X&HuQ@$Rwz5Z}1k}Oy`%HJ!a4*k@&_q#~v=W6x5iUt^&e2V>_W;i`i~|BR zq5@P?iN&KUR@`V1gb=v<9&{AEoKpi&!YA+B#V7B((t=;QDDR1s8oX0$jf*2($Dn{T zH@6l-9CQI{Wo9pgWFmBKjjS>fmNds>l_Dx8=_8FufL-YIX(uVylEZsE6U_#r%?6?b zr8SWr#w4p1#)X8=dD%!Xtg;9YM+|*hHh8hpBeno=qVUQSN!b=55<>WsFTBK;|Kk91 zB{eADnWp@~2k+&V_w7Mc0IkC2DneWkg2R_NZWT6)Sezh-7OjRUp;9R2hZ(k3!JvTV zs@1IC_W;po>#DGMyF-04L~$ijzzz*EQlMpk5c9@dTSW}_N`vAMBO>8p@l*tW)f$oT zc-(9;wx&hgYF4}Bt>**F6nmG|n9dweoK2Z;jiT#W0jm~E)_Vk1SP4k5pK9LX0f`6= zS)~DkbhW5)0Hr-qWusvuJ&>%35NWkYLe6>aZaRK*?HB;J0&8O7Gl#pE?PrZed507_ z8!6Rgu^Jc(QD+3BAIv1n%&A(V9$*D(N)2?xi9#1TAtGp{iPaF+3j6I5BgUAN=$fkN*2XYK`V4`-unJPjKBHSPM4i-8W4B zxL9>vTs@GhA_ePH$&hv}VWJ>t1Tr;;evm1!xaQBMITCPuTv(h2EO!AOGa9Z`^s?N3=-n zj6+EXvsx*>H`C_BTP# zM*1RR1i*W*M5IQ@zREKx{fVR9KN77zZL?sdD$-~zT%4Z6{O_x5YXXtxnvTr8!&}4Q zz9PD5JMl=9g;P^3oIH-{^-yul-Ysjt^=I$j^)$n+Oahz$UK5e|5>^02WQ1V`=JtN| zJ9^VSyI-`%zTNqde@0ORBJ|rGlKD2?m`lT5qDT}`A8CRpIy1AhPaY@lc0hzx5x4oWbsQ*`V6qfMh#L(WV`XAIECVI98uf+8KfLz~x2;)uoZ(?!222A-fYT!47QvR%C8&XCv7d{cneJ|W=5+h3 z-6YxO@*HO!-Z{Lns79TrUPEh5a18;}<~b%wNEYVFE?gjQw=r27f`jv{8gHHc(nt3_ zu|7z&dg?e=EdMbP=?>Ir>2i7R%iTi>UP9M8xt;jKS5AHU=tA#7XI$j1!R9$O%dq_f zYYpBRunuP}-demdcxQ3OhE1Z$5$o*zx8L-=&%gif=OV3=3aAGz0>^-(B66|Hc1bfX zfEz_EcM^5N!E*H9XWJW}I(+7#*Uz`#mzlibGlR>rtHNr0{;o}H4t#dso!?o%Vtks# z=e(A1WOTd$T^zG72U`IyKX5dQTKcI7sCP0m{>>v(_x@;l?wvF9z0LEz{^~T#TFzK4 z&e>S#O*Eo&>n27|?%uHa$cJ`pezg%tNoDNvd^QIz6rjg01$sr;CBWAa4nlPC@=`_0 zWFxB7>NC|^#<_A#RlxQMF6snuV(HRX%N4&Vh=}pt_XubHc>z39^egrGT0f%rCC`>8 zh10-k;H-%BuJnSdegF{>>%H$5FYge}!zK#Y!9nvi0=vq4s$XmtM8sdIBX435VBm{m zf*y|(!gGrt?IytptCJ`#ygbJ25~O*dxOSx6eO^O(vmfo2f|oj7Lf2XR;jTERmgj;BF6sgKZrEQvrG$^1nNL4F26r?njA{SCAZ+>f{ zK2+*MqCQl-@Q|o|L8K)rs@f=pkO!g^3W}V>giAqQeB1TjW_RYy>BF2eJ8NuXIMT1( zotbmaH~;x>=d9r2n*(HktdTBv@CKL|=m<76k9-te@0qq*r z0jwBoLj#t9d7!9eR>OM_0=`mM0dxYrKtHfS!?qJ@GSF~wG1vUqZ=X=h(?A}$tD#q< zZD$3bZ5r}hz$3s~LM^hA31UrYNf5qhnot2#TB?LEwPdrGyGgjjgTNl(Q4O710BKey zhyleVh<$omd_r?c6Pi^LsO#&&QZUPDwg(sjwgc<+fM!wvR;^lQ{e#bU8or)eHaL$_;1ScJCiEe5od z&Gry#atGnE$6rbe4i2t;;e{8zyLt2Got9-Kf*?RjNe~2)D5aunzVGAvKAz{*CnqQW z{pqKl{$+f8{Fa8Q#k5)hW@tL!ePMGNbXV+c1t2n+Olo9gMe?0EvPl?tsP4ru_D zQqi?~y&eHeDe-;Z&*$@}PM<#gr*gSmAdDJD+a_|9_3tHN+XsOQL$ zBZqRi+&c4c5Ck+D4P4j7bzK^b2EOk{u$E;Zguu3KEX#_3%}bTb@75kZ#AWs1cj<#L&7wTkC? zk!FDiGL=e2;y4ac%DA>?zWCycU!FgI{u0fw=Mu(aPybfX8Vx#u0WBspiEZ1q^}PD( ztG`I4Qd!HgkWx~qRG6Ng=I-6Q%+AhItyYmzqLe}ifn`}(R+t-*HjR_bN0T4oDdU|@En4O(HSu7S!k`NkF7|oj0*bb~FOrz$y zI&$R54?8+K)&oc>DV0jh%*;?I6p&J4+cvpej=sLWWkLJ;`pD&S*tU%jB8n77yV_B= zKlRj8#}|MqrIa-0YG79phO4Ae|MuH^|S#km&+6i1xlq-xD<|qQi`KTk1{qk zhLjS=aqbZz1Y=`kjEsz+l)`bGNXy3lr3`&2nN0p_|Ni}3G_a>%BBk^fhh}loPBXKp z0|yT56GGTR2wc~tQmIg>R3gV292{hDaFD*fJ`#xpFTL~<$z+mvGg?a|67==;ap1rK zzWVAbzW(}agb)ZJqLgpn&&qsX{i3FY(C9L+VSFipUI7KrdC6rRaA+*y3vEVy2G_*B7nUpdb zR7x4ySfNnBbzL0CiBGm@^E{72p#Ts?gG3?$fMr>Do=2n60Kj$K?*nIO<^chu9Sv#| z%f-1|Zlg)1CPg|&(r~t;lwjQmkIRnvEMbw!~)BY}=0Jl2Q&3I+keyNSNFo z5Ec`rV_Wo8%xf3Io;-Pyk3RaSWzwaZl#=J4f1YE!9?AWn`bUJ-s*jlYdM@L7?m~k_Rk4tEp3u|r5p}ALzH{SrqZ3}1# z>gjZvHEY(;*4Eb2IS2waZQ8`p&=7?}fzLnxoKmSoDiyA*S*bXzSwY=ATI&`C2uI&& z5Wk~Tg|M)>N3(G=F!$p3gCL-{x0geQ4n@~GJ3Bdj`t*|heBY0t0c_i@&}s%g=zvRD zH%2oy8jb&DGMP@@kwhZV;%M=7xzP6N^*U?Uu5Hou#*G_kG#X3xGvUz8kxVA=>c#r`z8{s3N-470>~#%m zasYsIG;CGhkN`6?Gv~Uxx(*t{HwAON>NgsSI|@K5m11IIf_L6|hsPg(oP0jd*|TTq z>grmw-@;l~2*JR>z-7Ja#_1K{IZ7!hgs2f#UJ~#=_~3(ojE;_0fi?pfFREj8XiK3D zq0?>Huz~UMaV}iAKqix+zrUYMCbMY2TCK+X{5-DfMwayAi!c61!DwoStDwW8l`}_OP zuUogS5reJkm9INO2u0{%C2b!b;E#`w|NgPZ9{Y)9SqYQNO+7j>F+r(RV&~4CJZLMG zO5C_{gRZVFip3(cv$ND{HIr`T!Gj0?8Ur;4BQ+s}FSI5sAw-g}`ZB7w-+lMpG0U<> zjV6tT^Z7itZ{H@D%PowLOE$ALFBXfeU%#GACPO}-XKHFH((2Z&TmLpTHg=NcR>lQx z0@s8PMXNcMs?#(D0PnNUJ{yx#{#Qzg=Xud~ySuxaO`A4F`8F@8yahwR$ zbzPKFw6(R}dj0j+PsKnXj8X;t+1!dNrEC$ZD5Eu7Q%WV?fB*eQ^ZEQgecxYgsv;o- znM{UsI^7b=mTSK6M_c!)sVU~>=Ax1?nM{^OM@N4z4phwd-vvJpaJ1w^91mX z5TauE?pZ&jl-WHPa08vZd-rbc&G3xdGW=T=b$TI`%FE{K1jYV(UH*keZyF?ELV<51+ny z^X7Mo#p0G~wc6`>Ub~di2Bc+K)pR;Noy+BJ4Gj%_xqtuuD?L3uCRG`)w+LhDoCf`7 zG05W-hVRSD1h zJq_HZ`x$#)>EVG|@T@s0oCIzIQ$mR9as%A=4-g@Q)Wx_<82h>i51bRk4w_d89K^cA9%jz}15X>}B1fk))Bpeg07*qoM6N<$g144(umAu6 literal 0 HcmV?d00001 diff --git a/data/ui/play/sort_date_n.png b/data/ui/play/sort_date_n.png new file mode 100644 index 0000000000000000000000000000000000000000..9df8dcc5d99401633d376fe0a6e257eafcab0cfc GIT binary patch literal 3147 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 literal 0 HcmV?d00001 diff --git a/src/Marbleland.hx b/src/Marbleland.hx index 4c836147..8d5f9bb2 100644 --- a/src/Marbleland.hx +++ b/src/Marbleland.hx @@ -32,7 +32,7 @@ class Marbleland { for (missionData in claJson) { // filter - if (missionData.compatibility != 'mbw' && missionData.compatibility != 'mbg') + if (missionData.datablockCompatibility != 'mbw' && missionData.datablockCompatibility != 'mbg') continue; if (!['gold', 'platinum', 'ultra', 'platinumquest'].contains(missionData.modification)) continue; @@ -61,6 +61,7 @@ class Marbleland { mission.ultimateTime = missionData.ultimateTime != null ? missionData.ultimateTime / 1000 : 0; mission.hasEgg = missionData.hasEgg; mission.isClaMission = true; + mission.addedAt = missionData.addedAt; var game = missionData.modification; diff --git a/src/Mission.hx b/src/Mission.hx index 7d7871f1..8848e4df 100644 --- a/src/Mission.hx +++ b/src/Mission.hx @@ -1,5 +1,6 @@ package src; +import haxe.Int64; import src.Http.HttpRequest; import gui.Canvas; import gui.MessageBoxOkDlg; @@ -40,6 +41,7 @@ class Mission { public var game:String; public var hasEgg:Bool; public var isCustom:Bool; + public var addedAt:Int64; var next:Mission; diff --git a/src/gui/PlayMissionGui.hx b/src/gui/PlayMissionGui.hx index f681eb4c..d71b7736 100644 --- a/src/gui/PlayMissionGui.hx +++ b/src/gui/PlayMissionGui.hx @@ -37,7 +37,7 @@ class PlayMissionGui extends GuiImage { var setSelectedFunc:Int->Void; var setScoreHover:Bool->Void; - var setCategoryFunc:(String, String, ?Bool) -> Void; + var setCategoryFunc:(String, String, ?String, ?Bool) -> Void; var buttonHoldFunc:(dt:Float, mouseState:MouseState) -> Void; var pmScoreButton:GuiButton; @@ -204,6 +204,27 @@ class PlayMissionGui extends GuiImage { } pmBox.addChild(pmSearch); + var sortType = 0; // 0 = alphabetical, 1 = date + + var sortAlphaImgs = loadButtonImages("data/ui/play/sort_alpha"); + var sortDateImgs = loadButtonImages("data/ui/play/sort_date"); + + var pmSort = new GuiButton(sortAlphaImgs); + pmSort.position = new Vector(366, 325); + pmSort.extent = new Vector(43, 43); + pmSort.pressedAction = (e) -> { + sortType = (sortType + 1) % 2; + if (sortType == 0) { + @:privateAccess pmSort.anim.frames = sortAlphaImgs; + } + if (sortType == 1) { + @:privateAccess pmSort.anim.frames = sortDateImgs; + } + setCategoryFunc(currentGame, currentCategoryStatic, sortType == 1 ? "date" : "alpha"); + // MarbleGame.canvas.pushDialog(new SearchGui(currentGame, currentCategory == "custom")); + } + pmBox.addChild(pmSort); + var pmPrev = new GuiButton(loadButtonImages("data/ui/play/prev")); pmPrev.position = new Vector(436, 325); pmPrev.extent = new Vector(72, 43); @@ -605,7 +626,7 @@ class PlayMissionGui extends GuiImage { MarbleGame.canvas.pushDialog(mbo); } else { currentCategory = "custom"; - setCategoryFunc("gold", "custom"); + setCategoryFunc("gold", "custom", sortType == 1 ? "date" : "alpha"); } } pmDifficultyCtrl.addChild(pmDifficultyGoldCustom); @@ -621,7 +642,7 @@ class PlayMissionGui extends GuiImage { MarbleGame.canvas.pushDialog(mbo); } else { currentCategory = "custom"; - setCategoryFunc("platinum", "custom"); + setCategoryFunc("platinum", "custom", sortType == 1 ? "date" : "alpha"); } } pmDifficultyCtrl.addChild(pmDifficultyPlatinumCustom); @@ -637,7 +658,7 @@ class PlayMissionGui extends GuiImage { MarbleGame.canvas.pushDialog(mbo); } else { currentCategory = "custom"; - setCategoryFunc("ultra", "custom"); + setCategoryFunc("ultra", "custom", sortType == 1 ? "date" : "alpha"); } } pmDifficultyCtrl.addChild(pmDifficultyUltraCustom); @@ -812,7 +833,7 @@ class PlayMissionGui extends GuiImage { currentList = MissionList.missionList["platinum"]["beginner"]; - setCategoryFunc = function(game:String, category:String, ?doRender:Bool = true) { + setCategoryFunc = function(game:String, category:String, ?sort:String = null, ?doRender:Bool = true) { currentList = category == "custom" ? (switch (game) { case 'gold' if (Marbleland.goldMissions.length != 0): Marbleland.goldMissions; case 'platinum' if (Marbleland.platinumMissions.length != 0): Marbleland.platinumMissions; @@ -836,6 +857,24 @@ class PlayMissionGui extends GuiImage { pmAchievements.disabled = true; } + if (category == "custom") { + pmSort.anim.visible = true; + pmSort.disabled = false; + } else { + pmSort.anim.visible = false; + pmSort.disabled = true; + } + + if (sort != null) { + currentList = currentList.copy(); // Don't modify the originals + if (sort == "alpha") { + currentList.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); + } + if (sort == "date") { + currentList.sort((x, y) -> x.addedAt > y.addedAt ? 1 : (x.addedAt < y.addedAt ? -1 : 0)); + } + } + currentCategoryStatic = currentCategory; if (currentGame != game) { @@ -1044,7 +1083,7 @@ class PlayMissionGui extends GuiImage { #end } - setCategoryFunc(currentGame, currentCategoryStatic, false); + setCategoryFunc(currentGame, currentCategoryStatic, null, false); #if js var kofi = new GuiButton(loadButtonImages("data/ui/kofi1"));