From d42d176e8de7742b008cad852f993a283b4c0615 Mon Sep 17 00:00:00 2001 From: Teo-CD Date: Sun, 9 Jun 2019 05:18:28 +0200 Subject: [PATCH] A* implementation Working except for end of path endless loop (0,0 point appearing in paths for no reason?) Commit mainly because the HDD is on the verge of dying --- README.md | 4 +- UML_Class_Diagram.png | Bin 43106 -> 44467 bytes resources/test_level.xml | 4 +- src/Entity.cpp | 24 +++++--- src/Entity.h | 8 ++- src/Level.cpp | 118 +++++++++++++++++++++++++++++++++++++-- src/Level.h | 12 +++- src/Utils.cpp | 27 ++++++++- src/Utils.h | 13 +++-- 9 files changed, 181 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index acb88d6..4ded453 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ This game is aimed to be a puzzle game in which the player sets different laws f - [ ] Creation - [ ] Interaction with entities - [ ] Parsing of rules and creation of subsequent decorators + - [ ] Raytrace in order to find best goal for pathfinding ? - [ ] Graphics - [x] Scene rendering - [ ] UI @@ -33,4 +34,5 @@ This game is aimed to be a puzzle game in which the player sets different laws f - [ ] Entity behaviour evolution - [ ] Rule application - [ ] Saving state through serialization ? - - [ ] UML \ No newline at end of file + - [ ] UML + - [ ] Unit tests \ No newline at end of file diff --git a/UML_Class_Diagram.png b/UML_Class_Diagram.png index 7800665767a5767cbba8d07ee87c4a4e397a7631..e5faeff5084f75aae708da41dfc1f428274d1b0d 100644 GIT binary patch literal 44467 zcmeFYRa}*A*F8$dqG1uzVJuR*L0F_xi*70DPC-Iy0n#X;NG-Y>L_oR}>28pcF6sK; z_&o0u@AvI}uz&ktAM76|)V=O2<~8RSV~*<$Oj!;OLtxnGwhL^>L{Fo$Hak5} z0yy*Rgv#(~lmqIAIyB1MM&^%=@}FB#2tjoPav&#w5HpP1@?w7wz@LOfZayGp7sO#hLT{CMP%uOicv{QV#ouXh>> z+(;kR_7WA>4;`s*BYaO1LJm~Wvf|Ec%@sqMwb;skybmD#VLUXl$%-#-w`HDjbipJVhQE z+SwvCS+N27G+UO1gU>XbqtlUBXKUW!q;PiW&R;9LNj~H+YW7sa!kDqNc)#S-9n*ti zn^Dlm`D27jqcxK-4H)*eF&8(KC0`s;G+p08WA-Wq9ugcY9eE(|dC|~nEAsIVXB?On zeVSMXwP;knmIQH0RDyDbPXbFz4z+lU8ndD ziAo`YkeP*`{#aMNBRT>eVp1UnI6KS(YnwK;VrP<*&IhzM>d zEP40PVSz>L;*(n?L)aVk_~$iYE7zn_Cyif4A5@f%X+mpFb9gAJdcdNrM?KeELHMk$ zMlom9Z3;59#I_CCBe-IvnVwA`!*LHBw)Mr$dhuXAO6)k^s9#f$NW(Qe*j8rkC}NlG z?6YQ=`NVcPW;wjVwjrlOUJD1y$2OLca&jAN5EZR>B`K~`gA5l9UX+opNu5%%HNLLd zB6Iv{dQsQ(U32M$e)kr{cD}tyrUgk3XO*UtUu{JzXWM6?D061Zhd$jcDeO*_nT*1M ztDi4yh0w_j-+H3aYVV^T_dN>$?~Zk0<-nHEvyYxFd$kzJFB)7Vt~#g= z3;nd|^0!tVpCdeoRu%BdT~Fx0C#ySb?xr^s7~P%Z$=a}Urh$jTS($kBE%!6M=X;p~ z=_!_T4L!9Pxp`M8h2f*)dc;+1eoW6|2qDz>INMw({i3*(oJ-E&g=IWDDF*74$Cb=i zwopNvZ*>B(S%?pW^1(7Z`^5X6uPt!Vsn;P&U%m$9S#9y?sBra5C8&a>8#y*C)*fdV zxHMPeN#N)QGB9X_$0y~1C%O29c4j97$v+AX&kozi#mZywy~s^<$Y5?RA8k3rOV{fQTd|W=d$HZnT3$xPpi>njuGHFZ7;2@4pd&bei&@MPV6t z_r>g2+j7a$BNiwH#S~;Bd5pKv5q2$IUs>&is6W6ME^4u>KRbP)OTo=7os%H3HNny2 z4q^>nq4L_-^o3BTiFsMQu&T(jTaw1_cfWXQz_&F+Fy{T_K}N|EE8>&KDabW{y`W0_ zT=dX=c2^-we#wF#QX1av859}x9q%FoQq|<~o&KI48E9dEQ9LO6ed0IQ8e!D?y{uC; zRo1-?i&i?CKc`dn$Q(()dRrdO(S7Adfib_rco=V7@Q%L8y3E=mZ;#)6j;X2!Epkh5 z64c;HX=%;Qw>;$C9Zj&hCnW4xS#t0DqlQYuT9@Odg^}lD$z<6KVnK`K)=`Bm^i36g zWt{3c8}_WlzIzXNMu`{W>mFlT?c2$#cUIC}{J64dMbegeMtF~_aHeQqxV^IdnwWHz zZ#J%QEyD0HaZkbOg7`|Cc73lQeONVX)CnhOO$TH>?3nrRxH_%aUR}odWy#3kQ&L{{ z2ag}n1Z3uHV$6p>3h}T}|JCq{-SyZBYaQDBywz9r!?lxl!;?v_lUK8WC%yeDIg&E( z)hP@ESPuGHxYH6)4#DN%=GvMy-EJPmI&8VlOvMd2Uj)k$_x<4UWR0|Sdk8}yk)oz} zRT+)vx!RYcjA>=A$C3u?Gn0=UzPo!;;a5C)e-d~C!yQeB#b)hj^H6rP4V6=d$ z!zi@k$1Db4{c(aoI%V|QuIe3}H15>og0@!*WDrpLL@bXMp^W_7Ocdibi8`y2?sgChvGgr^wv5p&&804=}YOJqe(dN%Y7wl zP9{&SUkUoDzfeb#`t}#$4@qic+<9awT3@~&sgc%;sGMV!HH0xwL8VoxvO=k7Vp-hC zyX#7fUFZjnlb8E`%9A{3m9(A()1N;CKG#wEa`7vnmVkzbat76e{{X*HVd9`3-Zvf4 zh-28H;~dURx%SX=gc7gAZlr`>$Kqpa!YQP2LZ&J|`@4%tz3@|Y;|Q8e24CsrPfdE~ z`Da?%-ZC9YCG~*^($Xa%{!C{cWLp})BzD~Cr)iR_D(MN+=60uveqk|F)AH>#&#Iyn^&2Z_bM@zpm1&6 zYVe*~mlVA(uC4sC`|}Empd!f(w>8S*_tFE36Q5XTp6^L@j{7h2W5zvh9IC~YnhtXH zOdhD8^j8UaH}%r#+(=34s=6VnacSVY;Owm|s}7NN&Ayoa77ee|d(m?;d-lzD7*A=v z+eoT12m9s|%NqhyB;Rm%nIeDSjeqtso?OJc1O1nq*2z!t(IRlqg#`n zwvTeZPRYw2UH8tP5`J;T9c*ZcI*n-;pMsz_5#D3UGx5~ILtAsEjb_W@ji95FsHzdD zRj-K(@7*8^LL+iy6+GQcc;1)!24@_{%}w47V`qR)^o)2J7;V-wnl_=efG4u%S77HYBM>{l6+nLP}|VokhI(cxp5lUFq>b z$c}Q~j9j&{ZNr!GdC^|d_cK$beWSfGLKLg0i@8WY_~ZkMhvm6C36EMy)Upa6xld(RhFTgvGvfT@lRkTpV!Y5qB*KrLEQM0n zJNr2x=ssD@_W6OG&Bl<6ipNx`!+dIQQe00K!vOKlib~~PhWay4Gz=(LftE&94{kc# zp7)XN{8QGT>Ae^7hgf(7c5MTkQKgI?!SzY>`?@6$O)^t)CGQ)j%9{l1%hG>y9$r}2 z5g%0-GQYje617ciADbt}6XX0seN-xuC1v$p`Xd6&X~P+Cb^Mg=HKW?oF3N)*AuXkY zrLf9$W!DcB?X)VEy7}oghcTg36&8g_oWFk@=~qUmzf4=i zB#KR=Eqh7$H<>~<_Qvv?&#{I11}o7T*Wkd$NfewYtm;NKNol?3s9|V2oM96F?%0o6 z7j9+pEQiH-?!GqM)-DU4jq#|cyi`u-@qO!*m zDpD~Q7M5S;8O+3JbFaPA!?b~jNY&^7OHO)}J0xPK!-I)2v*`y>bXdMQF8R!x9pGW# zP9|z1)m{pYT9TQlu&|48IYGwEL@oonN3~Q$M8~8tPSVosW_6Rwb^?ryo2;};VPSe* zP8F$>4#11G|G)g=N{8SGP=O;bVD;ZfQDYot5qPE>TU_# zE`BeVu0UHST4_1q9u-!S(vmexBgun$E{yP?p{LJH+v|sb`AX--{9c_JDh`+XrPxX! ztb*3VM-Wwd4-I)4i7`z1XY|hCeD_V;8*d9o2-^r!bSbouQn9z<=!TP6$n-w1K@7n;n~EY#E5R1rmVsXyx>uz1 z&(-R4iVMXECS@!`idR1i@lV~xgPSLsPV1-(8rI~NhZ#R3k#tR6=dQDewPkZqdiaI=Y7#hK~g=IvwK(f&LZs<2H5qYQeSmnjratR?3H$%5-A8 zV{#D{mrZB_tvm;^G1m4^>nwWL$HCiHV5p9|2n~%zr{vO?S8VnLBrJ-reOF zbkcqo@YSin-u;}MbR6`%+r+S15-A2E8mddYX#(IIq9G4c$o)(+vu4T5yXa<|Rt6%| z&2C%ZBD+*X20!F=6uv}6nmi?cr>R0gkRifB zJra!gNYOFXFLgJf?T^z#Ij?rrbT1+i!X+QQDDZ~ zQ-hkw4EHtKCEt%Xi#jua(YspU1wb-v$L^*$C*x(N=fm+6R!JnS^u$tsM+k*}@{JUt zobm=%!EDpI{KxsaP$x{7qU2SZCz8w&C%QjlFyiukH}v0g>Vi!=;=+9s1Yuxw3pXd> zB3b<4Oo^8$(nC&Uj8TN>z3mX&Q-h8ib2eMQL4gB39hXLC9(W)lsj)XgLn$o_s&8Yitp{kwAl3Qn+EXt|?}T+-%e1@jG_kTyRv$aaA!Zw3UE zl3I4zO~Fg{cGE9}MTP4_cF!U1yEp;`7TD;;%&jnZvvphJF-;*1Oxg}cazU%Fs}$(Sfv@6KPI>6*TKQJ&&|o8o9TL!vCx5EjrZo(VYJ!i14mG0%v38vJ zX+M7J?w{Rc+C0Rhi!>JrL&|@+yF{LB0?EcVTNsVz7;{bfHf)ItzXn!N+Z;t70@J|E z>IyTY)e~WYze5CP{@foXZULv&Dnrn^P?2RS;=T_s77?54miit;r}6J%6-p_{$&QoD zH@m}gNEjk4U4P{m0^KZ+I#KcpMA%Ebt8%{>>d(BvHn48RG1Ljc(Bz{ex1ww%iZX-9 zI(7IM?xB_PF2PaXCxZ&~upW^Fqmm@EWau$)+sP(HBikK$r1Zi(`=^r-<#}t`bebBd z(IUaNTe0CFO@1jv@Tv?}=-T$T>`L(s5m`ua7e_XuaUGHDQ!F|4jPEM61)u&neAXk% z&5kUw50L{^n=UFC1K8c`vZysRjk!l(PE4#b;L5b%=H?^CSKx8oa+_~TjReiPpXn~I z1Fj!eC8$U|K4a6uVpfUGtlRT(FqQ(LxbgpiBcsOwjYove*BcGcRY#hwn5Rt zzxVQEmG6wL(Ld7HboIMqCDO`{P_s==8iFA~DX;8q7qk$R0-M3=E{lQjO^YUR{oW_H zJA?k4eQP6%AudbLmJ0IPa4nx$N*;L$p-8p&f8P=HpBH6D_vdbhP_)4KblNF&-8;I+ ze=kwvf_?vqeVOmQzjGq6E#m^KVfLhIF9{=aAu(5zXr-Kl{BpF1%!kBCEca_$GMtYF zh9p{^TAbqGE0NCkzls1$X_^XtxQ-X>Tj!g2fJ`AosJtwLobiq8jV~@PUOf#*nnCF+ zJ3K>SjPkzAxi!0m6CieC!=j^rY#xe;<=^4G$aP6>dFhs)3^(DGRHZr5i5`R*U#Q3D z!xTj+hM@*XK)eeZ`5`0S^C@{Q5Db=L=AzI>dZy@$8m^{7*A7k__naRMwb(9IPrjJ$ zudZTLBCI2Gn+v46FHeR3{CM)||Me1&Y=12Di5#pk-b=ftxzZtPAF{OF;&b(flyuX4 z%kh4#g>A>x;?t>0sW+Gn>MLIik$Qi$VWu#^YDP7j`lJYIhf`;UWJWOFA}9Lw^!c$j z5PqX~;n#==y<1$tuVKaRLB7Tk>!*ls+n`RQ{UE-TbgK6Mb9%F)cV*yghc?m_3j- zFEG`)^gI9T?f5yU#3m-I))vF)$xocgb9?;yCDD*JpY3)oUU>%kY>f7k*ljn^qqA)f zLZAqjz!9-`#rk9Iu8zHhA+!eHV)D1#4RbzB)AB7+qQUxZd-^KFd+=L=fEY}T9uMI|UmXcYrV+VH#M{Jzq z?A_?PQSphs5)27{W93)W&=Z&`U-z!7sdDPb@-^n_=6WP1Fs54awxI{v zqb6Qi7qUNDZ^%>@8{uubzO3cTb1%|l@D)cSQ_}aVyk+g(hyhSjO$L-}0Q1;S3$OEP z{*X`w>kJK-E9zomh{$S&qB7jic4(zaia@X(XRv^HMI^xWoWUraSeB1Aj$KI+?e|_e zDGALO8Dz3$zM>-vuY~fs(1X$IN$A5vIJYL4{l%Ia%5S~O$L!8jgAvRK2+Qo#8kbx9 z@grTKcX4e_ktl*%Gkh~<=M{|H2%u)aAQO{|_8+cW67tW1g^djqNFf;A1pSZ()V3aT zhL63Dc;qw>W$4;1-q9o}rDFh!Iu+dqV5xwOi{c4{?nQSV8aIK!`8oir`2Rpy89z`AKB+=nJl z(Ze@QPQK?bTSZ-yFR@8Xy8BDew!OdI{dQfJr?4JvS(yvNk3;FUY3PibSuMyRQj`gx zh(uOg{Fc-Fz*q%haGoLz27S88N_`z*BIDUx*xX4X_!2?*Aa{r`u@t&}Wsmi<-zVPp zdSLh4jj0rXMXlJkeo-0S93~xjH=lZ2!YDU^<2hZePQzS$5)Dr7tEx>U+_&yHK_+K? zS|M`mc5~rwJR_j9!c^B~$NS7mxSA=XZB#vpLy;SYDEwZg&gb99up(+BOU|Z26G4a$ zb*-gkFKJ)!L38SMffyVE1Khn4Q(m$Lfv?TaZndu2(^}4P;CPw=8-nvRadWhi)a?idOP%x3p|`#@+p@yS?PHAOP6rN)V20$ zF|!>;w=5O~0UEfotKZ8{Gn1_s&gWYcB!hzV9`^xQCNwE=QfO$w)%3&m)U8kUpe~nM z53DXm9UJaFV>V!hbU5gr`P0eJ^}x~G0a(ieV5r~3nBZLV)tin7X#M(-?@*k22SzJD z#ZBw<`t+sy>2nF!ogn}L7}ATLcD!o7J-v16KZsiTJGF{p-GGC46Cr1x0k!De{-MU;xq50bjoM1808!&Tp0`E7?J z4#PH{^m9d@E&T%#lal))C|8)+u z2oT9a;6ro`N0b$8jF4bL7DWN5F%Bd=T-Q(kVlJmBhU}g3dYVn4MO##!97TbF${ut{ zd}bR3+HKX4(;N!#wos9U8Nr9A9SvPP#-n@S?EJ#niq&?S%?HCt zP2h>=-aFqoCud9Ret>3An@&5^ufC>NpW**x;{>A6ow@jz?r%aMq$sT6Jc|>)eF+2( zzeQf!=OYTxz&mvuxH)CZkfyw5(8l+@8m@-!XGb@*Ud9r*7TU_ww?e&TsZ7pFR%#OR zc;o$_=p}wYU|-fIr;{&HV;@y{!vWR6jbueLx<`uvjI2p#ic3$2XJXBgtzjbAx{D{n zLzhfyyz&u-cf0s;miEjq@ucSJl{($DPc|n`#z)$=0DR47Sbf1ytQ!~3F9#KIuaS9q zrbWa8euB3r92*Z4%7QZ?b(@7n(bQNUXW%&GPVIOCi%O2KMlj}yQZeqh6;P$KephMg zVrl+pixITGto|Fl1L_c{uz4N{s28o4cQNmQKXHMh#CswTlFSQ9!KY&1H0gOe?ffpo z*V!6RdIC6o6csYQnN7Ay#14eRESQIVoUiP@T%!->L{us8a*f^-$c)Vr^aMc zv?V^Y@x-Tg7dm4-PRm$yVoH5$(R^@o+Ds>~;KNheuv=f#ws`n3r{i7v)eD~`9HYra zk!<(79Xvp*q%ka9=SWyJHp30}A7w+^P*v&D63u&W%1g;$?`%&bWzwAb>`#5`Oy@!Q zy1)b*+WkyM?v9B|ESeusgV;6AyFl#36VV5cbq!Y$$nJIe;oP+zsAh4D zC)5%?N>n&IK2!M0bKxX2RAS5$#Q?CmvO?o9C zTt%9Y9fq$I_|{_KnTtp1x1yzuhtCY0J4y3sL8LORW73tb&{2#3blsLY=}ZF?ypMZ@q~jPXS70q%N^hWX;jI5mma$)m)N2eFvM8i;flp>OikX3c8I~S2D6^Dlz%i{tsxOpOry8Nv z7Rx)B_Og=DVK@X;9s2>g<98{|@D0Ba`k0310s%I9XdU z3e1#ylp(b%8R~m(Q-D7F!sDL)93>;QB}BU^y{l;)7hZL0KQJ%H=e;ur(_y3vrI;3W zbM>eHa7ae(#@Kt^mHKl2%}0lNY#?U~t5P)X)^9m&m3;aUVRZE)Wd0tJJn~Bw^zTe@=WW+C5)Q;u+pJ=hW2td{Ip4=O-FH zrk|QF@RN(Bn# zkXW;&Xu8^jq{W3~UzpoXD|*<`=W3ZQ)Pw>vq@Bv44*Ao9pUAhjOq0@X!v7{aUB8iva`VBa zb~7b8he69~ZxR46OPg*=To%pcCCMqZ;;_F5?xT($x{`y#G=2y5jES zD1e!jFVJUlnEsch17InWW=Uzoj;4Y?lHKo|5cM0x`UQp6hxw}iBVeh16QXMjB6p(y zNe%(t$hgV)w~Y9Qf6~>6+b6UV6{Z^9eyw+%7Ic3$|5D5z0x#K*^=`P6in=U{%M5H%L3ccm3+oYN zoj^q_Up5S-1**?+b?dR=4gro>I10dSM0xK4LL2H*eN^oO`~JJl`91aODOkQl9RJ(3 zsfB5TQ)IvoV>C`MttpB5S1A&;mvM?X8UXJn!L9B}LeY$N(;MBHx9Wx8E^u5Ez)_&? zT)Lk0oiI|uN7!)v;kDmX=J$N5@ZhFM3nTQYL%U%^YLM@8QaZ^XW=#rZf47^64+MQ6 z&O@dAuD!+8S`Y#&|AKHCm=yuhIhmU#H2>k%)6bu9**Ax|GL9?bvF#8{J&8BoD{W3c zrosjRVIde2%Vbl#+JB3x$?acQc>E9$O@o}T^{kQPv>7z+n%BV=58nwz&w9pEqfTK~;mycxTqw z8Pc0ngcj9QEa3mt@Mj9Gh+D*<4Dk$%s(|yDSH~IUB`rwXCnTaL(CO_3P6i5snUg|0 z!oI2S8W0w3nEF{W6qoKjv$e;$!`{h%#E~c%1=5WwZ!aj)>KNR{$jdNy@WVA8xvPZ@ z{B3QtCI>d@!*+zQ_Y}4U)I|HFoXC>)JT$sTU@~mGF$vDpYn?m&toqV3p@r`atQmMid!xwe4?n}1(AL;sl}y;tSDxs6-?ZKa9XvbK!-}TrG7`5Q}#5#hhtV7Z5D6_HXaOf zba(`}b)_Y#J`vP!Y@zQ^pf=@Ka|)=B zqEW_dqf1J32D|Z=`p4wV1Pdo=4rWL| zTeWu2tt>XBw3AA;a7NV$l+gP4;9720`GU6V55Sp`CIt@_`=m9H`e1d3JhXD=ciS9t^TH3SpINzWCYp)i+>L zl|d7z(-5g8Nq+T2V(XQ*QB5p{jPXw@>ZT61N`E@!<5ETx$_D&I{5Mgo*7vOjY(ERg-1=;22{nRSfxyeL_`)0>atdi%c&H#IKt35(+ioC z+lz{zCcrXLy?J%q1j>%X)F&ZS3nhspIA42ldp9sH=Lg@dntSWEo6?ur?w3`fNzM2> ze8zgaI@BKY8_xSJJ0(Zx7NJ=GFf-odv?F-h}zQ%v5%MhD< zN}@_$@vkq!LinY|2Bv_8*-* z_jPkfzuP#~$0(_Wz8dh2F87~$#W7ir?;B|-%VA+Woc(=fA_gXK;jCm;iEnU5@HmrQ zUc};eDJTCoFq*-JGT7JPJqFTd_Z@7?r}9+~M`)})(v7k|1%+%iS{P$a?rrTT{gf3O zuq$Qj-C?8WBXJO&OQo@}J7KBFD`-aS`wtYkaS287r@Vquo#t+{gtWQZR^6qiiaX@C zDZ3DF3gJ7;yD+p}euY9a81*V`$__HRxMyIK+2O_;%+*{WCbg8f{jziYn0LDTTby!4 z*4#alpx&{6BtSz3VpYsS##Mr1VUIak+Fl_e2@y{OKSU26H9jYa?;)CE31-aL zY@gHjvxf<6dgY2B2=DrmD34mzG6d`Tx=VwnD4=OTTjOmWH{Rk;mh8e-x2vvekgt`N zf1D$fk5U2NPbjq%exh?cc{t25A|*J8c!rJmu>Yu`x90GLpnhiV2Z{?+s~P8`SB$~~ zziYI6mZLD>(7?7cVfb!AUQI<%Ggp)t^UpN5OWzsS7UcE_oY>Pvi>rET!~-j~I;bjEpvz$W#m^AV}4a^00$D!dzu3q<4oHUtyKfb)G0 zM{MmM+JNsKu9Mck7pYwK>Gv|X=LpEw*B9o|2e44?_nlvCRwS(OGkJ}Y9lBtiv3+IC zU_vM$-eOs|ygAWV_jLN0^~@ND>M2~90yoaoqk)sls`?HzMCqq|?MgV(AKZi0ogUST zPB#>aY1NJaXSh~>yw1?TN`hurG?2R%7(xE!U&~>4VHFT(**@q_k&8Mp?175%kDNpG z>ChB1tMXD7lmvKIH0_@=)}mpU(Gw{32vfZH%P12Ye{8$8qezvy^%5fLlkKGGU2Inb z5Z9g8mj0vaCf{?>zemo^UDkf`{|oE`Q9H5;(|Ld&ykz3Hp2t%0QVtY>tIO5geMliC z)pDD7zG~60O|3ZsP+Cp*w_4#J zJ3kIvbn0ZDlg>~x-_P6yoD9;2qft%Pcc7dkT(eA|Fc-)LIZfJ5w3LKeVT~v-a#8p!Uk_e-h?A3%+qMH#qGrQz^5-7;O=)$fj5a zz@KdfI3zUs#4iCPKI-+KsAn(bvvmj}@@IiNTF0sdIp7mMKxWhIG}b`Y3|WB3-%ka-_r8$So!;j-X6FH(6s)szc5Gt+kx=^l=4}r z`>H2A0JH%OW(Gdg#AUPi^k16lXdeFH{4%}C-LZ$-8^c`2Jm&XWRTZTbc*J`r15LXD z7eGtRu@E>K6UD_ZNFFJlcrqM?)n=BE5$M?9%N9|-+>}f;vaUWqH$1y_xU;qV!AGYR z7vkI0A8b1XHUe6WwXr1sW3lGMF1)RKAc79qWVCo_8%r&M_et3@ayB8Ma^*;(j1`oN z0Ndj?6&tYj@gu)!{`mLl^P>;6A8 zom3#0F83%f|M|IuI*pG=*9`8(smFIQ4)#6zJg z47i<818p~94U-FTMXt%ukALj7P2*h%8ey{9a^V!=UE z-%$|keu+mf07FY`@*Bhx|M6kGZEp$?l~j!;ihc#*C!*dY2M4c0VUd;D{H^7m3Joc) z*P8%ce#}22V7~8;JVwn(ozs&PY;N37EHIBgv|a0c{?`?{dWE!8Qo8cAIwBY5#MK4^AS!m)o6XfIWestFB_xi)H+e!*P6 z+{Ni&EHS#UO>L0dxgRG8(r~oKwKw-Irg--J47Dh>6P2PcSi^nthEVG|wBe$qaxFfn zBVg0h36E4w-fGP!%*RWwcm70V5Mu_etnvr?79JANyw`<5RT^4U+9K)A@OnXQM!#8L z)7!o4CIhi6^_t$NY*!w2Eh%DxZ+-F(;5{_9MS*TQ1#-C{>1Ig9QMwsA+M(WO?_=Ec zzEh*aNwehbdL(IT9&u#fW2D2Q_vr7$i4>&@DQ)MZsY~>@g5~px_nz-s3LR@uNH*!` zSKthlz;uj>Rq$!k`cZ!V#UZA?UYa0a`Q_~!H&4na8IAb1Uya7Kk(L?Vp*`z>K`=#R zk<_zPu#_(s(sCv9 z(uSL`M^f}UFIsTkPv^KLYOQWI8W$F5n%N!LBq(n zMGyj~1ecRqe)8zus12H&4n;lXop-IQBY;y>aVxxx`0@+^TX+Iq`%OIaH99>eWI^h< z$4ddW-IWqX6r@F!T(Z{Ao)CjHjG;5HRl@UdlZmX5wgg}$8gLXMuyRwbz1=@Vb27T? zKtz9v@!iC#sifkW2^cM7A)I!YG2ft?n}{s~HYUQgmNeKT+pUklIa-{h)C8`epQyg^ zmjVywzsZU>neU*p+iyndz(bz=)K~#eIljNilg(98juvQyd{ZrBuOhS{^(TIZz~30P z?FD3)azb(-RaJHjlh5%J`y-s-r6FzZGhzgISga|1^{jdOc*r6Jo33;ul1BZNP-@K9>6lj;v{upijbpMWp@R+^XX=i4nF*N{WJ_gsEcG+V_9`rs5|4R z2}!9VUOUV~(GlZKJ0B#=m1MhVbP4n6EZNnd>oua}|KT z+v(_;6s6F&Vzc+GjPEglF2I1TijaItj$=-8ghLY4BHGI`|%|hO}L~@qmJqvSc$N#vje@ z4jWSC-R#D)AZd)CwL!KTe0U=+{+q=g+dwV>Q=HiqR*Jg1UB?dHjyqk$W<5w&ENzLj?-jH7p|2K#A zpoK1VnR6L9R=d)~x#hR(=p?=JP&UsdRHsYc{2n6QJH=UeZ>=a#nwl7-jUNZl>Mg{y zrtJhiRp0>1&q53(d&M^fy18F$L3zC|iYtay560q{0%H4nW8#dj5Kj8S^+9 z`qBU?pA%0JODw;4DrLNKL30q4{nS68K=M-vR=4go-em4{jx;|$SGD`kH6%&yoke@` z+V0Pr0F|`;7nS5+p}=GRnT$WjY5W;`I(g7T7*S5UnerzCv(n+>_0s_)1BSx{L^+p+ z{)2K-^l(P{j$M8u(fU_d;&(DagqU{H29`FRp)Q>q4!kPjiy%%wa;y2vF2qI z3$4;SXXw!SczbAS^tn-uuzwuU(=wuLNQoxIRjm7Z1?AcKr0}7Ra}FtsSq?*`{rqm2 z`u`fH-`0{ZXy5}&$OCQk6Ow1tVdv&vZz%r_x&Cx|&U!q;gX^L=3U)X(_bCAK+c5I~ z{(rB~533pvp2zh&Jcd>W|KF+TnMx;0%K1we;8MfpMGXW5fN;7 zz|;*G<|LB7Rpz(x(zbEm`Ih)df}Dn@`_@zdjUH(Q3m5%TIn%a(UgVo0ws6Q_2;b_R zuR7@rESWrtihv&O@ANkHa-0-_o#SNjUP_dMuNi#F6Ex2ghHx6&wxh zMdW@Y4`%zvQnI}cBo<=Shr`e`e8ZH=PWAv%Q^9;n^0uy-%$=+1cb4;C)gPld)7``W)3?UBnb~)u zr0!YRVuxXkVKhPXLI}mMbDKjm>JG&4E(+{b*p8o0(g+cT#8_i%c;V_(V7d4+!7sPe zbUgrdn)K5q3Jg;Y$Atfq>JIH}bblaF0_vZ&W$s6AFbWRBi95J(I;;wm&mBBI{H1*z z;WTFXr7E$M)JhJ=8 zu+&|aDqwRpx09?eEq*Sn2N2E$h-+l1aQyj#^qSN=j)#`|-_1-QXvqjpn!>7qV}nh} zxkupAi{h8qf6MZ@m$?8&*5L~82uXP?np_ua5$40|&uOuRT_q99$oI2;eiB3e84@H` zmex*5LY_vMvs5mH0(3f(Q@Jf@m0kXgGrarQZ4iZNAOx|+sfbyc!yW?tLNy}0P5}zA zfKUs8wzG*YBdiuSvWlK;&9(mBIXP%zCNK#@4nf5hDOI5;BBC}i`DruQ_)5&=g`{)x zK`BsyA;=m)ac-K^_z=a#ikNv=*@39P928|6_|!@3t64hKq2Qjgo~(A0?b|v41@h!2Q;YfQVaZ zu@wnecFLhEq<0nq!sDYvqTJLJ|J_d61S*n;>warnP8qYGy@)&kbdA=NETsq?JdAKuZmyxC_`4d zqNqMC12>2a+yCy`@oNs)EqIKsdlcI-3a5!(%WBf^EeaS(yEW~n1dS5x%P2*apSD!0E>obT*o;y|~$DZr`8&}%iJZoqdpNW1AUfjuE5>>~0}>|gC(U<>oe zKu0}+g?NNYF7cXhQ(@T^%Gmmt4QB8!`9dxXE&r=gBhR}&r`u+k_jg}Sp<(NQ!UUI; z+#|Ku>Yn4}Ir|M>K%3ps@93lRa+JW2;T#3l_QgYwr8e|gw-Kefqka*6zem!ekGeNr z)}`8Qg)2?8dreO^eOXYR>;YOu6j(>AnA{zu5rU}ypuq#X!Lp4O}q_Et5T=Vq` z8|t=*M-cpb9A?)gx~~f`$DV3wJE-tpMkRgOHm^IGwk1eqd6lwLSXA0ZcY8qRxK9II zY)WlvzUpo6VE;5*xnVkZZ))vC3<^=?8YM_0(+++ZzxKw7wuKNSb3T$D6$Vr_o(=A9 z&wQzSqwlVO)vv$2P&Wz^o;}A-v!MqX8?_8;1IYd?0qhtQ1HBNSB@uzOc2&U`$ZUE0 z{FoA;xW^s~=65|G9Nr*VqU6|J&(m{rH1&ehcjtrI5nt7=HU45#kw9ZC4izC3Htb_9 zysVaQ4Y;WCt$(|yrbefLD>?jRT8R}kRG#7BiuIO3H^Jw@PyHn7O|DC{Uz_79h}gwf z(E*Ms!5XIYaJAQxJ8J1}?$^67pEUl;dEBY+{E)bD<-y}tz!ziMc-Hy2tL*lo z%#4%5n3H00!f$6{Ka>0m*5g-05&K2W7e$_cr!0)TX&>&{iu2r`ym1lT^X4c$W?gL0 z%X9uH4YS*Me|BA*95~Oe2dvG9te*X@X+i6v>q2$cCo>1zmQSb#{7$M4iY>)(240O< z?SHovC#kh>ueBFlzBkY^l78bRdcC32{rL9q@v^mwH)YyMb>32v-$v5@Xr4H!itnbn z^NjtcrMnAl=DMEW)YAg)q|(Ov3@o>auZO(;CSo6!b!i>`5SlzROi8eq^^aqjWSvy^HsMxlN=VUu=$eqKoLyGPK zCi)9O&r?#fv7rzAmJ5bZDe ztFxF}LE5tx%pU;+KJ*%z@WR5g3c5=!(M4o}7F61Oq}kh>)9$-np5601ZI2R|54&^s z0FFA;JI9W}>+9oKwIB6crS0w$hM~4)U&xXk8+8Ge9_NkW2L_FvM0cs-&MA49s*`O? zr-Vv>yF%}5Yei*El-h>wq=2FATk3Ivwt+MHoof^*I5Q3n_9JwpjG5?nj|0aku=)IB z^OT$FPh30K%QQi-si=SEUUQ=3ruASDuEalj0%TH%CU3^nbK%JISi0Q(YF)_pJ1>BT zvV+A8($hCnU+Xsc#vhYm;bFhz7AZ)_jMFT;>rwjV-RxjQ&7F>TDvmOJ_&`u{AYRDU zI>`TczzK>9b}4?*SL5 zJ4J2ieSQ4U;^yN`M-=Vq8b6mR;OtB^-?)ojEfI7Bi=iw=_#80s)!kn2#VlO)Ep#m0 z{2%7tGAzoj3mc|mXc&-2zyPGAJ7y@AZbV{0N>VB5E|Kt70YPFwM>-@W1yoeJyCtN% zs;qr*XraFJWetZo@6R z_~~Od$j&#&9`~k9go@VvRC~OgGWoQ!c8=$9tMNpz37WzPk{rQM$bx0h_yjc?GN6d15(6YH17r>Z)@ag)-Hw}Nv^phXg zH*+-nAn8Ya@8YfKWPn+i1@=KmX8Tp=RB8GtHyYK<$ezv0ZUEUEY5MWl!bbY}Vfw+z zf^1x8z}fcKZAP!OSt7Fota@P9(7HdidSLOUfl9UsZ4vnb4qFet8`K9E`Oe)q09KC= z3W`EGHo$&Tn}Pk@L{IZzWUxNG$ZysD06d$;_jK8;1$`oXXBj3xiZ&do`GPG{FiPNP zrJOt(sN7g}4q%u(+pFA6UH8TJob(f2t3P%+0sG6h_F;i}%(YYcV9m23IyYBSj~XcE z)~9_YkD2Sid71?xdQAU~5SA&himYpO`=(<)>vabW=f|=qi^{T1asE5(7$2z(?v-pi zvt_FJe7<2Cv>|DE~SJWgtcrOGP zmLpxPX|%CYmObh|_^K@PzR^>~&t>kV!3;pi<8C)2BQY@0mTKAT+%s0jLU0eeqe4An+J()ZYcA8j*Il1bRJ*>OC;xZB9Sg4G2K9? z+9?vC1|^6&+V_A^%NYpUKCn!l${kEP>e99GzR z)sy$6=}6M_wEwtlhNl*`vbj3wd~ycPNt6-^pJ{C*+Qb%l_veXh#Ae48Rxfd#Y(&V8 zpZUDksrtv_l?53y%9?_>X+Ixp8gA- zcl|H*d4hZ4w+ReTK=0?vY)xpNv_I~-9*T!yES{`zybM2PW`#OMNrlc`X{p+UX`l&1 z-8geSl?ZRYl5}?3V}cH4l=#rduEFK^j-M80W1;xrO&==jcMC2Icl0H`LgLUtvjFL| zjnL~;=xUBTSKnzBfdN0I8ft#t*12#H`&er{V-U*;SDW93o}-;>$DBjx<) zX*i9WT7(mA@feOzA-n6x?JwO2AD>lkTecsi92Iwd<6w1p%<=jd*jCqj?)`c`P6iJ_ zsBy2_jSy`{I;-BerI}Q@U`_(xENVi`Cb2M|rSj3j7Nf#hC~9x%&hZ`xkoXCzc79VK zaR+qi!!9P7qeZdPFVg#CA?O<)uMN|Jq8}G<5E1Y={4IO(hsT?2z`UfXT?&cpD4FM= zEEW}V7`3J3S<*S)y8)uq8v{Q@WdO#QzRKrC2z1beK!4k9+V1Qe6)7?eFb?fmz}_0K zuJ;-*OTb9(GG{^OgJ^o5m+o0FBb}e!R*UW#v$zSplVw3ieO3EKBr}deRN4W)#-pSK zh0Fv>EuqgAEtz7}Z$midZE`}NBx}Ds2#zrn@`ft>IAUpQ?PyE8Z@ung-Kjc%BsVqT z(|N_dy{*opuui}J5SX`y-N8{LCdL^+OoYICpC9(AWwF!t9=C!hn(WKNkiy1RzJ{m3 zL7vNa3Pwf_c!c56$JzS_pv!6-#hki?0gM5P;)afKVz$h3ds33JN#TYD5VP-?Gm0+K z*KWo**FL!_so*AAC@$3HKX`J6PEdzD9LuoZK#A57f*9cZ;hHr$MS+Q{ZN_Qg;VHVL z6o0l#esJne{f|2vhrpMNwO?ktTQlD!cWko#+sx3o^un2S{_nv-Q-FZu$^glWiU0TT z)MlI12LLU5{vU>KclH-N+ci7i{XYzEJh4Rs!j_ZP4=M5rWghLwpuL*;eRTCN^V3;8 zlaQj5??sdd><1a?Z5w`HInCSC=n&}tFnKATJz_n*)PMacA2+muqZA`H z2e7SuBtxc8YyC&`bxVi>NXvA{p67dwgix6TwbF}5dK~8#9dVsB%bqm}Wd5&QKv3RHHxABRq-;iG=|ra9}yqVMRHVu52r+n`+{eae zz8@6#;1PY)+@hcI1*wdbXkPC)c@#h48Tv-0p+{*V77nY%Gusw63qeOR|DF~$3=!ic zq3q1f1?NCEM@1_xj$DEW6JF23DC1x!8dM>2|`Yef$t!X0B_SRN$Jmk12cR zC?J{!Kk^g%&I_iC|Lce`lS5n&zI>$oE)e<$^ZateI$_v&O9BP4Wr=QSERXH@hMppS zSfHVkwJw&emgwrtf?C)sXSo#B^}V-~<)sAFZULv%SmO%!upO7=^3$*}9PyM@`Hgq= zsuxe7w%S8n3Lh5q*s8A*hq;l|@7XudSbghGiR5j0Cwpq=+brsfohI$$@nV(7*^5Z# zpph)C#@J@F5?qAGplHs!Y;cQqG-dL{`edc^Y~_Plva+~3hmZu)P7*qAj4Wm-&aKgm z9L5=0nlyeQ*BE&l17t|Cd-=`p@=6&yhBv88e(wtWkhXP$JX?{2n;kn@m!CMRR4rcE z5JygWsM`M_sfGitVkSciSevQk`nBZ^(SU8yi(Lvw2c_A$OB|ySGCQobAY>KyOzfC> zX<*ujFS8MpRhQ5*a<&j~wlK!mp0yL+WWB_L{hT!C)?zEhoZ4tRegdnmXxkj7+l_i- zrx6pHYU(i&7~**&1*EZV$B0!xm{u!F#Fe!T*GeQ^Pwf0&ToBCz6*hLcKmiJoJOQ^%5oao`KCLzuzUz|Ugo%Wku-0thmnqM^^bGML% zW#8OYT|{@|8TCXk(n3VnbvTf!4E}dB+u0x6;g*TRjOB0RHYZ>H#x_(P`>jkGh|#lc zFdg6#FDSp0isZ(1_~8}_>J3@*KHd1{6e;gUO$+%+@7pWtM}+lVW^AP9ThjS7Lsbbi%=*r;4l%r%P|9oaC|r`e7b}my4Lf8<3UCNM7K66evvtr z0i4!3<9b|lK!Nra^abjRwyp}Xm?neB8w}IFgQ=DFZCDK9+M3~nE$Mrc_$NU71fWC6 zMEWSY_~n;38l61z@ZEZzE(LC!ZP^-3`T0=%bGo}2t5U&KZEKe}^R>m)Yx4uNE^Fcq z%<(ZtAve%Ef@9ZNpz8VMunq>CPxVg#WAPbn8ngOeMR8dgeh+2%^mSg(dCGPfYuoOL zm;i6|_hR<<(sZ@1!nT;be|=1I_}N9bm`1iet7uzOZcK4EVcFC{&JVfq+i%ZK#OJpU(d*|XKpaLK)`BM8e{GPbZ;R&?6^JAM_iq8n zoQVU0@~=yW;JD8r1*-Mgy!p}RV*-G(*|@XCxC=D#{6BtMzg$yKbb-3i4m*|j&tvu{ znwSzJl{wpt`~8&v{jz9d)5vnt$nqNPPXD|Ee9Yi>e}AgU^j7?iBgFXVD`rOfl&wh5 zUK0LdNfw{pN>e&E2iBtXQ}1>4M+)kpjB=8@{NIv$%U&)%y|`HWo&lo%=fFAswSwVI zAiK6QvUW$Z`ID*txc=8@`s0+F%?hqJae-r9v678c3Pr|~4h&@PoeQsCxrq4p{nz(9 zTwT~QuYbHS10Xu+?~5pKQ^{#|WB;)n^`1siASmZbXndC%nNj(!pb3nN>iJNFyE%u$ z7C|8rz642Nu+Ybr3;8rK^~ST*P47NT6=my_?%Kd-b$@&{ivX!F7-ogj3?bJ5xmXwn z(R3}QChJ2t0yQ~N-!=^05?o2~UOI~IC{Uz|xC;eTwM-}N0f>#sSdNEUIvzQ&Wxo40 zGyKpd`fay~28Z_yZ*pl-W#pGg0_g=c1WrPd`mi|gjn-&gaai?SjQa1OAXj7aITelY>1~Ii{&jCB6H_TD&WX# z(^seiX{_$cmr`=iSbCz!<(TC>OQnl$cDsX?6{iq|1k9_ShhfO&>I1;-jF&Q|L@sjj z1MwzvD<+aZ!kL&mXay%nqT+Jh@OWo3PJ&3|j3m#J^{bU+h~Q+Ph>^m(u|Y(r)j~Yx z4uA_O66DYA78vLlOQcLwKQ5ga^PWi`ypGXKYEDdbsbqq@jW|3Kjx?vuTW}0(x)xRd zbMsbq+XdUNsb-PR0|lGs&nE-O$h5g31qF?ui)#`~4~Yh@vwG7eJgT_FFv!Rfv@9aQ zM$I*q_Dew3O-R%SZuz-C>e}iS5XiWN+srR9iZi_RxP)`MJ?L8bAi{k^d|Y$rP4OrMgd(7msd2dypM;kcRc+da{OX$p+U1ODYO!+;A8;d_PIT+WU<0 zt}$sp?@Gk{p5pYj)JHIEyF*=jsP$FTFXy;LStsHuVgso`yeB|{MsjKvaMzlLc}lMg z3{7qsDqh<$5AW+Pc`z{LDq;<>N&4E)eSIwgHv3U?$lAq?CI$HrYyv!05Q;wdvS@zk z_3v*kp;J|b>QcH_fkEHqhuvdxPsi{&jgXJms;Tki_c&$!;$YCL)Tx}d(zFKqYfANUbX^f`I(r3vrwK7zq$%_t?XzohOR znqse1H>Sw~4!B#cNhB_Gro(%MoW`nR9{Ze~9Co*ms`Wm8G?@1UQ8Vl($CUC5m3z-jh*g~6)VDzkLbLhVq z;ZJ~OaJ_)Rlje-=RG4kid`zkqHS_lk^hYqCparjkaU%wAUl8HYc&Gh>tJ|s=V04UBaOYx zaj1JMNRi;J9slgoS*NWo+Pks2fXH*|SjPVlK$fxgj2rz|_MU@EKF#7@>q9+Kv+5*L z^n+1YPz=o${uuIc!>^l%-}7O}N90NrnY%QW`l~)$&_a~FYhrqmckGoX@$>Dc>D}3A z5w+qJ8bMw6pSd1?K%phSO|&0F0BQ%#j$(thD*$;JA-wjX;8&T;HAFKAczW%Y9< zIN;7tMK!1)T1xzA>+P|&$|uyUDaPwJ2))fB4u)BlWrSkx><${=Q4lTU95cO}{IN$U z@*D9-#}_Q!{FiJR4fb)-c;cWFo@{t{(C|;I-CgwNWdMRM@(s~{5 zCOQY8o=JnK&O8<(-0-08N+LB(u%T_<{ z^9n)}SYOZ~C2qSWj6f@Po@E&&bd8rAJw8|vSN@?8Eqti)=84IHYeuSf(*2VZ;uz4* zk0PeMaC6SUe-1SGH`~BH013IK5TXGB)(u6o9Yu7;z%AU=<@FoHha%Z6#$?`aB;iek zSV27$wVIhJh|JXwoGUlW1yxu2?R72}R~{?4p*u_3I#kcLUY9+*Rl8f@EN$yi?Cb;R zc(P`GP3Y&3S{kEdnUW;mjj#;ty7Fn;LI+p5UUW zxb?#I9Zyvg1TVhfRbO!%{1>+i;_O0s_c#lRwA$krEtJBctI`WHB zuTYs|G@8@ogW`FHHD7oRbZX)HGJdz8plWEKu1Mxcf@r@szs2g1GKZiF1&7v}qt#GR{3Xv#5)(i_| zyIVu{!(eD4;`1Q9CApg1Ix-V;ge#0)Re>5qNX5bOaQ!XlV3&iX=vHvCz(Q)x_NLqP zXhL4%?&W)qMgF^a7xn(Kr@gW<2BuzfZ&FZpj{zOO@v75zevFTkBK7O%h^GHSJBNu; zsHQg23^f`eaaXel3Xiq-&+)tVLz_h0FJDUy%K(f*ek^XrQ}ZP};&G+wwAVgz950yX z^GwJX^HQtHzbpP>VEi`J_27|x&V%Po`YHQVY}HD{VLMkwh+|RmrO)5x{86d(CderU zWhZ$fn%UB)KhG4G^Q!+8zCVUM`D?dcArc^&(E*{}2QzIpiDy95=)MHw#C;2`{rOSI z71Toq1yi`QcM?+}EK7ple-Uyqr^i!m4YSE}=XhOB|9Y)md+GlA?*PfO{2qazkmPqa^}ODKVCH*0>lX2dxR=(zegY_ zS8~!mVcjvWiV#($VeJD->kC4m2u&!+JhXLX`Cg1z##{5KV}eLt8tJ%3&VbxlllX?T zEO(E3Z~CbN^}10Mcg(IvEMcYX9S z{ebv;X9$hw8w>DGZ1{A{ax5Rq*+#_X(O?5Jnz&|R!ZSM_8Jw9*H2Z>1&Xn$kM1J`> z1D~ErhA})G#Yir<7~ z`=m}*SE&Yl)FjyQ&~p27I|0)3ak+7RLV~`E17^W>C@E9k6Ey-!rG6}1NGQs% z!+Ri7jp|`#p(-70nDen0pNS-TZQ)3MvJ89r7gVfK(n+uo>o3{GCs|pj#&(*9XiDRd zis~!oQ(nYjm5zf4TY|FNf@GxO=&Z^{&mF$$1^=~$jxM6u=L(fmTmPTHZM8_|ZYS1I zI4S4V7fku*BgRVCcD^~#)pLD9g+A}cc<`o>G{+|i`K3<~Nd)@8I!uOjUji)(!bFr; zXuIA9zJOGu7o>~sQ&%S%R=gr&_Z{i!Qvh*|iiX8yXoobRnji(W@KUwX{O$bpx^mx% z8Tx(Bd&q(!PZnQh__W$`-D^}KTHUpr@#GC(!->E}pbDDGoKRJsb(Gq4sy{NhBI-28 zYvZ%GGW-hy{^2g5N9<#Ah^ALkGes2!m+#Huwd67MGC+*qbQGGsp!6rjXrEcAj+5GF z6%P8g61Z>^I#C9^1rS3#^c_z0qcipX`PL^LnP}=wXm&Pd7K?6&rO`Ly&v-rR%R2PD zlMbSh`+3Zh+yLVVIjIey-4zg*+#+s+c3i_so;Nqi%6IG%YWMc?e=gA_gk5MaM@7{( zf}I8+WG^X`ng8ac0E!~7cKZyw=(m|@OGBa99cAn(26hAuGh>n|6-mnUN~+f4ZE?^K z{tE;3({ygUdWD}um}DAkN7Jm=`l_+tH3eK7ns>%w)lA;#1@rlO&{M&45#ajNFZiUb zpmri=#BK?J^SL!FGCrdk*Athi5C|0@^QjvZ2w4Z`EL8WJgJ|uI zWcO$53{1V8U-BM44ODQW`tqnpNg>gOd$#oeKFyd`{A>>oW=;Wd$4MQ9i-M+G3Govv zxUte`qQEamnpi>%I#1w6cs(ua0Y-)r^KiUUBxP0CeoSl>@MlgVhUz1ci(6o(UiW0V z?x*2i#SPUhZWgCEr{nd#f+T?_l2?bh)ZeyDsr2kda|S0`^Ds~B$0$P|?(2>UZeCymrE*zxE;SKr3CS71bqS5iZeqJ< zOR0Vr(^l)MNGNp{ULf$Y4xg;BGaB0r;wOAd8rs58oT@15Ks>Me@=2R)E5K2ssrt@V zG*w^x{gT=%_M(w95d^8m7;fh7tmv7aEVM!|cBmV1wSOxLdzFKowg*j6=v*$td0p1{ zMRi*9+@Q$#{p0cPUxO zAz;0nuwGK!>z)!mqNVi3dyfKRc%J_`}OLM zVRk5|C|u@rjI)esP{})o@57f&ua_vD{NR_1nYNpv(!yE-e$ZA z79CgD72diMn1vH6G^JFk7zkD=Z@F*4tf)yb#%}7P5OGohQKx>&bknM-mjSDQ8_pq{ zi=B2O|I-eUVJ#ulJ2en77tCd;#eVEc5cF?eP4c1Ce{WBk&j7(cGE?H$U2xA^Gp&^B zLhz!b5^HuYgH9pMX4f$sql{Kyb`QE2O6#3>py(h36*KoHCX%-kTx8{T=)l$Q-sL#1 zc#}|S`9wxN-DWrU*&nor<3&NOC!f++E@+P01&k z^6qJ4G<2DEQBE9;E9V{@%b`tN0?6Z3qpy9#;yPk|^&+kr;y(w7AB24BnR>I}H@Rqs z4&>ArT5mB>n4|#%6!%k^I)&V$wo0UclROzqU4)T$=~J*ZUlFH0kwQY?ymfR7Pm$WT zwQwK}Xi7)h&32{#7p0M6?QE)JsOuPz;sIC?w?a;C??O(TK#7XA;C3)Imxry<4<4?3 zr7WI-L~AZy9vwUfB#%HaQZm}FGTMK&7Uh!d=Z>e$Rdp-28n;WA1BIz-$C~4kupg6# zmP(J8mAo#a=$-?XZ7bWqOx&U+kQeujZt-b;sjr)7m0SvY8TA`o{(QnexPuFplT=3) ztBSEhTaOnxTjBZ>?e_hp7!^qPZ9*&jn!LEZa=RN)nKwrq)>H(3!A3PjOg!KFjP+Ui z5new9rg-wwmzb^Lr!0`LR=ZLPcJ)k8IX>>+%y z=O&-Nky6C;fIW|1#Bcr_2+^4gM-tPb2uE8rNljS}Ll5drNG|T&rHAj~3Ryx4n{#YO zS_`elpkn8LJmqf}peDI=*$}5o^tLmLPP72gR1yS8r^f?VKQEqQuV@;hgQ^matoY`{ zaRw(M6|2TOMEAZgv1i%~C-4iSoyG+xVyDc6GYaw2O24A27e!*C7Tn*MxsQ<=Z6;7IS!_cX!#?9LxwTUJ=<2iA(xlyepPA_HU%cFMiTuU*~n~kOgdhs zOcMNWTdTye@&HA(s1#U>+jZaNO;oW@sj2<;wN|fk;RewZxqK&uv3JDCP}1wXYq+|< zML>6Ku?55CxC1#8Ci5(kKqG4*j0bH}xZwU zNVyttRe5Lk~xXAac%HX^stgn{1oO@tYr$ z(vT5RGJe;(iB8o}BFc`uCp3k-kTc(ssAsvX@Rqq<^xj@QsRE9<6ym|(5TW-7uTjDs z`65^wGT|n<)%W!|Ml2#~p^aF6Pt; z^$0PcfHBcRE&<9`-B^1l?^RR%e~(~^*T^Npx>6M zk4ACaoG!VATT-FqcrmcliS%7cKBU!-$X`!&X47MAS z5K$0p9yZi7ZB4TDDSXX3dcmPB{~z$Oy4NTf=O`f7q;!urR(PBGjp*cQ)r1J<1!4kZ z`XVRzyp2r28Dlc)VNJ>EaH);*IX^|}Z>UojjgNQu*Zmz8vN6hXuy6k4e(fMAW)W<( zP=a#$*yZ?U`F>gX*!u$h7%8!Y;4YjObFAN%nc^I^L|cCh=q4TFmFFB!N z1S4ou9fKX}s>|dp?8(=lo<2-fctt!nqfI!}SUDjQFEW0TlM0bY=KT+YTmVt0ymKOGWpTLdr6(EmtW%Y@whl&JHHt|@{kl{ zA9(S4XDe18_ZR7}9~=4;_Bc*0yu6raYnBZpW*k|3%fZ%3bfTYQ8At@$~Hu8 zG?Uj_MT)A2Kx@U@!G2va3S};LY{~QQ_nU0l zijMyhm#)Vq@e)9m7SI-p%CHC4R~PPNat|eE&Vl1q!y#dLHG07u9q3~RN`$aek6lq7 z$Fc<#nHZ?Dc-@q^0xF`B2a}FLUn#rB9EP*kWFkh&s!+w*Bfk!X2y}qc0l`*S!J^H! zEA{3o4WcEMAJpDjM}j=kK&g3auG-Oz3_nOs_A@{*Ghp{^4Nn8|P%;j0;kTJk46M#; z%!yt!FF^fFBk98aIelq&EH?9`F#_Uq!-c6LZcTMMcF=avb+6(WM51Sd4h^ehy@vjD zJyn~ow-w$AfHS`cfSojvIfKNT7n&Z$g%w5@6u@D`Is|0S?h6NAh}uT^8x)lBl#MJNUE%R!Oc<|DS%2 zCTSA_3rZZ*7BeKa-|~=3@Vu- zr2Mm+`ZRG1L-xC=AQ5Sk{-WrOx(IG1?Ktu+^90pM zGoF}3FiXbTvhRhaI=SbnPyN69ygtVVl!hajf9OcMv%ZMFQgno^@s0^!8a=oiZejC& zx2(?4{_Exuze|t^(^B}3U(!KqC@-CCI#4YDME0eJjBUwt>lMt=<^c1;)itec1*=cJ zLbGq<^2_%-x4M~*%~B9-4sS>>esi2_l@Hk;Gi@9oAv)O9Riu;3W*m&U4(=*7pkMZe zeZ^!~L{x+3qV{I#t&45@6|TP{2~)#U=D^v%ZLA-uT0jMn#I*B46*Fi*Az%8aS(UV# zJn5Hp3sLl^`%L-eK1bia08582de9)zwY7%)KWL~EBh~zj?V>A_7@d~53&^6pZVX$R5@S@B^~4a*zyA)I*1PAZSVKL#^Ph29K+Qi zXKcNZsz|||qdMdiY3DwMGJQ8YUTD+%asm~_Jolg_k>_HseP)iKw>f&l(-UmB2~6*j zM8L{8EcOeJY$==d@WWxmx;+lApMW3+e8tQBcz9#08_q1NivTMmRtqxBS@2HrH{-_r zMX^SHJBlpIJJ70V zt>vM#=%2BGL~={* z`bmD*2kCi1F}LFc0Ra)~;){TM-#@?^eB~?6fmDOnCb=5-oi@IOi94-aN+U(|9`WP| zzML_F-php>7fHy`3V&bwk%z1z&Dbri#s=lGu_uvgyhB`mT0FYs)<>8>=X$9>H}RNG zOlkf2(c-Fig>zn+ztMsU7Jj(EbU5eMJjA(IcR>aF5=vkSk8pnf?19|z(>c$vKckJG zwrR2f6P%A+4lYOu(NrhH$;W!{cwcC1-fkSt9gzeR|8N~~b-y)u$M4*<>U$*&Ia-%n z0K2~!{iGwcSo0r9Y`-@?VsppXf~H0@8K$}7wWe9KKW_TYwS7i&l&q#e-5_S@#m2nc z^O0q8A-AU!`*U5RyAHcHT2(Ef2%pIJ1;fqub!s}s?42-GZfq3Q=ngOOv`@4My!`mJJVI+zWQPVTixQ=Gj= zx=Q%(cGFlb@#GmT71z3bfEKSG3!~BqP0-y?j(MLtag?Fy0|Ktr8sq9pJ-@QQ)e}Sc zG9y0rEExqftxPXL7rTh}*COYalTlyUFMV11pjA0CCx<>TpgZ7_Bl`ZWfnFP&6kH_L z4Tq(_-el23S`t2;ib`TjHryC!l_^>fQB#|5++tHD>L8XGF!XP@2(i{bAzch!Ew5@% z!mn0{25c6cOY5TivZ3DliOcZsk^3)~dD&^h04fj@WY0kE5^gjIiVNGdzjtMlnN74!b@@?;Y{NKVJ&JjdYG^!fuV+-vdE|+kUsv-gYtNd<}g1 zIrIM0e;(srUn|}8Hd|{G<*tBVv$#2j`O9O^%w_pm6|OgZ4f+1Ii1?))3s+b@6NHS1 zePS?9Ah?@{Y2w4cI_uT8+$b6I43Zf zo%>{{9-DLS1Zh?k*F1gfEQ{AP+$0Z*En8pVo{-f2aAwM}qL1N(hQ>`FzhLoZ61k7eW!24ns(D)<(fW2@k7bqT zViTP?YD=}yy9l2qCgVg*_(@wQ5nwutY#gOdRk4U${@2LM${PKLCVDfTy5U6v0S{Yg zts2R$YvvhGV%YvIz2kKjF7>PJIJ5*zO&&eet`&a&u?bL&eBW5KZHrClIwzplGhHXaU$&itf+fWPo6 zynos!ZNmr7kG4in-!sqGT~YxUk1u>b{J_{|Fi z+;m%tQzs}iENkT2G%hF0{TjM9sn{;!J|GBGZ_eXs`9Sp6`W7jTECy^$d2N`HLD<(m z&_IZavC;;FCG%te^(}3j_8k-}M1nPmCg)K5+*x^vK3q7K#R%#lNLut9)6;&-#r zibR>{BFz5Iv8o}*>rgIwCVr)V_|X~1SC?k=CQPAkM(w^lj@> zmT^n7_0{9{|G<__jZY4JU}#0$p8oQ6Z;5xbMP((#!8<|+UP#xOg}7gkdH6^RwGsSN zB7UyEgaZ$*pbV7zHZ7e*sZ_E7zaoW>!MNY4*hhL-yKe!p=!M(<`03LgVb;uE+P_k8Iw!IVU*#1HLau|Vpua;AFsy=T%>NBPTD8#d zxDeXNZv8}yfXSFKylmxv^1er{-^9f-2|>AwAe&uaZOh6c`IX{v%j*tom+QQ2Wa${y zLQ>r%UgCENU+O)-BqwSqRrQnaz|>*o!4jh9Jh=Dky_JJ4xxX`-DIO))CHW{7M(D12 zgg)4icYWNXB$1>6!KseTs5(~HnTvEF{MpXj``$lp#W_Wy>nZu%5<@8=Xk6(O?r~Tk zQITPEbEyJm+PA!(UhP;zO|W9Q8qGWYIhK!1=pWjePl^D@hyK*dh}r#ZxGXA?leySw z^#dPU$R$$3j0hI;bO+GMSa-r4RaFZX{p*oC>)U6WtzUyn)qVca*f5g(lODvrUx+7d z$hf-pTaIwWag=JO@(JRB=d{SayCH($j%x9f0v!XnFkH=0O~7ehvNisVqb_}%%C2Mn z@+HV$RXD-XSs3fpEgPDZA456?Zc$$-Q5RnC;&3>gUpBN%>o`ti1TWMz{pmB?72%7t zA1LGj9j1!^sJWbZOY9bIh9aF&SN{FY+J8mx)Czd}AKZO`>IPe@++ngWj2{jq>C)$9 zMDPZPL|kX&c7>n=gL32ZdKSnim-5PD@gH-T9TSsSLA=F=@^{&Uh!w1WEid_6m6{Gb zcuQHq6U1$zhus+2H@Bfb?mwZCV_uBjAiV5)HPo=qL#L{#$y?DLEnTkHfX00NR~}%M z1qWRp^r+#YKB$#%6itDz`%hTA=nE=Y;bd(azCafXwF&OK(;~d~Yo!9~iP@Tu$E0LH zl7d%1&goZbv47zGH_!)ubSW8z$%^x7s~U!Qw;b<#cE($HL#T-oa6m^EEQ%Rx_3wC& zKQKX9x+^3qL=rnh2)P}HD_-FvuG+>o8}MS8MZD~jqmUDoX!S~gRxELQz3ryI^Lxf1 zE3~OY*wN~~+;d1c!mZ*nrP>RMr%trlYr$Xp`lsBe?xyA^a+9vRZXbZ+B=5kQZ*}xu zlpnRQVDv6o!ve1v=^>Q~aU$T0oyL3`(mnwtwS`^kS~jFV?$Zs;GrytEN>;zDFYh7= zmC1Be%rI9N&+6niGD#V>b_tEPqi(*(Y+S9QTT*VC9KCBFaB0l07Mu#+EEaLL>#$h7 zs5(6i`#K}B)9)*Kk{)(i)|iYs@(|1%hT=L}FSC>0`Qz*w6Ry zRcK-Hv=8J#f6%JtL1YDwHDtk4)*emo!}?UXnf#|gCM9Ra~yKUU>}BrRZZLqu~=$`;<53HXRxEY zOQm?ce$}L|lJkoVWbRPk!+ZAG-GR3!7k31bL(=NA{+AXYYtp1eq^ff@UYA`&?Nh6) zv_T0Wq9yw-h8k$h*=kgL3=#^d_K@f_dq|L#aHpQFq)$Llja8xNDIWcsia^vjb%3}K zl(YhUDgKfpsd!e)EqUA&9O##@v?5cHD%Da}uNjd>Hb0pj^ z8=OyS{af)jb{bDOQ9kx%5>e?d+b zzg1ZBQfXy!T#UUHf?HStpU&iYhD5k~ZLMJ$Mz@Ufi72`K%7SHq&D!M-bX)}Gyu*#w z!X5ROgJ~33CQ`|-+`Q-RId`+F$bMPD`41wwHMmF9&$j2$qX;+V9#Dut}X}U_cRn9XpQtgRnGuO~s5jTz% z&Uqn2)dz=$I-=%_9t-E+SzDEj``RBI!qL@-#!NPODtgo@U8nBLG?gPp;nmZ7tEMv5 zhVtDxT=x|DKfhN=BMi~4p1g}a9d`U-hhd{zFJEMILD(StzQhpYSlz_LsGB#O->9$n&%X$Z-*non&^8! z2HDZ_^IS?R5P>6X+<`qsL&N2zMxc9hRRa{QV+$8vhEB$V8cltmP@}FIsq=MfIjbq^ z&&AMp{(W!{4V}y>hrZ8td05ov_W}gb5)*G!u}#z-dPv7LIGunG6a$%tBiFahYF9;oo!gVZ9uaLVRRdY3UG${Y6`C>;VxmpcJQ#q&;EA~rSU8MQR z^*>T}Vun)>G{C9{_M168wMBo{{kQc0qaDr2GYf62`>^!3gjS^+zboQS`;|u-kp`MQxhYva)`G3+P||Y`;!_r8jP8{0ct@Kqq?j5}hRjC$A@!dqX%gZZ+BhEJm$6W^}6{Fa@=bQF$b2E0)@mKC)Sz=HL;D} zX9bJCCP1N&v3dU{1IG&>0rS0|`mu-czN6=YxP|Da+Jbm72_Oh!kg>){{zq`#-}>%8 zubXI~%~CuJX2kqHw|DGo@bigwQhiVvmLspwBKj{C#4&y&C<2R}7}5>bghfzYik_rwd7kaJt!DcDo z#b)Q)%tJnjkn5$6gLe=e-KHn+wtRZ^_k{YH{6$Gu2{)YMC!*f}0H|>N9OxSP_3wyd zmQkag;kRg$CkMWlx^l=BI}!G$y!p*V!8A4vvg@fNs|Tq@a%7&B*^dFrK2X4=e@8cJ zG3j5xa+L$wwHTVadLb)z!pN(DAq@VaJ2Akw?S6|(iwVM7$o>g9`HdAAn7g+HJ?67covEpSh@BIqaa@WL2hYU^viMn0}-yFwb~ zI4|d_?XXrSZ(--sLj%gbuI%Y=g1!CnCJZ5Gir%Xs)O)+ORtU6<#K?nD_mnyT19mZ6P_mKR~uDB7W=ziP-jFEylS z9%dN_8&OkaLQ6hH%C(s_+&@5$(>Vgo&&o@Bb11~**uXAf!BmFoiDu(L0d#@D zK`bE<9d;oB!{}8v;k>jIUmZag_>Tx6>nPhApCEBxQa2$Yzc$*})vR$@l^U(P9lNJ_ zTcPFVzm8OvB#q7xain+Y<(*22>br#Pe<`w21t!_Uu*id|%23%>-_RW{{SK zm9c}8GPUhrf&qr{Z|bR*$?LC<>~BMbfet$Mn3b}-1h_xCzx6K{I!|;2|37~8A<4gt z)4}U2j~l4>blWKK$Q=rk#UIIuxHYiiC)G`h)|0B$Bt2(hqfZ6tyGy-sA@J#OKa>4+ z*YK#iTr88z#a@&8)xUfo?>w-AN@&q1(LOs_Mv+rHHiqKDa$DFM-i9iZHn($@P66}K zZxPpk1e7-bg|75$@89OS5=)9CTnvx9LcoLe!nWR2e-qF{+`-uatkb7ftbbduK4;{zWw`QdfVj_F%e4{?9gld^M*?)Sdp z%ulg8{PC*jTh`3H#%lyn%;Xjt;yrJ&c z{gJL$4Mwc}@O!J)1eGhx@hVp+qkd?}u{~3{-)G#HckzD(woU^%$}Q|`uAUyA;jcCH za@X2IyGX{MHtB2Dc`UP>_h1RZWmozrtDAbqu{Bd@zZ>ac=V8qB-$qpD4wn<|P(t4I zL=;<=-RXIKd)#m%d3!n=0tu2dMO3D4?Y5~;JnHq>Zq`D$~bpC zS9v4M1dHb$6dPmbs|n_^lRCnX1mhZzS0H-44y>8vIaw5CF?HgabP~nG;Ataox5wxr=z-Wry-Es`om%x~ z{*q9OkDO)5&_HrZrytGva3ll!Ch?1V`Yfv*&m3SWhlBmf+r;&zdxF9$_eeN}pHf}s z)2X`6DyD{k2dxj*W#z&E_)-|6ecM*F-pH>kR;WoY$A!x;>4%3LXSXCeva0lWks`u& z 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 F{{g<{_#OZN literal 43106 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

