From 744bef2ddf90042ef4da2bf36279322ff2175b8c Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Wed, 1 Oct 2025 18:09:14 +0200 Subject: [PATCH] Docs and easy font loading. Added interfaces for PreloadResource's --- .../main/java/org/toop/app/menu/MainMenu.java | 7 +- .../resources/assets/fonts/GroovyManiac.ttf | Bin 0 -> 116184 bytes .../resources/assets/fonts/Roboto-Regular.ttf | Bin 0 -> 146004 bytes app/src/main/resources/assets/style/main.css | 1 - app/src/main/resources/assets/style/quit.css | 2 +- .../toop/framework/SnowflakeGenerator.java | 74 +++++++++++- .../org/toop/framework/asset/AssetLoader.java | 85 +++++++++++++- .../toop/framework/asset/AssetManager.java | 110 ++++++++++++++---- ...ssetEvents.java => AssetLoaderEvents.java} | 2 +- .../asset/resources/BundledResource.java | 52 +++++++++ .../asset/resources/FileExtension.java | 31 ++++- .../framework/asset/resources/FontAsset.java | 2 +- .../asset/resources/LoadableResource.java | 59 +++++++++- .../asset/resources/PreloadResource.java | 37 ++++++ 14 files changed, 423 insertions(+), 39 deletions(-) create mode 100644 app/src/main/resources/assets/fonts/GroovyManiac.ttf create mode 100644 app/src/main/resources/assets/fonts/Roboto-Regular.ttf rename framework/src/main/java/org/toop/framework/asset/events/{AssetEvents.java => AssetLoaderEvents.java} (87%) create mode 100644 framework/src/main/java/org/toop/framework/asset/resources/PreloadResource.java diff --git a/app/src/main/java/org/toop/app/menu/MainMenu.java b/app/src/main/java/org/toop/app/menu/MainMenu.java index c5a39ca..7d1d2d0 100644 --- a/app/src/main/java/org/toop/app/menu/MainMenu.java +++ b/app/src/main/java/org/toop/app/menu/MainMenu.java @@ -4,6 +4,8 @@ import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.image.ImageView; import javafx.scene.layout.*; +import javafx.scene.text.Font; +import org.toop.framework.asset.resources.FontAsset; import org.toop.framework.asset.resources.LocalizationAsset; import java.util.Locale; @@ -12,10 +14,11 @@ import org.toop.framework.asset.resources.CssAsset; import org.toop.framework.asset.resources.ImageAsset; public final class MainMenu extends Menu { - private Locale currentLocale = Locale.of("nl"); - private LocalizationAsset loc = AssetManager.get("localization.properties"); + private final Locale currentLocale = Locale.of("nl"); + private final LocalizationAsset loc = AssetManager.get("localization.properties"); public MainMenu() { + final Button tictactoe = createButton(loc.getString("mainMenuSelectTicTacToe", currentLocale), () -> {}); final Button reversi = createButton(loc.getString("mainMenuSelectReversi", currentLocale), () -> {}); final Button sudoku = createButton(loc.getString("mainMenuSelectSudoku", currentLocale), () -> {}); diff --git a/app/src/main/resources/assets/fonts/GroovyManiac.ttf b/app/src/main/resources/assets/fonts/GroovyManiac.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4202757b1d2b5217191702dd171d9b57aba95548 GIT binary patch literal 116184 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�egE!tu*v~K}gWeK5h%eT<6pQ9}X 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�PJ}HG?Q&#wR5zLv9qnRi zs4mLL2$16TED;l5rbq5sR<90pk4NMl7fd+0Hp7EgMI{TA2$WKC49X#_U2q|po0rvp zp`-oDzLGFwezAfP*ugo{To#NstpG=R#Y9jxyi9~=c444 z#`anVfBU)Z^HNe4?JUvWcYxiuUwdE4&P6FH^V;Xy`#aROH>M;n+6ij8dsdvm?Ld{D ztIX`OqZL6(^moV=VKwQLCoUj%f)W2ctn~<)BdYv`egpH= zFqeL>01%qPC*cmCN-e<4;Ps7&wgHwn6fCVRLRDH11^>vuEF>Wt(n{u}Bvj<5tqdU{ zE7S5T5>jeP(gs2w`4{f>mm(6l05=!k%*2->;#Dqg0bHi&i67}jRc7Kfb}^7c#tknU zl0DA6bxVV&GE4l!W1M`oAcPNVQx zRBvO0YWd)uZRFK$Najl+Xt6`aDes(nx0cM3{T-f5g9}1GKyYczDD_lm0}!)v@>{&U z|6W{tDJd^*X?7{KW#Nkv{;jZv4?CaA6j?rp_s7VPH2m8*S!S%h!7>#phR6L@&Bs|kQQfA>~y3xWiq&odhx%`9MzC!$t9f)CJTtx)N zr4fH0nLo5g)c$!o5p}S?m9_M$LAJKi1gHeT9^l`USxmAM`qJnR^N5ug8Lc?F$Suv) zz&gqyp(5~G%`;evx(mzmw&b}5Ezg-;96D1yy+OHviK^M^JY>1X#d8wzXGHbAEK zqEolB3ewKqPdjzGcoN+rUvzQ>A3pbouIsef|3h;Ivw!qbPk(_&Ek4e05_G-8Sbd7P zOg%qXdk-MLTcS|R$;sFl{hjUZg?1@RVib@@R~n2QwwjiegVwO_5BL3$b>bDGnf*!4 zs7rTHLaG1g%t7v^=JKs6zMrh_OiB*qqv+sYE;F+Vp9>mcG$VRH=>8F?r$SMouwXW2 zm~5deEY&d~JavBk978q9%1c$MeS!?tE@rSZtqimss@eL($VF`ZZi`i>eiR^4VJl$`c~yu z)wuY$a7Q%bS4TZ!Tx=taiA_#89A09KXIoqK?gi0tE&JxId$IBVG56+iRbAH}_}%B6 zdoPm=GRdSO0y2ZlAoDzffFn2pDxeI4Gft?9voX#_j2g{sCXIrbY^Ek@o8+Zw``V^y z`b&Cm=TqTIvpyY@c!0BTy_@ALcP_xh4>VcoUYUVH7e*R`E?Ok{}H(eC$+N+Omr9qON<=bC;&h%BKz(U+&vCYw&1#o{x=! z_*llCmG)EelHFb7iW_n=J7-O;J6<1An-ot+_Ls*P$oJEwGZ;FNp= zcHLaH)BL6JB4nCwnUEY%KLUyYMd5r+#Jd0)xc^gtYR;92SDi3CVlY(05Ofdl4Ocfmh!J>p&Q5B-jQw*F23J$`3~Nb&R@72tw(fxI*h(HZ{S zgf$d`^V)23!`lpi;D5spZk}!)c&`?kl`6-;eR7@g1z1v)NP|&L_Vp8EEiZEBVJ8S@zYz4|$Gqkoil+uGVJ(QrB32mLyf8v219Aeb9_J32bd z_qY9}uBCF;^7^FckOa$*j<8j!_`mx3FJ#Y;os<>D6v@G{KYC|eY;4?WcGS_q9F{VE znYwLL(~>Qlo0e>@E6&O+F3HL)Qto4ZU0v$`eE$cQ`gTXh+bXW&cbH~&-R%1Qd+D1S zH*U=9kTSmiUK!Wb)iwC#;2>Lb$<94vSjDPCn7vz@*vsSJ?qJMdjP$$Mbf3U2(>EXO*_#-h85dXP?VnPvUVH2@ zOQE9Jolq2FbGJ?G1^udlr;GA>$ohelE`2tbLoL}LV6S{`0Ts`_!uV{BqX zoM&cgNkL!Xj(Kx7=SIy)eQNXOR^}9%9q$pHUYcCEsvu=qQG8up{6UPg9!K+6vOD6# z0h#U!Y9)~~-ei!RV9Gyb7=ju^oZ_eT9h!HN1!ZQ2RrJ*ZzhaB%X$Wa{@|G^LJFABN zF7<(8$^bh&=ZQow464^~81eiQR{_?j0m28GYP9BfrM{wVvu1BEF4{h8_O{}_iD}`u z4KOhyJbc;&_TKK!!$n1hJH>z0e_Y6^4GF2uxsWp>G;{{p6*Gpumrp9EP|F98+->~$ zAQofi5VUcmM?SL1UOb2cKZ5dXoG#8ne$^1a2tX(9O;0pM1ZCGo7cEVk+EkiQmlq<( znW_)9Y<^_=f`RSJPcNOCy7%t`uJ@-l@2h^hptUG4uQNBZGe01$G^8PAZPoJUmbPDQ zE86k$0DZ^hgWp)%Ig$Q&n!nrV{**K2`FB$h7UyKlXp)N zCEwfyvhqtyiMv|6D`|^wzUA-o#jKUbXRm&xJ-y>ZUEPV583WT=3JRN3Qd)`%no}Q0 zY2IHu?H?EN)D_*@nu*=VnStjc%_h7`4wd^XC(lc6Oj%vE{Fx=~mzoQE9;&a|@z>{?K;IV7_d4bjK$7KeYb$xV z*c+uDeX%gPU{`+>Dh}^K5-2Krqq9yEbC!H47pa852l=lkT=(pvIsN;audKFvcFdMV zki2h+bHn z-Iy}4tbfhi!>uWi3y&^6b!zR|`5~EIC+F54Tb0|N+EQ53k{p=7C{21GYI=NPWq3$Q zZ2f`hp*8EPVw-AW!&`P!I0m<9LD4RguUBF zc|5{JSQvUCh`fpsI?_rv$qP!6nf%URAA6#-HlTg+toHbUC9myS|LpwWyt;Vx>ak{R~JnkkhniHowE9&M;Ox;Sx3LsOFazoco7gL!?*0m!)BbEY1NBpf0Dm1v9)l==qL z%j~bpft&5}Q;Yf#Sd$PN`J4PWXmp3Y;CR{BWn(aWSla1aE0Xr%72YD)1+56ijSO+g zkEbp_xnTauwrQztC+07BU`6V{_|#b`s41N=VcM*ul$oi1(&>x6*Egl7Z@S)lvGkn9dy7xB5;G5}yt_!%8+hazgl+yW} zb6O0DxJS{a*Z}+_|6%ZgoHh8bHL~5RqQU<@4cAZ8>yCuv;6sN>e^FnJA+K*VyI3$C(HuuVXqrMepb zI%xTW1j%HuwhYQtj6kw)XSP$AVr!HQz>9i%!doOE2?@mbe`e48*o2P|zCHet`U~|} zzhy^M$h=y{p0m7Uxy-Jqc~Xgl!&RX@W&9dg(d!7cg6I*M={Qz#W{!#jvr$Z}2R)5M zA7ee(;0kv-Ko)sV%!L0G%-;IfmPqxxjc48r-GsZ2Ij>(;f3fM0-=%L<2cwvWy!xMm z&C1@v6Y78C-w((Qv;zlss9(rO{t5X&gjT81c;|H4EQ4F9OQB&QAfoFqwO=e}nQy3x z`_zwFdeuG^eJ|u@j_0WQTYMQD>K^)=Vvir)4NjLGTug=@L?tssr+%^_$pjqv9!$Jk zHPG|^#@=_=T*=!oy?T8vX!>s3b93fAw@r2!{BA~De0&>DRtfQ1gKPm_$|$-#PlarT z9+(3eTF(UtK9pa)wBo8%Fc_}vC87`$WT*!FoBTV-eKN9Ic6LEd2{B>g+?=3VeiF+s zc9D|-VgF&bK^}3mohzeTnNGol3^FtBM9^Lf>r_LK8V;jc#recWDQ3Wwf@(7ydp|%Mt2UYnnxl5 z*XEe}F7{aSh0fHxEwdAmKwzP@?a2u%=lpFz`cVD(t1MdC8#QO!j2YYKj`KMdKQ}pJ zUi_c~RFVo^0xr)PN>FBjZ*)UEiuNetUSVN&cG5)mjo70?*^6c;4uUVvUuG z`XRDBX{w!r3nd3k1ft!e0*6#!ZIj9W(4V9}we4{ib64hK(kt~zU%RL93Qf9rO)adM zwZ-LVi7PF+n+c2g&c=Mv&)|94#>mW8nIKWtGhNE;e#=8>NLojGL2ey9gpGAbZpC_n zU&b}~z6n|kkK1M1N{)6$2ed&XHHM65Y%EC@^cbngSX?ilMmH`$xybHeJ1(kD_gH>* z%IB(5(bo@*9rAwKX%?fpg2rJ7!7JdGcLP7|RHw@(SyFmPV0hsM9fovaLEdfI6VXrl z`|tF9L6tI-|3qhkCv`%yH#*pu?3f@-=vO-6{E>)HXl;!)nQTk5jsTpz*2p zRo7Yvl9uF7n;Xlj<&?oU+D_M&oLH4Nb4tuy;6sp=RS9~Z6`F{1--T6yFC*qeD@B~Z zi>v4|CCfN4Y?K~2BqTc`Ne6>TZx#d7bbesJ{Ih;(_wnPBM2I*tjMxAfOn?lA(wc>Y zh8n$`H%=zcMi+ILQCo0yCq#;PB*y#4D+yl9F7N5OzPBv5_r*1bUSIBX#XhsUZu+{a z;OM!VDmHYE!^4kgwLP&ssbv4V+iH4$cA#Ybg_g8M$q7pj&z}LiDIwnD%L8J?;Okgt z=bed;`*^MnH`j+1^RRMem?Qruw_mz$`H9qP>Cu*I=-4rdK~)1|?vSheJ0p3$WT+Di5!ooNtpeuPKaqEIr$vy6|FGZBxYL!ey{MU_HqPwe@u1abDzXc-@YRo1Lu- zHcV{B*kmfM9a*UpNNPg1T2gWheq2mP(;mxM+m#Tj7`3|lBCh9^Ti1WuS=FBJDh%D$N^bh zWbAnmXU!81chhrq#O$HMOB92jk}IbLSA$e;2x`nLw#Ez^{7m(n1Y z=(`xR#4eWX?0aN#DRkAsofvHk%O!)~N^e_MOFtR>78+b~JARz~0R}ifSriy>eE-_x zG`2J1nGl0aRN?>leN*6|(}Yf9`J$x_Evxzml)Y$pV^wsrArslLw=^uyh;)w~V`D4Z znVg*+%{_LKgDfbc)g3OT7^Y9lRLgG-UYExVz9-qL(^^@j`gH4YtnqhfzV)V;<&FL9 z3cIo&bS}hMXu?=jbwc;YY(4Ncd(U`>P)z=(aQ!*W6!zdpJok}!@*g)_DE^^)q@;bM z9kbD0y{6{yTivs}e|)&Q`tXmtyU*3up6j05eQw5#bKTJc%D8E(FLri5y(T?v_0yf5 zPpwWnnYDYxialA`dsnR3nZ=xiu9t`|bdDhF&(DA?J<2v<;*IfjH2C?AA$DT!WP9Pi zkU(*Oi5frr3?r4(#fZn2{@#CHbl>#muEPHCS-rE|H=M0f|B4ez{qghawvzjPelJT> zf821gC2`@k?JS88FB?{2^o`I_lr4!f1ZTQN#Mwp0+D#cdHpInc>eLuJlb`U-X%YB3 za5r+4)9C3QNnQAbKS{L{NS>!l3_B4@&0YRcaMgwxwHvB}C*yt0<&Sht%k6z-{rXq7 z<)(ICXq~$G>Rc4N+@q_*0^&0WKCEBPLG_a8gwxqF)r z&JI2{E`C+5n8PXv%fcvE5*`~7nZ}&9yynUdo z@lto$iq!Ze2kV#2y01AoX*p@PDahyD1eaXkSw&Dy>y(fX-*7(`(KEr<4mWuD=BItD z*(l=jF`ivk5(9aR7o0*y0rs?3rO7+eu_*&?icf6yn(72OBrKi3c$>KMdSi0igGY2ecY;k{9 zQU@2P{-pNW!cCAQyobv*ppc~5mv*ZsS>v3JI0%tq*sY#WaBEAn1Zo*iB+C)jqO0N&Fb6nA0?cb()u+QAAMz>YhkpE<>aTl1$g|c_F1AncW z#yTr(T@l^aN^*JNKggA8b7rgktYBtqY}Zz37xuFy54NQ=U4PEfEB)$tN_}GOHZt=Q z7VW5NJv*08z~jBLAyR!p`3pvc2LcZ_Ak*2~&(GG=&d%4()(#JDb7zEWc+5-O%i{On zDZ7MQ&bPe$J^hNaF*u`QZd9Fd%EXNL0OK_2H+Xy*Pk;9h3|_kibyvLWgHs(9e#e4l zY4+*H_qBW>9fuw%g#Yp(^vHOe*c2zl<%jfi zcf?8U-EWPPj_B!tvLf7;)s!%FFe;d}vy6vHaa3^MI1(XL$@$>EIqk7YU3J;5S^Zfn zPt2KrZe3o^>b}npc0b;hP~7{-{K6C4r}rE4J96i2%nrzF%-$!3cZF3Xpijl*;*^rr zH4%YjYpe4*s>1W4s#j#p++00nV%gS(*_D&StCM3(V#bl)A!%F0IZZwhBGUs;?;SIe2B>rd6VTX%R}m~qvU6} zrg=j724fmIAE{sB7?&|UC>V0Kw~-`%Dv+wtMsMW35@Sbb8|9m^7Y-dpd+SmEQaMvVo-bnj*X#Ef(q1z8g03?>eT zCxmJSLhxm``h*E%>l}jRm^s#E%oz6`1y9O2J3BbIy4rF^@kQcY{Aj%}md-7*%&a4t zy2qYBAd684uhFQtaZTf#EoA(cd{*8h59s~vG}g`q-Zq78v@BIMojkYdX_5W0WtZ79 zuBMmAb_+F)W3cHuNuXLXtfuE(Xn~eSy%TY9iLw_RmM2lY6SF8VjzmCzT@amJI1h^Fqz7hCnY!EH)~1#!6osjE6TbrHI^OV7S#T-re{&(4Y?Zn zo5_PyCf;~P&D&(JjZu#F@C;36p$3F$X*Dj%+_;<2sI*;etL!)KzSTcOWOOY>Mk6C< zQe?C`Ov1Bw>>pe`{rYa)MDP>gFD-H&KszD8peSBG9z9+>+MroY;3$H9Mt=%~)BkhB zor@@HG|1EOmrB&PUuRkD6SddL(Zx-6bd>8?Cnv4wYhv#Vs9$YqL&qGJkN5Znr2Hmu zLt&`q^_;z~sA|*9NIGs?XC>7{kRG+izv$!_Q8AnV)PNe_Fk9VzC^yaMqCMz*D(^qoDl{iO}&$w~!W5+r>IoR5|noM4H zV^EW?AK?7_CT%dhSHTH>Qvf3~>iszC95)3#@`xqlKb__36YQ_DSfdd~$f)z2I_W>5 zl#ieqT152XHjOd&XtdM0r6~~2(ilmd_54!GAAWf7pSPZ2cP4_Qn9fQo|A}9SvteXA z11hko3oMQA$e#!lvZ3FD!q_;CWm*$(2DdDcV_=64AFk+E(k!1*=kc{{yEs7QZp$T+ zU>bFZDtHsqV00fbYuNH))))~hBT{Lo@38iAq7;X_e;^;zI^W6YCtD)fjht}Zayqm{ z6k*he3{jlF8taq?QRhIm24hj<>?a2Vq>LeL0_Ngh)=Mw9xU0hn(SOqy*;sdY@bz7V zaSiv?)g5Szn}6}E`*#2KcvaTghnq4Q@&n_S9ADi2_WmCtMpZwoleMxO+ zKG+h}ePwe_=EnXtDffT%c-{2VpWZ)V$GiKA`l1&fYV=?Eg^TFC%d~YG3&RB|1gd(V zP(pOfN+>NoihzMNcW?J-Pmf{-Fz6Z4z1f37i;pzK9*L^|}Gb(J({)VNyqm#YrcR82s`_Zc2)vxU@E8g|m`W^9$_sqy^O7dwsT$RwUXGU+; zJ&O}!JPtaAOn?P24<~dpXyp+z^ceNBx1T(!R)(C6;iMRLuqdt?KCG!~Mk?I&_P&y` zJuj@-0_x;_mhhs(9mQ*{R7E9wFF2r_D%vn7{+)O7gMv`d*e)kAwRkBDvAn>1w%^J1Nnbl_i?Vl> zn%u==)K}7$^kmJucV_6MvTX~qtAnHJ^D<{g(>Z62AG<^A(W*My2R29eHAh77Hy?3< zfH(Km-mVeQ&Kj3J#=QRCQ2&@7#Gi ztFZ4atMJh#zNQUKJj9czBeJO{%MQ2NxZq5*X*pCjcyIZ!N z@S+uRYnz8|aTxKBG>|$s&L+Y$wh6~Ew0iR7T0^6 z91lA=XKs37{R`_~+MMm;c*xm4V)nL~FU{49p}>j>syX(mJhOi_?F{kEi=qYP_+GY^`fIQW*l8q zy^#KMsXA$PZ0zi$>cm-bakH4ssMIm`8KQ;?d;ILy&?y zW!)(RCtb00Nc#~iqPQDHi$pYTt)-WpKbF~$kldI#hzgR0kF-?X+mJZ>=uwQDfr`$P zsOY4dL|&P8J_ZAx)wXdCpA3%uWGcn|xL>cuan8Wls$ISUuFgAL6T6(!JMxKF@pO7aYHthPmtFNzYaL{;-8~b#=qE{QW_p&xd;=|FN zhfg+w(R5Tvt{(P_cH{(QhlZw4D##7X50ye?RNK{dBo*||nYXhfx#NO7p*MNeoUWwO zprFht=_USgzENSb)AQF9m#r@-+q)of>A6lcM`5UOH%J$Fg|NeOsO;pG$h@u>mJB58 zf_nA>o2RDA?sL$>Z&*|J;^w+)+YTx z9V_nhh}xymf7ciwoi5u^Q?sL@Y)5VFjG6HrMY^bX0DJbZvtn4Z5 z^NSBm%=AkLOw9OINn>nmV@d9!goH&&0Wm&4F#(gN`uI#`Thr@fW9!ok7RAOcs+tht zoe(`f(mRP}Up(}^bQp7q#F~ut@v#eF5n={N$|7FIrC%%b)GCW{Zj7od#?pvP*87eP z8&U$(r-Y{YPe_l5$PQ#t(zK?Wnyyr=N&U9`xYma{oYus(PCuAfI5{*gWJ+exq&V-0 z$eBqwtINwamElHU?6Na$$)IXKZhJc1;kKuPrB}P{d0NSo+HfyRrr0(1udVBtF{pi% zy{Ney6yCU>YH_*5ShIOVd#^<6HifLQi3eZ&?RSm&d5ah4S9p5xbC|f}RpSCXblI%QQJ5g$P%Z%wf{7basgtknq!mrzt;W zSsKwV{nYZZbkMRwk6)=?c(eS^{GRCqwODb%J=3u`+2^7-JvP(3e!i(QFlgL3r_8LZ z$m(h*Cu4DVZ6L1Pp`h;$vrjFahJ)W|MlJc4(JE@Q5qdY(}fjEV%LSX5DnEMo8h z*4lCA=^tFb{QAbt*IUy&PR-x+qvic+D~gMjPfJ@-RJbB7c%Dz@q?CXswq99OuMnX+H~+BorDdzfjt}Cqe@h|xq@1sXuAlMRE_AZO~tI%&f1bE-XEixTkq#e z*3Q~SSJZ{Xy7ETaO~;zk9qiLvjxT9A)tWRgF{h;@V_r_UqkU-3f=u2>JHGsx=FHl| z9qjM!n}2??wrJ<|wIyq=?&8d$u$BRhB1$vkPi<&Ty>Nxqgpk$w3r z2>+9j-ZO|apmTkY4bmgx=#x4fZLBSKpx&tncSI>3520uZ(Mh^P=V3H5X_DB|u00v) z+gjA;uS;Vd{7pyAgPr4QJRW|b++n=;8{@rA8LOo3Q>mTP%eykDlg0e2_tqb5^!9OW zL)YZ(Qz~-2ynO2Gyth=W$|AcHv>L~QRuK!Ih<7e*Y$b|^BOFfc1BqOce4>`f#W6I( zpYhdHOOxRS;y7xG<=P4MI6|S)dCP2VCdy5HCf=EjCVR7u zgAqY}31eU$)LDu9v)UZA5io~|mMZm2`!!NSm?i#PrE%~%!jCz~ z-=NRC&MA#cGz&I*7X0AGC~%oa%p>0N+Y=tM*{%dNxkbvN9!{ol>Lkm+arPvpVYuJ2 z9I^vlq)db^qFg>Iw|u;vBKq67wrunv}G> z@}qusWN}}|w9z?3}glT1yslGF)e9iQN z?jp10#be>qlT&BK>_Iv5rlRVeno!6D)fZ7rMO2fc0(OkSBs(}T#3_x`FonAmRDuSE zQl%vI2VzvNh0@ZMFS3u2lA{xwaTG`Kzn5LoT z+wNK8X7oIyJIEtCr=AYan$R-IN7=t6wR?eY^|YnwYamTqm5-(0n|9+Qbv2B=Jl56D zFotRXH~e<$FUH~f!!2rrjT;;s>nRl+FS@sW-o3@ga%(E{EVO5RaYuAx`G*ZuG*dJ}xc}gd9Rj-U$AO0X#KBh>YxD%@~5^5s0%} zMS!|ECLt>&d{T5xXh}>&Zg!~uRP}GYk3VlbJT7{AOi)m4kb87>Y*1iq_8y8F&6OpV~??S_x|`T<&Vsy z-stOlhDoZ5=t;fuu3TX1<(Oc3n=@@}WYcE!2+?ryM}Y}d01HHuFkB0n{KjLCzRo78 zC-&`q%lHfR`_reH`AJn}66ji{{7L@8^d7KzL*I{a8Ecd2Z95txc;b!bKz#8Dt1$q^ zFSow<69_2Sk>c6d$6tT#G3Ly^SjoZ@yn`}>O_>XGCRN88|EhjJFu=?`sB-u6@bVi| z?-`aFn3almQ25vdrk`W%@u+^n9R{=WIEPF(S65#L2h(Ou$or>=kYX{s(MXtIbkD-r z=77M&A6Od6i$!ueBEByRD~y;rEk0yITv=FAcxZZB@Ps(yufFT+`)<%?S5i~&1B5qo27(5_FMVl4kFK_Qx*YIjR<7;X(dry6f z!fI5rcdPWexZ-YxCcWc+aVP18P>q(}_d1S0bgT4YPyAkb2L;Sd=ngO?)5XWv*ClZ5 zSQi&tAh)$eSHleQs!4v)Pl5g;To|iGuk94Een^FD>xTtQy1!uS+&S9{4(3*r=M-&b zF=^wy!c+atg)54J!g7O%kob7MjWT*92TwO=Pe;>q_n`QR!O`Q4ypN=`7u`m$qTk{l zF#ThQ;3i1N&~5ZdAg6Al^qV@sJi>oN-VOa`27dE|@d{w5+bI1e72mqRVGsx9zo`Js zX~N9AjS@_;bRW8n(r+>d1{!7~V&CJ@~q*PV8J{#eUP4|Jr@x$r;tp8saQ(~q2HpXgY0sy#KdtaV#y_n|8G?ylc# z%IFxC~L!WpYHT|g1Nlh(Dn9~ir$KSU)U#~m#9tcUGcr0KxVE(ArIYPxFNK!3 zY%iH}YIRO{xPcQ=MNUKBq;&K|^KzJ+t!MEPl1 zL4CD$KaQVaLRZlxxwrb&0}{&0a4J8%`{B3oP4t(7rS_nKdiL8PmG8b$o;Xpz%17~c zUN4}jc~M(K`$mM4%}kj%cn|xmB-?pvLs`YT{Qgxx+eS~l`NWsTsQZr{+s3YD%`Fa^ zIx`XRmX3k;xVm-u(e-m?g{!benZZdthnq@!A$_Q&hw>jUdpKDu7DaP5ZfQXD+>!bg z;dQ<4gC9Hrtc|U*tdv)(o7%4|uQ~S9bMe{wVs|7AZIVEpbaa~nR10DP@?)Eo&o8PKS$+_52v1x8}NO@bqjK%S6v5P$J zakbkUhGi}`--?$HR3)bFii=KaxVJKQ)$FMOnLK);J}*;kiwU<<7zxGj{Wk4d@Hdt- z*QA*iTqas}e!jke?(POUV4`Ai3gdX; z2Mf*@{1=ncI|Yiv#r21d=CmV)+v?_SD?FTCS(%+&bBpIu!Dt*DO;9mf9sCoDq}gVm2bglV~Qir0C@U>_%=568HqUDqkI!O zzM*Y_xAl&b&%6~46C$dPY>u{GgNojAM0#svumxrUghs#MB^#9^Ha7YVFdLgedu#Ec z9*tp!t?Hvnrg8?cLANUg_X!i??L*>`T;b6jsHQwp+PoDj-DjohX!=DWKm4^q2Q6I% zoyzwU`+fb1j`Wa<&Z5-D(y-vtmYnIU%Yv45y}G*fiFKI;n=UM9dwzRiO7s2CHfA5n z44T^dO2PgQ_cEJB_b;9rS+{d;-lj##F_rb<(!JLf6z{mYq6cNod3!$G|INNnE_SE- zPT1#4cS(nyS4-GZ+~akD{XYhtG(yA_#3Ns4L_t^l#R2NR73b&Zl;?<-5RZS;{y?SK z?v%+CTAfCgfqG7X5>rf4Q#e^1E3xm~ls)*o)R8_AR^DsUOqul#@`aBQZ_T_(H{#*LofxkN$Uqjz_ zU*5OxJJ^hV9A85X{yuaGvuwia7$yU{QV)LyJpWApX0=KRKBK$}fB#;c#pd915PfDQ z!$WVPGU0i&?l2f~tZz_``VJ(2H#%D0fP~AaNs7TPb#n>|8WRv;>w_nW6l`Kw+l~B! zG#81H@0nqvcxs6P$_u)}vxHQ;S{tEpPgA>D&KHH{T)ldA<}>&7zEYu{SoY=knvCjs zL8b8%Y7%qmr%qctr>1-1skYR{=em;GrLQec($~`dmlw2@s+BD)*fY3nHIKPyVAbUXOF!=0M_V zmz-?QaB#?IKGD?l(8~0Ipwf=g{3V4E_RdA?=azJo1R;3zU;iZqyRUld@brQmFRiXy zgO~6s4!(V#d(HmVY0*_n62H#hGCjR@AH)fLzdlD^vmCk{y&wI&yzpu*dYp)NYw5M1 zD6(Z>_9p(@2#J)L(_UzN%DDQKmFu2glR9n9<#n50T8>|2wUyMa%=7chUD=yBKW)MJ z#u-OmT^_pp)gv>OJky@jnw8VBvmmr!cY6+TY%Vwk0oOS;#$Qo9?7=fL9_Jv2fnS^+ zsAIgMpjGkS5)1{Y@xmCC3kJ>%-ppBhZei2$7KB1GT23sPe{OBgKyZ0y$?%hcE6aob z%NTjXAi212c;{e6!96dn!P|j53Z@@=YqxvVzSgvI?d`y6tp_-jYAtTLmm}H`g34p` z8;cIK?@YlfOO7Tq5JXU)(@85!_fQ;hNDSK~E_Xq7!>RPOPjyuMxFRY2!SaTUX%@Gv zHRl#%3VhK|EIFUKtd$u$N^=UfUv2N~-(FC#t-qrK|LqU0TwPk)T@?~qxvH$RyE0UA z@x(ey>?FtGJwx7g z?7!JFE@IEH{DIT5P5MggnZ6ZS4i4GNAHbgJN*kC`(IxhbTj83yB`YhY$jvwYVf?k_ zb8MPJ({r~z-`OrU%{$mM2gIgPE&1z9L9md41&U!bokC6($4=gFPutsBF6ha17i*sH zb!KpG=IRSgO(&P5{4aC)sU;2PS7(9Fl_hoSi{0#_ikIb=c2!JK7Z~l{yAdQmjkUdh zgsk3AvWhmBRlRuUa%pu;`ilFkyZc+v8A`j`b?jJ!7xvO*gFQHjy(BK9@>j~No5>v} z%N;6b5XkOa``X?TdVsp?(bl-ZUrBATo%8AW>FBxJYU}nyCxt)aR&n1OtHL+`cvoT3 z_Djuck9rqvnI607Kz(@C-j-JWc$u!FEd&L-eLEQ zKKSp3lQSMz@&3{L%LPe^d-7=WOi69)qs^o3|AlbU`~CA;OX}7XxYrv{6PrzPlh=}(p=g^RMnU09!6=+p_$Y0lAhL1R*C zGZX#P6|OPakq%*Fm`jF|awEw2Yp3|?y5Pamu-srtK5aG!9iAJ;p=zn?WsE7#@3b+ zn zH^vExQ_0g)D6!+IdbHPSoe>`%e{pSDR&P5`A!Q+J_ZxnyL!YT72kKD=Gne`ZPUL$`C zVH3AASK@RG9)9hU?!IXC2fO>H{zde6`1DgWcUbb~e)9D{KOR?4{T+^@xkLNe8JP8g zp*PUm0j>kjN201FDhll#A|lWrhZF~VyK(S@Hc;<OPEPCgO{*jIg@60gVhvMcV`$qdQ+G}?316&Lw>4BK*C$L1l5e1)w`(Z9f zxB5-;_lF*}8TRy}>4{l?OJs`rc2vwL2>C%vJoJ(Gr zW5)Y=*g+i|I$b1K-8l5Zrt-FT;D9UI2k=N0e&)rgU<~cghW@=}EVJv(BK{=F)CKvt zzZJpqExjTsJD4xGy|||=Y~JA(ORDr{?UJaJre5jSBr!6&+!>UkSR3^Fod2~*gf+nK=R3R{ymHq&3O;rOSIYFCQRojL3*?h8=M($R0zuum{7&JDzO zjpNOU@HVl!3~$G=D3%C+Q+7r?bD`DWycMdOy)2*{<$nX!XLw6Mxd2z|Xj}pMi02Kj zu~Zt-7r0tRL76N%RI}lG;2Lv9kpqBi4S~fC(|^AXcaBxEY!2rIxPn{Y4q4%(EH;}> zqE{&u*$17Jt`0r>G>44?Pu8e8%CF$j2f<4so~&gb4E=+A@F_+-*l4BjQLKHwIU7*8 z6-%5m+`!28&nsg`&h}O)yk#Juh`%~dZiVVI91>8t%EnfY9??c0u^F7Bxf+!~fc0AE zI`lE<*~}?J5{oDsy1=n96F97o`3zLv^bt_qh6DknjDQ;Y3{V9lp!$X~1r*BnbjpT4 z1k`*pQ6@%g9%|>5Nz4miI%NjT(`aj^wa3l@W#_>&T6;FmG-B;nT^f4Ap1&TtGzuYR+g}f%=H&4S!~7G-3*%W{-k04e3zL z%on)ET#=`hZZ;sGJW$H~gHU}~bK0NG z3%K;P+^VqpLq-Yrg$*%!WU+8lw^KD*<+nz_>mTwAbly=kO}2J%`H&T<0xt^;S433(DlL&{Do2u*aFUvwJcN92eu>h0Yz56Rh`Os+-jasPG?#0@v_} z2UaNxFgn*bCL?h~jMr>HfCn>`SQfx^jtqec)@W1#C*p~@yH&zPx}eX>-6Pn)i6daT zeK-th0xQhWyMPJTVa$fUp}-*yMVjDI4b#v7pmMqHq|wZHZKM`ZL=|a*%R2w@SNZpR z&0*Ff2y}iSU-M7^J!Yknig}KQUIgNp@1Q-3!0j#4;GiNEP&};H|&Hoe8i;zgkMy&>Si+plprSYzNbyzzbnJv>V=J8Q{F^j8(i~rHt=LWbTDF zF&WyI+tBKeE_vSy!!em1bxdar-*PP{)A?6zg%X&4sbMl3&QK3f!j%bJ8#xqw1V6Q$ zSO1Bsr2s=%raL+Z${v0u10F{}wIWJWjS?AXFsLYbOMV;=jKfwVuT3vwV)XVWufWxe zEOLvb*VOT^OJSSXeX5_lNs9OwFHxK+4lAD;5au7}iFsw={!?6S);aktoR`qN2)5pGwOsxT(Ged*3T~-}WqOWJNpZ?4cIpg{vF}Ws zHq8s|?Tt=mqLtz|AXYqWNGUFE!|L4);PSyBM5FtlAiNjD6FuBKOhEZFrFDY1!*<6R z$@Z~LCHc!z`=@oBUbO1+5?9yjj?NRMYZV)6!XxW*Yqyrk73TCMduOdUKR0*tr8X9R z+jRS-h|KwM(d7{-o%M;8XV$7V3G2e0C$>n&tzJ`0rpDI96fTXK9okf%HsiiIGq=x< zv^;t{JIM0Fj{lW;CRSKjUft|Xyix&eHN}~+@!veMNtE7cKO z_MJK}6z)aV%uCDfRsg9i#$qh$+nuy`KPz}9R7u+GD zJ1SRAI)FD=zg?M?cUx}(na^iwgVXy2Wmd=;Nk6S9 zq<$~Yz?NvyzhW)sJh3rxDa3QQ#X0@GP`USNtJsV4-cA7MulCbQuzi{bJr z7Xp{AC)QcMRX*Z&6vxGW&VH>PHaK2l@kYk34jtpxDL5)-c)t}J+7pK%7K}M&0NXJu z_1H;98}7x0Yux&p^IdiVPgh%^xJ|}2N~s1lo@D`-gjcFrkOnpMJS@C*X5v=_hdMu$ z%JONyjRlldgAGwZ*?i+?fD(4#`JsuBZ4K%XE3Tgcs+H>3Y99(f)E2nNhW#HauFnCL%{7m}b!MoU&ym>z%Bp#W-Un2$@k1TgnV||{#S+v3 zDA76R3Al3_%GIWA8fT!<7@amM!@gO**E<6@sRy(=6GO@ z6zjx#SUk~(c0sJ!$`8~XNGV)msak;S_1K|b5|le!LjBZwRGnco^0A``3UYQx{TJj+ z_C)E-)uBII#<8PB8+jZZR;Wi+lj6&1;m9>#!4IT{X+Q>(dJ?X71mL~E$K;qVshF5HG`j+Y>bS*SfKaPu)Kyfqi>(J(!zhAY`H8nA0i)#fESUEZuWQK$J@beSZKw%m%Jj*W%7!^ zJyr+oppar?x^)h|7;QOUI4)55o|vyI*9|&f_Npdy3@8U*I5xn=3jPJ&#uv~=Q2{~Q zY33$qbG99pC)&sG*hniAHfZJboU%!vO!xk-ar%uK45Vpjp3#Hop9rWF>nwTX#`Gzm zV)-oF4W9`;L-CzMRw&_Vk+lKihpdez?l+L{r&}8$2IQ<`I>S6fbcdXttkIZAcM~SE zHVz7|#sHVDy#=l$9oGfcqD6Nopp-|*c!WXFMSKw0E*Sm{Y~&r0!^t-mha(Ajo3D5R zAGMop;aru*kBkC=tEjG{eFe{t@0TlrHqTpDTzQ+XILC#RTr5^Hc-$xnuU5^{F}~s) z8~FbZ^-%hzY!~rmu5a! zR`OU~qBhIDd<9qvd@?;&2P;&5fzJ|oN-oz`e3mQ$J!*7M{#IOlhNA)(`HFh1ZZs}f z>~o1KmJCd~#a@Lx?Mkkj1yyU=Y3xBjrQkGmwaUeO#C2ZaaUDU`T2?ROItd{o;yP89 znZ;FT{rqd0Bw zPR=rlG)j~)SZ0N?Mb_hU(>iDg~x9w27>s_ToF^kEcKX@h?G*yLSSk){D{Xa*f?O)V-^Av=^lZpeID066ubGv zO1q$mVip3^8N-)CYx-ah=`jm|iF6NPBHgn~aLXUK4vxk}Sqy>e94mpHKv6S)AREqN zaBL=uZVGJYpnF7gGZ^T05IU}V1Z}jx1-=U`2ec7B58#`r!vUXS&!tS@yI?@>fa@{} zK=Gg#Tx$t+I_s3j;5|`>7*+7&1DU4`3tCSIkF2nzC3yz2LkFI?Oyjv{~d%E7Pq z9{Otc%QZ(E8jsf8bDNi8e0nhWpl{(@I9 z6+}{E(5u5`a+p&mb1`-L`uQo!I27Sg1Vw~{iB@UAl3O%C(PQpOb>KF# zp^wr~eDDQ7AyT<)^s(2u1SwvqD`~aL1~isYoDfiSkf1&`nM)9d(&K-KS&xeB_ZjZz z`;AdMQ+|L#Ij;E;mE};AIQ1M#w`e#n)Atxt;5y5e3tXNy!#)Mcy!;%Gun1hZ zY9nwF)MYEb1YIQi0@rE0otlVQ%5H$t&o+UJPI1Bo{hCFb;4r#1^EC{+S=?*dB50T1 z=GME3LfQKIR1E#q)MH}6v_pehhbk4|nh$-x*Gkpup>sw*^JYNdjs@q#XKXV;#d(a1 zF0WPM_X8y;(>IN(wrt!c6?*bI%8h(yS15iYnNnK)Yh3aMv0*dtb4?sb#R&Y$Nx5LE<4??zuk;sA)tKAB{3NWqb`JI6#c)RPkHgvrSk}_Akz> z^M*sHQvqF+%e7(?J)roQ|Kw1)hA;S-JeNDyx;uEMs1Z=zXe~zcOJsWgAXJ~>9sxzx z{w+{Mml*N9VJoLgA}Bni6vickkH}{!pqdR=_$*~ym0+yP%6sve6Q>N?fbWub`Iy{Z zuyXb`sBSi2Kv6FD2cRGk%lI1k+y=wx65}-^$3Ze7u?YYh=Ds6#uP>+T3r-iszzLh| z2%k+Kk?#}ZJK8>h57in(FqEI+rWHjQ1kB&{y>tc{EslwHZ$0N1&Q&+WPlxY<2T(sO zkyWvgdz>8cf`@qTjn|}!t|E7nOS!{6aqruX)!VL)tGn)Wn)3Vp#1Y!lT*EetHK5#q zE*+zxum)Xx4I*xXG5%i1be2^LOcW7pw@Q$}Dl7OLA5-?|43D4-Lx_}|Nh4wnj#&e3eI@v5% zlKS_SkLnB)h}tseaTBcFVQ|08h!=~st4};HcGofR(T!sym)n+dxb{-(C3EwM+m=%2 z2V zpw2SVc+g~VBiFmZ@-KRQ$O;8-3s+#szl-Bhm*ZAng;snvr%UBy_8}8X*kr1Lvg*a5 z`=MoLa_vbv9hERc#7`gkfVg-MMqfm-uAMDszvnY2RWBq4FnBpiapW@^6f*+7 z9Ex(r))_&rBznIJm~PUU3jVmM58>OecjVpt+c)rSlcC#&zRTl*x}MstDpb{r?-C4s z*Gav=Jz1P3SBDOd;4R?x3phT;M)^UEL6Wb3pGV!AEb-#^+FFP+s+;W>lvC7g#OPQt zK02T{))w`w{%!1C?SwmRxG28ujBo35C{7YuBXN?n8@BT`;wPML;R+~{L;-ci@C?Vr zPbFOv#W_eL3aAU<7ioW4ipHrlY}detRDw89zvC;?&4L9sG^ZS%*Dh62g7~}u#pg9f zy?}X%Z__CBZRn(Yz9ND6u0AXNY9JrsTWy4NF?WjV=-PBN6trm}mx~O*=zB0%Eu;4b zF&Z#&TMKbBP$9lcRL}^ZqMm=3q9FQrLo7qXmMfPFSM|(rgyVo!F1UqD`hqN6!d1y< zyRc`t{T)iL{G?ag{Kd&;T0x0H$EeQ?SkPiToNSa4LBY!j>EP$ zbmK`)d(TQ98lMuCQcA!*IKZ>>XIj@G!Vv0H9&32sv)~ z4}3gigSZV~wTj@A>ieBTah)fiC{xcz^aPZy^#m@GDT0DbRdX0O!05Zgk5|B?!>gkT z7?a_mj1I+@WJhEQt`4PZ(mAvTyY(?s2BKUc4Mf#N_2<|Lj+Yc?Gr?t8;Z6Wst0@a` z;RwAF96H3nuX_-2%9sKEi*0Tq?Uim$T8ql!ia%^$}W<3Ji$)RthCrn-7!K<9- zPYs2jlFk{O2PEVo89Pe|(H zFW`+f{Bt<}dm&4I{yqg)c%gV3I2}gBtG+qKcd7Y%0r01 zE7$qov9<6SP&^)Lq8KJV^B4>Ndm8_og1`Taf1XC4@45<>j$HO|?K z@KV30oso_6=ftq}^11xEi84zsYfxcB{{obh88!mypt?~0n&Y~zLFIE?5=HYbT5-LK zwJbGJoR!uR@*Mgnl8doe#^Y9)1GsDaPrlyoaG0kiSywv=s(W~~Pl7v{{9ZGBQ*e*x zO%QE2QQicfPpS*#FZtggkNE75y?c#+p2I(Dcdc+04d)fO`zO%0f@kl9oHY+^f}D}& z4A!NL@NoJ#oS?6Hjev^NsUs*(4d(}_p*_iR1V1Q=qw`kGmH0up2r6KRb7TUL=^R;y z2#~jFBA|XIpro3iKkyZpFe0`?(w@(2q#@nF^#j%0)P+Tf=253-I9xY7Aaceg*qI`7 zfcO&6BA_!-GR0%XtG>3Kc-I&0NknrS#AH#=_J4d2QhsJa**!~IFK)=r?|r`gp-2! zrlR!b+{lv51h0S@E%(&UKG2ky)P8<>NlU(e(o%5#mR)<-y9QZr`6qn0MRNH7pQz3c z@{!L!gTF?jIR>kM-4FhDvkj=Mz;2;Pm2R<=VNboos|0?>q0Sion{!v9c7N6?f&Zwf z_!@Cqutt~@Ut9heYm3iBn}Lt=TQLfY7HbHx86E}Sx=lZg)Ni-yC&J43D9`Joj?`DY zwv6kuVE*^1kR-|vS@qW~`pUrTDfy1fM#-74HdW$e8h?THc!1M-dZcY<3w2iOt#F1qwZtZq*IdAoz^d0P2lzOv)e_qnUcCkDl74SQ z76}}#R4bGg?CBuGZwRl{!cL;54)$6$bdnx7oCR<7Nu>->UujS|LstkYBg9~6q`?W- z8sHjnQw_L2;kZ~BBv8jyuU3q_zXGV~8kFq_D85rT->{#7J4&68>LKb&^CJIz%ejqA ztHGSW&$wT6{+wa|;wx+PgNLM_q~Nwm;b+K~8q|EgW*kaCLvF?Ghcz7k|HXX(%!A{) zi<^YvcENwVVKfBIYo5jVB-WGX|C9>wX$R+%*cbobR6x%|U%auVUqc3Gaqcx65LM$g zZ#I+wFL2^=uo$+{XG$e#IK^q;pN(%qdhi*t+l=~Z#=n<2%2pO@NcZ-{8a6W(YdGeL z$ryn}?A2vltRhv;iB)W7jaWr1oUr-1Y@?o_#SEWW$Tr5kf(lsLGd0lO!+!cK(EFtE zb-X0l%U53|*+thrW zgiYOUc#^M^qYu33EO)->rU9rh6{#=ps~582iy@I?kFVfE$+enLF1aO zhA#>>%rJFJVI#iCJ<#v@Oq&~NugFpaj^tq(f=rrXIJQqTY#(UYrlKBW7+W87;U+#SYOahLci{vAFWvMr z>-5b;wSrlvkB4#uhe^t9Jal}`z?ZM%G*g6X~c?Am7rKLezS4p zicQp4Ouy?mV#Rp;PX zyve$w>md`kX#_Z7bw7zb0%-_rMJ^3iIAPI{whhsCem|RzJ*`kia|5xMcD}ITY3B=U zk1M@==d%bTEcBf(a7F64&Kvgg+at<&;L@Z0;sy}yLBfTc%xtRUWGTSJ)iI4nm_9MT zYsCZ|vKKeM$OCi(DlYm~x|FB54&k_@s+puiBo+;1x(*qFT?20hSv)aEX}aM)R>-lD zMp|N(qoJ$NA>VQxBCt)L`~TE-^}$h9SNy&E?%NGX2;oDL7*hxV5)2q1fP}9^Tq1!Y zNElE+B1)(=QV~V`Xc48Uv*v%2KML)Pmey)3BTfqxt=fts)oEu$ zG5fZ^bIyBr-v(6v>0~A|Z};r)o_pW9=iYPg`Jma1tSUfDOF8j&cl4A&YeYOkyU> zK3^Q=>k#CcU|m2`Qt*sRC9S$rcR#yWo9q+*8zy-PtTfUgD@2Eo)D%3UCX3WOyEq-E zF2AGQ{ijiqpD`joPBY7o?Lwg%`S}^XI~KVYRKNp2ac2&yJ>snsl{umA@Z$E}EZc&W zaBf7t9>{Ezx!xGa?DtT)F&&))P3K(Bb3pZ)0~@ePX0tU0D~;zRc22;9GgZbMSnjp! zi9A>2ycm_tAcI7Qi`lN!mY`jUB6tD45WKkC-)^AwZw%;6G#T#;d6g8jIA$KNl4H=S znJa`foyU!_AmQ)XS~m zP$cg;p!+`b*D;)E1m5!ry-?;lxz>f+74Lc4=?Y$4pWvM?jIYp6SA6kl)UM)IV`#){dq z1Z&urVa2RNf>m)Q7U^W+EADF6$*L4sMkh00k()pze8u%cI2VIlmji28AlJedt?7cb z*ZLc;>FOdF{bo&vk|A>$#0LetOJm9s#=Rp}HNJi=uY1uNCj7_08>E`PP z4PObpMI>kxS`58OWR%y>vt&%?aZTvwaSj5>$Ysg6Ex;QL|Dz{ZGOiXnw5lyd>xocRqHjnFVYHce_gPg2<~6d;*@O53VcFR$GpXQ6|L{^{o_6=3;y(=s)23_ zs3Zmw8a!eF3%(ifBw<=d3b#-Qi+_Lzp0_&&IUD- zGS6kUjGFdA%hE7XQ~rM%R*1F1?KFB!b*~54A@61shi__~HYMOFNo1*?a8Qp;&fIUm zO3Ci_P~EoV55c@jCFu?gr|v!m$_fD^f;`zl8M!cqGuzAUwvSU1ySAPtJ;j>_49o%8 zY2(3%R4(gpAR7j(^A4+`dXX+dv1-2+7pKU6*(@VJT%%X3}#X*w3 zo>1X8{VI*WP94I(QMmRA+81`{N3acHDZHP`}s@Ayu1H2{w<_- z6tdp12MyjPs*~0s5r=E*Y$q?T56-F-jT~j*D5x1gy=Vx^wf9jpUL)-l_KLT?3HF=s zcx_(WJNBF21m_;^(Cf&vT9qtSHOZINarKvEE033d;~Q=(Tl;NEg2i-Omkb<;G(csJ zQzngNpZxf*-X43+;nSzzL=ZZXOp`o%x7j~PevmwB|HQjN4OfFvr zQ|bfDKMTV;`=Lr8-f0z=bhMJUc}Eu{M?4;aZ`ANZ)4iNhJB(@R^U*sn^)!VJ+Zof{dL< zdA~h{&imXGpu-6Y`0vyMv3ntlhYlkjqz*7$6UMPVS_wK>#7sAt&ktQb;NYW8rW-}J zKjSs{bc*p5A8{DG6m*mQ0pp2{+Ns`UJjJH0!Sm>j;WZaGk-o*-sSd&ii7a+9c^@_W ziFHIfg=)Xu?TGf^6J=0TfI(y)?in{(g*U>2=#%^byo7bSRi!%xsHGSV{Ag;v2WE# z@HHic29MtbA<1RNx^pj%_}>5Gu^rkL+{h zegZUj!7$a2Ao0+_V=+;U-A!YREE1rSd7sc-!doe4kuZJO>?J6R1n6YmC!D!hHDL`= z#ow-!vBIvvnOHc>LP8&eWWc(bUP*N3OsvV<5zdSN8Mu$~ce4#7C(1ol&(M$hCKUgoR1^QjsxTIexM4tzbWf`lVPDaUo z#eM{%x7T`F?AJo9O~!sL#oF|o`wvhp1r;o@lG9`#5KVez!U!jMgas*~-<1*W%bLfG za4BXi`ML@gX|j1|rJD}vJjr-dnX`oZ5!2}+xT=I^MJ1&35aTWL=^D>Uw*>r=M|BVz z9cWO0)*Ak<0)J049`+zC#n&-jFFFq%hwcLRFnOHUgU-I$%Yp>RnWAM4Fj71SBYd-4 zjL0-tSGafiRqBX$6e|5;j43KKYDBC}TdYUgo_wBin0`OF*-G?w z(*Hb*>5n5?qM7MW!Kfqra;8VRFMTC{e$vO^&7Ysb=Ud$K(Js>YGkvXh1e`OUh?t2G zpLo6>{Gom?o}pR&=g0XOacOvlz3seB&lDpd-*Y5U#D?vQXKZrqEBJfZJpT6-BNd?- zDS38p=jYFYXaDz~@-xQ+A$BH0@j(9XQJf9WpYSvGD;(1jp|}@(pND>3z~7(b=W;xc z=V#n+U|gTViheG!y^Qk((H4As!1IPi=W(J^7!AybaP)E}RV&40DA?|-nW>tPm&HavO!rNxOAWIO&h`9@7e_zCa>G zqRu7}F>a+#(5eng2uG>XxT?AQeQ$}$kPz5=v*9cDhTaX%W>_;(OLpK8Td5f{&a0g; zp>FJjIqUl6oVO9dp|4cF@+ZWGk`*Y9=2Uiq>xggxvGdCO@(^_BQ6AKXu-)N-8i#sR`bklN4wSNTPx>Js$Nhve9n})8y1ZjG4GB>B<>$QtE%x^wM#ZNRt%kY z@5-4AhL3Knsh&Ho(7TLl0cu1kw&~At+aekJ`@wSVOL-qrKcZhA%7{?lYyPWx672z#7RY~)LN8S9bl{!Eq}0S<*mE(`XhG3>2F(T3PtS9p8S zEA%lV5-n!8^X$`w*h`!9z1~#oF*c+L^x!k7SUY~ioZMiyfQoLOhk%TyGV4dyqO5zM zjj_ta;8*lD@Zx7E#wslKYlr=9?yr*vUx1pRCw^{VP>J>0;rqm@so>I#%46P@8F&31 z$R$Pf0(HI$)eF2DG2h{v{tjqs8etoTMH + * Each generated 64-bit ID encodes: + *
    + *
  • 41-bit timestamp (milliseconds since custom epoch)
  • + *
  • 10-bit machine identifier
  • + *
  • 12-bit sequence number for IDs generated in the same millisecond
  • + *
