From 6c828dfba799ad1f616dbf98776c1124098b3afe Mon Sep 17 00:00:00 2001 From: Jan Mrna Date: Sat, 20 Sep 2025 17:33:02 +0200 Subject: [PATCH] Copy source files from the 2D "game engine" --- cpp/Makefile | 9 + .../archive_org_bomberman_sprites.png | Bin 0 -> 128171 bytes cpp/resources/bomb.png | Bin 0 -> 2513 bytes cpp/resources/bomb.xcf | Bin 0 -> 7211 bytes cpp/resources/explosion.png | Bin 0 -> 578 bytes cpp/resources/explosion.xcf | Bin 0 -> 3275 bytes cpp/resources/player.png | Bin 0 -> 10415 bytes cpp/resources/player.xcf | Bin 0 -> 22248 bytes cpp/resources/wall.png | Bin 0 -> 410 bytes cpp/resources/wall.xcf | Bin 0 -> 6511 bytes cpp/src/array.hpp | 202 ++++ cpp/src/log.hpp | 57 ++ cpp/src/main.cpp | 885 ++++++++++++++++++ cpp/src/math.hpp | 88 ++ cpp/src/test.cpp | 158 ++++ 15 files changed, 1399 insertions(+) create mode 100644 cpp/Makefile create mode 100644 cpp/resources/archive_org_bomberman_sprites.png create mode 100644 cpp/resources/bomb.png create mode 100644 cpp/resources/bomb.xcf create mode 100644 cpp/resources/explosion.png create mode 100644 cpp/resources/explosion.xcf create mode 100644 cpp/resources/player.png create mode 100644 cpp/resources/player.xcf create mode 100644 cpp/resources/wall.png create mode 100644 cpp/resources/wall.xcf create mode 100644 cpp/src/array.hpp create mode 100644 cpp/src/log.hpp create mode 100644 cpp/src/main.cpp create mode 100644 cpp/src/math.hpp create mode 100644 cpp/src/test.cpp diff --git a/cpp/Makefile b/cpp/Makefile new file mode 100644 index 0000000..d6b6651 --- /dev/null +++ b/cpp/Makefile @@ -0,0 +1,9 @@ +all: test zomberman +# TODO add extra warnings +# TODO linter? + +zomberman: src/main.cpp src/array.hpp + g++ -Wall -ggdb3 -lSDL3 -lSDL3_image -std=c++23 -lGLEW -lGL -o zomberman src/main.cpp + +test: src/test.cpp src/array.hpp + g++ -Wall -Wextra -Wpedantic -ggdb3 -std=c++23 -lgtest -o test src/test.cpp diff --git a/cpp/resources/archive_org_bomberman_sprites.png b/cpp/resources/archive_org_bomberman_sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..1bfde24cc2cf9dcdd45e89085d6e3697c811a035 GIT binary patch literal 128171 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
AT`lh!r>B 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%0AMnqOQ5e zuju;q@NA`)>py|p5WUZtuVJiUfPY#_mdR>Ou3qAD$f}sU*PCx)IYXvR z{7QbbH8iH~(1#OnEB|7-xl@JqQ8b>vQ*B&=wtB7hdNEbt!F!*Oddv<#qolLP!Az<$ z)s_JG>F|~iDYJv*CcqDECC8iEAOBuWO>mq0spdX~NiLmi>Y7=aIsc874Mv62^%0>R zd;sRB+0@mbz9%zsKL=5k(Z2jZCeAgcU9s+RP_GVtIbRwNaRPymA@y7h2F2SI7bobQV!qjG)IXWKG=ykD57%(ae{NuKY_b5k~-Ix0fi`? zj&opuOYjMy7_8h5XGwiv%u(nbHsT;)%GNH)otY zsZD@Egy@;V_x1DSD+8F))TG@Pw6?azB}Zp}I~|z`pPwS^s;+~#1-{Q!Qwy>^EM*CU z)yh*ZXl036j>5GYt;5-LhRKG)vST6h1^nN23U(55P*S?URqI{D4c|vSRZE4?%2_fx z<4AVeyzO0ysp>YqySmGh(C$uNamYH|G2 zzyz2AXjR;H=Dd~bbm(lcxPN6MD#z5gmO}8#{lMAxK*xl**oT;|_77jI8+3+5t70Ro6e2X|pFqMO5 zECyE|app%CQA zI-llBi-b^|+bHtHuTyA^eZx&b z&FJ0Tad#-Mve|FLTkb6wm2UZ=X=tDnMiBYE1RwcXBxUS;&S=%oz?#wD_CuYg8M_3y zf>R72VwF>J?=cyp;Rc(Ui3na*K6MYL16gOFQmb!L{#^ka(>&gCuYV_j@`avPpN*0jn`@fyyjTYw7pLu?B zq|0mHX9VW$qp`Jv`yFYzoak}|6lmcIebrq?)`_4e0@n!#9yMM@O#QW$QYzmDyv$b! zu|6Ru1iS&|p0I=`SC=F#<`G!=^IMQ5Pc3jlSdP>*MJ4(u+B z6c#_VYrN}uX*yUv(wavgN5WC{#+mby3CGGhsbNPoiTJd6>M88V5|NX4W%(^;&9j-_ z25Yg#ILkPF)-)<`@Peq;grsmmaOWl&Tj3JcV$ReW!nbzW_(KY!+vN)Jjt1Y zYE7sMFv1;+!DjT$`Dfvy4yUJXV6=(l_=Si_nRa8T1r`b#DF9=1377M{qwjT4Y=LvI zJb-{Wd%qHuZGWM#UWX{f*DfCgmpGhu5*S|VM0u-YFPK|UCKq#L4A}2i+qlg+VhsFZ zK`vU?m6FHT9k!~<5X)zV;)zBL_aXjH`SZa_*sMvJtZQHjLnwDJpt@fXpd?M+b0cFN%a%e(l#x+-y{ zolm{aM(^um@RpLPTyYoesJf39-`8L%%um{?T`q!mPkxfhIw;2d@l4uP{-bueDgQ|C{a zCpVhk3??F05!OiCAC6hj620Y9VyqwVu*^w1P2?L(bAFL_{@w^tErG!fVO&k=AZ05l z%|2on@sK$%zf}IzAxGLnIB|hXwb=&Th-@+zG^he-5ZoPbWX9Fyz|)+G(aO# z0?)eT2Lh{@`wmUqT)$13`!#O9H0}2dRjp#`3W*gOWX!C3ih{q|oh#`8--2~Y35fO} z+w_8aBjz%M2EMKDZLv=VK`K^fo5B6y&+ksYM?fT|RFC6Nzy*{XoR0U<4~I+65~<2K zkd}`6#ywCn_Yz{#C1l`*KG z(@of)XQ3M1M+()r(_R8Xn#h}p+tBCm@0M1j{IBKzeP0x0+oD(!E=12^`< zans<0PeZ$;*Td3PKm2(LbD0Xyuktd~5~?N--^L#gsFiRvEC4ClbGp56b zvttIE70HG1>)~ZPQ?6BBsyU-Y8O6sHW`ye`RNL+2Rgt>fv~)^3w4{VXcjv&+-SBRo=Q-y+zjIyZ zKdxb|z1OapweEd?KR5LoX)&E+;RK^3w`aIM2N4Rt&I+k0mFp(@5p;5(7G;Y!Sm?S^ z`Vy}^OCvQa^^aX~aL%Dhj*Tm@f_BG<48nnUv;s<5XcpV^bjyh$`1EKs!X2G8=!nhh zO(KtUeUq)I^l7<0|G-WEB1vw(Lt9~T^NxjRf^Aeo=feo9=Zv+Gx(S0uo9rUvJK6ag zU_QLAIFcsNeS|lV#6MDX7p=)9GQjz{`my+M(@oxml0BPgtXxK*$n!;GMqmY9S1#_b zX8^U^o)@^`WCDmGd(W|9PJ1sHhlwQu^nvy3tZB7W9t%;ZH^&iN`C}%qj$%Ro1gnw* zRwKZ2vT>(WrRc9S@4uPfKdReQ0k9mR!rCjGdHrvzIKj7+O@Dhd+DsIx2mLDyRw@A> z5TkJ`PUit1_;ml&cbzC4``aUKEj-Zezha!fOV7Eehi>Y&vH!M`NvFkI$U_%cn;U|< zvN-Qq$ja_pmsR|VYAG94f4_Y$NdJ%Ec2?9@1}dOA-STraeUszDhrwX#7g{Ws?8^7k zOKtq68<-nZKloxY4_eyyo7M0VEO3a_T(8qQV}Kbqb${bt?wtwJ%1)(H0Jy6{n3+Ni z^F{9*U_D%qhVkeP=iPDRdJMG0i9(uRu@#K`!gRyVcN3d(cSwFWhEzrr;4btNjxE#kO^cYScMd#KWq7vScwhxW$4g%Dw?B0zIvr(svY z(8!K_9rtiewLQi)_JG(oQI~U_Kb7Ze;_ienCK|Yjq{LEsSTGeeo>#K_*I8$+^+0BP z`PM9L1noU<_MYatCcYVTMFAxJAew#)KRVoaL++9xZJTzCL_Um4w*%{!71)+Vk2i|A zG{L%<4lC_9GWe;d73#z`J>T;bB`EX@UMqds;5z?DC+K@PWojU_o~7QnV?G@Ez@Jd@ zkp`NguL-(~WWI1zo;rs%>kD~sfn}2Iy2|j)-_zgIA~LT2_Y7HK1b=jusdMsJ7&D5d z_A7Ck6)6a+bwu2-HU4B=Txwl^&9+V{zdSd#qmIavx=;XTQmjzAE}HzA7MW#7WOvaZvvuGWqj|?{{rDgGcNwTZ7a*wP_>T z3U@q_CoB?!yLvjd7$* zRM3omoSz^3j$9?lH*VL)6wzxKCg}awVmMLmf1=W)+rI6M)SY6J02Lw1`fSymaAB(= z(B19C-TbPg(aov(#XIvOU%+N@AI;l~b&1^6rp1i#(m^C(O-3_+j-W@Rr0 ztixOk89WC-a8%XCFDVsjp$KFk>sIWra?DGKk|<97#q9!>px??k7IC zJU&nI>QITyvF`^H*3!Qtu~X|9D9TF4tBuUR66}T($;@pU^rV)Ljwy6^HNmW#m{zn* z0zQ*4eLmH%V$R`90}N zbBkJ{95t7V@+qrL6okSjhR5WoT0Xi;Aza{0D=PnNvi$%vZgH4ydAP^#DWm_!@DVdo zisqBLxc(WpA~Dl?0vLG;U++I<73+zyUZMoML~ znd7-8uY5Foj*?^9Lx2B0`WVuQn!+DA`nmy`my8JZPNT@PX07+4xWv7B)v{;?IPPpz zfaUn)`eX+7;a9*S`7HiNzcp%KANEW*>M(}JO+^gwXmuvFm&&k`fL77d(tQIHeN)-*8 zC(fIyI;&>UPW!K)27|N~UgM%ilDt*k5-JHD8Gc!53`OPaS&YB=VQZu60ARFYS@9Nr z05FCqy2jNCk;n}_g6k1Jj$3XVn<$#d-wmKFyMPAu%{R3iK?_e`Sl}5=^3#1M6uN!( z3byhKKYlG{&JnM_Qf4d#`T7uYxuBM4`OB$Ta7(m6;T>RaXGmp+LBs)|bx5>G7%ssn z!*U2Z9YT<NwpOCDiK@K@h0Ec;m6TU11w8Nb6^0z92tYP&9MR=ltoHB!zO>kMD{+eLs2{BuZ{r zZr?D*vBTaAk{rZ|jP!ytN-z%Vjc2^6zbrbK)R9ubtS7nH025>oXmT64Byve+8nT>P zFLS_tR2_!ztm=L|He)Z9gFhw_V6JAa(97=}NsuKyXIN$wd9nDywTfsB>Ta|sOSN_~ zB5@6UT+ee92-UMJI)K_?*mZz~GueHv3y_vCdHTTm7VqCm;uuy>1U-Ghg0bj^q;$;D zI zhN(R^JqC~Dyh56leMPtcXriJcVv)Gc3&&oFglc=;$E zhgxy|tSUIP(iZ`~j!+vQ*44|F(;aBp1E*~6#6i$^PKyzum zL0Nk$d~ROzuykk!Tfa}D{Og^-J}MV)pdb9G_9Q11FMWy90LVK~rXh)6;KI_~l-S1B zZQ;1OqP!Jw*-9I<#6y#CQxfIbXQY<(JpORU3cUQo%1vhz@h=o2Rxz;*x*gWob8b{X zecqTOF>ldZhFl-V@~LZnvJK+Ebu8EavG=N`@fUD2YX?tX4GprpPGhF97w-G^o1!GT zm1}~|^-^Q}i5S-@ThLIz?~K}7in1V|dhlkDEZG;iZk^_i>TB(ED+fXtp@&Dk#aT`u z(k;t5t-KRB7;@bj8!a2FLCD>O4hW0o0~T?Uqfxkyz9;*a#eqDGkHCKdyFX&*42F!@u%s+xex#&rKOHp^_Hl}B zg3`=Q@j)B02;@CqODx~b{BtKTqdd37-0UrD7Biu+-?X{tD3jljdlqeIkG*rR&#UsX zXcH4SKDN`0)R)KaxuC5*DARdgvdJ1-o`>T(Hw?W|`_qtjW?~ngs{3`Ui6c~IV5rz; zRl+l9#z#p9j2zl!?3zA0ex_*woV`5jH`St2#r8?%brUI2GnEg}JohIXN75(PN1s%F z#AAh2uDjPJtS~Kwo(-$=t%VA8`7cGxqR>Exi$0~=CE(| z6sMVx*f=lNk@Tk7PI}g?&VT?l9$tGg4jQPY) z+Zfh&=8$-O9@j)i=6*QG73X5dE&Ul1a%Pq*Aum(U>u(|{z)pPE09XADhrd5|3*Cv4 z(v~PEb?;;9`ut{3Qar4=Qb3@c!qi^arx7+Pe&V~^N4IV%%`&#gWYSr$y5?!OeumnNs}P= z#o^61=Z2o`!(2?ghV4@1*%~ZrX5$IfhVJiEDNMehaZ~E{fvErzNx%6|%wIJM@+boM zrsz8v#G`_mzv>f|66KwcovD!Q+awJBHC~YSWWWr>-M?B0h`C9^wvQs{q-<^3(*~C1 z%tez<+36jDStZY>9cO1tqP0+AGn(j@m?CtT!2Yo$p7RF8Rbh)rmch=PDFks+G0Ses zJ&f|Cd(hG2Y{V;^WBXFM^cku_;7T zq@+L98U2Po*6(SG_@n#QXI{mRdbe#|kQ~#iZTiRg8UJ`Dv|B9Z2#(C~0;(<*t2eA? zP8&w53sn7^G2TJXUYiU~m)TtqP6fKXxpyV`5?&xaZnAF1C0?EmWm25PJ7BfnJ)YbQ zmM+hPS{z0V%Ju2;zHl(eq&Q-ayt^=a%z}}WZ;;9Q^ZVBJBQU8Mw%E$^NhIEONUnXi z_1`=J3B|kDMn2AG-0E`~vcu778a2apt6a3YBbYCdo+5l-Fhk6GmG(jPGye7h)^KA1IpcxW|w*ma=KtTnA%S2TgJ5EWKP7;bk9F@>r3L(}ecN%Oh zaJHQn-5!j%r2O>gGyez7ty-c=b;>C@Io^ z{^5Ft>@WYph3}RtHf{|>1g2NKCmnp7rc4A%*Y0OldMIH&!r$CFjWxDmKn&<$uZAOxs{5R%SQTpf4SXO~ zeQIgOBZqe&(Ow(CPYi%PbU^h$f9To#3-Kgo;D*dUQ_;V@q{XTrF_!m$YnT^8wLGk# z7vJy^m$l)q&dUJOm*jw~VNq&^ai5HT&u3(ET2fWAh1xaWc$(*@uEVd~`IAo8@2Qf& z^q~3(gi7BPF@UAtuJCq$fxV;scU?^(Q2a&)_~Sy~KkiW^Kxat+Bmg}b$uATF{{;e^ z6#@Fd#xg%8;L-eNm7d^S;jkJEtoZGie2JP_faN+64DgRGph;}ikwWoTGBA&5G)fB3 z(aHhd1=Hg`x0{3fn_TdZFpw59>G1LI``9zGRn3v+_Q=0o8nZ7{PKt^CjX&@KKG4%B z#04f?zy>n8_k#6V!VUiJKY{PvPsjg&4FBxYj@qE(pFsor)RQ^K7Wms`FL*_IxI`7m zULZvLIVoIE87Q}U>g;T$;dBX}9Nvw}|E@n_Q)XQML=E~Ezjbwn*qisk3tV?aafC7> zZk!PmtxIM4SCPp+yVeF@&t3g8^1l*MzmmK2kLjUdL<%;{4-;W-5e|w3xOts#Z>LG$ zgUm#*PmqxFyBgoX+-Nz!fofxXf6?|gm-?EQoTBD_L{AI_zfMHILe2aUlv|uL+Q}Qi zKJwbU$XlH4TVIAq*9)bNL|i!ghlyNr9Do!Uavc`5e>;Cr{0x0uyFn?PY`pzkW_ zxH-08Fcd&LL^$j%cZBSNTYMFo*D{Zq<6MKGnQp$^9iudB-xRC8sGJ&dW%cA(L&tW@ zhF(spBlsI^iQI1vdon>S8Nw|Ys+^Yv-iCWzM_MLM?O+cvH@EYH3*Y67yCG@F0zixK z9V6dJRh9NwoELEcYR)ba2lpGjRwR?om(#G$n|SL_8eB4jULn7W8EN*T89s+LhJ4$@ z9CambcYOEu(Iw_Xo2Y{xO1u;Bnzl87g$2k>}@@9ElcgHGbV$bn;t zmV4}$pRO(RaevR}yzaljkRqo_upcfE{yP+fM)Kci_TuyM%lIYnM}{U&1P1G^p0Y8w zJJRViPUknW)D0wh-~|0P4K_nV7^VDPRXU&kw3ySS8vwP?aed&OQ8A&2FnSk1uP9_o2L;~GEgQZ? zyBvLucyix2k?*({hW}?$aNf)51>0ZR+lx0xP7-*Mg>#vLQIa|3lWm9%sOP-u5jcIo z10?-cT%lVto_|KY4Nd8p|=0fDiqb)J+BKU;l5GqYiF zv1u2rP}2J@>5JZn4QE#&a_Oqc%Mno%5TmKlyy}i0;2fZz>Xj2ch_sjDM}DF02fr95 zMKYwAvVTauJlisnrpo^`t<}$D+PY$cS(eo`nVDXuj8w%y&df6)e=1MsJOK9u$r|a^ zW{@J%Nm=x~ORVET+YEnw1~z*+*CY}Ln-=@jqEfi1A8Ut0Z2GCf@&}j)1&(WgsMB>= z{gY8zaRpK*^^((uz~zcUDTJ_^8Cml@%dU8u4QV!0U|js9&J<}Bcb1E{3@ywa?({?~ zXWF{!vWPH%lHS}hXW}4s*W1&e7LSmMo7^Y15z<%r=&zGPvxA}j%2yJ!ifSF%d2*$_ z$&cmEp1EuZX=gTXihdYI)+LGlwNIvv8M%5p zI3S!93q)c5-^^f^q`z45Di!WJ2Xzo(jyZUl>#f?z6G-MNdTy^u!vjk@M8Ht<*>wUI zifQfSsAF@)4Gg?gwExMY`3vp})DZM~ZRip$HPG*;Y**WPw3wH7)l;b%`DvsjL8rq! z`WsBIL6kY@&BYs($(`{y)(NVVoQSPRFjF~fus2McY5_ruDE+~SbiW5izxB>5-}Y?- z?Etm2rv3t>E;V{-u_Nl2T)|kQy>>?~4v3U8SM}^r2W!)qi;@vO&G;j43o^6SB zL*uFSTF>+SkB?-2==UtL0T2u8I*G29Cy;lg4{YZfOgZbPQ{4%$l_!7424)~bvVYsf zlOVEFk&M}t%9EREem31P^?zA;TSjq;DXgGLH%ccyvsD!gWEF*!ICEG66JFt}hF~~X z4L$};QWm-Mk|AZYYLTZOY$F__b?qzH0YAI-mDE+CO#iuECl%TDI;Z?I-?V0O%_0E~ z+#42MeLC84b4jU7#_WQVF`WuXQKX2&Y{PWW`PdT|9O#~Y>j_G$X_wz#Y{7#))A0Td zl}IHVW9Fg*wE>gWRl39-&Vj(*~?lBC#K;=RncR?pHRq@F0#1+cY=uuSlF zdoaG}=}f)ILMD_q<&Ow~=@;ls97Z!a!y=HLP|2P4fUL{;Jl0tFRwlQdMihI#=IbwX zz)C|Gw>poJ%>PZ|@d%oeu=|Nb`a1#e@bQs_;^|Lk@Rd>QblMu!ACfw7=;cuUX+E}8 zV)CfT9h;E3hM$&kA6sM_gvICSefCtFn_ed!xn7i|9aoAtcGVTivAfy*@rKA~;o_>^ z=Z+O`zsK-e&Rz=7?Kcw7@g8+u-%5HPf6hGXb$46g(KTyudv)G-_^oxN*SPc(D}cWm7~u{K}CW8b=)^%^KAU+*Er5EQew zkwO?vIjorg#d0fN!MGuI6^>K=v~*vjb$En(&!_lvLw9u1PbQa44S?%^kx^A51afxHYFjet%plmn-)TRUsW>z{N+Hg;Eyc&s+^XaNn~u z{YKRqXI+=5vbwu3vaBH5w9=F5NeX6s4xy7~loCGr4IkYy7f09n{3Wh-%y(kv*M`@k z`^WKL8v(hO1Qj4RiPh&HL)5Tcdi5xNBdf3iSERGB6*y}%s@T9Y6v%bTss<;lE^pT{ z73!h-M#An~GaPC&duPeY4xPCWo+42CfMsZu6W(z!;EXxE?UdBP^m=`tkoV%gR6>gk z##_THX2DfN73o;r*WA`XuL}!H2L$t|H80i3wU2y)1|eU?i=V7jTVhaRw$r7^X$dia zKQVW5^lVE`rz`*mm{*@ogcc8RVE@K%S+qNbx7(`8nnPie%&g=~b3uAZPo>Z{29gQw5wQL#nh%8dG9%lIocBRN{bAEzwovV}y^#|7 zn5DQ*99q*jYWO8p1v}NeC_wK`^6eW}inbVYEHs|FcxBwq8{(Mdx9=QD z!(^p)DGim5=|U-=GQH&J_hZ!06zcrEN~kT*Lw9c?tL3&X^AU3POL0$PAo*&Q@q5 z3gEDgXnGS2>2u&PZmp!e(uFI!CSWko8&v46d|vUGuTm#npN;W2Xsxlc{7T)YIoWF0 zoAJfvMciP@@ZPtGxq_I|?~ZCJN8lTr6$t0mwb zpA0yCh$KPxZdNWVw`gZ1uP1&3c2fy@k;tJhYkIi4N`ST2N{!Gj_Rz%|mrE+QO4MCz z8alt&Ui8wvRVyN>b2&g?u++mQeSP|QSzNRysPpUXv0Y5ybV<$52dXTb{bNLoylcXI zh-#_aL~8kxwrRy#He|EK2@xPQ7Zno(quzD$Cv;hZT!Z*v+osXC8DuXmz9(^rEPrE7 z%wWvk{KY_U$TNuMf+VGR>3y?;CcgPCZ4D-~mE3!%GZ;6Jj~5E{IVS_&%_==7CLTVn zT&2=YnykIMxQqTdcvZd%gXg`i*lf2|%IToZ+K>7mpFY7ZZJ#MFDjkgG(oH_e-rMdZ zDxmpiv|+u_zPfG+H{#pE3jt_BdQo3G;5fMRNu5Q#^}F$=zQoUWvMUX2=+54NNC$GI zHQQ2NrabXe?h^mNw%PBLOTmVV#3n-->8r;sK?{#Uj_452?XLuIZ_KKF1h<$kIg5J& zyYH2C#x-bBRg*}rE+bZTtzRCWsE{YGH7c-^5rK9a1IPhX9uUuSqBu7i<^p~=Y8`7S z%ea-^B8r66kGa_a5Wk*5zzZK_B}nl}4zL*tmzk<^oUCR)#pKrd)Zh$KGLebY`qp71 z8iH3gX~jp}_i)z4X^y&A2se71s%}}Ivp&Bo1;>fW?W7K@_DYSE${_t$*HWAw>-(3@ z&b?GjSJO-x69cY{U=;zhUv2NVtoqsP_FjIx|1f$}tL@A(XkjIsp9#QcjV6WgNb(0!D$(#K zIB^8csau;By8%dy=rohE9Q~E}b>htdI1zOyo8Y(JZiv!>EY>%j$Eh=K8!6&Zgeu~o zg@JAdBOAV(S_clDV4pUu$xry%Ef@Pbam+xpMB;WknC(;2`IdWwYycEW8jyqk~{q<;R9~l^+cPrSz4U;sS#;Bm0*5bFkSHT038xV z)a@rUA@*um96Tn?~4A~c};GI+@Ik{$!4tsc}ldr zf2o+Mhlhh8&bMpQ5C%<-^wc@+MS=x1@?~HLFZS)81rey2-T#*F+WKL2M19li5Y^-U zx_wL1j31ew+MK$P>36Z)2H!3d1j-0tzZNXse>mUy6Qm!`MHqD=Gn7v(0?6NpRLqOLJT*H-^u7qlQA1!3uI&$2vb zzwLy6bPb5;SDuQ#!W>OxiJMx;56X&jy%C#he(*c)M$V<)Q5JfC^H}hj!(1>*W{ZTW zU0hL?4`w{7Uf(_zs@wzTNXLS$9&2gAI@zGlU-I{}>i#M!5Vavd3c6-Q&vE zVjt0ws8$c$Y zm#QTN9p%+=xQ-luj#1PrFoinMX*b>g8`2$v$c3$ml<8%6D>?Pjg`cBOKb1t2(YY%2KxI9lq3M3VYl8I`LUqU1h!?Iq3K z7xd=8Ar;M#r$Rtck8-xSL%Bo^$TSHM{5EcJEA?Gd3&()+ZG>%3N_#KH|Ec)V`b#}e zQwCJK!58&m2vS7^ki1~0>Ctf!{C~6pc(iz0=0FB3&`Q9%;K}MgJ;Kbe8A*YzeitO4A81Hogu>hZ;$`p z9RDvT6E&jwMTPRmQ|y{Ru74~;3%u>^6F@ymnW%qAAP2^b^e4bbLW=!QjSOpO_uCRc zIjtXjJibtFLLlIT7$mr`&TK2yye5wZARByhee1t&9E-jRGNf+O{mp=`|^mR ze?-J#8L!uOcDq1fG+>F$ums<6`6JVi5xHlew_@-j7Q%i|**Uh?nQh-Rid$61R7?nmFX1fo7F{Kvq9HVl{ zXebry4hqQ@m%HhKe|6fUROPw1uaKE&|8FQ;>wPstdkSw1n?J&vs*vD(;{-S)#dlLf zRs`vL{Hw&-xC!;kKB`C82XXMECpW|Q{3kr%)yd_)@72;;@6=bJ7)C0MO!YP?QG8%q#MhP`GK)pXg5 zHuc|40fJU94wixF)eJ+mzfxz|!(uN{;AH<`~ilSjys&(4y!WrxwE6MP^ z(qO8!I6vyySh?=ruiQ|}>d78{F=1|aU?Mju=fcL%2uMrj zKVc|*p3{8vZmNWWeVj4BD^dc8T8%6`b~jj}v_va~6ehfWFZl$rK~#y!^ooO5TjU;$ zF|xeWQGawFnDS~j3PFYcX9aWwPdF%^h-`={8AJio?PbS?2b+o;@sEPkff2{M(^s2zr1RZAdDZn{)> z<5ka=)$}-Z!e~^&woAW>ST8Ly>PcQxCC*9oP&2B=Dy3Y{fP|Nq(gwHH@lFC8B;?IZ zg-RYwcvy3j0Jye}72FV~?2bQX*fo^{peupV@{iwT^qO^1_$`G?`krrG)}Pd;7UW=HU@1yBn>Ei*~c~8#3Ye$#bfEp_#X%4;}WBNNLC! zdz@Qa^=yuOp#{iyROK}aeaP1-ajWZWdwMC4;Crw}F%^ERhBp{2IbXneVn{_tHE|aO zsznX@bPy-{KQy*rp7iw7oT!SCv$2*oQ< zVi5oe+&)s>sk3s`BF!0kc;90a=H6bjGrl+9y@{na>yPCO;vfgF;U*ClOeoS+?8?18 z+Q7MgH+-{z4=(TTmBRmSVTg>{a0;j7G{0SLY*ac*rw?)5m(j;h4DV004BA2(+5 z73Im@gBFhB5~QW!R9wNyXm9+{yvsSZ-HZQBMZDWW%iuC6_~g#IZ$57OP}0`Ot}IS% zjl#S`;gnsdz%j8lwu2A##Wk0c+Hkj3dTqI|xDJUg(hc@_FqKeyWH|bHz9+N3er?bG zx0r-Y1Xag5{98JipP@tmiq4_;k=Z&WiP8gt!4h&Xg8`@JOKU8N2WFw1AuvRx@< z{Nx>@Of}Mp2v8-0m$SvA{{~-^^d(d?%s{qYjqXQ)?0VMv zxq*Y;Dmkz7y{X9Cf;p1PSEuc)>>pZ8%C^HL-&4=ci|lDiDaHT~l^AkO=1*kn9D9(c z#~t$l2m8GsJJl23$6ML}*_$I3+vD`6U@Q}16>4)XMUuZkP*ST0dA?noBbMI#@ zGZKZJY;LCYuZq}0R6b=~=Lu7tOS_Sgl~936tL*;saRZvjyC z(^t%S=<&@F>ri*{JOmMOT=`Kel(HGqFd&5Gpy3$aH287mFky@!4M=cU#5gOw**$@DK%R?ECRx2m+lUcB&+Zn|t2TlZ?ZK@>>$ZE*z&7-q3i zwHYo;>N`5+Xge%u9q=38-?#Z-sC`ZI^w!s(@R)d8YBEf)SeVz}w=t@577774nxA@0 z0-#CiyH}QoD@#@Y!hm7cqnLgq021IGb=sK4Is)`y7LegQ7h<1YuzoUxO~VZzYQ5pb+coWazM?_?c^+Xp={T6>m1sPUdQAEB z`d~jadso)-tX?mqwFwPF=7g=4Ub}u$8j9Do#R~mSRn-s$m}&XKwbh#-$WxOpvo(oJlpXwBgE!y>gWRZ z?%H|!MBz9WR_Jy#8f2%{;CGek8Q22{D(-&OSiFV#?9|IW<%L+~;*rh90gfn}i8D?3 zWqL3xd)2!p(joX;de-1#uqg*3B{aI*f+}^rIt)RKX4*>-(${{jO4@X2RWz>vxLH;# z4cr~_TFUh9dMRqwy}(jdjGP>qo}RBc&{j$t1cW;urdN~DdM*2hJE<@UXRh5WC#jBa z^a8K~kFn=Y8y5}DNz{zjSYb7o_yH$rp?UO(Mpz5tcd^w{Y`{^VZ)2_y{kabzbquzqd#@ z1*UrkkKq|-<2_lW73>)tenbq-HFcqMu6I9<6;;M&j!EA2?w9uM5maKI6Pwtx)2=x@ z_}0T&tC@vZHOYMJ+1$^4f9>oei_Lnjf;K2l5e5zt^XiuI6qKZXNRuP15|UNAc;$a` zGAzrXv+~I_0SBFBphOp#fbf;uV@j7SlQ=c`YYcuna%g@|NUIq5wBtaDnO;9LzUsI7 zGGqe1Y`DXQl-EZ{|A6Xp7Wn%1FR>HA8gxnO^86Gx$tJVp7!MI2?Ixxn$9OlxJT ztial_PeiH;vW$6&#!*uG%&?wMW$@8rc1o4#01cnZW)m#0QjjR&Sr+I1k44_m;bT-U ztU96gd&GLx!IY`+3K`8>nkyO_OV-y*4qtic5+8t7DeEJ@vDWgL2Z`zBeaPtb-Qeah z{cIQmaTrO%@c-ly*09vW&i{_& z-{s;LXcVJOI{I`xaU}tAgKao?YZ{meXFWxlm8io@`S@1Ty7!ENe{Fv6lnfot4tn?$ z`AA<8k+R5_oH~GktRordSbU2CGX?+-Y%n?F6h?>S$~|x%0EOKer`LpOJNC8nXu4}V z%DNVLOmxe7-N(Y@RFHIu*}2I0qVdkd4$kKKwWjLt?%OlPtIlV3&P9rQb#2=r5Lt6@ zlRHv!mm{sgr|==Zg1qAUp-I_wRmDg$+8+5I43g_MCzjmTJqOF=<}dZj;L z^Y$$r4%TP}2vuP27+*&MF4)Iw^lUNC{8`(SFksJ-Tp)zJNbt%y&4CHcpBMDWx9S)S zbjdm6rBJLvcQb;507Q<3N?RN~QgT9h&ru>!k>@G9q8e$M{Ziqo5*aPn)8W$HH(Yxo z@!+dlFO=~c$59gDTHD-KiqJ0?;^ZRSae;pLYS~7}Bs?}Lb{wDcwV0{Hk37cbg4T+$ zHE|Uoyh?s@tvWDpJyWGA5zK6y9#gQ~xZdj-$=@6!Jd9$nz)xY1)2xdA*i0X6lW^SY zrn0pHcgzf9C+yVfw`bdCo1cOE#-&gDtO->`YS# zB|*P;wzSMmff#}7c>O50Qay&B4QuX#hK-c2GU6I4GN}#1l6A_T`k6w#5vRgmUBfyg zm>dX!LA#x9gHu(_Vve@l)LJ8O4KB%7=3E5Ll``Am0U!5)9|o&Q zCIxD-$Z-YXkE1{Pf(E_nnmZ$>&Xxfl(hvs`;3PYRH7fD0{q zW|kk|eBr``7#-)H?ySA$R)0ag4!Lx09u-3iZ3ym(q%YY2$rj4awIR6D zYsj4p2X&KAYe?zcxsaWmJ*>71`=Z5MparpZbK0YE+cgFs!D&sIfHJokQ2qTT8UI{3 zph5Xa6`r}`0%saPy*LWru(1w_CIY}F)nN3$I2Y2JsgVEKh(<-!YWRON`SSm0B7Fqj zV~xTGu3;q@L+atX&LQQGx7ZP`tHTew{lXl_-u;tUN}=)bmYYNPDaH(zmIH^T=s&Ek z|DB3DD~gZ(_bzybZKMCMW$)kUtiiu_y}1Ux%%GtAfBs#=`ah#dm*z6`>V2q*{@$Pf z`>O#si2s`_RxgT!bN|ooEdKKr{@b=1JrH)iD7Kq-_)nq&fYLncbq65W7>4nZ?o6VakAZp8!)hhB(@$)S$+kZYhua8I=U&J#ubFF33X0*rHlaC^U+@fRE} zb>Xw8p>hrcB0oarFaq(M{~^IP{yGDLnP@}-MUs4Zxc=`jK%_n&ae;Q9p}^sBB>}_d ze|LF62NIZk{H^6Lv-KBz^P%-$aq=ZX#MRejhYUKkvuTi9v{$=rQJGsLm0;)Y`LFR% zJu3k^k9B;7E71tPxtXr;WL@~wBu7Im#C5SboGX>qjGFDoOU=^Soyu>1dUjNn3(@x+ zQ-1~E=fb-Vp-e-aV7v{3Y>!(^1@Rq&LwphUOs=A@I^oQ3*5^M}8;|Yb#h%Tiys;IS zlDjmh8hj2qv8nhd2Gr+V7)@7*iy%)v?h&L;+H>KC>a&!q#huYwk0>xa8c%t9UN{e= zjH$ZRvQDK4vTs@x3%OMdtE4jsaovzf4fDjxpewJTUWHXOgl zi?L2|`5mb-p3kK#okRnabgqa~3df;SfkF}rIkH1Y3nwhOOjW(grpr6Mzy6_Xf9@LV z-)D}tVBx<_(bA~Btx2O zC~csd*N)7d8tWoUFL2#@o$u=A=9X`@ktVTQI8ykWIY*dc^X1Q8Si|px@R>YEsDDf?>!Ew5D~hf z8an(Fhw;!fJS9zsWU)z_TrXDSRn)OTj4sx63-zaiilL3yAi58@Wd>(uA4#pJXDns& zI{PL#YSrGTYWCuPuUZO*>U$=YTTaTr2P492KsLm#yl@3!5CrfgAGtsmPg%hmmWlw|xIcA1qi*KM>99XH$Yx=vV zYGKPj%I$zWlY-_|odl<~WG$hr491~hi%9KgPf{dp9_!&?kOKo1Nrel-f>D4=34#si9~Ih*@=6H<_8_WoB}Em=LLBWO+5kL)I@r+QRDm zX@kqUt3Ogz7Xum~UmgCy`^Wool@sm^*$EUKyK^H}4u9#%txzJPz5vj;u;0Kla`;AY zX5D{SgH}FT%UYSY7yc%+1KZlL*@mYk3_;_*tkXpQ*<37_y(;Q-B@e#2X)~%)(J*Eg z``p!LH1wHlTF%(U!*Ob!1gCQS^6u{r1k5;{RI~Oe#=YP@!Uv2#PL~kJ6+gu?n+YHa zG#a(q$;|g{oie2u3`*+uQN0(`fqxzazR~XRo$Lluyb*5j9nY9eLAW{@RP~D@M~~*K zKS8_gV%H9ch%*UycEep-lZ{E!H$lD_LVSUFmqHsS&*6sOWT=( zeLNqGP^g>e{t1Fu9w;djdt2=yzt6%vFffvlRUmZ7tUu$RgGh1k3-t`OLwU|}tHJRO zJGK*D=^S5MzF32Z&c67%A=recvAaoEHPC+w)-znMdzlyr73S7ERJpHS@q&?6%kxJU z3m(A(-p`mVVIa$6sRz%hTe$YR5aHhCq)2Qx=FJ*F^W-oS7e+G($bw&*;T_LJFpwgd0y@Zy4?w~hGgv6P$qZ6+8t$`KAevO58y>LaBK6^U+d_q9!_!h@7{acg$X|s!*%Mz?K+BxhZVyuL}FlDU2 zH|ouM@l_2Y6~&d@8-A+hW_Qc-!4$aM^p72u&F?c?!fg5zP_x7>4J4gfE+08R|Le)Z zbsl8#^MqZ@b)4wwEyUC*5LzPQe^o{|33w^d$deiy9qb4(Sz$y8*jn^tOEU@bZc;=J zFMA=0(9$eIOv$D(Fm^fdB`%&LV&|G^OtI(O3h|f6$k}utVRRg-EtMx_$!BHtps&yuJ-KA_qw<|;5NBU@QkSD4;zVXz81J$#v00};^RIiBV0Q$C{cj)+cDO2{ z-WKa~Mq8t#ATAVkiMY+vA0eS)R}+OyHS4bfC8?{}O5f6HqBi4r!cPC#g$~u0RHm2~ zT+rqZy$nja;A~0ox@UUI*CkD;DSs(Vp^hg<70Bq#cc;C+hwVL*Kwb@9qU;>N9v@b> zYJJav5XH?~%fwVk_DayIJarIf9Sx;MNU~rcKXU`ep8y@1e69(i#$JBdL;Df8OXtOj zwxm2IMgdvm`sSOp>^JRPo^Iz^ls`{(1T#l(0x@O=s?=7S+7!k2elKAqoyUFKivkK8 zGZu~*DK*8@t96(shcG3~+L#<`OsiY5ifB&B3)#H&X*>bqo%S(u z6@pm-L*`YXv78~#Fbu*OFXXu7|`u`r!9iDK8TjOq~u1V4$EQKk9Z(VE>+P)h@F7N1~O8ReZZ6be>V}i3e z{MFRZ+|-5zsBZhI$=Uut&fYSvttZ+7E$;44fZ|p>xJz*;#fw{!0s)E^3)*6ZqQTw0 zNO4-6;10zJRve1+LjU)^5ASzBy^lHPWHQ;aXJ*ejd#?rfLL0h9!D5Gp!4!^yakQSbhM6)4^{{<62_ARHfMEj1C8KPtKfr*ec+A_u*47`VboG{gm%%(E=lN z)*QW?nS?Qxca|A1?A&u9;yH-A9bHIQ_t7z&i15BFAkw?z`7Gh7rbS3< zV{{bDf`Sg?cp8}?a_C;p+j)ZGO%%Io!vP2SgiLgVq7G)%^`H=S#21ItuT-o5X7yJ6 zoUy{!{My2(t)X8$bOWh3tk1GW`Z$~8g82Q-K6!v-|FX^>%*#oCQQNDRV);ahzB4XE zCfU96?0;G{TH>Q$`9Z5Jy1W6E5h%?43j*m7s=CC@<;$2cB)sdurxXdF$V*A6!zC(h zbww7FL*R?`dnBhF?#t63#r#rnLB^fcv}I|vAn<9_#o#7~=VS3vS;sx^l23HkkFsja z#=lWy!>x4jVqb1^yARC_G*gbhhSiBNi{5LcDx`y%ab}fG#MhE^!YfR9wllFs)4;Ai z(Jo5Kyax>NyIWfG>V@QWrG_EVc4IaM;5SEw zE-Gub?}ObO+6d2xzV^`Qug-e%84Yz4+eK|xb7(^N_P!;O^;?Xoy6>70uMn7(_e&<1 z7)w0QrA6sk8n5NtDJt#B)5vMcn`)8%Y?AG2WG2|Vhh-UG$Hgu@`uT5@!$f5!QfxVO z+~cg%+m=V%jGx}sNktAT>8g9>=j$5F2R+gf8)DusT7H@v-geN5R*PevsN&)Psu`6>1D>1xwXf>-pqEXwH_kAC=Wc zf#0l6%wG_!>G{-7EMP)0MJq{!;#?7b5^vQgoHW<(xHn!Jh_yq71k7YU=QqC>1DlZP z?&aCEOzp?&8;}9d_P(4iV|r0&JA6trMdiVxW`V^j5_b6?3lHya@1gbA&%wAYj4H#D zuL7{e$$cqdhmtAmP@2HcN1m(jm-bg|u^xSrDmQg>#RDxPLXhsd5KunE>R#4W#m+xy z+5Udg0rE~2$c0vV%7&_hL{WKqhNSt5NT;@M0|HpWc3_Q{#g%3^xjA8?PFE}$E*S;E zm4>A9Ze|2Y8XpSq*X~F69SoiSY>atkeAPq=?ZdU6YwShH$4Qr{=!so7xnfA3D&*XP zmZpy8i4+YX1^+4kA>SG@+FO^%@}R$%_TC!KdbNx2bl)C=2;+n8S8`CSeG^G}xO_3E ziOGbQ3av0+%(h&^oxI1J>OxGR=Er-ad)G8_kA1k8m+8l{e{`+y6M$gZ(6F^sUNPT~Etv}IrH{os9u`%CN zo}U+yUlLVBIQp41Y=u6JNx6J#rY;fgG`Y&PFB`q|6DAop7X}uFgD9D95x+*EEc8x# zPs~v=FYeTlo&)$lYT%Vi!_{;ji+boY3ux9@j6XL_t(o_&a>By%ym(e1>b%niG-8up z>K5*a+<+vp%AG{&!M(_LBVA{Lj|G3ZYn!KXnT!zyO2hN(23+kcbT3xN_Z$_+*KeV(iZYxSV=8Zd*X5#rwrVc!RpY%>^BPERkrZxNXQ1MP zVCW|6sbv^gF37Q*OsYr+gB%LcjTlX@(3I8lv{vxLiiDwlqEWC^r+2CQoj_d@cL%mf zJ(CNa^8la5{9glFlCZ;jHv`sj)!;!$hLuGP!#cSQVRtCr!eu-6LGohV!m?QkO){B2 z{Oq__WrxkiIc1Xjq289N!36+q`MxJUGBx$qvdoD4x;nwOiiXg$jZ;EEdNJmUi`@aq zK#vBimR3$U$d}#$Vr|GbMAZjZzaB*hi#&EZJ3`g9fn*WmQhoc?`%9oBMb6l-zGxA* zF{PM9yx;nVjc4{n(k`%Qv7EHUz|q&&1G5N*@ z(>v&vaccVqIM#Dy{JFZmqq}8KKWOgbH_yxfjy6mxca9mJY$S9&;J^(1mg%+T7A}LSTnf@7KA^C1%+!o z{s&3nZ}-B*CQTT{Z{NbPH8>oF_x}fu%Kh0g6-RfbkH0AgZv~7w*7n|M_2F?D_2P4ty5$7jL*5ORF3t$^9Nmw?PkL- zj+aUQOn8gZ1pVrH%LDH9%RGW}Yr&rdpfJS3X_<1_7`f?8Tv&8H5v0B!$o-y<%VAhmhN43Gd(Alu^#v ztLpo&JV}2oe*v*9`6BQ(0J^P6%Cjjm80)wYF+!Km!<8IK(+heVHCkQIWzAXc8rP>q z!tDef?92?$YIG5c*SaU?NK+C<5?nLnXb86(OIxk&GJaHyd%1)u!MRb6*kI@_*^hhK z?*RMpBT-fZi9c14KR1S9o5V0Ko%nDZBpcxGp!{ld5Tk4pa(hus064~3;t=_$3GDaR z!0(yE5zFIFZxAs}^E;;zPYN6g)ZbvTu+{2E8M(Ypy99$b$Jjo+!mqv&E$OJLNZgrM zXuBUrhpy;C0mhTZNXqa0-Sp^X5Q|q2+`itaPx|BTtt=*4y8^8TmGo4a;dwkyCX%Rn zNvw-m)@J2PDV~St>Ab{!A@{jf{Sy3RJY;^MpkW8oS6O6|3SZjF^eY zUK^XRW?3241dTp}vDHD+xca|Hcf%G~owQOsH@|DVhpvOXUcJZBuq8n)xQyNwH5G&w z8yhD`RWcR+aR1;PkSZ4afv@ApI2YapxT2=A(pyQU*|jZuuxV&w5e?6h<}@OlhDlbR zA0l>4ysc5#%VZ_UmMLS}DoLHeOBT!C-BJi_g8rzFXkEelz@%x4!(yC=dd!iNaCxAj z0U>=cmLX>3vFpt(5^*o-NATu@@}7Z9D&;d`%nEDnbbH8^_Z`W8I{)z1|Hy{NZ{hex zq7!!HQfT@T;`GIZnZmR)tJn!cGqe|JJ@&~|k7uUo4dt{&lpgA|FX4C}cf;e9K4sf1 zk4acW^L6b`alCS&_4Vmxw0;{RWXkOAo3=Z)b!#&f;oRb?GXz4IS;LF1*;!S9gHW~= zU+ZFv)#~p?RLAZXIOApjkB~?c)L)}t?B@P!O54`6T;DjuaZKi({_x4iC0gHyP;?o!ygN?uW9U#-(U zT97CDulT!$Ck7xbFkejT{f_RXdpf0is!RDadtmltXS4mZ@N~!%xK8F@g|AU^b@yrY zn5ZonbOsceYm&k<#DdPaR@Jn{s=5jLe^plPR6%12-zY=16Iq!2xz_^k>W_Aeh`^`g zr-$rwAkSUkL)cTXt43aT%7a475rN~CwNqt=PY*QFul)0FU|QZuh6bg)7@4-GMr$%|0!_PebC7W8s` zndQ?4%j;tS{mQN3N;!>NG}+%nXzHD8`B04gGvs`!58n=b?>U=^maPALD&M7DUZ*@`69bAHzgVaD=LJ-yseRs;(Y!m8b0evB}t3W_}*0XVYlbyR>`)Yw1OiKRtFn z9aBI7F7($I&Z9M?5I=%DUo4&&iG76ujQNYu)LMXzX35gO?)TNH@1|`prxS$a0G2pw zU2eXn+&k{I+PGGI(Bw8)I$>C1is^gt@#cqO<_MfpXFbC61+YzLTK&vf0_}t4v(Jf* zJp0_c`rd)DtxngoZJsAc_06VPQ~>MkBk-sx$(ik%)6UtKt>i=Yp^Nhqs>Wyh!aj!~uHHikJROoD^c+@#i^8>R)978V!JD#26 zcdsH{$TB7Y!-H-z-Kn>@&tT@-nda&FH7iV0=EY5D;E678%b!` zgL=ASIwGjK~2hsw^uhS?izBqu9SJ1-Q)(p8Y*72c(f4OjZVmd=Ku3Lp$Fy* zH9(Us7+d9a!C;|?&vFWrm-{(Hydw>-Nnma(T&HzDZPF3_kSm*Uegy4ZInwzB4dQ+9 zF#zhr*Fq!hq8ADxBCsaXV9;?In5h&oNlwbgkZNY{no?DQ`nw#AW$r4JdWrqmFcC`J zJY&p)hM{>3Vm(d&4H!<5r;)S<$+RDKZ7vyGQeb6}L)NWVf0e86?!jeXTp}FJh2@pK zT6Fk?d`>m5WjN$S>M7qS?`#;ER+lu>L2UpLZ8%bYVpb)89q%Zky#_`cyQSe&dyM{+ z#(g@RA;+3ucy>(nLpYZ$eCe5Ud%!JDkm*SHHW+u48uz%R`N*^o#qdMB#-=C}v=q%7 z6X01i^|u#TuN5`Q*hOV_Pwnh{k<1dr4H&P5BNLb$xDCX^F%KDj4k`(lT}~I#w4wZDSIpsMFm+mPX zx%wr#mm==?Jm4c&Rr|b67!pdrCU$Va*CCuWcdG0D!25n0x`4Clz+U0|)yLJRnZTC> zJB2&}dt?Csp?z6HivU>N=j3IhDDgNd9u)V< z#Ae?prZ`ROovre=@QyRw+UGe=T69ig;X>q_3}})CqfcI+i)tC1Fsml5UOBHai$6BU z-8E~%b+;4a&%(^E!?N#HvRTQtm`K}?JOg#OCkD~hAy86#qfGn~N0xbXSdQ zrnSV+pqamudn+7%J!6)h3*xZ4rU-uhspt6x6+glv`xB0C=cSLU-b&_JQ;PEMAKO6H zasEx>Ep-vjdNhj+ToIn9-oWeZ`^`Yk;O&WgrL$GMfL*!HbFt3zP^oJqLd_0Xci<`X zV~4I+(Ln2V=iPC~TbIhap}@Ogsl7x=f-&}T0|86AR7!*mZ*B7rkj*&k)E_8nzIKn% z#=puFTLf24Yo3SJSBNnu(6?un`9k1k`IdlzcUI$5pPheS{n(=&qELJ3UG_tLATvc) zfrr7!mNP24h}j8>8GXyjcyE^?od?FWkEk@Y74f_ftj69Unfvm1?}QZ5f9;BB6e!u@ zlLGm-BP#(T0zN{YEvqis^a%{7XHH98>U!#y^6p-4x%k|9{aN#2PwF!8Deh4Yoc^(G zlSXtJopL*YHLTo&b{eIZop>Gt<|@PRBfK>5rC>Y9^1Y%=bn8S`)7b&&dDIF(J|}^5ni{X(7O_b1j4KDK;$NCv- zbp&4E3Eg9FAZyAtdRyn+$EPZ-KVf9=;(0(2zfz~vBzwk&VN}S3UA~AIJpV@@()(%n zLQr0ex|D9gBphNV=&*hBFUW~1nd2Dw-^LFc3bN0>*kUlAtqsvVuG7sLW*)ZQ9|S&B ztMajk>DG9#Jy}csg`WYCHH9dQS`TLsLO_2*K)w_pbZ~kC*C4e)^I~k{zb$!t86LmL z*%IL%lxJn%%-gNaVOU4$=!oWNNMbEngD`=`JQM9_svW!Db}OCiKeQRLjrnY=gr)u7 zkPpG?oTkit>4norYKwhM+Gk$l`TH09L2?gJWjek+0d!_qH8^-s z{AvGqAOPj;7S7hsv(AFG^*~~F`o6+=NR{vh=e{D(#0vXYr`Ba>kVXNW!s0H%%-}M! zNYisy>v%k$cNfrZM~EOJ_#ip^wltgJj%!={owrv#lk3w~_C3)Jk8l?H%+>;HUE2*j z{@+oRx_jkAI}Z!|O_z)odP?B3pz4u-kem@dij&!S4512vNTq>XE;}r!{zY?H2cXAy z4Hy#jDZ8^@@E3UGEW$wUQ5v6|(Moz%Nx8PO5rKnO$nM@wm|5o`!|q!qrjoGZ7j6Y_ z&Cel@Dtl#s2sDZOZ6hm&$mO#U0l8^V?8 znnnx>&qBCA`xK>HJB5h05VLqEJ`LFg@Z{VZbdO6m=N9K7!-}pzW2a*45UD~(!>XTO z5joAbrx;HuWBRxK6VW-}ZopmF-WF zRXb-fun91b`_biJWF2_zK;)ag!pdB(%2tO8#>U|22!LpikwkFMrA=~kAK2c+p3eHln&H7tBqvftIQ)P7O@7lj%`ydHlzdWT@qkGTl*Pc&n zh8^g_KRXZAQEKfMgqIy0{Wc-fql4cudn)gXF~r-gp9gBXI7I?5N#Db0*#DPoa-I^kjX0r_q#NX}vtp9D8k}dGbpzxz^ zZ0|AF7y$k>^apJbc8Hr4WU?BYY4pPk@`J%2vAw17UFXApc2rsfXBjR!BLbSIRPIy4 z)ZGmDfSmNh2XC>DmI8$={yf56YZS!6^55Zl#R~2(FGr=7S0!uo;gCr0<&F10(Mx>H zLwH56i8S{=+*8Z^e^M9yGBXw0|0Nur{2!@{b5g5O|LJMYKNkxBe^VF#ii&;qg@d`$ ztZV-VQd$+*L8KJ^e78pb|A1MKJiSOSpK)QWuIm5Am7kye4=FW$@@I*~e!gp7{eQr$ zD+h<1`_K7@xi5&XZ&|X*zx}^@qV&Ygtn^zaT~$yy*2O)=&z)tUZFy^od$nK-Ye+B(?*Rkn-z*geny3>*RD<#0v!|>(Yla`v3~iMb zW5v6hQNaHIj>u(`?im?03#+in3?|S{_sOq|w@y+h&z-VgaW)r%SCaoY#=Iz$6*U>P z{_X-$hWf6T_MZqT@J7%tZS_j|9-VTROyxp?GuW`!_p=X+q5MX#Vx&LEQ#7Ma>40O~ zYT$J&G{t$u*LJgo4ny}yMg%4K6DD+BYS4Hjz45?8lTUXdVUPUnjFOkaiF{6o7(=@i zxXzWj5)x7zVq>;F{*nA#Hz)JO%W0BC2g!dWD(;ked}ASkbUj*I-kb4Rl$T)XxZi)1 z+61FT?wh+pqKa`hXfyHpq%PJH+9WU5mmPK3EQ3`rETnVNFH|4*gmFLQl2EW*d9qZJN219jk;Feyq)LC+=P+z%eC`2 zVf6t()5jtEU)NzFjau&uSOYNuw08XpazR-VtIU2XF(rH7B6-{^@0*wM#)x zMXZx^Uc(0Da>aeM$%VWgII*5ala5>qe;@l{52juGfM(xTnEl{&)SG~gNxtr{syQj1 zDqs~xAWwahgVgj$WP9PehgahIULzZCq4(80^Q-7QiZWO76kUL!YI)uKoIU--l)>S*uJD6WAx*H-wPZ;%PH$@!)ECZZ`&!`mUlbwh>m0%Wn412o3S zg0dqsT4bAR@n{Mcqw~n$G!-Cr81`ge^$xAvweT@(Gp4Y50sK<*LK-Dvn&_AcU6N>v zgBJN;(LG0^eCBP0Tq{DZr4~!aZ+Oy6nC^5wTM?>3+X#5$Mpd#^;i z5}mK3RW@6e)Ep2w&!ImH7HXu-AIe`!-D9LexoWhj>=l51!37!_|Q``{N(TbDm1sej)g<*|I4 z!fj-aCB!+HKAF_5F3=@Jl>-8F%WY1ts-?;n`6DfedhB2nenD29zwlWLHr!yF^$Js4 zB0xM%k88NrweiZ8iIwasLJ@hngSC1jPr>8kOmEta$1ESsY$Dgn*eGid{Yf&JNjn_- ztV;0u)H5n0R>Y%0_=PrHNctnpT1j#^>b7owS5(ex&4HF&wx%=Bg!|&#k0frC+%$z8 zOxwvA9TD9hBi#Lc^~66v#pU!RlQI06*-1YYB zCB=EY>KFxYIgHw4e)n+0gk~$;RuM&LS_aoHhM`y-M+UN;R6yX}5KfR43rZ?H<;U>s z*9~GOsT-EB<|M}#7)QhXIueWuxWjl^|hhnO-^EvtYq;W z%V*W4ZOroipQ>Xc;adGZ;kN7`5gc1DAqgLL%~TDCk@huET0;uvf~vmZ$(z>>^E&K4;O z`sOGQV)a#ZbJybVl|6rzMiOjMPRg;Tt67;micQFG5TrutmW0 zdf|YJtz5xcgp`G!Ct`2EuULQUM;gptGf|K5GSh;0;9Z>s=ZmuCSX109!_T>?p3%BP zvEe`2?n_am``o^~&PnQKTG~kIlc>^3H!|@(^V!o345bZwOOCmndXq^iOTwkb{IO@! z=N$c!?W*y~U|8h`QHUUos#3%bn2k&hPmdKDN5XlsMjokFtWcylz>1ocZ+Ye+5qZPo zwJ`UhuqSyuhqvdDNHt8Q;R|l*Xsl}$jl0Hlqnr!jeh@_ihkoxV1rlmfj}%_n4edxY zh~lA}ocO0yCh8V&IxElXR5X4Mt@zaIx9EV*{JO~9&VY<3K2Lbwcf*D)T4XS`DchB) z1aoOB#iX3tc21!s`T<)H(1||tT`T7W_bAc|x2<>mdta^EBzIFSaEE*`V;DDawjnZy zyOAPoq!!CvS?vzk-cYcRCJh?G9F%6{`Cu#Xgf zeFb^Chz$N1*J1t?VFK@(SCN(#$%!biuZ!SMaj z5X@J`h1j#59!`c}5xx`5Do^=dly(|FMlMf`t>oVufjMBbb z3tdF&`(2@nmd-eNyceJBs+#=fR7l_N7yQoM=J)?BKh)= zgda)Iyrr#J!468#cBUb^FvODBnPRv=Rs~gQfgKJwBRtG)IHf;BlHJ_hAbMSDtH_)y zyI>9vIU7&rey>*~6Bg+tuiP-%yDJ_O{o!yxVm(8&D?_GujL1yKR=n-^QbaOkPZHN} zk@@5_DiKDa6|j^VHRWthyd2^w`#=1~^+E52f+6053}4GP4L&LL=R-@vXw7`(*Zj6# zD8A&1O+|sJ`O}M)emiRL<^IepM6hXnB_7c=v+9I5maecTs>`_z`msfgM1c~*ka7|L zq2BAHBqrf5sDb3G#38zd-K*!&|ll*y;B>0+b}L4Z(^Iz=fWi85tmv@tC6x^(6U>JsGsSFsFh0 zOkWp_+n7#=t*13etQ~|O9rSqHS>%aMi2K1ye0n3v{Uu27hKMmU_T%_!(m>WoM@&bA z7B}4_5COe=e@gSlJRD#g9ag8$nq6nk)3_M+-t zuiktvj2gFy3)@ih)roHl$y!ADtwm~I(PQx|jzD*}DxNJ&Hq%vW7lA^nf$>e!(J|X( zE0I0hfzS&Z+%!@_>5U+}f*&K-)O~+iE!}5+nka1ATd<)kZu`_iDS@3+39?GAq`~G9 z^s!w=;qggd6%B-fU9c`Z-y)#Yg7R{5u?R&^Ol2tVk(9<%?|t{n0R640IzJ=iJj9N# zY=a~XZ3$G&Wo0-K=_Y?!HxRc*7eQ45>xWGwn!!f701x9-Lw<(*VAe3%m}~t$Vr0Gx zXAJ}dfG*aT6f9Wm6eyD~{Zrv*>AA0)r6lyo*_R8pBIW?UkS%dAN)i-h_Z9Vk<(uRdEusfA>aIrQB2tY%FZ4!%yx+E%X~#!LAS!=f z<_TmXcY$gL1B{J8{^s!Cc=qYaqJyXjOWIn!_tTXK?Uhqo zcXjBQqse=aI9OS-kUM`fRF{X2*`v%NHYjrIGv8*W5 z9(K6nKoR=SSy>Q-A;m~rDI$0vHPOZ~IE~`XB!T#!cJx4j&-Tz%+)ao0Nm++V%)#U| z*WJMMu@V|1YNSLxX^sLhk(xXdeGF|H6&x;+EezSKyhC|X1hNOMM=Z`TC zv^+E=hyzv?TlizVjP(ItC1{lk~gDai*cySH{ra7UuYHX#{E?h8pSvDQ_P zNz)$rBg+^0Wk*HVYU-G*lh+n+1a+B+j_up<>qfU5RIlGkZx>8@=n9Bi5=kP-F6@}g zkWc#3gx33MV6i4lye4}kz>iNyUXiBVU8lh~pS#`$38P1R0^TSGk9JxLb%~T9$&2<| zTd$+bn@+ODhQ|}3l0V@3MoEqdgz9PU*!ByTfw30h z0~^^w_%VPi;$8H6S;T(T3IA*AXt|b}4`1XM8Ytfk;i8cugr>{2{)!T&4i~1(qfXzd z#+Q$k@9=Cf-l4`ZAe)yz$Vr*J@kj!gjPsF^BQVi`cKI_@jA_53;GR>|G%J>m){)f$ z=8e^opw%~r-$1+65gKVfLc)TJ^M!oNj@0CWsS;nS9e9Li=^zME=s1`N`y&)?yuh+d zFSPUVec{TKfAfk-OH1g)4KcOyGesY^7xf3uLK9@gYU)rOd2avNt4n1?E?mH2o2YM{ z851~`M+f`{qTtFz#hZgpY|4!YprU+NGzsI-!zQw&u5+Y7w}DYd&P8f@GY(D3&C0S6 z9qOOS#BB)R$bx0LuFd>KVhApYU&oS7M^5Y$cSOi>ImFm&D4Qs5Tz1GvEX>K}^Kvo1 zR-n*DHiB%X*Bjuz?~NkP%bP6Cjmvzys#)sOD}xhyrYL9r(_z4dYD4E|%fu@xX%?`X z1Z;{i_JO*TiW+K`r@Kd>>l14ji$asL8wg|oWSKm~jse$p*=zasIJVpT zVqbCj(u;gYij+H)AV>gmW6#I(h48E)b0xUY5=|?mb@H!y9-u;qjfaVU)EIVY>M71> zh5(q?cl135i%l#2Cq=^w1<^ayo>xw57T?h&vL^$$N!Tl~h=`|?W>{uK`bJ8u@^_8Q z$qU>m&<8EzjhfhGftx5ubaoh&gmS}zhUf%OzKh6o^aSZqIKlJjl_>e_eL$d+?%q~V zWtUb+GmLY?fd1X1BrZgSVJahlfBv54jf?w}LT|L}GJQ42}lEE2cCy*_X9nXn#p2 z#(X!4w2};Nt*LfbAUl_hRtzu*<5cod{|pwHFe*HzR5(;Fe&@Tx>do7TNsPIYl}Q9W zceXE6?Y@wGqNH}fbQWZ42)J*I9~{h{Zw4>h?3T7W999{D$j3C|)_9%vvoKP|CC0UZ z6&`BJ0dQCA-NMTMTrZBA&za^S+|$LOmOh^Bd%?GrP=xJT6h|t{zVyX3EoKycnDgM` z<-KOX0rYKi0z@9yKr#JP_0 z-_*Ex-RtscuG}Qdh*B7K8SI6^@X_o<`O+M6V^eOrCj#Aq04fL7R5WPVdNNKMO$7=0 zIi#$_T$W%Um;%mrzz5TF6O#d}wP#SCVe(H}1f2m|bLVXHMPm zhMzY{bsI~D=aM>Evr)1-DNiX^IQBc6{`7iTY)op0YfwFLfZAKI-%p^2FZL%5rpv<& zfu8wZUb*vwok6d+R}Qhp4IF4lpZkOtMaC33sVK3@&83NV_}s;l&CG*)gOGZOe={Em^zdPe;2^o${m-pl3KGnP$p zW3Y3?MmPhfC5NJj!;m%BH%fNdrVi@-{^GRIgGTwh*gv>;=$ih;ltbAUd1($<=W_7K zkF;CS0yZ}aemhQBc#3kG{z1_|Kve9Ti%pDyfRfLy12iG$-rVRd57q8sElKz+mqq+* zzDHVdDOfDI2V`Jh1vQq9Ns;WN#4LGjT>5(@i;63GYi{Sa7!Yp{5#&?e#0?_3np@2{ zUkAaR;U{U*{oW8)QWoJwO$s=xwt~y90xx&(ieJz zBk84LR?Ff9yrLiVoTk)2I1dlJ_18?iQXQbVIu0_|eQL?|R>m;tVhb-^6%Rt(3~R(b zpBCjf3JGy+fIvMUsqY;nTCFu^!Z4T~tc(sG)-@MZeA11A&Gt)OUdG81;732rtcND_ zNJqv%_lV`9D8_sxKZ}IGD>Y?cgTb+{4^?*uQzXUxmq>ew_VXNb?+P#iEz=}0i+K~3 zWyMQWss@<2}Jr9 zlAH%qEh4G<&GX3DM5T)93anK zW|61kh3HM$1#`YwR3Qb>xspVzvl%1H;gy^B2=p^~nv-lHRj;m9%kjHyz(U>&s@wiB z=_xTnoutM0!=I|$$^ z$X#%_tctXFybIVE=~Hvl*bMpj79xdRIqYD#`^~#tj_cqTJ9z`~8PFDuXeq#+!g)tj2fwA7NXaSjs=$`Q))flGaT?Bm> z3-U-ffNa{*aD!zwd5i5uUS8s7t&%}aeaAen6uWluu!+tP4(`;xZc*`*&#PXDEB8~% zqy40jcg{n)PhqPD-=;qMjRkNiGPK+T;-YB2|E`x-{b&Kdb9_H7qLkt`u50E|rkQ#cP0 z_PRWrVO;dfmwbhsTKYx&ryOxH@;`o}B;7%hBMc=}ucc5VJx2#UzBVu%Hl&Zz)1k&f zc_T$*(VYYBZ}C3Vio(;v#SiAFCj;~CSZl5YU7^|Hwm$}SnQf*Wc{eZ9x|ZV#t0frOMmls9u;~zm z|C6=r^c}CKnTV1&FaE)$goiI;)Z8Tgk3ZB;l%C|ZjyJ7vXH)+31TcuWt4Lb?#xiz#dd=*-Jd|sJk8begQV%9U9ZwJX$5SsfukI{ zJmz__5x%S(wSt+QcVPgwRjf5~Bgb}iB1zIW*(Am(;#@1_a0UmZr~v>@ZZ3lsLG$QQ zcZpJqGCfk1T&|TAW7S^RI1=NsPxr}d6+_I6V5t+W#|-uF+@dA1DWu)#jzL4X{KPn= zZNbPIOiXI{FoT@ea`={?rw{}perJd5CxWiOFt4>0HT#mO+3`(n+`hQAmM!7_$`#c;RWu||nV+Se3!7m7h2w%SIr;Y%LgEv z@h}iQyo86Ij)%SDwGRfW)Yjl`S3HG99|PO;6d z7Qe^RD;&zlP>Q>Nj}sGn0v54ZG$K=avWVV{VI%k)L`fD1O+%)_MX(_z#3qvFv=NYq zH`O@YoK(mqf$^PO#p61DO5;Tu|5j4$v;~R&}#%p z77&5NJU`Csy3UZjD;F6LNQi|CpK-NK+8&wI@i@q|^%4bUkvm4Kx$*s08ta-ev3&>t zWH;wDxZ=}Q(YdHc-Efv|EUW+xt)BjC90>&_Z3QCQSKJB~y05B7DUL!`9PVE}G9jbY zI51z2`SeC9vj1ZHa)PB_r5z9k;Xf4#Nr;=-Wik4X2=7zxhm4(xa(apa} zCMsU*%%QNK2GzMee(S|&uPvt7ye6V7451LwUJ_pElN)!6=@N%)Sr-NjvMGB-hiBz0 zgifpZMW@qS{M=~G%TP7v zZ*Q|v^L*vS9+V7S4W`hG=6_&sVIt*@bBn9uDQZTZGzk8&pRT2k3%ely!~3}Z=CZ>z z)>H{;FX@F_N8mgEskOoI;|BdgQ!SY$o0RqGKpZ9CGUlKoA$&Mj!?B|ny(F?okOfm?bFmIm{**QunLkMlge%gkT)NV;G{Br9RTNIl z8^VG)-fP>%m(1pJdNwbL&=dvW?gKIyZ}MZwxU!YXr#T8ah=1NoD~VzU=^|@?Jm0mB zto>B-$L9qT8~_-f4iu%%|LXza;c>iMn3oymeEAZL3cU7ZzZLhKIXEsgQG7`hV1Oms zr4{y?fF1j#!^K4C>xjJymmG8}(te;O{FMjs96m$nsZ6g5QIAI)AB%^aG<7?^9qG0! zuUnXQG|w;+7;Vk_z2o%khSsZ38SuE^|G|+DW(Jl0q{UPp2gBuVap{mG$Y$%#FRgc+0G?_7!9J315*;sf05r z%HcZE>w)QGw;-4V( zHs-4`Ii2?lsgveaRkAlfy91e;(A9m{kpSi{f9Z2{A~58_3xl=$?IDtRx9@n zj-0F-c+aUVa7M5u#3>P2uBlS{P{VDy#+G}jBo?!&WTq*-0F;T-%Zuz#)p$6t1oT*>iKZWX5T zc3R?J@(&8J{RRX^K%2PVMQ6Nm9?YEiPNaEG4)a6+XSs9vh>CV_!Uc`AwRw6tt%m41 z$ENEw{2SDt&}ecyt0ZsbKlOdkT{k4*s?8XyKuS9qD@CnmOL_D$3;eYn*&6 z-Tv(O;v`?8)F;AByj$A!<)fM0C;ESszMTvCrW@N1jZ*Qdq51q;WQ zwWw>w7W2&W+7>@M=hyS1A&NG}1uVLee ztu;gKO-j{hk=T1jY+|pVR24C5R8f0tY(e?gXsOm}>0ePXV%ApvX&W;}sa=A4^YnSI z>wP~w-=FjKT<4r`=eo{)?)!JsFx9rcoNSSxd9}IB8==F<;!ospugqHE{~4rOOpdr? zrk#|mr|n~0$WLb%$ENCM`Ogu=2(b(>$^gl+?(vUq_`|bkSkV&-jq!Q*S8C;uTe})k zd+YO(Sx$u%Cdr%sDz0Nl`(PY|$JM)@uVij{<$auR6QDOPZ14N`k0Dh< z20cCE8!DSDjjL=Mj9_sa^C*|cRo%oO#Lc(YslNSo5#>724^ATSSI;<8n1*PC54Oz= zyr**eXm{?7*l|H4>C>Vvqt?2W|5hG;gr|q{`G$y2?_=3AsT(GJl(r>MFz07Qf3-b4 ztDZ;qh+jqjw4&iIQ}W5=@o_;^g$aA*A`4wUVP^I{($=bk7#{>#$2e@MmiK3QKBOR! z31upOJgqsDy{f}c2{#^+>qUF0p=7(Yc|n4y-uA`y)>likJg6pYs43LcE&aAc6WTr0PGBy7i<(Mz3)(K zPIIShTBd)ckKAF!Z)vjGXr`y*m&WnpN?M)uNn7`kKEG|=#)O~OkFmRSsu9yr>Im;w}M)$p(rTWdlB=>>rC7UAqttjk28?3KQO}mSzO4yA4HtIS~ zT(BOFbf8>T$yUud59s|gAoaP-y6XFTNb}zm;e&SJEjrYf{c@hN5?|^3J6Xfn+qDvr z&who;rmjM+Y`okGbyxjCPw1x`fGi$9GfcfaD1;60LpQ|nSRs1Xb*748UWB{x4 z8%O?;4~Rw#!!yAG=l7#QyT-!(o&Axyz}1~*aU4?49FV$Mc((-OZ7ed@@e&>%c4S*? zDmrcb*h)bDX>Gh#;Wy6jWy)r+ACBzb{-V=yz_a@oqx_blp9UjV5?>25ATLW?pQ>32 zo{Om7O{n7@cenq6?juWZRtk4eR}*_eckeI)u4tv&a%KpbfFY&dAFlOwq$l~-l)9?6 zvQd%jE1@G}fiUgQ$={CqNbazpvp3P>zbVV8Gg=DMwIaIrW;{KtzOf3Yit%Aj7f?#R zy}550qVW!stP%; z-Z%Y6p2K|Ed<(_#ifNq?|L`T~CFV%T(f)~PP^3edb*uj4Bp|X9R&6f%*5#noid4Eb za=7Ib@zoM^3k0lYh+LR?;Gu3X?%XKCc$?p)0FjPXX@GbAQW%^aN#~A8l}1k^nul+W zJ4<&K*OwEOZ`x+afv}B^(tn3~saCL2&}H&}{3#(z2Y<$_BR=F4A>t-?%?lhUiyPVZ zFsP#o?0pWGefVI3tlI>a@cT<2sk+)AtwhP_Eb93dRa3DN$Bg^}%?0+8$;E+^Z8Ps)cM-%D|TFOKx7<1(jqupY`nPG6YIr z$;XvnNs+}8rf95DRte4KmeOAC5~l+%>2CF|fXcRI^ajJr7Jw5rcoNh@b1Tf zfh%in*4n#?@a#SlOXZx@K#Ho>F_}<2jE#F&*=V2cK<+(;{FM5NujFS7FjkjG$XSyj zQ#oe*1Yqq1dZSZ=t*zv|y_+f#fr$r#4E%m@i4SR*`X$m+^vF^X+}YqHM){GyI_4Uv zH}l7}9vx%n@Uj;*WIV*A-xwd~pcwIRi_5K``^ycWijl^VGh~;=cxDYG6KxXVB;M3m zqJF2|hT~+t;pJiMT=X~~36D0Y?i#H7c-!uM0n=CXxA!4V@37R20s98+H+uJP*G;>v z_y{sjPV1@x<6hrFfErJ7%XG!(^@=5y%~lh_ic~b(?5na;`HV2U)`Q{PojC4X9r1d7 zRYYdb;%2HB;aY0l+;fUOO$l`W!zq0&`(Wi9Gl8Q`P5ezdGE!c)T}xoEl8l`d7Ny-% zqi_Gj&1v3a=D}mlcO_o*B}LmyPR5DByaL7^Q?I-LM00hp-@8sXxSOL8OTuU0G}}58 zWt5@9=Vzsgg?QXGxe&|w%%=~lG{vPT_-VJ>AvA)U(TrUDQxJYZ0Wwy;P53Qb0a=UY z4W+{M#01`XMN$WAhRRn$V8%}@RfMYQ5|4Y?Lt*pum}PXcx1}<~Y&9pEc41L2KrLTp z8i?Awardscjm~qDzhl2Xy0Cg1krhV&JYGVn>@`%gnWH3{dF%+5V>yET06E`JO`q2| zmmS`m1SA>zjPiNd6uY0+E0&x7pdV-x(*o9&MIt7@r>b@~%YU!I-9lDWTV?09qZ-T7)pl&n7VY$SUv;VS)yFdYpTU;9MN z@GO{D;jKL3po0A{);gim!CF2N%}S3}_K~D~ChEci$UM4Ec3L}5DEfss6a@-tQUvb} zOw}bZ`)?&=M7Ri)zb-6QGGxv&6%*MV1W8}K zoEV#EBPIozh)!Q%iSUfC@za95D#1;EK*1W>?&H~%L;!?rR!F4pAntZbyX6%ZK&1a zRy0Ss02mv7+O_8-otYDYV#uOlw=C_%gP!DnzObPBlJ~wV51S8dR=mD!*zK0tu$;zw ze{B1~s#5{YX?+vsBD)U71SF4@lK|EUzV3OEtT{CY-xh-8N-sq58``sGjo$h-GIFwb zmv0ijkkR2!U*~;1Z5_N3a+N!h-K3V^E*rX)Uh3IxM3l-dv78YRJHK-Iw1?t1aLxyC z;5eK2o?~4rP}syv@kd`Y%zc_~O=yE~_PvSGCy5V4KJ?Nu*ulhQ*@c z)7Dt=X80pfg*5<7zW$R(P7n6P`#NZbWjnzhQDDXUSVSW(foWAt5bW#pNq|=SK1%BO zQCgKnn(wrc-ry%kTRid871Wg;oK)(18~g3AvX6tsrHXe46o#_E_qRojzN&?Zh3+=x z1joh*iwV3gKD*;+aA-n1AMbQk5Pvxve>?oCsx8gWTRDP>*HRy*3UV8EqLUtt;ZtP6 zz#8|0pO~_hE!G09`>LbablizEpM<$BMkB|xeF)(7Ei zfwj2}@^hY6i@(qm#WYukzbKnE%wkD>`n`rsz8UT0j=CzTcqcT1355&KL9i&dVWsN|?!skqSZN;q76KK|`3ot_G{z!7*+J+MD*#ew_x zkm=3mR2OnZGu{TdvGw=+vKs|UW2=E4RrVkHa%bpC4&&3DAZzBi3oWITHPRac3T%g! zL)F8HulH6vFv;pqh7S_AkYeY=6G!pv%i6x&%AOFal;Z7c5+kv=!Ub2=x@BCh&6}%g%)g7c?Xz$dsLrm+3=gZF;GhpWv8>bkaP?he~{R0GZqF7%f zrMYG1^b-%yn|xYfw6;OT76d3FRia;NZd39T_A=?UH!m3Pws}|Xvdv7(chDMp(eCd>U;g~;)TPw=;+I*>fHXsPGU2i!{AHfN;gbld z)#LTNdI7Vy0nlY!>T=G(KPuQ^$HYP-Dh9fb7>F_!; zv2daO?s^Z7-T$2i>%J*5@ic2klq_}OjfMW=gxlTut)qO^i0^uDLY!Exc z4u@FExOKyIqH%W&)A<~@;ZHv6EfbY;pfuUr>_+Ccf1~RQ>7gq)X|WXJKl7w?7@S1x z5(WoneI00D;pebn_?JM1fA=4z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;wH)0002_L%V+f000SaNLh0L01m?d01m?e$8V@)00007 zbV*G`2k8k05i=Afv87D_00|XIL_t(&-ql)5bKBM#J-8Pj2!Ikq$+bq5l{mFkKjPM7 z$0N&*o2H#{GTx_)EV{`bu$xJ{^dcK?I@9SN$TTxuw5xW!Ov7|hJ7ZgZ)U`Tx70H%t zOSEKC;!6ba;_ZUEFi3(FK(P^hXD}qe3*y{^?{U8G64++2%V6lUA-+yvBeBaagR#qC ztXMx@pM@0r2RP}(GJijP`Xs~eS{KnbHZ6P(!2|pmzyP-XMX@dW!eD*=t}@-QfI$eq zE?&g&C-YeU;vl~HS-R!>zAz5}$n87mJ^J5&{s#cS@F(*CfNy5f4X^#}giS{}oo0+N zmQJVpBbxY`?lh)PpX@L2e&GClyT$myU%GUW?JDRX;GM>$OBY!>o$eo#2|GCJc-_YI z>65P)=ubbr#M0?Bo1C0vq9`(;_nDLQA|m>aYuCQ@zHl6;c}`z|ZUK_XWU#Wbf@Cro zYX0}0bApaUBEe3aIKc)72U)v0JH2t&+CdaW##sISj4{+|wO5aikcQ9R%>)60AfQ&O z?MSnT-Ch`v$03R$6h%ftOJIE8J}f?2K<337EX#%pDJ;vvu7EC=%fiUW z2uo-h&VO(oXU@Efh50#Lz4|vid^8W&bv=Nb^;j$h*L8Q-5v$cIs7Rry8UP?)C_>W` zkYyR7C_)ef5JEiGZQBN=v@b#)Ha6CA=g#ex^N!;*Fv}QgF`MrlG$90qLJ5S{tt^+z z!Z0e}4oV2|!1hgY5d;B_YpXA?ys`>^RB4HmJy^hwK=ViMI4)u_8E(yO zV3<>MB&B1926_#a!5(>r`Y}@u0+OaaXikhAPA5o34$Q_HArOY#hn1=EQ(Y_ zE|-PlxLb!4Xb%1bGy!H&bP$OO*l(w{ZNqUKtgdA}hDEW_B>eWw1yfj=+cndK5GF|y z7-L=v=8RdE1zDCoupF2_LU5p53EH;Z$r)J~^(lq{+^iQkTZ9mprU^0kCo0%b_=KGR4q|jmm^C@L|EuF{^lFwc)T!=jg1W)J^D6MsT3-e z3U1uEfyv237#Z2qC{tw_uIsi17o{lhn-eEi?8GuxWy>q8SYBDf@=6Aai;r>c-S?oX zDs){BG=Xxdh#_6a=4NFl@wx3HMc$97JC@bbkU4wyET*TY@s~gU3D1{TasB$Y`1R*w`EJKn+D5{3c z$_rGhRXlyV;z`q9)Pl`XgflMIYPFV%Sr7yylf(GUXTQbh=qQGUh9Ju_3WWkp)5Ob{ zYxwv5d-(X{Ut!{nH!(AF3(uZCgJBqWxt2jZuHawyA0U@o-!_VbVcK8$0H`w^kjnAV zFF%4Dj{|_GnRQ)9KA*?kyLa%D<0o+7;3O19K{Azg$oz3ckkYoix(CaP%0MT*ftbJ0RW7RrCR2#udjQ*+X-+GY1{b# z337(RM~-4@>U7|RwOS2hsd4=L7w0`zlgXsFfLASrR~^z`HftDTAgZc1{OHKY5MI2< z;L9)nh}qd$6bglwPN`uSn4Fvpd=h>|$sK4rHlr?z_{$*xa2*%rQW3Xq-Ne0n_n_-~ z%i}zE?xz?Y9!7l2<`qT3JMWxoTAb;D?RD>iG#8q@FUJ{}ot07zL#YfhJl%x8OU-BrBWFHFgN!IdXKO9sdlTg#Y&|jXqx6-Q7Dv<&{TXk_YjJrARdoH*L9et30amgH#djt z*RR1a3|N+lh57&D@#7`WhArDca!ALs=b46*trMt-;ZP8_w6rHDdDA7A%i__)|Fm4e zql9Idn0;^`nanEkg%TKJFbo5XF=VsrEkHUsTV$sFf{Bk@E|1aC5sanAVHk$TEC*aD z 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 QtN;K207*qoM6N<$f;gk#RR910 literal 0 HcmV?d00001 diff --git a/cpp/resources/explosion.xcf b/cpp/resources/explosion.xcf new file mode 100644 index 0000000000000000000000000000000000000000..5d9cd8662946cdff964d2f109a10d6467ab06f07 GIT binary patch literal 3275 zcmbtW%Wm676dj48NJ{b}u^n6SIA&NTvg1mk)W&fPKM*HvV4y*a#6eRaD8NXROjHt8 ziB6R+*#1DbU3J@!@T#BF6+fVhVtQso*>oO$q!iA*hveMLJ7;)@YP#*NKBzVHH&&%W za8x63{yT65NF-pU0CnfDe@qVWX&?niz_o}c;b#a*{|!IZMCxMAYqy<_k8{G4Tz%Mc zY~QKtKe_&a{&@Gv9=|gwhPrLL=@gqix6ZF&bRxgh_usZ0z3;W$`f_He(X4qbub0tr zED5R`&kBzVJB0^&qvhGYp;uOQj_d1gr*`1gLm=Jho~>Gc*fQj=Oll55`e+h zYNfnZIVa@1%Y^J5c)nM9$h+b>UN}hp@$|#7qs4gyeSP<5r+ztwPbc}bRT}1aDqi>D zd$M9x*R78))Vl$(+AkS-Qt-Qh{Ke;u>FC{_({KlyMwe^bKk&MSe%Nbm8VA1LT`!kA z{gPexUOOdhZRO)JWwcn?*xD!`=Xs|;UbefX=*MEQ1CFfT+XrEQr!0ukC zB4jBI>);h#sFagkf=`JjcoOYC|0e}@rpDV(NU+=WYo!O>Zp*FNye+HmOIx(=7b_p! zcis=?uj9$OL|fLW#n>pH?3sMKjUCGOv6B%UeNXw)$e;ayXNB8*kKS$TEkz`l`iX;_&9$|%~!#lt- zQ2;eu0t!S6QzXe2NhVAZN%#cHy+N`eBeL*m*i5Lf1y~hU3pGYzGq7ryg;l~Fn;<%y z1QOvmtQ=;^BGW>Z++ev-CM;Zlmr%((d;$^kxGN$4I#Y08gHMGT&hyAHi7MyV43S{x z5If8Agfosjn?1%1nyh$`-3T-H~ z5r8%n+E8c%s1({zXhWe*0BtC=5gytE(1t=A;nT1gsszx6s<0Z>0%$`suqw^MDl`{N zkbICll7dMx8>HY9bevoZWH6a#$#jqg)2K=&0}U)kp%)zsvVuc1^J|(wL5x*Qk0i`8kLC{O z5Q};UZz1oYs{#vT3f(h>ewjYTuxku9PHwX-S!OC(VKN|*B61Yr`S~)_h>7l6L{CuB a2WR&K?}>3{2#8Jq7o8BzLlX0vCjS8x!X0t| literal 0 HcmV?d00001 diff --git a/cpp/resources/player.png b/cpp/resources/player.png new file mode 100644 index 0000000000000000000000000000000000000000..d313d399c53ce78359883564b3353dbc95eccd7f GIT binary patch literal 10415 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 S>ZY4YfaMc{tcOb+b^IR}H-tn0 literal 0 HcmV?d00001 diff --git a/cpp/resources/wall.png b/cpp/resources/wall.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4b859e6f7a9e6fd2e93a4fc1c91fbe9ad40c2b GIT binary patch literal 410 zcmeAS@N?(olHy`uVBq!ia0vp^DImNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5l;AAz zh%9Dc;5!V$jK}j=fUIIK@$_|Nf62+ttt@fo#I7$up%0!ejv*Dd-rm{B+o~Yq5NLYt znU$ZzQQ4Tnz8 zo$}52_MbX+wWaG6k&F-mvVWb7xCt~S?u>lF`>+2?#gbET7_!<%^Y3+Yj(O`Ir|fLo tkZ`a`73h|OO|0HPlIuLk5Z2fJbN_^zP1oD9$_VIp22WQ%mvv4FO#sdmm&^bF literal 0 HcmV?d00001 diff --git a/cpp/resources/wall.xcf b/cpp/resources/wall.xcf new file mode 100644 index 0000000000000000000000000000000000000000..ad94689fc4093ea74352664428ea8593b3c97509 GIT binary patch literal 6511 zcmdT|-A)@v6kgL1e$pi18VaZv(WYu z)5@ZEeSk{6?GyAFdeH~yb5!aJ^oo9GcE=1P;m0ku8SC5c?D))?Gv~~YJr&#WS<@=B zw?;Orp_C$!{0lG+#A0}S1`MzL{?9D}}c|y~!{)PAJ6_`$0p5t&gz`I69 z;t%TF40wsXvx6#ow7#)P-;4=W+c7IVRjJ$L0%^yl=NiFYjkAVVvrBhI=gJk!t9kWN zhB7Baraw(SO0FeWS-Iw!fzGn`nEuK*;gd6rSBr}}Gw#6Pn{yZp8w$%OiIL@I!#6G4 zt+1?te)f*MMK7sc*AAHNT2~dcwm;yz>ESnXctzR zPK~|g^@i=a%gJooNHXqPUI{KOC!cM9n_5b)6h{lPVG%Jc1ZIV~ro)%@Z<=;Fy-xW^ zuh~Iklh?OQ$FFg{xWw=&WT5)-CJ&L}ZQFr%&dA-(8~5|ZBFir17qWR{;f!sc)a{Dx znzc@B2*)3Dw-QwKV%9KD=~Adaw@YW!e#$W$cLRj=8Pca0PaDvS!v;_`?qxGe*;5?) z?mSI4t6t!xAJDqk!jwbMKW;wMmFani2nY7}ymY=8A2rfho#DouL%GX9Ne?q2? zH&A>(XUju}k2j>LPfL?Czs}2cb6NK(wvDRi>uk4PTh^;V;O8?Lw~;nW-W#6A=9X#e zWU$CGda;mc+c~yEUO0Zbt(~SUM4O=+|82QWPWP_qoa9&2^v~oGtfWIf$fGm4a=1^> zkjTJBwEz4U6WE)|dmR{9_X8`v>iad@GHF@n-VbfcxSui>KeX!JZ%os%otFE+fL|vvVNAXg>%@Muah!XMp}N8| z0o`Rp7=3mQL>TP{0m<_8zi6iYX%cHk2YSQ%F|8%fz>8)vTFhe|nCuBhqeZ3@0@Z&-{Jvq{~p +#include +#include +#include + +namespace array { // TODO rename to container or something + +template +concept Deletable = requires(U u) { + { delete u } -> std::same_as; +}; + +// +// Unordered dynamic container with contiguous memory +// with fast deleting and adding +// +template class Pool { + + // Pair type and helper functions + + using pair_t = std::pair; + + static T &get_item(pair_t &X) { return std::get<1>(X); } + + static bool is_valid(const pair_t &X) { return std::get<0>(X); } + + static bool &validity(pair_t &X) { return std::get<0>(X); } + +public: + // Forward declaration for Iterator + class Iterator; + + Pool(size_t prealloc_size = 16) { + LOG_DEBUG("."); + Realloc(prealloc_size); + } + + Pool(const Pool &p) = delete; + Pool(Pool &&p) = delete; + + ~Pool() { + LOG_DEBUG("."); + delete[] m_Pool; + } + + template void Add(U &&u) { + EnsureAddCapacity(1); + auto idx = m_FreeIdx.top(); + get_item(m_Pool[idx]) = std::forward(u); + validity(m_Pool[idx]) = true; + m_FreeIdx.pop(); + m_Size++; + } + + void Remove(Iterator &it) { + // Calculate the index from the iterator's pointer + size_t index = it.ptr - m_Pool; + + // Validate the iterator points to a valid element + if (index >= m_Capacity || !is_valid(m_Pool[index])) { + throw std::logic_error("Invalid iterator for removal"); + } + + // Delete if deletable + if constexpr (Deletable) + delete get_item(m_Pool[index]); + + // Mark as invalid and add to free list + validity(m_Pool[index]) = false; + m_FreeIdx.push(index); + m_Size--; + + // Advance iterator to next valid element + it.ptr++; + it.iter_until_valid(); + } + + void Remove(size_t index) { + index_check(index); + if constexpr (Deletable) + delete get_item(m_Pool[index]); + validity(m_Pool[index]) = false; + m_Size--; + } + + T &operator[](size_t index) { + index_check(index); + return get_item(m_Pool[index]); + } + + const T &operator[](size_t index) const { + index_check(index); + return get_item(m_Pool[index]); + } + + friend std::ostream &operator<<(std::ostream &os, const Pool &obj) { + os << "Pool( Size: " << obj.m_Size << ", capacity: " << obj.m_Capacity + << "\n"; + for (size_t i = 0; i < obj.m_Capacity; i++) { + os << "\t" << (std::get(obj.m_Pool[i]) ? "VALID" : "INVALID") + << "\n"; + } + os << "\n)"; + return os; + } + + auto Size() const { return m_Size; } + + auto Capacity() const { return m_Capacity; } + + // Iterating related + class Iterator { + friend class Pool; // Allow Pool to access private members + + public: + Iterator(pair_t *start, pair_t *stop) : ptr(start), end_ptr(stop) { + iter_until_valid(); + } + + T &operator*() const { return get_item(*ptr); } + + Iterator &operator++() { + if (ptr != end_ptr) { + ptr++; + iter_until_valid(); + } + return *this; + } + + bool operator!=(const Iterator &other) const { return ptr != other.ptr; } + + bool operator==(const Iterator &other) const { return ptr == other.ptr; } + + private: + pair_t *ptr = nullptr; + pair_t *end_ptr = nullptr; + + void iter_until_valid() { + while (ptr < end_ptr && !is_valid(*ptr)) { + ptr++; + } + } + }; + + Iterator begin() { return Iterator(m_Pool, m_Pool + m_Capacity); } + Iterator end() { return Iterator(m_Pool + m_Capacity, m_Pool + m_Capacity); } + +private: + pair_t *m_Pool = nullptr; + // TODO use unique_ptr + std::stack m_FreeIdx; + + size_t m_Capacity = 0; + size_t m_Size = 0; + + void index_check(size_t index) const { + if (index >= m_Capacity) { + throw std::out_of_range("Out of range"); + } + if (!is_valid(m_Pool[index])) { + throw std::logic_error("Invalid item"); + } + } + + void Realloc(size_t requested_capacity) { + // Calculate new capacity + size_t new_capacity = m_Capacity > 0 ? m_Capacity : 1; + while (new_capacity < requested_capacity) { + new_capacity *= 2; + } + LOG_DEBUG("Realloc from ", m_Capacity, " to ", new_capacity); + // Alloc new pool and copy from old pool + pair_t *new_pool = new pair_t[new_capacity]; + size_t new_idx = 0; + size_t old_capacity = m_Capacity; + for (size_t old_idx = 0; old_idx < old_capacity; old_idx++) { + if (is_valid(m_Pool[old_idx])) { + new_pool[new_idx++] = std::move(m_Pool[old_idx]); + } + } + // Remaining new items are all free + while (new_idx < new_capacity) { + m_FreeIdx.push(new_idx); + validity(new_pool[new_idx++]) = false; + } + // Swap and free the old pool + std::swap(m_Pool, new_pool); + delete[] new_pool; + // Update state variables + m_Capacity = new_capacity; + // m_Size stays the same + } + + void EnsureAddCapacity(size_t additional_elements) { + if (m_Size + additional_elements > m_Capacity) { + Realloc(m_Size + additional_elements); + } + } +}; + +} /* namespace array */ diff --git a/cpp/src/log.hpp b/cpp/src/log.hpp new file mode 100644 index 0000000..e8bcffe --- /dev/null +++ b/cpp/src/log.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include + +#define LOG_CRITICAL(...) Log::critical(__PRETTY_FUNCTION__, ": ", __VA_ARGS__) +#define LOG_ERROR(...) Log::error(__PRETTY_FUNCTION__, ": ", __VA_ARGS__) +#define LOG_WARNING(...) Log::warning(__PRETTY_FUNCTION__, ": ", __VA_ARGS__) +#define LOG_INFO(...) Log::info(__PRETTY_FUNCTION__, ": ", __VA_ARGS__) +#define LOG_DEBUG(...) Log::debug(__PRETTY_FUNCTION__, ": ", __VA_ARGS__) +#define LOG_PROFILING_DEBUG(...) \ + Log::profiling_debug(__PRETTY_FUNCTION__, ": ", __VA_ARGS__) + +namespace Log { +enum class LevelTypes { + CRITICAL = 0, // Things that crash + ERROR, // Bad stuff, but we can go on + WARNING, // Minor inconvenience + INFO, // Normal stuff + DEBUG, // Everything. Will slow down execution + PROFILING_DEBUG, // including constructors etc. +}; + +// Set logging level here +constexpr LevelTypes Level = LevelTypes::DEBUG; + +template +void _print(const Args &...args) { + if constexpr (Level < FUNC_LEVEL) { + return; + } + (std::cout << ... << args) << std::endl; +} + +template void critical(const Args &...args) { + _print("CRITICAL: ", args...); +} + +template void error(const Args &...args) { + _print("ERROR: ", args...); +} + +template void warning(const Args &...args) { + _print("WARNING: ", args...); +} + +template void info(const Args &...args) { + _print("INFO: ", args...); +} + +template void debug(const Args &...args) { + _print("DEBUG: ", args...); +} + +template void profiling_debug(const Args &...args) { + _print("PROFILING_DEBUG: ", args...); +} +} // namespace Log diff --git a/cpp/src/main.cpp b/cpp/src/main.cpp new file mode 100644 index 0000000..5b94833 --- /dev/null +++ b/cpp/src/main.cpp @@ -0,0 +1,885 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "array.hpp" +#include "log.hpp" +#include "math.hpp" + +// +// Utils +// + +// +// Math stuff +// + +// Forward declarations +class Sprite; +class Sound; +class UserAction; + +// +// UI stuff. This is the part directly dependent on the SDL +// + +// containers + +#include +#include +#include + +class Sound { +public: + Sound() { LOG_DEBUG("."); } + + Sound(const Sound &x) { LOG_DEBUG("."); } + + Sound(Sound &&x) noexcept { LOG_DEBUG("."); } + + ~Sound() { LOG_DEBUG("."); } +}; + +class AudioOutput { +public: + AudioOutput() { LOG_DEBUG("."); } + AudioOutput(const AudioOutput &x) = delete; + AudioOutput(AudioOutput &&x) = delete; + ~AudioOutput() { LOG_DEBUG("."); } + + std::expected Init() { + LOG_INFO("Initialing audio output"); + return {}; + } + + void PlaySound(Sound &s); +}; + +class Sprite { +public: + Sprite() : m_Texture(nullptr, SDL_DestroyTexture) {} + Sprite(std::string path, Vec2D center) : Sprite() { + LoadImage(path, center); + } + int m_R = 0; + int m_G = 0; + int m_B = 0; + int m_A = 0; + Sprite(const Sprite &x) = delete; + Sprite(Sprite &&x) = delete; + ~Sprite() { LOG_DEBUG("."); } + void LoadImage(std::string path, Vec2D image_center = {0.0, 0.0}) { + LOG_INFO("Loading image ", path); + assert(m_Renderer != nullptr); + + auto surface = std::unique_ptr( + IMG_Load(path.c_str()), SDL_DestroySurface); + + if (surface == nullptr) { + LOG_ERROR("IMG_Load failed to load ", path); + throw std::runtime_error("Failed to load resources"); + } + + m_Texture = std::unique_ptr( + SDL_CreateTextureFromSurface(m_Renderer.get(), surface.get()), + SDL_DestroyTexture); + if (m_Texture == nullptr) { + LOG_ERROR("SDL_CreateTextureFromSurface failed"); + throw std::runtime_error("Failed to load resources"); + } + float w, h; + SDL_GetTextureSize(m_Texture.get(), &w, &h); + m_Size = {w, h}; + m_ImageCenter = image_center; + } + + // Renderer is shared for all class instances - we need it in order + // to create textures from images + static void SetRenderer(std::shared_ptr renderer) { + m_Renderer = renderer; + } + + // GetTexture cannot return pointer to const, as SDL_RenderTexture modifies it + SDL_Texture *GetTexture() { return m_Texture.get(); } + + Vec2D GetSize() const { return m_Size; } + Vec2D GetCenter() const { return m_ImageCenter; } + +private: + static std::shared_ptr m_Renderer; + std::unique_ptr m_Texture; + Vec2D m_Size; + Vec2D m_ImageCenter; + float m_TextureWidth = 0; + float m_TextureHeight = 0; +}; +std::shared_ptr Sprite::m_Renderer = nullptr; + +// User interface classes + +class Window { +public: + Window(const Window &x) = delete; + Window(Window &&x) = delete; + Window(int width, int height) : m_Width(width), m_Height(height) { + LOG_DEBUG("."); + } + + std::expected Init() { + LOG_DEBUG("."); + + if (SDL_Init(SDL_INIT_VIDEO) == false) { + return std::unexpected(std::string("SDL could not initialize! Error: ") + + SDL_GetError()); + } + m_Window = SDL_CreateWindow("SDL2 Window", m_Width, m_Height, + SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); + if (m_Window == nullptr) { + std::atexit(SDL_Quit); + return std::unexpected( + std::string("Window could not be created! Error: ") + SDL_GetError()); + } + + m_Context = SDL_GL_CreateContext(m_Window); + if (m_Context == nullptr) { + SDL_DestroyWindow(m_Window); + std::atexit(SDL_Quit); + return std::unexpected( + std::string("GL context could not be created! Error: ") + + SDL_GetError()); + } + + if (glewInit() != GLEW_OK) { + SDL_GL_DestroyContext(m_Context); + SDL_DestroyWindow(m_Window); + std::atexit(SDL_Quit); + return std::unexpected("GLEW init failed!"); + } + + // Resize(); + + m_Renderer = std::shared_ptr( + SDL_CreateRenderer(m_Window, NULL), SDL_DestroyRenderer); + if (m_Renderer == nullptr) { + SDL_DestroyWindow(m_Window); + std::atexit(SDL_Quit); + return std::unexpected( + std::string("Renderer could not be created! Error: ") + + SDL_GetError()); + } + + // Set renderer to the Sprite class + Sprite::SetRenderer(m_Renderer); + + // TODO this needs to be tied to map size + SDL_SetRenderScale(m_Renderer.get(), 1.0f, 1.0f); + + return {}; + } + + ~Window() { + // SDL_DestroyRenderer(m_Renderer); // handled by shared_ptr + SDL_GL_DestroyContext(m_Context); + SDL_DestroyWindow(m_Window); + std::atexit(SDL_Quit); + LOG_DEBUG("."); + } + + void DrawSprite(const Vec2D &position, Sprite &s) { + Vec2D size = s.GetSize(); + Vec2D img_center = s.GetCenter(); + SDL_FRect rect = {position.x - img_center.x, position.y - img_center.y, + size.x, size.y}; + SDL_RenderTexture(m_Renderer.get(), s.GetTexture(), nullptr, &rect); + } + + void ClearWindow() { + SDL_SetRenderDrawColor(m_Renderer.get(), 50, 50, 50, 255); + SDL_RenderClear(m_Renderer.get()); + } + + void Flush() { SDL_RenderPresent(m_Renderer.get()); } + + void DrawCircle(const Vec2D &position, float radius) { + int cx = static_cast(position.x); + int cy = static_cast(position.y); + SDL_SetRenderDrawColor(m_Renderer.get(), 255, 0, 0, 255); + for (int i = 0; i < 360; ++i) { + double a = i * M_PI / 180.0; + SDL_RenderPoint(m_Renderer.get(), + cx + static_cast(std::round(radius * std::cos(a))), + cy + static_cast(std::round(radius * std::sin(a)))); + } + } + + std::shared_ptr m_Renderer = nullptr; + SDL_Window *m_Window; + SDL_GLContext m_Context; + +private: + uint32_t m_Width; + uint32_t m_Height; +}; + +class UserAction { +public: + enum class Type { NONE, EXIT, MOVE, CROUCH, STAND, FIRE }; + + UserAction() = default; + + UserAction(Type t) : type(t) {} + + UserAction(Type t, char key) : type(t), Argument{.key = key} {} + + UserAction(Type t, Vec2D v) : type(t), Argument{.position = v} {} + + ~UserAction() = default; + + Type type; + + union { + Vec2D position; + char key; + } Argument; +}; + +class UserInput { +public: + UserInput() + : // pre-alloc some space + m_Actions(10) { + LOG_DEBUG("."); + }; + + UserInput(const UserInput &x) = delete; + UserInput(UserInput &&x) = delete; + ~UserInput() { LOG_DEBUG("."); }; + + std::expected Init() { return {}; } + + const std::vector &GetActions() { + m_Actions.clear(); + static Vec2D move_direction = {0.0f, 0.0f}; + static bool send_move_action = false; + SDL_Event event; + + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_KEY_DOWN || event.type == SDL_EVENT_KEY_UP) { + bool key_down = event.type == SDL_EVENT_KEY_DOWN ? true : false; + SDL_KeyboardEvent kbd_event = event.key; + if (kbd_event.repeat) { + // SDL repeats KEY_DOWN if key is held down, we ignore that + continue; + } + LOG_DEBUG("Key '", static_cast(kbd_event.key), + key_down ? "' down" : "' up"); + + switch (kbd_event.key) { + case 'q': + m_Actions.emplace_back(UserAction::Type::EXIT); + // further processing of inputs is not needed + return m_Actions; + case 'w': + case 's': + case 'a': + case 'd': + case SDLK_UP: + case SDLK_DOWN: + case SDLK_LEFT: + case SDLK_RIGHT: { + static std::map> move_base{ + {'w', {0.0, 1.0}}, + {'s', {0.0, -1.0}}, + {'a', {1.0, 0.0}}, + {'d', {-1.0, 0.0}}, + {static_cast(SDLK_UP), {0.0, 1.0}}, + {static_cast(SDLK_DOWN), {0.0, -1.0}}, + {static_cast(SDLK_LEFT), {1.0, 0.0}}, + {static_cast(SDLK_RIGHT), {-1.0, 0.0}}, + }; + + float direction = key_down ? -1.0f : 1.0f; + send_move_action = true; + move_direction += move_base[kbd_event.key] * direction; + break; + } + case SDLK_SPACE: + if (key_down) + m_Actions.emplace_back(UserAction::Type::FIRE); + break; + default: + LOG_INFO("Key '", static_cast(kbd_event.key), "' not mapped"); + break; + } + } else { + // TODO uncomment, for now too much noise + // LOG_WARNING("Action not processed"); + } + } + if (send_move_action) { + m_Actions.emplace_back(UserAction::Type::MOVE, + move_direction.normalized()); + send_move_action = false; + } + return m_Actions; + } + +private: + std::vector m_Actions; +}; + +// +// Game classes +// + +class Entity { +public: + enum class Type : std::uint8_t { + NONE, + PLAYER, + WALL, + BOMB, + ZOMBIE, + ITEM, + BOX, + EXPLOSION, + COUNT // must be last + }; + + Entity(Vec2D position = {0.0f, 0.0f}) : m_Position(position) { + LOG_DEBUG("spawning entity at position ", position); + } + + friend std::ostream &operator<<(std::ostream &os, const Entity &obj) { + static constexpr std::array(Entity::Type::COUNT)> + type_name{"NONE", "PLAYER", "WALL", "BOMB", "ZOMBIE", "ITEM", "BOX"}; + size_t idx = static_cast(obj.GetType()); + assert(idx < type_name.size()); + os << type_name[idx]; + return os; + } + + virtual Sprite &GetSprite() = 0; + virtual constexpr float GetCollisionRadius() const = 0; + virtual constexpr float GetCollisionRadiusSquared() { + return GetCollisionRadius() * GetCollisionRadius(); + } + // TODO virtual float GetCollisionRadius() const + + virtual constexpr Type GetType() const = 0; + void SetFlagExpired() { m_FlagExpired = true; } + bool IsFlaggedExpired() { return m_FlagExpired; } + + const Vec2D &GetPosition() const { return m_Position; } + void SetPosition(Vec2D new_pos) { m_Position = new_pos; } + + const Vec2D &GetActualVelocity() const { return m_ActualVelocity; } + const Vec2D &GetRequestedVelocity() const { + return m_RequestedVelocity; + } + void SetActualVelocity(const Vec2D &new_velocity) { + m_ActualVelocity = new_velocity; + } + void SetRequestedVelocity(const Vec2D &new_velocity) { + m_RequestedVelocity = new_velocity; + } + + void ZeroActualVelocityInDirection(Vec2D direction) { + // Vectors e1, e2 form the basis for a local coord system, + // where e1 is formed by the direction where we want to zero-out + // the velocity, and e2 is the orthogonal vector. + // Scalars q1, q2 are coordinates for e1, e2 basis. + Vec2D e1 = direction.normalized(); + Vec2D e2 = e1.orthogonal(); + + // q1 * e1 + q2 * e2 = v, from this follows: + auto &v = GetActualVelocity(); + float q2 = (v.y * e1.x - v.x * e1.y) / (e2.y * e1.x - e2.x * e1.y); + float q1 = (v.x - q2 * e2.x) / e1.x; + + // We then zero-out the q1, but only if it's positive - meaning + // it is aiming in the direction of "direction", not out. + // (otherwise we're not able to move out from collision with + // another object) + if (q1 > 0.0f) { + SetActualVelocity(q2 * e2); + } + } + + virtual void Update(float time_delta) { + m_Position += m_ActualVelocity * time_delta; + } + + virtual bool IsMovable() const = 0; + virtual bool IsCollidable() const = 0; + +protected: + Vec2D m_Position; + Vec2D m_ActualVelocity; + Vec2D m_RequestedVelocity; + +private: + bool m_FlagExpired = false; + static constexpr float m_CollisionRadiusSq = 1000.0f; +}; + +class Explosion final : public Entity { +public: + Explosion(Vec2D position) : Entity(position) { + LOG_DEBUG("."); + if (m_Sprite == nullptr) { + LoadResources(); + } + } + Explosion(const Explosion &) = delete; + Explosion(Explosion &&) = delete; + ~Explosion() = default; + + Sprite &GetSprite() override { + assert(m_Sprite != nullptr); + return *m_Sprite; + } + + void Update(float time_delta) override { + m_ExpirationTime -= time_delta; + if (m_ExpirationTime < 0.0f) { + this->SetFlagExpired(); + } + Entity::Update(time_delta); + } + + constexpr float GetCollisionRadius() const override { return 30.0f; } + constexpr Type GetType() const { return Entity::Type::EXPLOSION; } + bool IsMovable() const override { return false; } + bool IsCollidable() const override { return false; } + +private: + void LoadResources() { + m_Sprite = std::make_unique("resources/explosion.png", + Vec2D{25.0f, 25.0f}); + } + static std::unique_ptr m_Sprite; + float m_ExpirationTime = 100.0f; +}; +std::unique_ptr Explosion::m_Sprite = nullptr; + +class Player; + +class Bomb final : public Entity { +public: + Bomb(Vec2D position, const Player& creator) : + Entity(position), + m_CreatingPlayer(creator) + { + LOG_DEBUG("."); + if (m_Sprite == nullptr) { + LoadResources(); + } + } + Bomb(const Bomb &x) = delete; + Bomb(Bomb &&x) = delete; + + Sprite &GetSprite() override { + assert(m_Sprite != nullptr); + return *m_Sprite; + } + void Update(float time_delta) override { + m_ExpirationTime -= time_delta; + if (m_ExpirationTime < 0.0f) { + this->SetFlagExpired(); + } + Entity::Update(time_delta); + } + + constexpr float GetCollisionRadius() const override { return 30.0f; } + constexpr Type GetType() const { return Entity::Type::BOMB; } + bool IsMovable() const override { return false; } + bool IsCollidable() const override { return true; } + void SpawnExplosions() + { + // TODO spawn 4 explosions + } + + const Player& GetCreatingPlayer() { return m_CreatingPlayer; } + +private: + void LoadResources() { + m_Sprite = std::make_unique("resources/bomb.png", + Vec2D{25.0f, 40.0f}); + } + static std::unique_ptr m_Sprite; + float m_ExpirationTime = 100.0f; + const Player& m_CreatingPlayer; +}; + +std::unique_ptr Bomb::m_Sprite; + +class Item final : public Entity { +public: + void OnPickup(Entity &other); + + constexpr float GetCollisionRadius() const override { return 50.0f; } + bool IsMovable() const override { return false; } + bool IsCollidable() const override { return true; } +}; + +class Wall final : public Entity { +public: + Wall(Vec2D pos = {0.0f, 0.0f}) : Entity(pos) { + LOG_DEBUG("."); + if (m_Sprite == nullptr) { + LoadResources(); + } + } + Wall(const Wall &x) = delete; + Wall(Wall &&x) = delete; + + Sprite &GetSprite() override { + assert(m_Sprite != nullptr); + return *m_Sprite; + } + constexpr Entity::Type GetType() const override { return Entity::Type::WALL; } + constexpr float GetCollisionRadius() const override { return 50.0f; } + bool IsMovable() const override { return false; } + bool IsCollidable() const override { return true; } + +private: + void LoadResources() { + m_Sprite = std::make_unique("resources/wall.png", + Vec2D{50.0f, 50.0f}); + } + static std::unique_ptr m_Sprite; +}; +std::unique_ptr Wall::m_Sprite; + +class Player final : public Entity { +public: + Player() { + LOG_DEBUG("."); + if (m_Sprite == nullptr) { + LoadResources(); + } + } + Player(const Player &x) = delete; + Player(Player &&x) = delete; + + Sprite &GetSprite() override { + assert(m_Sprite != nullptr); + return *m_Sprite; + } + + std::shared_ptr CreateBomb() { + return std::make_shared(this->GetPosition(), *this); + } + + constexpr Entity::Type GetType() const override { + return Entity::Type::PLAYER; + } + constexpr float GetCollisionRadius() const override { return 50.0f; } + bool IsMovable() const override { return true; } + bool IsCollidable() const override { return true; } + +private: + void LoadResources() { + m_Sprite = std::make_unique("resources/player.png", + Vec2D{38.0f, 46.0f}); + } + static std::unique_ptr m_Sprite; +}; + +std::unique_ptr Player::m_Sprite; + +using Collision = std::pair, std::shared_ptr>; + +// Game class - TODO Game will be interface, +// implementations will be LocalGame and RemoteGame (server)? +// Class with game logic should be identical for remote and local games +// GameLoop <--> Game +// GameLoop <--> GameClient <========> GameServer <--> Game + +class Game { +public: + Game(int width, int height) : m_Width(width), m_Height(height) { + LOG_DEBUG("."); + } + + ~Game() { LOG_DEBUG("."); } + + Game(const Game &m) = delete; + Game(Game &&m) = delete; + + void AddEntity(std::shared_ptr e) { + // TODO emplace_back + m_Entities.push_back(e); + } + + void CreateMap() { + m_Entities.clear(); + m_Player = std::make_shared(); + m_Player->SetPosition(Vec2D{200.0f, 200.0f}); + m_Entities.push_back(m_Player); + LOG_INFO("Re-creating random map"); + // add some entities + size_t map_size_bricks = 8; + auto wall = std::make_shared(); + auto wall_size = wall->GetSprite().GetSize(); + Vec2D offset{100.0f, 100.0f}; + for (size_t u = 0; u < map_size_bricks; u++) { + Vec2D pos{offset.x + wall_size.x * u, offset.y}; + m_Entities.push_back(std::make_shared(pos)); + } + for (size_t u = 1; u < map_size_bricks; u++) { + Vec2D pos{offset.x, offset.y + u * wall_size.y}; + m_Entities.push_back(std::make_shared(pos)); + } + for (size_t u = 0; u < map_size_bricks; u++) { + Vec2D pos{offset.x + wall_size.x * u, + offset.y + map_size_bricks * wall_size.y}; + m_Entities.push_back(std::make_shared(pos)); + } + for (size_t u = 0; u < map_size_bricks; u++) { + Vec2D pos{offset.x + map_size_bricks * wall_size.x, + offset.y + u * wall_size.y}; + m_Entities.push_back(std::make_shared(pos)); + } + // TODO tady jsi skoncil - problem s tim ze ne vsechny steny se spawnou, bud + // jsou spatne cykly, nebo to souvisi s tim ze se obcas nespawnou bomby - + // investigovat + } + + std::shared_ptr GetPlayer() { return m_Player; } + + Vec2D GetRandomPosition() const { return Vec2D{0.0, 0.0}; } + + std::vector> &GetEntities() { return m_Entities; } + + void UpdateEntities() { + float time_delta = 1.0f; + + // Remove entities marked as expired and handle expiry logic (e.g. bomb + // exploding); for all other entities, reset the actual velocity to the + // requested; actual velocity will be updated later with collisions + for (auto &entity : m_Entities) { + if (entity->IsFlaggedExpired()) { + ExpiryGameLogic(*entity); + auto it = std::find(m_Entities.begin(), m_Entities.end(), entity); + if (it != m_Entities.end()) { + std::swap(*it, m_Entities.back()); + m_Entities.pop_back(); + } + } else { + // Actual velocity might be changed later by collisions + entity->SetActualVelocity(entity->GetRequestedVelocity()); + } + } + + // Handle collisions: + // - update actual velocity for colliding objects + // - handle collision logic + auto &collisions = GetEntityCollisions(); + // LOG_DEBUG("number of collisions: ", collisions.size()); + for (auto &collision : collisions) { + Entity &A = *std::get<0>(collision); + Entity &B = *std::get<1>(collision); + if (!A.IsMovable()) + continue; + // modify actual speed + // LOG_DEBUG("Collision: A is ", A, ", B is ", B); + Vec2D AB = B.GetPosition() - A.GetPosition(); + A.ZeroActualVelocityInDirection(AB); + // handle logic + CollisionGameLogic(A, B); + } + + // Update entities: this advances animations, + // internal timers, and updates positions (with velocity + // modified by the collision handling) + for (auto &entity : m_Entities) { + entity->Update(time_delta); + } + } + + void CollisionGameLogic(Entity &A, Entity &B) { + if (A.GetType() == Entity::Type::PLAYER) { + // LOG_DEBUG("got player"); + if (B.GetType() == Entity::Type::EXPLOSION) { + LOG_DEBUG("got player and bomb"); + } + } + } + + void ExpiryGameLogic(Entity &entity) + { + switch (entity.GetType()) { + case Entity::Type::BOMB: + { + Bomb& bomb = static_cast(entity); + bomb.SpawnExplosions(); + break; + } + case Entity::Type::EXPLOSION: + + break; + // non-expiring classes + case Entity::Type::PLAYER: + case Entity::Type::WALL: + case Entity::Type::ZOMBIE: + case Entity::Type::ITEM: + case Entity::Type::BOX: + default: + assert(false); + break; + } + } + + const std::vector &GetEntityCollisions() { + static std::vector m_Collisions; + + m_Collisions.clear(); + for (const auto &entity_A : m_Entities) { + for (const auto &entity_B : m_Entities) { + if (entity_A == entity_B) + continue; + if (!entity_A->IsCollidable() || !entity_B->IsCollidable()) + continue; + // check distance of player to given entity + auto position_A = entity_A->GetPosition(); + auto position_B = entity_B->GetPosition(); + auto distance_sq = position_A.distance_squared(position_B); + auto collision_distance_sq = + entity_A->GetCollisionRadiusSquared() + + entity_B->GetCollisionRadiusSquared() + + 2 * entity_A->GetCollisionRadius() * entity_B->GetCollisionRadius(); + // TODO use vector instructions + if (distance_sq < collision_distance_sq) { + m_Collisions.emplace_back(Collision(entity_A, entity_B)); + } + } + } + return m_Collisions; + } + + void HandleActions(const std::vector &actions) { + for (const auto &action : actions) { + if (action.type == UserAction::Type::EXIT) { + LOG_INFO("Exit requested"); + m_ExitRequested = true; + } else if (action.type == UserAction::Type::FIRE) { + LOG_INFO("Fire"); + AddEntity(m_Player->CreateBomb()); + } else if (action.type == UserAction::Type::MOVE) { + LOG_INFO("Move direction ", action.Argument.position); + m_Player->SetRequestedVelocity(action.Argument.position * 4.0f); + } + }; + } + + bool IsCollisionBoxVisible() const { return m_DrawCollisionBox; } + bool IsExitRequested() const { return m_ExitRequested; } + +private: + int m_Width; + int m_Height; + bool m_ExitRequested = false; + bool m_DrawCollisionBox = true; + std::vector> m_Entities; + std::shared_ptr m_Player; +}; + +// GameLoop class handles user input and audio/video output, +// client side only. No game logic should be handled here. + +class GameLoop { +public: + GameLoop() = default; + + void Run() { + LOG_INFO("Running the game"); + while (!m_Game->IsExitRequested()) { + m_Game->HandleActions(m_UserInput->GetActions()); + m_Game->UpdateEntities(); + + m_Window->ClearWindow(); + for (auto &entity : m_Game->GetEntities()) { + m_Window->DrawSprite(entity->GetPosition(), entity->GetSprite()); + if (m_Game->IsCollisionBoxVisible()) { + m_Window->DrawCircle(entity->GetPosition(), + entity->GetCollisionRadius()); + } + } + m_Window->Flush(); + // TODO measure fps + std::this_thread::sleep_for(std::chrono::milliseconds(30)); + } + } + + inline void SetGame(std::unique_ptr x) { m_Game = std::move(x); } + inline void SetWindow(std::unique_ptr x) { m_Window = std::move(x); } + inline void SetUserInput(std::unique_ptr x) { + m_UserInput = std::move(x); + } + inline void SetAudioOutput(std::unique_ptr x) { + m_AudioOutput = std::move(x); + } + +private: + std::unique_ptr m_Game; + std::unique_ptr m_Window; + std::unique_ptr m_UserInput; + std::unique_ptr m_AudioOutput; +}; + +int main(int argc, char **argv) { + constexpr int error = -1; + + /* + * Initialize the input/output system + */ + + auto window = std::make_unique(640, 480); // the holy resolution + // auto window_init = window->Init(); + if (auto initialized = window->Init(); !initialized) { + LOG_ERROR(initialized.error()); + return error; + } + + auto user_input = std::make_unique(); + if (auto initialized = user_input->Init(); !initialized) { + LOG_ERROR(initialized.error()); + return error; + } + + auto audio_output = std::make_unique(); + if (auto initialized = audio_output->Init(); !initialized) { + LOG_ERROR(initialized.error()); + return error; + } + + /* + * Initialize the map and run the game + */ + + // some menu should be used to configure the game itself, + // e.g. set map size, type, local or remote game, + // optionally game server... + // for now we go directly to the game + + auto game = std::make_unique(50, 50); + game->CreateMap(); + + auto game_loop = GameLoop{}; + game_loop.SetWindow(std::move(window)); + game_loop.SetUserInput(std::move(user_input)); + game_loop.SetAudioOutput(std::move(audio_output)); + game_loop.SetGame(std::move(game)); + game_loop.Run(); +} diff --git a/cpp/src/math.hpp b/cpp/src/math.hpp new file mode 100644 index 0000000..2756185 --- /dev/null +++ b/cpp/src/math.hpp @@ -0,0 +1,88 @@ +#pragma once + +#include +#include +#include +#include + +template struct Vec2D { +public: + Vec2D() = default; + ~Vec2D() = default; + + Vec2D &operator+=(const Vec2D &other) { + x += other.x; + y += other.y; + return *this; + } + + friend Vec2D operator+(const Vec2D &a, const Vec2D &b) { + return Vec2D{a.x + b.x, a.y + b.y}; + } + + friend Vec2D operator-(const Vec2D &a, const Vec2D &b) { + return Vec2D{a.x - b.x, a.y - b.y}; + } + + friend Vec2D operator*(float k, const Vec2D &v) { + return Vec2D{k * v.x, k * v.y}; + } + + Vec2D operator*(float b) const { return Vec2D{b * x, b * y}; } + + T distance_squared(const Vec2D &other) const { + T dx = x - other.x; + T dy = y - other.y; + return dx * dx + dy * dy; + } + + T distance(const Vec2D &other) const + requires std::floating_point + { + return sqrt(distance_squared(other)); + } + + void normalize() + requires std::floating_point + { + auto length = sqrt(x * x + y * y); + if (length < 1e-6) { + x = y = 0; + } else { + x /= length; + y /= length; + } + } + + Vec2D normalized() + requires std::floating_point + { + Vec2D v(*this); + v.normalize(); + return v; + } + + Vec2D orthogonal() + { + Vec2D v(*this); + + std::swap(v.x, v.y); + v.x = -v.x; + return v; + } + + template Vec2D(std::initializer_list list) { + assert(list.size() == 2); + auto first_element = *list.begin(); + auto second_element = *(list.begin() + 1); + x = static_cast(first_element); + y = static_cast(second_element); + } + + T x, y; + + friend std::ostream &operator<<(std::ostream &os, const Vec2D &obj) { + os << "( " << obj.x << ", " << obj.y << ")"; + return os; + } +}; diff --git a/cpp/src/test.cpp b/cpp/src/test.cpp new file mode 100644 index 0000000..403ed83 --- /dev/null +++ b/cpp/src/test.cpp @@ -0,0 +1,158 @@ +#include +#include +#include +#include +#include +#include + +#include "array.hpp" +#include "log.hpp" +#include "math.hpp" + +// Vec2D Tests +TEST(Vec2D, DefaultConstruction) { + Vec2D v; + // Default values are uninitialized, but we can test basic functionality + v.x = 0; + v.y = 0; + ASSERT_EQ(v.x, 0); + ASSERT_EQ(v.y, 0); +} + +TEST(Vec2D, InitializerListConstruction) { + Vec2D v{3, 4}; + ASSERT_EQ(v.x, 3); + ASSERT_EQ(v.y, 4); + + Vec2D vf{1.5f, 2.5f}; + ASSERT_FLOAT_EQ(vf.x, 1.5f); + ASSERT_FLOAT_EQ(vf.y, 2.5f); + + // Test type conversion + Vec2D vd{1, 2}; // int to float + ASSERT_FLOAT_EQ(vd.x, 1.0f); + ASSERT_FLOAT_EQ(vd.y, 2.0f); +} + +TEST(Vec2D, Addition) { + Vec2D a{1, 2}; + Vec2D b{3, 4}; + + Vec2D c = a + b; + ASSERT_EQ(c.x, 4); + ASSERT_EQ(c.y, 6); + + // Test that original vectors are unchanged + ASSERT_EQ(a.x, 1); + ASSERT_EQ(a.y, 2); + ASSERT_EQ(b.x, 3); + ASSERT_EQ(b.y, 4); +} + +TEST(Vec2D, AdditionAssignment) { + Vec2D a{1, 2}; + Vec2D b{3, 4}; + + a += b; + ASSERT_EQ(a.x, 4); + ASSERT_EQ(a.y, 6); + + // Test that b is unchanged + ASSERT_EQ(b.x, 3); + ASSERT_EQ(b.y, 4); +} + +TEST(Vec2D, ScalarMultiplication) { + Vec2D v{2, 3}; + + Vec2D result = v * 2.0f; + ASSERT_EQ(result.x, 4); + ASSERT_EQ(result.y, 6); + + // Test with float vector + Vec2D vf{1.5f, 2.5f}; + Vec2D resultf = vf * 2.0f; + ASSERT_FLOAT_EQ(resultf.x, 3.0f); + ASSERT_FLOAT_EQ(resultf.y, 5.0f); +} + +TEST(Vec2D, Normalization) { + Vec2D v{3.0f, 4.0f}; // Length = 5 + + v.normalize(); + ASSERT_FLOAT_EQ(v.x, 0.6f); + ASSERT_FLOAT_EQ(v.y, 0.8f); + + // Check that length is approximately 1 + float length = sqrt(v.x * v.x + v.y * v.y); + ASSERT_NEAR(length, 1.0f, 1e-6f); +} + +TEST(Vec2D, NormalizedCopy) { + Vec2D v{3.0f, 4.0f}; + Vec2D normalized = v.normalized(); + + // Original should be unchanged + ASSERT_FLOAT_EQ(v.x, 3.0f); + ASSERT_FLOAT_EQ(v.y, 4.0f); + + // Normalized copy should be unit length + ASSERT_FLOAT_EQ(normalized.x, 0.6f); + ASSERT_FLOAT_EQ(normalized.y, 0.8f); + + float length = + sqrt(normalized.x * normalized.x + normalized.y * normalized.y); + ASSERT_NEAR(length, 1.0f, 1e-6f); +} + +TEST(Vec2D, ZeroVectorNormalization) { + Vec2D v{0.0f, 0.0f}; + + v.normalize(); + ASSERT_FLOAT_EQ(v.x, 0.0f); + ASSERT_FLOAT_EQ(v.y, 0.0f); + + // Test normalized() as well + Vec2D v2{0.0f, 0.0f}; + Vec2D normalized = v2.normalized(); + ASSERT_FLOAT_EQ(normalized.x, 0.0f); + ASSERT_FLOAT_EQ(normalized.y, 0.0f); +} + +TEST(Vec2D, VerySmallVectorNormalization) { + Vec2D v{1e-7f, 1e-7f}; // Very small vector + + v.normalize(); + // Should be treated as zero vector + ASSERT_FLOAT_EQ(v.x, 0.0f); + ASSERT_FLOAT_EQ(v.y, 0.0f); +} + +TEST(Vec2D, OutputOperator) { + Vec2D v{42, 24}; + + std::ostringstream oss; + oss << v; + ASSERT_EQ(oss.str(), "( 42, 24)"); +} + +TEST(Vec2D, ChainedOperations) { + Vec2D a{1.0f, 2.0f}; + Vec2D b{3.0f, 4.0f}; + + // Test chaining: (a + b) * 2.0f + Vec2D result = (a + b) * 2.0f; + ASSERT_FLOAT_EQ(result.x, 8.0f); + ASSERT_FLOAT_EQ(result.y, 12.0f); + + // Test chaining with assignment + a += b; + a = a * 0.5f; + ASSERT_FLOAT_EQ(a.x, 2.0f); + ASSERT_FLOAT_EQ(a.y, 3.0f); +} + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}