`WZmnsu&%=aWqxz z=tU*FjGz3c=c>P#E8$%8-S&y`wGZ>WGV;7#M2|sER~e&BLZ?-#3PapJAnbMY+_jYt zq|Kbp$v06eALPw*lUVRox&jVlsQmdS63Ddf$IrYgVb_PWG|sCG(HI})R^ahAodNi~ z_Ai#V7Sx7>l|)$vnq;gn(vOeurM1VWPWQZ8;hePtENi$CNuH(UmxvTqswk27{*a4b znZfm6y8dcgy>TQ=+@X6F`rh{@H1p1$K+xV*$chiFM$2rqtg`LQg7SqDSBXsR0DT5@ zjSCb$tS>7gUrE@8IH5kqAM6cMnT*-ISqww3Ap{wQUukU&LvT8EM~{z)=LpNHC*;sp zwI`dbZnj#gJsl10!ET3PTL!ojA{D%)$EwDf?kLsQTy15r`r_U+!Ufa`$(!99r`X16 z3;vtFq^&Yp(&$>b#JVbASYY~rd(Ug4HV361Po(p*Z*y#V1QX-Tj - + - + \ No newline at end of file diff --git a/src/Entity.cpp b/src/Entity.cpp index f4ebf56..163bcd9 100644 --- a/src/Entity.cpp +++ b/src/Entity.cpp @@ -19,9 +19,10 @@ Entity::Entity(int x, int y, EntityType type, sf::Texture* texture, int width, i shape.setPosition((x+0.5*width)*pro_maat::pixelsPerUnit,(y+0.5*width)*pro_maat::pixelsPerUnit); shape.setTexture(texture); - currentState = State::Idle; + // FIXME : Testing purposes + currentState = State::Moving; nextState = State::Idle; - target = pro_maat::GridPos(x,y); + target = pro_maat::GridPos(x+10,y); nextTarget = target; } @@ -36,7 +37,6 @@ Entity::Entity(const pugi::xml_node& entityNode, sf::Texture* texture) void Entity::move(Orientation orientation) { // TODO : Add speed ? - shape.setRotation(static_cast(orientation)); sf::Vector2f movementVector(0,0); switch (orientation) @@ -53,8 +53,11 @@ void Entity::move(Orientation orientation) case Orientation::West: movementVector.x = -pro_maat::pixelsPerUnit; break; + case Orientation::None: + return; } + shape.setRotation(static_cast(orientation)); shape.setPosition(shape.getPosition()+movementVector); } @@ -74,19 +77,22 @@ const State Entity::getState() const const pro_maat::GridPos Entity::getPosition() const { // Safe : size is a multiple of pro_maat::pixelsPerUnit - uint8_t x = (shape.getPosition().x-0.5*shape.getSize().x)/pro_maat::pixelsPerUnit; - uint8_t y = (shape.getPosition().y-0.5*shape.getSize().y)/pro_maat::pixelsPerUnit; + pro_maat::GridUnit x = shape.getPosition().x/pro_maat::pixelsPerUnit; + pro_maat::GridUnit y = shape.getPosition().y/pro_maat::pixelsPerUnit; return pro_maat::GridPos(x,y); } const std::vector Entity::getOccupiedSquares() const { std::vector occupiedSquares; + // Safe : size is a multiple of pro_maat::pixelsPerUnit - uint8_t w = shape.getSize().x/pro_maat::pixelsPerUnit; - uint8_t h = shape.getSize().y/pro_maat::pixelsPerUnit; - uint8_t x = shape.getPosition().x/pro_maat::pixelsPerUnit - 0.5*w; - uint8_t y = shape.getPosition().y/pro_maat::pixelsPerUnit - 0.5*h; + pro_maat::GridUnit w = shape.getSize().x/pro_maat::pixelsPerUnit; + pro_maat::GridUnit h = shape.getSize().y/pro_maat::pixelsPerUnit; + pro_maat::GridUnit x = shape.getPosition().x/pro_maat::pixelsPerUnit - 0.5*w; + pro_maat::GridUnit y = shape.getPosition().y/pro_maat::pixelsPerUnit - 0.5*h; + + occupiedSquares.reserve(w*h); for(int i = 0;i getOccupiedSquares() const; - /// Position of the target of the current action on the map pro_maat::GridPos target; private: @@ -62,6 +65,7 @@ private: EntityType type; // As it contains position, size and orientation, we do not need anything more + // TODO : Maybe we need something more : lots of computations sf::RectangleShape shape; State currentState; diff --git a/src/Level.cpp b/src/Level.cpp index 470c84e..5a446b0 100644 --- a/src/Level.cpp +++ b/src/Level.cpp @@ -7,7 +7,7 @@ Level::Level(const pugi::xml_document& xmlDoc, const TextureStore& textureStore) : textures(textureStore), - size(xmlDoc.child("Level").attribute("width").as_int(),xmlDoc.child("Level").attribute("width").as_int()) + size(xmlDoc.child("Level").attribute("w").as_int(),xmlDoc.child("Level").attribute("h").as_int()) { pugi::xml_node levelNode = xmlDoc.child("Level"); for(const pugi::xml_node& child : levelNode.children()) @@ -17,7 +17,7 @@ Level::Level(const pugi::xml_document& xmlDoc, const TextureStore& textureStore) entities.emplace_back(child,textures.at(child.attribute("textureId").as_int(0)).get()); // Initialize the occupied squares vector with the new entity's squares - std::vector> entitySquares = entities.rbegin()->getOccupiedSquares(); + std::vector entitySquares = entities.rbegin()->getOccupiedSquares(); std::move(entitySquares.begin(),entitySquares.end(),std::back_inserter(occupiedSquares)); } } @@ -62,8 +62,14 @@ void Level::runStep() case State::Idle:break; } + std::vector entitySquares = entity.getOccupiedSquares(); + + // FIXME : Very heavy memory usage and a lot of duplicates, slows down occupiedSquares.find() calls too. + // Copy the squares to the currently occupied squares : prevents moving into an entity that just moved + occupiedSquares.insert(occupiedSquares.end(),entitySquares.begin(),entitySquares.end()); + std::sort(occupiedSquares.begin(),occupiedSquares.end()); + // Moves the occupied squares from the entity to the new occupied squares vector - std::vector> entitySquares = entity.getOccupiedSquares(); std::move(entitySquares.begin(),entitySquares.end(),std::back_inserter(newOccupiedSquares)); } @@ -72,8 +78,108 @@ void Level::runStep() std::sort(occupiedSquares.begin(),occupiedSquares.end()); } -Orientation Level::findPath(pro_maat::GridPos start, pro_maat::GridPos end, int sign) +Orientation Level::findPath(pro_maat::GridPos start, pro_maat::GridPos goal, int sign) { - // TODO : A* which returns the next move - return Orientation::East; + std::set openNodes{start}; + std::set closedNodes{}; + + std::map estimatedCosts{{start,pro_maat::manhattanDistance(start,goal)*sign}}; + std::map pathCosts{{start,0}}; + std::map paths{}; + + + const std::vector goalNeighbours = pro_maat::getNeighbours(goal,size); + // Save the iterators : vector is const and .begin() and .end() might get called a lot + auto goalNeighboursBeginIterator = goalNeighbours.begin(); + auto goalNeighboursEndIterator = goalNeighbours.end(); + + + // FIXME : Find an efficient way to get rid of openNodes.find calls + // Lambda checking if the current element is also in the open nodes set + auto compWithOpen = [&openNodes](const std::pair& leftHandSide, + const std::pair& rightHandSide){ + if(openNodes.find(leftHandSide.first) == openNodes.end()) + { + return (false); + } + else if(openNodes.find(rightHandSide.first) == openNodes.end()) + { + return (true); + } + else + { + return (leftHandSide.second < rightHandSide.second); + } + }; + + + while(!openNodes.empty()) + { + // Expand from the open node with the smallest estimated cost + pro_maat::GridPos currentNode = std::min_element(estimatedCosts.begin(),estimatedCosts.end(),compWithOpen)->first; + + if(std::find(goalNeighboursBeginIterator,goalNeighboursEndIterator,currentNode) != goalNeighboursEndIterator) + { + // Trace back to the start + pro_maat::GridPos& previousNode = paths[currentNode]; + for(;paths[previousNode]!=start;previousNode = paths[previousNode]) + {} + + pro_maat::GridUnit dx = previousNode.first - start.first; + pro_maat::GridUnit dy = previousNode.second - start.second; + + if(dx < 0) + { + return(Orientation::West); + } + else if(dx > 0) + { + return(Orientation::East); + } + else if(dy < 0) + { + return(Orientation::North); + } + else if(dy > 0 ) + { + return(Orientation::South); + } + else + { + return(Orientation::None); + } + } + + openNodes.erase(currentNode); + closedNodes.insert(currentNode); + + for(pro_maat::GridPos neighbour : pro_maat::getNeighbours(currentNode,size)) + { + // Checks if node has been closed or is an obstacle + if(std::find(occupiedSquares.begin(),occupiedSquares.end(),neighbour) != occupiedSquares.end() || + closedNodes.find(neighbour) != closedNodes.end()) + { + continue; + } + + // As the neighbours are adjacent squares, distance from them is always +-1 + float newPathCost = pathCosts[currentNode] + sign; + + if(openNodes.find(neighbour) == openNodes.end()) + { + openNodes.insert(neighbour); + } + else if(newPathCost >= pathCosts[neighbour]) // If the node is open but this path is longer, ignore it + { + continue; + } + + pathCosts.insert_or_assign(neighbour,newPathCost); + estimatedCosts.insert_or_assign(neighbour,newPathCost + pro_maat::manhattanDistance(neighbour,goal)); + auto returnPathIt = paths.insert_or_assign(neighbour,currentNode); + } + } + + // If we did not find a path, do not move + return Orientation::None; } diff --git a/src/Level.h b/src/Level.h index a975c84..7f4f8c8 100644 --- a/src/Level.h +++ b/src/Level.h @@ -25,7 +25,7 @@ public: void runStep(); private: - const sf::Vector2i size; + const pro_maat::GridPos size; std::vector entities; @@ -37,7 +37,15 @@ private: std::vector occupiedSquares; - Orientation findPath(pro_maat::GridPos start, pro_maat::GridPos end, int sign); + /// If sign is +1, finds a path between start and goal positions. + /// If sign is -1, finds a path away from the goal position, from the starting position. + /// THIS DOES NOT HANDLE ENTITIES BIGGER THAN ONE SQUARE + /// + /// \param start Starting position + /// \param goal Goal position + /// \param sign +1 or -1, defines if we go towards or away from the goal + /// \return Orientation of the next move if successful, Orientation::None otherwise. + Orientation findPath(pro_maat::GridPos start, pro_maat::GridPos goal, int sign); }; diff --git a/src/Utils.cpp b/src/Utils.cpp index 153f214..4e820ca 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -37,10 +37,33 @@ namespace pro_maat } } - float manhattanDistance(pro_maat::GridPos leftHandSide, pro_maat::GridPos rightHandSide) + float manhattanDistance(const GridPos& leftHandSide, const GridPos& rightHandSide) { // The *0.01 helps with breaking ties and minimizing exploration // As per http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html#breaking-ties - return (std::abs(rightHandSide.first-leftHandSide.first)+std::abs(rightHandSide.second-leftHandSide.second))*1.01; + return (std::abs(rightHandSide.first-leftHandSide.first)+ + std::abs(rightHandSide.second-leftHandSide.second))*1.01; + } + + const std::vector getNeighbours(const pro_maat::GridPos& origin, const GridPos& gridSize) + { + std::vector neighbours{}; + neighbours.reserve(4); + + for(GridUnit i = std::max(origin.first-1,0);i<=std::min(static_cast(origin.first+1),gridSize.first);i++) + { + // Do not add the original position + if(i == origin.first) continue; + + neighbours.emplace_back(i,origin.second); + } + for(GridUnit i = std::max(origin.second-1,0);i<=std::min(static_cast(origin.second+1),gridSize.second);i++) + { + if(i == origin.second) continue; + + neighbours.emplace_back(origin.first,i); + } + + return std::move(neighbours); } } \ No newline at end of file diff --git a/src/Utils.h b/src/Utils.h index f6331c6..4491e10 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -12,10 +12,12 @@ namespace pro_maat { -// Used with positions on the map grid -using GridPos = std::pair; +// Used as the base of all grid based computations +using GridUnit = int16_t; +// Used when dealing with the grid representation of the map +using GridPos = std::pair; -static constexpr uint8_t pixelsPerUnit = 50; +static constexpr uint8_t pixelsPerUnit = 30; static constexpr char levelFolder[] = "resources/"; static constexpr char textureFolder[] = "resources/"; static constexpr char fontFolder[] = "resources/"; @@ -23,8 +25,9 @@ static constexpr char fontFolder[] = "resources/"; void errorWindow(const std::string& error); // Good heuristic on 4-way grids -float manhattanDistance(pro_maat::GridPos leftHandSide, pro_maat::GridPos rightHandSide); - +float manhattanDistance(const GridPos& leftHandSide, const GridPos& rightHandSide); +/// Gets the 4 cardinal neighbours on the grid with edge checking +const std::vector getNeighbours(const GridPos& origin, const GridPos& gridSize); } #endif //PROJECT_MAAT_UTILS_H