+ *

+ * + *

This implementation ensures: + *

    + *
  • IDs are unique per machine.
  • + *
  • Monotonicity within the same machine.
  • + *
  • Safe concurrent generation via synchronized {@link #nextId()}.
  • + *
+ *

+ * + *

Custom epoch is set to {@code 2025-01-01T00:00:00Z}.

+ * + *

Usage example:

+ *
{@code
+ * SnowflakeGenerator generator = new SnowflakeGenerator();
+ * long id = generator.nextId();
+ * }
+ */ public class SnowflakeGenerator { + + /** + * Custom epoch in milliseconds (2025-01-01T00:00:00Z). + */ private static final long EPOCH = Instant.parse("2025-01-01T00:00:00Z").toEpochMilli(); // Bit allocations @@ -13,19 +44,27 @@ public class SnowflakeGenerator { private static final long MACHINE_BITS = 10; private static final long SEQUENCE_BITS = 12; - // Max values + // Maximum values for each component private static final long MAX_MACHINE_ID = (1L << MACHINE_BITS) - 1; private static final long MAX_SEQUENCE = (1L << SEQUENCE_BITS) - 1; private static final long MAX_TIMESTAMP = (1L << TIMESTAMP_BITS) - 1; - // Bit shifts + // Bit shifts for composing the ID private static final long MACHINE_SHIFT = SEQUENCE_BITS; private static final long TIMESTAMP_SHIFT = SEQUENCE_BITS + MACHINE_BITS; + /** + * Unique machine identifier derived from network interfaces (10 bits). + */ private static final long machineId = SnowflakeGenerator.genMachineId(); + private final AtomicLong lastTimestamp = new AtomicLong(-1L); private long sequence = 0L; + /** + * Generates a 10-bit machine identifier based on MAC addresses of network interfaces. + * Falls back to a random value if MAC cannot be determined. + */ private static long genMachineId() { try { StringBuilder sb = new StringBuilder(); @@ -35,17 +74,25 @@ public class SnowflakeGenerator { for (byte b : mac) sb.append(String.format("%02X", b)); } } - // limit to 10 bits (0–1023) - return sb.toString().hashCode() & 0x3FF; + return sb.toString().hashCode() & 0x3FF; // limit to 10 bits } catch (Exception e) { return (long) (Math.random() * 1024); // fallback } } + /** + * For testing: manually set the last generated timestamp. + * @param l timestamp in milliseconds + */ void setTime(long l) { this.lastTimestamp.set(l); } + /** + * Constructs a SnowflakeGenerator. + * Validates that the machine ID is within allowed range. + * @throws IllegalArgumentException if machine ID is invalid + */ public SnowflakeGenerator() { if (machineId < 0 || machineId > MAX_MACHINE_ID) { throw new IllegalArgumentException( @@ -53,6 +100,16 @@ public class SnowflakeGenerator { } } + /** + * Generates the next unique ID. + *

+ * If multiple IDs are generated in the same millisecond, a sequence number + * is incremented. If the sequence overflows, waits until the next millisecond. + *

+ * + * @return a unique 64-bit ID + * @throws IllegalStateException if clock moves backwards or timestamp exceeds 41-bit limit + */ public synchronized long nextId() { long currentTimestamp = timestamp(); @@ -67,7 +124,6 @@ public class SnowflakeGenerator { if (currentTimestamp == lastTimestamp.get()) { sequence = (sequence + 1) & MAX_SEQUENCE; if (sequence == 0) { - // Sequence overflow, wait for next millisecond currentTimestamp = waitNextMillis(currentTimestamp); } } else { @@ -81,6 +137,11 @@ public class SnowflakeGenerator { | sequence; } + /** + * Waits until the next millisecond if sequence overflows. + * @param lastTimestamp previous timestamp + * @return new timestamp + */ private long waitNextMillis(long lastTimestamp) { long ts = timestamp(); while (ts <= lastTimestamp) { @@ -89,6 +150,9 @@ public class SnowflakeGenerator { return ts; } + /** + * Returns current system timestamp in milliseconds. + */ private long timestamp() { return System.currentTimeMillis(); } diff --git a/framework/src/main/java/org/toop/framework/asset/AssetLoader.java b/framework/src/main/java/org/toop/framework/asset/AssetLoader.java index aef50bf..cfc04d6 100644 --- a/framework/src/main/java/org/toop/framework/asset/AssetLoader.java +++ b/framework/src/main/java/org/toop/framework/asset/AssetLoader.java @@ -2,7 +2,7 @@ package org.toop.framework.asset; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.toop.framework.asset.events.AssetEvents; +import org.toop.framework.asset.events.AssetLoaderEvents; import org.toop.framework.asset.resources.*; import org.toop.framework.eventbus.EventFlow; import org.reflections.Reflections; @@ -14,6 +14,35 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +/** + * Responsible for loading assets from a file system directory into memory. + *

+ * The {@code AssetLoader} scans a root folder recursively, identifies files, + * and maps them to registered resource types based on file extensions and + * {@link FileExtension} annotations. + * It supports multiple resource types including {@link PreloadResource} (automatically loaded) + * and {@link BundledResource} (merged across multiple files). + *

+ * + *

Assets are stored in a static, thread-safe list and can be retrieved + * through {@link AssetManager}.

+ * + *

Features:

+ *
    + *
  • Recursive directory scanning for assets.
  • + *
  • Automatic registration of resource classes via reflection.
  • + *
  • Bundled resource support: multiple files merged into a single resource instance.
  • + *
  • Preload resources automatically invoke {@link PreloadResource#load()}.
  • + *
  • Progress tracking via {@link AssetLoaderEvents.LoadingProgressUpdate} events.
  • + *
+ * + *

Usage example:

+ *
{@code
+ * AssetLoader loader = new AssetLoader("assets");
+ * double progress = loader.getProgress();
+ * List> loadedAssets = loader.getAssets();
+ * }
+ */ public class AssetLoader { private static final Logger logger = LogManager.getLogger(AssetLoader.class); private static final List> assets = new CopyOnWriteArrayList<>(); @@ -22,6 +51,10 @@ public class AssetLoader { private final AtomicInteger loadedCount = new AtomicInteger(0); private int totalCount = 0; + /** + * Constructs an AssetLoader and loads assets from the given root folder. + * @param rootFolder the folder containing asset files + */ public AssetLoader(File rootFolder) { autoRegisterResources(); List foundFiles = new ArrayList<>(); @@ -30,30 +63,59 @@ public class AssetLoader { loader(foundFiles); } + /** + * Constructs an AssetLoader from a folder path. + * @param rootFolder the folder path containing assets + */ public AssetLoader(String rootFolder) { this(new File(rootFolder)); } + /** + * Returns the current progress of loading assets (0.0 to 1.0). + * @return progress as a double + */ public double getProgress() { return (totalCount == 0) ? 1.0 : (loadedCount.get() / (double) totalCount); } + /** + * Returns the number of assets loaded so far. + * @return loaded count + */ public int getLoadedCount() { return loadedCount.get(); } + /** + * Returns the total number of files found to load. + * @return total asset count + */ public int getTotalCount() { return totalCount; } + /** + * Returns a snapshot list of all assets loaded by this loader. + * @return list of loaded assets + */ public List> getAssets() { return new ArrayList<>(assets); } + /** + * Registers a factory for a specific file extension. + * @param extension the file extension (without dot) + * @param factory a function mapping a File to a resource instance + * @param the type of resource + */ public void register(String extension, Function factory) { this.registry.put(extension, factory); } + /** + * Maps a file to a resource instance based on its extension and registered factories. + */ private T resourceMapper(File file, Class type) { String ext = getExtension(file.getName()); Function factory = registry.get(ext); @@ -69,6 +131,9 @@ public class AssetLoader { return type.cast(resource); } + /** + * Loads the given list of files into assets, handling bundled and preload resources. + */ private void loader(List files) { Map bundledResources = new HashMap<>(); @@ -88,7 +153,7 @@ public class AssetLoader { bundledResources.put(key, br); } } - case FontAsset fontAsset -> fontAsset.load(); + case PreloadResource pr -> pr.load(); default -> { } } @@ -103,12 +168,14 @@ public class AssetLoader { logger.info("Loaded {} from {}", resource.getClass().getSimpleName(), file.getAbsolutePath()); loadedCount.incrementAndGet(); new EventFlow() - .addPostEvent(new AssetEvents.LoadingProgressUpdate(loadedCount.get(), totalCount)) + .addPostEvent(new AssetLoaderEvents.LoadingProgressUpdate(loadedCount.get(), totalCount)) .postEvent(); } } - + /** + * Recursively searches a folder and adds all files to the foundFiles list. + */ private void fileSearcher(final File folder, List foundFiles) { for (File fileEntry : Objects.requireNonNull(folder.listFiles())) { if (fileEntry.isDirectory()) { @@ -119,6 +186,10 @@ public class AssetLoader { } } + /** + * Uses reflection to automatically register all {@link BaseResource} subclasses + * annotated with {@link FileExtension}. + */ private void autoRegisterResources() { Reflections reflections = new Reflections("org.toop.framework.asset.resources"); Set> classes = reflections.getSubTypesOf(BaseResource.class); @@ -138,6 +209,9 @@ public class AssetLoader { } } + /** + * Extracts the base name from a file name, used for bundling multiple files. + */ private static String getBaseName(String fileName) { int underscoreIndex = fileName.indexOf('_'); int dotIndex = fileName.lastIndexOf('.'); @@ -145,6 +219,9 @@ public class AssetLoader { return fileName.substring(0, dotIndex); } + /** + * Returns the file extension of a given file name (without dot). + */ public static String getExtension(String name) { int i = name.lastIndexOf('.'); return (i > 0) ? name.substring(i + 1) : ""; diff --git a/framework/src/main/java/org/toop/framework/asset/AssetManager.java b/framework/src/main/java/org/toop/framework/asset/AssetManager.java index 4572091..1630ae0 100644 --- a/framework/src/main/java/org/toop/framework/asset/AssetManager.java +++ b/framework/src/main/java/org/toop/framework/asset/AssetManager.java @@ -5,22 +5,79 @@ import org.toop.framework.asset.resources.*; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +/** + * Centralized manager for all loaded assets in the application. + *

+ * {@code AssetManager} maintains a thread-safe registry of {@link Asset} objects + * and provides utility methods to retrieve assets by name, ID, or type. + * It works together with {@link AssetLoader} to register assets automatically + * when they are loaded from the file system. + *

+ * + *

Key responsibilities:

+ *
    + *
  • Storing all loaded assets in a concurrent map.
  • + *
  • Providing typed access to asset resources.
  • + *
  • Allowing lookup by asset name or ID.
  • + *
  • Supporting retrieval of all assets of a specific {@link BaseResource} subclass.
  • + *
+ * + *

Example usage:

+ *
{@code
+ * // Load assets from a loader
+ * AssetLoader loader = new AssetLoader(new File("RootFolder"));
+ * AssetManager.loadAssets(loader);
+ *
+ * // Retrieve a single resource
+ * ImageAsset background = AssetManager.get("background.jpg");
+ *
+ * // Retrieve all fonts
+ * List> fonts = AssetManager.getAllOfType(FontAsset.class);
+ *
+ * // Retrieve by asset name or optional lookup
+ * Optional> maybeAsset = AssetManager.findByName("menu.css");
+ * }
+ * + *

Notes:

+ *
    + *
  • All retrieval methods are static and thread-safe.
  • + *
  • The {@link #get(String)} method may require casting if the asset type is not known at compile time.
  • + *
  • Assets should be loaded via {@link AssetLoader} before retrieval.
  • + *
+ */ public class AssetManager { private static final AssetManager INSTANCE = new AssetManager(); private static final Map> assets = new ConcurrentHashMap<>(); private AssetManager() {} + /** + * Returns the singleton instance of {@code AssetManager}. + * + * @return the shared instance + */ public static AssetManager getInstance() { return INSTANCE; } + /** + * Loads all assets from a given {@link AssetLoader} into the manager. + * + * @param loader the loader that has already loaded assets + */ public synchronized static void loadAssets(AssetLoader loader) { for (var asset : loader.getAssets()) { assets.put(asset.getName(), asset); } } + /** + * Retrieve the resource of a given name, cast to the expected type. + * + * @param name the asset name + * @param the expected resource type + * @return the resource, or null if not found + */ @SuppressWarnings("unchecked") public static T get(String name) { Asset asset = (Asset) assets.get(name); @@ -28,9 +85,16 @@ public class AssetManager { return asset.getResource(); } + /** + * Retrieve all assets of a specific resource type. + * + * @param type the class type to filter + * @param the resource type + * @return a list of assets matching the type + */ public static ArrayList> getAllOfType(Class type) { ArrayList> list = new ArrayList<>(); - for (Asset asset : assets.values()) { // <-- use .values() + for (Asset asset : assets.values()) { if (type.isInstance(asset.getResource())) { @SuppressWarnings("unchecked") Asset typed = (Asset) asset; @@ -40,6 +104,12 @@ public class AssetManager { return list; } + /** + * Retrieve an asset by its unique ID. + * + * @param id the asset ID + * @return the asset, or null if not found + */ public static Asset getById(String id) { for (Asset asset : assets.values()) { if (asset.getId().toString().equals(id)) { @@ -49,34 +119,32 @@ public class AssetManager { return null; } + /** + * Retrieve an asset by its name. + * + * @param name the asset name + * @return the asset, or null if not found + */ public static Asset getByName(String name) { return assets.get(name); } + /** + * Attempt to find an asset by name, returning an {@link Optional}. + * + * @param name the asset name + * @return an Optional containing the asset if found + */ public static Optional> findByName(String name) { return Optional.ofNullable(assets.get(name)); } + /** + * Add a new asset to the manager. + * + * @param asset the asset to add + */ public static void addAsset(Asset asset) { assets.put(asset.getName(), asset); } - -// public static LocalizationAsset getLocalization(Locale locale) { -// for (Asset asset : assets.values()) { -// if (asset.getResource() instanceof LocalizationAsset locAsset) { -// if (!locAsset.isLoaded()) locAsset.load(); -// if (locAsset.hasLocale(locale)) return locAsset; -// } -// } -// // fallback NL -// Locale fallback = Locale.forLanguageTag("nl"); -// for (Asset asset : assets.values()) { -// if (asset.getResource() instanceof LocalizationAsset locAsset) { -// if (!locAsset.isLoaded()) locAsset.load(); -// if (locAsset.hasLocale(fallback)) return locAsset; -// } -// } -// throw new NoSuchElementException("No localization asset available for locale: " + locale + " or fallback: nl"); -// } - -} \ No newline at end of file +} diff --git a/framework/src/main/java/org/toop/framework/asset/events/AssetEvents.java b/framework/src/main/java/org/toop/framework/asset/events/AssetLoaderEvents.java similarity index 87% rename from framework/src/main/java/org/toop/framework/asset/events/AssetEvents.java rename to framework/src/main/java/org/toop/framework/asset/events/AssetLoaderEvents.java index faf8bfb..91a296e 100644 --- a/framework/src/main/java/org/toop/framework/asset/events/AssetEvents.java +++ b/framework/src/main/java/org/toop/framework/asset/events/AssetLoaderEvents.java @@ -2,6 +2,6 @@ package org.toop.framework.asset.events; import org.toop.framework.eventbus.events.EventWithoutSnowflake; -public class AssetEvents { +public class AssetLoaderEvents { public record LoadingProgressUpdate(int hasLoadedAmount, int isLoadingAmount) implements EventWithoutSnowflake {} } diff --git a/framework/src/main/java/org/toop/framework/asset/resources/BundledResource.java b/framework/src/main/java/org/toop/framework/asset/resources/BundledResource.java index b32d3cf..b6559b8 100644 --- a/framework/src/main/java/org/toop/framework/asset/resources/BundledResource.java +++ b/framework/src/main/java/org/toop/framework/asset/resources/BundledResource.java @@ -2,14 +2,66 @@ package org.toop.framework.asset.resources; import java.io.File; +/** + * Represents a resource that can be composed of multiple files, or "bundled" together + * under a common base name. + * + *

Implementing classes allow an {@link org.toop.framework.asset.AssetLoader} + * to automatically merge multiple related files into a single resource instance.

+ * + *

Typical use cases include:

+ *
    + *
  • Localization assets, where multiple `.properties` files (e.g., `messages_en.properties`, + * `messages_nl.properties`) are grouped under the same logical resource.
  • + *
  • Sprite sheets, tile sets, or other multi-file resources that logically belong together.
  • + *
+ * + *

Implementing classes must provide:

+ *
    + *
  • {@link #loadFile(File)}: Logic to load or merge an individual file into the resource.
  • + *
  • {@link #getBaseName()}: A consistent base name used to group multiple files into this resource.
  • + *
+ * + *

Example usage:

+ *
{@code
+ * public class LocalizationAsset extends BaseResource implements BundledResource {
+ *     private final String baseName;
+ *
+ *     public LocalizationAsset(File file) {
+ *         super(file);
+ *         this.baseName = extractBaseName(file.getName());
+ *         loadFile(file);
+ *     }
+ *
+ *     @Override
+ *     public void loadFile(File file) {
+ *         // merge file into existing bundles
+ *     }
+ *
+ *     @Override
+ *     public String getBaseName() {
+ *         return baseName;
+ *     }
+ * }
+ * }
+ * + *

When used with an asset loader, all files sharing the same base name are + * automatically merged into a single resource instance.

+ */ public interface BundledResource { + /** * Load or merge an additional file into this resource. + * + * @param file the file to load or merge */ void loadFile(File file); /** * Return a base name for grouping multiple files into this single resource. + * Files with the same base name are automatically merged by the loader. + * + * @return the base name used to identify this bundled resource */ String getBaseName(); } \ No newline at end of file diff --git a/framework/src/main/java/org/toop/framework/asset/resources/FileExtension.java b/framework/src/main/java/org/toop/framework/asset/resources/FileExtension.java index 4aceb00..1beb405 100644 --- a/framework/src/main/java/org/toop/framework/asset/resources/FileExtension.java +++ b/framework/src/main/java/org/toop/framework/asset/resources/FileExtension.java @@ -5,8 +5,37 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.annotation.ElementType; +/** + * Annotation to declare which file extensions a {@link BaseResource} subclass + * can handle. + * + *

This annotation is processed by the {@link org.toop.framework.asset.AssetLoader} + * to automatically register resource types for specific file extensions. + * Each extension listed will be mapped to the annotated resource class, + * allowing the loader to instantiate the correct type when scanning files.

+ * + *

Usage example:

+ *
{@code
+ * @FileExtension({"png", "jpg"})
+ * public class ImageAsset extends BaseResource implements LoadableResource {
+ *     ...
+ * }
+ * }
+ * + *

Key points:

+ *
    + *
  • The annotation is retained at runtime for reflection-based registration.
  • + *
  • Can only be applied to types (classes) that extend {@link BaseResource}.
  • + *
  • Multiple extensions can be specified in the {@code value()} array.
  • + *
+ */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface FileExtension { + /** + * The list of file extensions (without leading dot) that the annotated resource class can handle. + * + * @return array of file extensions + */ String[] value(); -} \ No newline at end of file +} diff --git a/framework/src/main/java/org/toop/framework/asset/resources/FontAsset.java b/framework/src/main/java/org/toop/framework/asset/resources/FontAsset.java index 16570de..4835f0f 100644 --- a/framework/src/main/java/org/toop/framework/asset/resources/FontAsset.java +++ b/framework/src/main/java/org/toop/framework/asset/resources/FontAsset.java @@ -6,7 +6,7 @@ import java.io.FileInputStream; import java.io.IOException; @FileExtension({"ttf", "otf"}) -public class FontAsset extends BaseResource implements LoadableResource { +public class FontAsset extends BaseResource implements PreloadResource { private String family; public FontAsset(final File fontFile) { diff --git a/framework/src/main/java/org/toop/framework/asset/resources/LoadableResource.java b/framework/src/main/java/org/toop/framework/asset/resources/LoadableResource.java index 4b94092..69374f7 100644 --- a/framework/src/main/java/org/toop/framework/asset/resources/LoadableResource.java +++ b/framework/src/main/java/org/toop/framework/asset/resources/LoadableResource.java @@ -1,9 +1,64 @@ package org.toop.framework.asset.resources; -import java.io.FileNotFoundException; - +/** + * Represents a resource that can be explicitly loaded and unloaded. + *

+ * Any class implementing {@code LoadableResource} is responsible for managing its own + * loading and unloading logic, such as reading files, initializing data structures, + * or allocating external resources. + *

+ * + *

Implementing classes must define the following behaviors:

+ *
    + *
  • {@link #load()}: Load the resource into memory or perform necessary initialization.
  • + *
  • {@link #unload()}: Release any held resources or memory when the resource is no longer needed.
  • + *
  • {@link #isLoaded()}: Return {@code true} if the resource has been successfully loaded and is ready for use, {@code false} otherwise.
  • + *
+ * + *

Typical usage:

+ *
{@code
+ * public class MyFontAsset extends BaseResource implements LoadableResource {
+ *     private boolean loaded = false;
+ *
+ *     @Override
+ *     public void load() {
+ *         // Load font file into memory
+ *         loaded = true;
+ *     }
+ *
+ *     @Override
+ *     public void unload() {
+ *         // Release resources if needed
+ *         loaded = false;
+ *     }
+ *
+ *     @Override
+ *     public boolean isLoaded() {
+ *         return loaded;
+ *     }
+ * }
+ * }
+ * + *

This interface is commonly used with {@link PreloadResource} to allow automatic + * loading by an {@link org.toop.framework.asset.AssetLoader} if desired.

+ */ public interface LoadableResource { + /** + * Load the resource into memory or initialize it. + * This method may throw runtime exceptions if loading fails. + */ void load(); + + /** + * Unload the resource and free any associated resources. + * After this call, {@link #isLoaded()} should return false. + */ void unload(); + + /** + * Check whether the resource has been successfully loaded. + * + * @return true if the resource is loaded and ready for use, false otherwise + */ boolean isLoaded(); } diff --git a/framework/src/main/java/org/toop/framework/asset/resources/PreloadResource.java b/framework/src/main/java/org/toop/framework/asset/resources/PreloadResource.java new file mode 100644 index 0000000..6458751 --- /dev/null +++ b/framework/src/main/java/org/toop/framework/asset/resources/PreloadResource.java @@ -0,0 +1,37 @@ +package org.toop.framework.asset.resources; + +/** + * Marker interface for resources that should be **automatically loaded** by the {@link org.toop.framework.asset.AssetLoader}. + * + *

Extends {@link LoadableResource}, so any implementing class must provide the standard + * {@link LoadableResource#load()} and {@link LoadableResource#unload()} methods, as well as the + * {@link LoadableResource#isLoaded()} check.

+ * + *

When a resource implements {@code PreloadResource}, the {@code AssetLoader} will invoke + * {@link LoadableResource#load()} automatically after the resource is discovered and instantiated, + * without requiring manual loading by the user.

+ * + *

Typical usage:

+ *
{@code
+ * public class MyFontAsset extends BaseResource implements PreloadResource {
+ *     @Override
+ *     public void load() {
+ *         // load the font into memory
+ *     }
+ *
+ *     @Override
+ *     public void unload() {
+ *         // release resources if needed
+ *     }
+ *
+ *     @Override
+ *     public boolean isLoaded() {
+ *         return loaded;
+ *     }
+ * }
+ * }
+ * + *

Note: Only use this interface for resources that are safe to load at startup, as it may + * increase memory usage or startup time.

+ */ +public interface PreloadResource extends LoadableResource {}