From ecee08659091091f5f019e97e0867244ed708cfb Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Wed, 25 Sep 2019 18:17:18 -0500 Subject: [PATCH] Exported door model, added CollisionManager#on_ground?(entity), made gravity work in PhyisicsManager if Entity has physics enabled, updated test map --- assets/base/door/model/door.mtl | 13 +++ assets/base/door/model/door.obj | 55 +++++++++++ blends/door.blend | Bin 909744 -> 911496 bytes blends/door.blend1 | Bin 909744 -> 909744 bytes lib/game_objects/camera.rb | 1 - lib/game_objects/entities/player.rb | 27 +---- lib/game_objects/entity.rb | 9 +- lib/managers/collision_manager.rb | 24 +++++ lib/managers/physics_manager.rb | 19 ++-- maps/test_map.json | 146 ++++++++++++++++++++++++++-- 10 files changed, 247 insertions(+), 47 deletions(-) create mode 100644 assets/base/door/model/door.mtl create mode 100644 assets/base/door/model/door.obj diff --git a/assets/base/door/model/door.mtl b/assets/base/door/model/door.mtl new file mode 100644 index 0000000..7889ae7 --- /dev/null +++ b/assets/base/door/model/door.mtl @@ -0,0 +1,13 @@ +# Blender MTL File: 'door.blend' +# Material Count: 1 + +newmtl Material +Ns 323.999994 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.0 0.0 0.0 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd /home/cyberarm/Code/i-mic-fps/assets/base/door/textures/door.png diff --git a/assets/base/door/model/door.obj b/assets/base/door/model/door.obj new file mode 100644 index 0000000..d354565 --- /dev/null +++ b/assets/base/door/model/door.obj @@ -0,0 +1,55 @@ +# Blender v2.80 (sub 75) OBJ File: 'door.blend' +# www.blender.org +mtllib door.mtl +o Cube +v 1.250000 2.400000 -0.125000 +v 1.250000 0.000000 -0.125000 +v 1.250000 2.400000 0.125000 +v 1.250000 0.000000 0.125000 +v 0.000000 0.000000 -0.125000 +v 0.000000 2.400000 0.125000 +v 0.000000 0.000000 0.125000 +v 0.000000 2.400000 -0.125000 +vt 0.923077 0.000000 +vt 1.000000 0.500000 +vt 0.923077 0.500000 +vt 0.923077 0.960000 +vt 0.846154 0.000000 +vt 0.000000 0.959961 +vt 0.384766 -0.000000 +vt 0.000000 0.000000 +vt 0.384615 0.960000 +vt 0.000000 0.000000 +vt 0.384615 0.000000 +vt 1.000000 1.000000 +vt 0.923077 0.500000 +vt 1.000000 0.500000 +vt 0.769231 0.960000 +vt 0.846154 0.000000 +vt 0.846154 0.960000 +vt 1.000000 0.000000 +vt 0.846154 0.960000 +vt 0.384766 0.959961 +vt 0.000000 0.960000 +vt 0.923077 1.000000 +vt 0.769231 0.000000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +usemtl Material +s off +f 2/1/1 7/2/1 5/3/1 +f 1/4/2 4/5/2 2/1/2 +f 8/6/3 2/7/3 5/8/3 +f 3/9/4 7/10/4 4/11/4 +f 8/12/5 3/13/5 1/14/5 +f 7/15/6 8/16/6 5/17/6 +f 2/1/1 4/18/1 7/2/1 +f 1/4/2 3/19/2 4/5/2 +f 8/6/3 1/20/3 2/7/3 +f 3/9/4 6/21/4 7/10/4 +f 8/12/5 6/22/5 3/13/5 +f 7/15/6 6/23/6 8/16/6 diff --git a/blends/door.blend b/blends/door.blend index d5a9b1d411d9bdc65c2d6cf873db588660fb53f3..74ea6282f290630b4e3e7ca422bbc6c5cba02785 100644 GIT binary patch delta 70589 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 delta 69631 zcmd44d3;pW`9GdJxielgV30(jOe9FqsL+CI)I<_R9R(GtKu}ar(YS+aP!Lj4uCg=8 z!Mc2~E{&hMfKex|fLq79L2YZaqG;8|T3e{gCsrxnXM5kwOzrFS`|}rHc9Z@+OD`x*Z#gQSo_0h3^qLEk>9NmNq&FU4(jNY-#;X|jv!9KedHwb4 z7A;x4K&cEP-IkzlW@b5)Smh9kvmt1nmj)@Z|%D=|OMlU`6=!*2}uW7HEFxT4` zr1`hp5|Kc@?DES&PQP_;d3x;Xn)H^r)#<92lFNUQOgCIu)jqeW!b^`m&L2LpscB?* z>#YSc7VlWNc(E9gBWs7aW6jC6>Gda9q^D2p-M-)H7kmBKSzK&kEM2l=;gZGa|GBYz zmn*KkQd~gANWb-Bd3x(9$@KagO4DnuC`&git4dc*tw;|~m9$TpJk;BTi*waA*E~-` zh&(90CgaDix%S!}6VtCgGcdh+T50>%Ggo-Mk3Rb7qVvx`e-4*=VS3ra`=;02==T;N zIeX%S2|G?oZ+fO*dde{s>8&?arKg`%CAy}JCp}ZDyVUy6bjK zAS(YmY0ODfU#X$#EmXS=PbS-kpL3cQpM2(-a~7uWxp5%dm0ta5NuNbamhQNI)+}}N zg!G#)?w%eyyDGhLRCRmRdFOfkr=D|;=;106$8boFS#sB)(z&gz>KM{DX3Utm%STqX zZ=JTn8w}DyYXqpzNPsw}yma18H|?0z)FkDV1~&Hmq3J0LtJ7C!pX>F}Z-`g5Cv zuOd^p4EOfmbEz~APNl}9BDpl&+Sjb4;#|DK>nD5^C2AN0cUSJM3l>-*CX&~QH};O9 z>GhW-(`!zwPR|`VwEeuxs-ytLWCOQ}(uIo_?`WE+#U3|y+`4o_OHI0AR>@=2=XtxZ zGI6%HzJ1^`7`}MvQmP25ghh)Y4@{tnyLYej*i$PWyJDW#|NQ1=5g}r%`K#_d`ZJa5 zoat%Amrrk5<(W7h?w^7PYBm*y!de^uVT<=Xp1I01L7%oR-6 zY^fD=^5n_wFV5V+GRyk(c!WKXUVQ)V-oo^Twf)i?XVxu0p(b5*bXj`iphm zZL)p!>`%PX^PAPLu)BT5oUN4oaC!UftzXcEHn8^9H-6$3QysL=ziGQyd_i+_`~3Nb z@0?zr_7hyX3FFgmKC^rKmStOtrMpo%dfMQ|Nww)U$5MA2QHp{w$5g*9}U~erRC&&edHb&z>@6j>_uMAu`!OGL(&7xOnM~>t@YfKY?T( zee^LNO$$Z*uc5Iaz3$}w$QQ}<^pR!hDKlwKT3k(orp#CEbARc32b@78SdXzDs;htq^dqsZB1%O_W*r;vZ28kF9A>cD&F-RBKF>Ex3euDgELx`m6_ z4a;_fRMh6?i&|4BsNV)=Mx@7HQ;}|%NhQ6tx_$Tqr+Mi$X9XoE5MbQ6aq5pPi|W!_ zmRF~zjH_CHb4B~`w$r>=Lu2}=yAMonrEzrZ)Qa}453Zmo>eTA=*p3-r4fiI~rDxIre_ZLk^B(fjrE`<%t;?K2GThHouG} z&C>M7RF$;Ys`<(GhQ~*F>8(E}^%qj1SCx^eY-V-3;p~$1l%G+bT1w<=Xm~g^nGT=) zA-$1?+AVV_y@NC@Nv1a*lYFdW9?kF#Wy@*0n*JOaa&Bq5ba73(^z4e|$5Y|2qC$=C z)js~|pL*#A8fnJfsbl?`N#x@bb>x}SPQVuGzRyzkow6{=lV*B)D|M;HWP13?G{loV zb4St~)i|jAgy)Z>Qjt5Rj2lYJf}!bB8uzDPQL+3YTBgh^YoD^7gsi!{bor!%(_?An zG5jjxQ#;#8Rj_(m+44)MC@)Y^j;5lHD^0H+U6S5%bhRv#cv|0jOj&!?OXqp%x>v@e ztLn$JCtqpy)~*f?zipux=z{CE+r0th*{5r7cyCToQ84|N%Qy^QdT7~uPrT|KUHo5k1OK8gvCYrmnuK-a*XLgYCA zg)iMr4&o9H3vO9;ffU-pw(m$9*_ZvSM%>%H+i-D;ghGi2@jsjo_Sdtelx%$!2^L$3 zJtxMBsd6U$@qCunwTUXrd10)-YY05wM4S+K$+GEdMBi*MmQZD}o&jz};I&kyI<=a+ z-qEmWi`pk40fF~p5FO{X{;gpVa<`i#dDx1pAGar&8^Ud7I z{JK5WeDOS)zo4@14{CW}3R;fUMk=8+g5I5voG9%geBvu@N(0>7v7WzQ6B!IT$^tPc zOE{nH-BwQCW(8UmAO&|vg;8}}m|>_3pt!*`lRTJlomIP<^KKvS;!3%sYC;yY3&l;{ zmA!SwL(|@KYj^ef+2zzyZ=mbi)f>}0)oYNnTnXK#BfX^0DUJ{;lIF3Z%1`t-=Ck+K*O`jWYf`I#1>>pLBiy1)6kxKTna!kv?gdy3Fy zcoYFV6d_m=6+yCGs@ZL*sDkpPmT0+_*30VY@hxL{m>g~_+o_GW~y z?>|whgF|fs8~b~eK4-gadr>P}##hn+ngx^RL5PVAFolr;O=bWa#s=)}epBIHU70oY z2v;q7P-iC&)rDibi%WW=6$s8+C_F^L{HAsm`QSkB)I+*#NDSA|R73`WA`ps$B34jbM7a@F-l@Z~AL=p&6hJ_M z3sl?MD(|$ihkBIErEF2oqpyw6;m$ffOXwO)Y3$U?wS&ABSQBn?Gvc&BxN2{&DIN}d zL>CtQDubiPiD#iTxK(>i_&j@xTHpaS?|g94$o>C0Ze;D4@cE*mxg!DP@S*URBexW9 zKjgiCj2`J4-U%w)C4;>^O0x50R0_@~VVPxvy)XLo4)6S{R8{KyAE;)@$bN44m0lm$ z=M?XVcz6=E`%L3#?_keW9_;-p-u2;Qm3dv^BFsk zi_tpL8&%SAfUOzsr0HqXNUzKTCP4i(K{oa`sMtK#j{6xdhJ@rcn6#$EHdb6lE!QPU@w&x z)LB@gAsQ(PS*X41jT>lUAnpC)sgHlLg7yWYXkgJx(VxAyN55RFe&PLp)E|<4aPB&k zewMk<=Oyygk7%;UXF^h&gM-P5C8u37uOZp{gvKPP0WnNUVz@fVorV5zDI z&a$xSr{eJ7WDC!+aFm6|nd^?Q_!Y)G&B7Nf{Dp)Qih^cMh!me^0uHortcBO8K&}g3 zmPo@Q!#B{iw1lsJB8JuM)c-uIi!kx9^$9m+hF9TUKhf*!OPaW)xqijjXcThIZW($o z^KZvJIia1vVjY)%D-BhnC-nQ4gocJK0JB4Py&e=6wA8y-J?>r@P7d4JtHVdBX z$QLAC?dwXF0W>L&B@xzKC5GUan!_4$)D^(zE7L zgu##%^)?u;=z!IRabSMSJ69oPzOl~Ieoyf+36~k8)gIf0@|*&4M^%r%~wAa z6}?jQ3gz_t$?ztkWWRKH17(2&8J%W1WdDbZEB;qKt9vey0S;uK^pO1@GI-7_umc>( zfYp%wO3`|5AJJcMNuC|O=2DKjkYjp0)Pk`S=5nMD_R zUwDJMc-_i{wvesh-74beY8lsD>`g7RwZ}b_&Cbnf9}Smyqn0)JJesAJH3V*JYb?2P zA8%GXxVLix?ZM`HuVor8^QOl9)448b{CI}3<21Typ7+&|Q;wzJ?^*wpK{UmZj`qGyeBMLgW(z%DRSj~BUrzLKr5`1B zaZ6rK^mfz7@3gynq))Fh_mj)Lq&s4;SL#mQKVIkFoaG(uHqP=I_xLtxn&jYU2yEecXLsR`J?v9NY;-fOF7DT> zi=u(ZT-M_KkhBs<9^gL29^mDM6AwH;)4Ob0Lyh>G{5&=u+)aaNX4`dMdn~rz%RDgK zJIaf9l&qz3jLqsDc~|@69GZ}&M~Jku=CD6I#h*MTZhbA`yM}c;1uN%zi~O_qCCTL7 zp~e2>sMuQvCQ{lY#dgV{YW%)j4zI{qKG5S*>tWDGH+kt{ZKvDO%;$fV)n3i_*x%nJ zJG^YM&iL7X@{);$uz_y<&0bwOc)p2jy1$54GJWTJgDd5dv>~f2&|?dsxN-Bn0hLGs zr2A{#lcb`o#t9rrzo$hgt)QTf=C+NXvkphDy___7btOp@smX;zFwdlZ2L_HPXloLx7Pr z^Pvkmw1P-SzhQuYQfrh*nYEN03Lv1=WYkFz1-rD4TLZGo5MXqkt0jRXG$boKGYkPn z%M+>ty1-DgHgMSu0Y>Lz%78AkMC~UY>o5cu!IR2}bXn20m5H|i0j1+{Q(~f^B!>bB zD1kW`qA*}+LscyX0j0*YKoqnnMI3AhFhX-Ul%aR1U5z{aXO(nY;h_snMLUPrix`H0 zjtX-)bU}w&)%YV-k}?K#HCs8gr*GgYDX7FID;IQuk>g)LU{;%nfHL$?t@qX+F{}Fv z9S0x@4DDA^bVEQ#xJf4g=mJB`bL?K95w3NK*RLGn;ZYs#8_A<}Hiz`KAt4phIi+w& zkVa19HyXWmlWi+$IbE{UtEmiM)iWK0!MzX29F>~SMvPnP)s>U? zMVKoMBVuk}?XB>VmIR3CCb2?wn-l)8-SGeMeAoR;?~}M1_R+oM8m74o55|7YOJYGh zbf5QXvZGB7G|&`z9oR-&fq>I9%kKA{E%v#vZrp>kL*>`z7D~Mi0U)%wBE7PkFm%K3wC?_9~GP31RU>6aj9~53zPPwB7s27p>dUtL%yB6%a@hX2ibKQ8G`+`)_txnqUrvw``ZSP<9Mu{Wc*tlHWE zMsRc@j0ZZR&sUSpjJ;f-o(_BVVeC!NVsB0F2zia{H=>Qj83Q_j?SjR(wevy1(T z%(fT2Szgl8AtQX1q!Um0Zdly!pIQA9;b?Hx3;@Lp2C@L|SMBa^uTT?F>v*tXg7hf2 zBI|8R*8DSe2bbiVwWO!UDyJ> z^&X>5=E=YFt{GPGmCj=o=j-aKqEq8tSPWR>3;xDimTkZD&L{^3i`ne|5k+?^a!Fc{ z75>|#vliX0APJC8GeD)h`!=nXkpxJEJq96E*Z21XK@uRV>~_9T-FLj9K@uPxpPMZ# z&9$-=BmvU=cZCSmJ;e|t0n+qOg$UJcV+fJ}>9V`JLUsG`E&@q_bbg>xgzBa;1WAB& zOx6k!s%}@11W3(hl_FH#t{@2zRI5;3uRqd8Ly~l(A!ye~sl!n3SgmB=Z_gXcQM2NB zCo4`sK&hRY--J+&>P?{l0!q!rN`WX;h-#5Vsv*EgU7`#~0z;L^a?lVF<8oy{7iv_S ziZBcTM#Y!vSLgymo2V>O4FN{eIjSRNl3qxVQW8Ue(bl0`4M+k*TTCmjYYhQL%SpQJhb}RPdbH_ah9SUcvXKJ1(C@UjYS|06 zauv4ofikpOHLH=86l}9<-m?y4lE6?U(ohTmvpSyEqC*#YLQZQ01Qd*UPzG;lkMVeg z&gylA4l?9gU+NX>S0C7zi3vQlO($@S=Hg58XlltOd`XYV zvK!^7m#1+{!8{XWIcLzw;%8jl``(sHiIZgH3zOm^DRcN{UfZfPS*9~P^Z5syDmpW* zTj*wBotYmM=kHn^6cfcj#iQSA__qk>V|J z&6ZU<6Eh<|;l%_?j~40AedbNCGfQE4mM1YPJ}Lx_8+|XTaG4@xCDqSXQWmB@R?D;h zV#_!Dg{r_(V0rKf=j5%V8oVSY=F~%KtHwnfFQjNGZb^_M8i=Cude%{@Syti9uw~_! zysTs!3l>xLC^B3i^EkV}T$9(4C>@okZGOg9+F}JeU3E4ak1+LbH9jn+boGIy!1kbs zax!~t^Jt^OmqbQZ*3-BM$!z*3m)w#75xJ~Sq_lp`RV%7w@yOuJh;ONl_JTp5>yrgj zu8Nhc?Dp>0MfHQ--ivWvwa8M^svcF1a-;i7)$`)HpL_N@-X51(leI7#sNG=&g}Rrp z6qp^9a}Mn#o^d7LbKm25ZpnAoxJb(M`au@YmIfIjor^BAWGivWzddU2qE*Vz46XE= zcX-#(ewq!;uXWo@Op3+m6qKK~A&FQA%Hw_%w?`Obu?53YlXS>$_VheA9HrAt?Xx<9 zhJV#wll=#U(W!OZU0NJFtQ=%4I9kT?N$)+c#Hy2gMVgRPbBfI@tjTvLUs4}v1FksZ8p1zFxPki=|K{NR6L`F7h$e%oP<~k z5KX35nC_%)aasu$SOSlVFxMK74TwvUuD%5Ao}$!Ya5-k8?lD>gm@&j5(wd!k%Mf6+SRA@gcJv)?<$EVGoIa4LE>%WN!-eUjuW(h}vA5{I=i z!;R<{t8{1ejjc;sas=yZFcBoM>-P1pa~pSy9hP*%w)t* z+{CijBfi+b=~i08GJzj#EOWzdirwfs%44JAQUMun_ZT0_T0Np(!>wAcsBhFK8cu$f z9@n4hHQ3!&O$Z14^At8JJD5VPS4)ZNOmb+w_l_&wCHAr}QK6oU*D0h#ZbxT$H;qyaKoPUcoRe^c`JdNPPXE;{1o^i1RA7#+;9mwFE7GE=9- zuJLcF(d&}@w_S$Dlf$7 z+|H5!Nm*Q|x)MVYAT0(Fs+)NMt;7n1tTJB-)2-#@9Fiae?i69}bArSrNmpWmc7vK} zB?f6YeoI@SL<%(8eU&U349BZ&p=glBO%m`V2D3qTB?cH@?KbZz3MSzLQX<4ELom}d&ZXP%H_VP@l9n97ZZ{ayr4_iU5&k^abpx%BEic0U!munu zMP4?CL|SqLd-}{{rJk71u=kUe5+R;31T$68S*;|M3R|;V;!d}Ier!n6@*?bS49hYY`%>~1OR+HOF&uXvg|V-b#))Kb zhvt65vRTF;_dr=fJv5GWcf^x;EoWqwf25G=#cUO#XGsCV*@EViToUAcfLT2;T2|DRii&yef zb~YZvUdYhb$EkGo7tAUlKgqMXtGkO6yYAS*HBb?de>o?!VP))qpdPaVW{GfToh2}P zV0OT~l|OaUEYZ)^{ZEVzM*G{rD8dRW*`8b)nI$X*Wlu>C_I5ADH7R~=YL}vLg`%GHHf>l_r=Oa+51cTh>N@; zJRinCGSrr(^TuLexQrMMe*CmHsN`yZ4`oy_$UgzwB^1J+t9i-r;ghS|uDqO1Ch7+UWQV)>W!m9(*h)5dS$8D07IwU<@l+q}5!n(7dF+;lk|3*7TO93KfaTOwu$Ri1m7K4Z|eMBBffV3GzsQSQMYFkJ-cp;#x1JJ)n`{A9bnh0nuqNtpwb8NHhLG$+L*^wFC4#6`WdN zC-N4C!*rYpM(|)Ev%95WBuf31a`>rWItt}W5{fJ#QCx&%9(;q&Ien2M+dSb-dP}Af z)|T0}F-8v?nBgdhi~=MB1w;W*3JO*khFjRAX>}dmf zB$)2L3Q$~vb@1Kh{%-3#w8kE42doyR z4pobTk!-O%Wnd|=IH+Yq^ig2G%<+2maE*(Q%;E3x>9Qq(9UiF=mGb$Y7-C6)r0NwS z()9H7+0C&TUeeNm6BD_PnV&h~L#|`7TI!g=(G;_>!wcM+kLZR?)3x&0BpN5L-{d)A zPR}g+n5P)_#D7dNm{Kss$j3uSxqhfcrkJz7ped%yI!g0vIu>OuY<^GUsaf{Z}AxMH0_&})cRf5DNNv9VlEiRwl&aRD-yjj?_ey~>cqNx&5Kw9@4sEbYwCR(HfPm8V2h|c7ReauK z7>~<_0HflM%77#^4=sEnPf3OVqs`*b1%`Tf!%ngC15_jk&F^R&s$i5=39B#!7`4`X zp-P-Y#nAc`{{jLET0E4&zY(R(XQ6zvx2(*>qXj8Orx)um7?s1F@~0Pwg+)>qWLX8b z8GcctpBuW3mhy{qcF7`a&_O0OipL2VnJopwOL#Qr$OCQs;8&%@Nigz-N%1W6GBdy8 z;YWq>L)A>q?Dq{Pvc}AYZ+V6>+fkM*4+10tgF;@#QM$N+Laq9~-E=>!(k2)SgX2gK zOBl_@%KpnzU}pAs&gpq5to*weJru@?L<1;1LE|DWGvi-8Dq9jDqJbzPFGJ4LM^YQ zz|QQ+Y>GZyFW0%n9BXXmWM&o@^Zh?d13&dM#i*S9;*3EWFac{Pxx&r7n;=YF(ws~^ zEFp7CP)yEXv*ku;oNt8Aac`dEADCIVb1}U!!e5^v8JJK){@@eK)DLU%UAgBED!yh| z+xyyAv&Z+B6NhdKTYmPg+-*;Ntas&tifBRs1>G@P+hOX2!bR)x(p&z*T@hg z0a9^{DiW%j$q*y~(mYBbLUn5yf+RrDG=%CtCrDh9beMpChUnT8RW{~X zv<|HU9n}p2O0&fw3Qa-lgeYZ03mB^`4rPL*Ca6^;JHG-(*5c3w9a>{z79cRIZH$%# z%0xIRQA#VDWe6}jEe=U&!&VU9UKTKFPf{Jw1%|c~^_D@PBx`XfgIPHgKtO3ZMYTX1 zTDUf}4O|jKfDw$qY00E`eC{Ttzl0yLmlxCwq6b2b>-K3>#s3E{uWpPM? zzpOv7hYJ{4i$}U_=+W*WB>@CVx{U&5QhikMM&b8>3zXE1Gk00Km=iH%acKzXXtFqT zVT9B!DP{ozN@x@)!`Pr*RJP*T!{q?Oia)P{~CjI_{`9U{2(4fnu2uUXA>J1OMxwx zFj%2E<+WXMn9ftO@LPCPaZP1vsZOj2v*UI0PEDdvSALd)={=mt6F9B>_^u3JlT_ph zi{c_B^KJuA{U(XmLBhP{Xh~(gnL(q9Y29b0M@6w0sWEqBSU}^=AMj=zTU?hMsO!D} z;TdXHcCr+LUzxTP7^*oxcCa9?F=)2j0b*ii)A77qVd>Gi!sa{ZHHN}hz5`vcqB8QD z9J|FSt8u!jssyBFlNF z6pyMigW%fKZQsdPp8~izcR@e~<`1W>r;ux_Y)NflaE{uSJ(um1CAFo%KFP`KH(^rKt0EfWE;D0t@vmd`DJvt&EQ?eYWWK=ogAo;F*FkU6*;M93?R?6@ z@Dj7S{YJV?CS|r17@N9`O|iFY`8v1EYlua0k)m(cZkk$rJ>4|53<$}tRiFsd*K6mV zTTHLlA_KsX?I4LFAm_F9?6hKfZC#9%(>s$5H>el^)W`^S%?I6X79xtNZl zxZpjcgZ#x)JI%hJh-wpp&yFENX>_A{81)J=Z`W~ z_^j9s``8~{COmQ=!lRBls>*E};{D*dt|=Z~iERMCcsSj*Nmo!9-P)-u2M=rM;8dQQ2 zE$ea~FS81C1lF*jYn54*<6b~ebo2!%6XAI^5*LWQe_;w>iYRchG(%^?u%4QsoePZv zwshxuiWG_G^h}OE1hZdqx%TBO!VVpVQqS@*BxiD#f?+6png<+u2ZQeT@FmGamXNqG zOu=VhR1h!Bgjn9nBbBJb8wX}NN)qt!KvGablt8>n>CL$%vd_Q_w)KOB!SiZZb{&Pf zey|jnsyRQlG?UN32v1fN%)>1omY%mX^JOHHf!_*&nySrh3S_iYM|8`l#C6Ru%6|PaN1ZglS1WJ5IL9bmioB(4KeEwA74F z)THB7FiFGa$r@&@y``?>X-RGefr4>-6^qarNiInXva%*!C^{n{36O4ss1!N9LlPi0 z6U`P;B;U9|5+F?m5vtBeNCG4@h*0Hz(0C*P(qRx#F=0wE?&O z2&2;&&?Qcy8c~L@>^5;B}oX!?$>< zlhX=I!8DnDgK{!&JiuoFa!o>!CoGDK6#FQLN|H^hFc0}(UNogxpQCT*ZFa+NFZSId z4;3F&XGK7fQrBvcFsY#^@Ns@OmalXC)YeWGrZ#D5g15Oe^7M(Nz+%n$v9%K&YklMk zPj137&pytsP+asftvmk(rVye}b1rNCQ21Pcb4!&tax#in}V24xAXk zrm{?1{{(J&Mcj8opDKPot_I2ylO;NOXR|DG_|wI6J)et`|K{d5HT==(53Z)~IKQ{R z-?z@(1h<7V)orN!yk1K-NDrV;+P9nbDW3>_V#PqXS>xG{*%(=SS_%r3`jB!mbQ7EW z#+NyM3qI0#$P_p1tKvN}AN+-mbdr`15h9#@BBHMToKLDmpSXd+nIT`0(|f_Xf=_#t z@N?P3*AGSC|0SPu*w51-40hJ$}$$ran`zq`qXYNJp|1_#^1zBES3( z9v0*}$EVrPjm@0Q>}|44w>0p>FBGG4$nVr%kp_%tC%Gaov-xYn#ML5MowJ0@qHj4> z>~|yR-2*o_PCwc}ze3d4zd85i0*z*#=q?@___A7-#|g}J;tJ9P*I>xe@wd|R>yj_p zh6mw4%>HjF)Pd7dV10Hg+hJ&!#gh5R4>1x(p&z{xl2S(zhf)D$Gej)o-&P2@v>Gs7}7kB1yc$FY}qNpJsu-u@Gr9 z(WrXy2-TY!EK4dwfYE7jNUF)RUzSt_jNokbHgt(>(xJtX^${RYQfm|_6X)bp00E`h zC=dm^)FY&&Y^Wi?SY>fYLfMtk$OmKvjI70>OG-dyMLKBTQ9$XoIFw1NB#O2x*>@B$ zYOE_j65JKCqg^YTWe60c$>NbN>j4#95xPqQ1eDMyPzEJRk$p#jk`9YQ68e-jGpR*D zpah*7%A^ETcB9bEWS@oV*&xVbK?IVsK@19*%)(hZNTAWe_`K>M5!$`w+bmgU=Yk0T zPY21=_dFcRy2?^8jE3KFPS3Yl=tCYaRZ1dB21w|viOKqLme=jY6%O^q6}ig$ILrQV z)62(*qUY1S{2xl*FzWl)>1%%UBe4Tl$jF>Jcoxa;c|q8a(Hn?wvNHN=%Q`n^kUu2J zQL-w^e#-{bu<yaQCy|yHVV^QA%TVl;14yJLN3f?2#`GMKXALEhmKR~4F)YhqtaC37 zql&lW2==VOn9eZy)Xs(O*`E;B@*?bWhGiMi`?@!}$A3y#%Zsqj8)fnf^s)5E52Aiz zc@g#n!?KL%HR&td!h=b!rK%5$rbxV|oPZ<-V--pG{g` zgniYpEJLl`c!a;R`}lDGSIMm9Ss3+wj_Zd62>WW%L_{KgYcy7+A{)l|ySTTH^q)^! zUW9$kuq;Ed>+49QB}cH=4aW2wkuTPhNXv_`Zy1(kD0a*wqar(vlCq(8k|Wsf494^v zk*kg&k(L)>-!?4EQ0&}MB+`;2*zXO-^hji1cgwMUN7C{l>>muvG88-gI1*{e5$ul! zV|paA)U_N>R$5+!eaEmYL$Om*B+`;2Sf|059*OMhE8UVV8DXWAy+Kz>SV3Wh zgq2v0E#A9iZAo7{t4khe$7dD>+jXIo{kJTX_^B{U!5T<&==jV&b|yeM0bwA2?2L{@ zSQ?*~{msXV@K+7BhqwyggWp*29=yc=fBqgk{0zU#_LXW4E7iPJKc)APB`{s+Y8Rhw z8M@q3!278fY#IZE%Vc-l4lD`vvS+Ea^6^_Aeh+F_pG$ zWLVd^8djXAVRN&F0fwDoA^Za1WE@x&p~v76-FO@&>tt zWWnkEa1rV%@As2KtzF|lBV}<2L8H@}-oQsQ1&kJpqlcg^1?+9Nfls9h7;P4ZE4vzBe?BAav=LvC^!1Vyj4IFzBYXhG!o2M|!2jRI|; ztWvwUBn3)VSsapJmonr;u7HuXICMz~s3ckFpcA;?M=Nw2w+BDPXi%9J<6B(h*8Qq>~gd+AI!T zB0FM8Cn;cbT0GKa&eF~&|wVeBnCmzYb_3CQUEfmtEWZ)0VSF;jSBxp z6#Bg_u13Bvy||ZN|j{G&MK>h!m}96*oYlN@J%`8o#^x*FJr|`WN;XfQ8w9 zy81}<=LLowky;AYCt*3|WGWxxm6TkQK;#LF6*0%|7w_Y4el-4~uk!flQ}{PM%6F(l zJ3kEYwd?zsUsY%JqdY;YZDg#RwN?%^;QTS~(#PoL+`+n$2@vj~#mVj|#o>*NrNCs( zk>>#FAM)*|^zMGhKf-Nn_qW6~TQ)XK%)IfqPa7MSp8p^~@?U;sotX>svld6SROGfk z@{-gxg;M)2-a*w7WbDw^!Z4}!r}kp|<&L(cz<$l4cU&?n$I#;x%}D4nf$KHG4-$vmWDq!N1MfHFmQNtZUb_&pCv~hVmn3)gZ1~0mnOD>LcI%WDKIq4 zIhi5PQM-xDwZ8AcsLbZ)*{du{yvi@TxY8TwqnEcQ>46tB4#uW#RAW&HaUZ#{#wLBV z4r%?a`~@=hN_*eM!tg~iHp|9}S1kp`re0>Vo_j$ySbR|2TvIgWmtu`=`X zjs7+Cu#jZ{7_tc@JYWI(s>}M{kyj*Lw~x$Fe@%JI4_wRd>Evbgf7#@4y56sz^#{IR z%?0k+Fb>X=MS8ptjk<<}0{c$79))@h$YE+xBPLe66xspy^=! z1(GfcYY*3W)*49mR%$4G(j;FTlg(FcnQ^gx?v}ZQeww>FS&-9lg-#Tr&DDQO+W{nj z++`3ELZ0gRdp&Ox0~~m%D{V=^eD^SmMiL-3S1SZmh~}*qe+d(-cHqG4FrLVBm7lTI zmIO#@j*14gM|5?b)xd$*JY3x?^4ua8jU+&_1_2eKi;6Cm(>+)X9C+Qv6M1esiLOKv zAT=Ybav7?>pNAwsnhYXTcj;fqKqLVY8U$1rcx3VJatQ;01Fyq)BF}9m(e+3I1g#NN zh(0iuUv|OSK8vNgle+u?!_bDYDr!4Kiwh}eVp^}VzB2?Eofd~Av>d5secPpg5ge*I zpbKqKE7+6uok5_a*5XixHk3mF1e9i@KpX6mHlmM17bsa}aY%~F&JEYeCa8dswK#O4 z$wxY96I4Lywm6ibDN7&M$Ds=tHHWFYAPJ3F9W0w5L!jtQ7KbkA5T-qrP(TSS4rS;D zIts}qsDRO7aVUcl?FCYcfWWRUqd-|y5^0a}ICO!Midro@B%%Lkb8O^IkRhNWWpU_2 zL4>KVgcUGaEDl{Lh;%ePDJWpHSsc1h4rNFuDPVM39J1w4!pT&@pKTd4^nwB56w$8RNcwY_7Zf1kzF>OnM z$(r+H8=5tb$3OCgCo50pW$OQr7bGk^e?Rk3hW0aNEvyeiTZCGjM2*#!1ZXDO6tDgl zS)Y1FUkWs6Y0&Z&&x&&Fm>=GbS*;YmvZJ^P75L=3M% z+g;mp@sE<044CLA$s$o#pkvp?KljBfd19RjR^R?@Tj+V`Rk8T1$@~7x5|q>F;mtU` zWz8k+S$*Qi!Oe5<03?U7TnR#f+sSKZ^T=?q-8=*$QsyJEJWAjbKfFgiDK~;6Zq%+ zl9>^^kpQ1f%>Qtg{hD9AJU*ZvWrr_h#Y*zgx-cfdC;7wf8*h^@j!+DRQsl!_mi#lHzo z2OA-qmhXeMX`k<05&}9!|jUaERBrO;Wq!GAjdr^UZZhJWkQ{S4++r=I(u%*D_ zpqp*cZ)@^pZh^luGE*{#e8|1XlE4nXSBOgabPGc)36K=4CaGDbY7c7oGqnn_NKPJ@ zV9jNp_@-prf9X1$uDiE|`^IVa#zpMuKl+p4OYe@~UYxX@5q3)9Y8~fg2cQ|eQ1js6b2-RJBAoV;X0g^QcsF8t* ze&pnycO3<%t9KFMHj}hr@GDjTEk~(CAVnNQ4pRd*@N&rzU<4zT0ZDL_GI-4}3=mLi zjRIw;1u25AE&%~0YZQnIa!aigKtSm>3Pg!PR1__}JicoPFv12c3M9d$%8(_jA;4&9 zR0edxtSp(DrzPs=q)MV_!IE>diI-^V@hi2tH5@?;nne*B0ypHH)PN53Hbjayz9 z->V*_K&fO5A$ce*N+XV7J=WIL;ruD7mGxAppx!2P3sXLs%2tCYM-COcrhRFb~$f9KKhA;}8+gpP&T zoz(2Gl+BivwWYx9uoqjSuc`4R$wpRc7mbUM%%`Ks;7X(c6ZBS$h>?%yxYaMwgClE> zqh&@Va)HkFQM5>r2P_>Y2zg^aBHD`mWC--tH@h$9pAh^1@^m+^fx8 zj{kHr>pOuavzp^{l&HW@+FMwgm@7X7mF2pmVuYXk$7FU`Imj6An^>5mbHBlra!EX7 zg{DU+dhmxNKspQpDtdBJQU1XnaNt!OuSF1fdhmxNKvD()6`~6d{(u9o#dso55B`t@ zNNq~BgW4lH|KJZe@VbpB^4#|O;>pu21&F2-R5F;5TzKvW9C)b{l_wfp<)nBrX(>Q7 zk5+^*-R*y%&uUu=5UVUMvh>ssNq~f7R0xE@y#F}$GaPsw78iMT>Q?|kV}uHbEQ5$45p5jGFPP1G+>unWYRlC^Q6g)J{|ebk&$u z+NP!KfPj)U3Y0-f4h0ZUnwnG#M4>lIx3J?#gMiXyafm`wF$zB}QNXB}WDd4;ba7>f zgAD;4HD@RTx=<47ecDtE0Y;O>BV9K9C_|e{0VT9Jl%d|WU&^AifDzcV0%fRoWrz|$ zU>9a0D8u;CLx~H-4*pC5DqDQZ--0TuvzZJ_t8j7tf)TZl*WS5-akJ5bzk75J&03h+ zP1gh2a+%0^mux9m1O#Q2lUek4zRN4uBoBGQqPR$jmWulvPLDE(JUK!WzMlNC(%h3j zGatnXwrFuMVWSxEaQ;{!Cx1uTDF?#-TAb7#TpT$&vlN)DIX`yt*YGVr6(B^}n={dl z{#g2dt`Y0Z+{pYt+d9LFh4z})q{v&^8s+G((iV#d2dMeM-fX@s+${y>XOnD|y(Z1q zIkge)Wo+hT{_q3ee?}VksVc>Y96kH1-QjPkL^^O{0m&A=99_@>UsqfWlQlF8!pg7b z@b8lUvhd?{JN)Ca=B)YX6N}gT^?~^gzRX%YFdt*IfKT&>C^`IFX`c+RFgw`1u^$^M z3vWw78N(rzli6Ovn;^N)@nvdXWs8)Y)4xr9;@8p|+;Sl)U>)o&mMBhfboNE=65Zl1 zX5^m#v6cB}Uv~aCWPUtZSKtj#`)!MKHU7sgVl;SG6Z^y+o_{foVAZW83n5U_T)z z3w3$g-5ilOV3HP$2s(4h@n1jdN)~3F2TF<0-+7^DFs%Gq4z>H*-!YHAm1l#GrnMcp-*PXOn=|Kl4cPR~67#%0b3@ zcohrNO_N+wk&%@(JwkD3PNY48r2x@waWJvQE!;B!2VTuiw!IVOZ?I%b0iwy`U_x@? zmI*lULgR@BSKsuXk~<6mW{>3j9TRYn++{q`;2!=F$rXW?3QR~Y+%W+M$tmNB2Hi1P z3J@(87p6Wafh0iM3?jnZBHDJHRv@I);$XtO!W|QEkQ`X^5)E!UNv^XLAkYxOgyg~v zli+m2BtqS#r^k~+O&Atjt1J#7Xj@vNvXd!bWG#+vH>sz3ese8=z>|&JZx!RKnX1lWhlE+WJO!R=&(4Hi8)k|93_Cj zt}dfM8M=8FH*o!MT7i;^U94e4nRSHt*=Y8Cv=f+?3 zMVzdTg#OJoe%yd{>R#!+$Kr?8neix0_!pa=ZJI_Q;NJXkV*B}YfAn@+A6uARr}l*# zxG=IlwiH;bIX|{ln$k@7bcH8}z|6~>c_BaB!NT)*N((#Um33wV|t z67U=R7<{gNj9P<@Merwjv<@3r-$1S47q&03FnHZuv55`UFB)nJikN+a;+e`h+@$$3 z$B*G#8W$lso1|@X`4I`rgq##>U{|paUGWaTk$k0!`4J%|=oV?*JbpxiP0ZgO*cR#P zw`uucMTaY7ol4^2A`A$5BPZq8a8q+A*N3EkK`-IM{j+!uQPLkJuV1uBE`n2E2)g`hJVEOFNZL!c|)1V9#nOiSQl@uZRj5HKo?pEFETvoAe;u5GY8K#i0vDSB5M(0Rbg6 z3Y19+$SkGEwxK{ths7aDnkq50v568uprp$vPzHC24|Lm5prpe386-hTr#QHgE71_p zk+L{+L5DJA+fcx0v3R5_x6kWiCIt-ie&`bWsp#4;TgfV)8M;P=crhRX$$7pF9+<>} zZXHa}VqtoVbseb-k|5RT=<{v+9O&)XL26&S={6p$@E1I5hdy6?bqc3vKh|+J^%)PR z{0WubHSa$rPn~8*e@{baW2x7Fk5%+429Ow`!%vt||84wlWkXx_U8#)zsB`cLg|2m^ zcTDfLgYMI;Yi3dsi60zqZsadM(B%NP=7Hi~NftwfK&%)7!}#lPZ@HJc*bp=;amJAPSM#h;d**3PIQi~_IvpPrVnonhzH>Z7t#AP-^JgK zs|#dpCPlmJU-28`!Bl1r`940m`T&&jF8#8{&+Vrnmzog`&vkpn0x^+aS;c2wjDHfo5;i9U_fs&Y|t;cM^EFKW3xZ;tKhrvDIM;T}&U zhEy9UBK_Qqfl+S~$(^)4{-`^z-XBtJ*%ACkgPWLeBg2pVH^J`uhxQPk>V8-lu+bN0L+=`t^gFzz7%|?NyPNod=5|6rhhm!`&j^OhR z4o#aGJ|sr)6^9YrvLkqCa1#@L!tlysg8SR!L#i!1g5P3rX!#4nd&d)dxS#lmmF}ex zq{1)}=T_sGtnhQ=JnFvwH$4Mn*%5q!!C6fHhu*5(*4GlgYgo5auyQVa^qJd8(%=z& zq0w2aG&KJ9+kLL{5-+I)14M*HMqoktUxBM~vwA0nBn=P|78`*D<$MZm%Z>D#^_CZ5 zml&3171z zB`Vw_{irKUzsVZh5JN^x9u>KYO=4IN<|8h-uRp|>QIo$%Sz^p^10lGVRk{1i6HDCc z1+nTO7*X*>uYgBZ5{tjKg}rHweQago*N0>m{#2gn;`j2hln*GVGAI)jBD)qbb;w?c zUk^(iIzyy_3Mi=1CL-PTy%H~$V?O;8)5 zPhs-~G_Q~qtcqvXpeuhG%zjSs%!<;N)d7`eu@)0~h>5al+3GyDC8&Oit1_ZyB7~d^IO(;a1Yh%9ar@8xrC< zMdZt%sD_+NOM!Z~y1O_rh>KehSUMHyW5Tf8PMJRKvZ@m;##=gRicW`s(}>Esk;)MTUeYLt)Ut*x$-3Y`L&B)L%~LP!~nvC09r@ zYaT(1BNjiHZu`xrTxmAEDDp*&oS?A+N8f`R?6LcxF7BcH?lsXTSliPBRLhPP7BaeeQLP2?YDD4Emo6IuXT8!e?u zl6;Ee<8vjH#{ZTw&v5H=;=`$CIlqSfaWx0ieT7pr2C| zoH9rRM*#cwKjPW5_s!40^^ds%ih_GPC$M3_2bb`Vzvsm7R>L))T4kR6Q^=w#l)%ll zgHUK|XnO%~?MWcoB(@;3&*602mdW~_J|CLccMkWE;MM&07nE)nyMs@sPGxbaueJRJ z+coUw)=RLllTvV3gn=52H)Nmqt-O_QF>f=%n^x0{2|nu z_zTJRx~f}gDgLdh13deG8W%C{q$3lblre$JbYD*p*uXrwM z)JvC>coPTl;dfR_R?80@f8r00?2)a30YFH7uLQBnJ$zK+lj>@-=Njt{2p8I{!y$L8 zgL(%;$SyLyYj(5~Y5H?}-mXBvyemiqkG;=RXP+tlV)u1JVpJtm!xYqvl)<%j#L}*- zF)_~HhYO$s#v(I;L-z5Nl{E)^D%Go%q}8;AB7s6g@z=A-!LH9Si8lB5#fkmnqDaSK zF1_1+47q7|bZbH{qV+prExt_+NO?!J~B@H^&2lc#}lFxasuA)c4O%y~2 zzKS-3t{~A})g=0$9?^YBB#Y*dKRGzxl|JXilSYJ~Y+MD2t&S$cKXGrDzto7RbljkQ zM(Sr+Scc;{(j754(cev}NgVF~Gy+$BOdrqaaWl=IbyfjzCzSrj{JFEb!we`&op2T% zU-Fbu*>#|9t&57ddUouHrdFn8;w^~-g1C%NPJW=nW=R=|*aRtX5vXu=suzo(;i%nhS&|6c z#@56LKN-1As+l3A6_j8Xjf*Jv#?NU?sw4uJXt9j}9O{^qdQDFP+Bg)i#hcfy#zZSa zo{59_Y>A3j%Vy7`A!dMypK0O|F1G&7A@mJ&}D&!>)BY^*1k|P%1Ir{e_v@?~qy(z)flkw_8&XE$Wx5BDBgNkyt^^KTP~S zX*m(nOcDuh(7afU`{tI!<31xlIW zfO7w+^6TBh4-}Uq&1G<*9J)d!;>4-$hI!uJj$5lQeL{|q*c81z zK~4K`e-D;VgV(9OSN-`aX(ie3X`B|7qf>v+AF?}_=%^m~*Z(0}*KiuwOB=le8Cd%7 zD2@H}+aup~r%aC3&l$R6&d8HLIHvBOk57A!3AGcW5gYJE}B+>r+m|4`y=ANcMQls)%YlJ!gCA5I*OZzZ`e zlC0&*pZm81cGSlyTrq~$JbA*CnM@>Px{SsOa7fcYI*T> zBgu%7vsw>(^0*Hl9@*MD{&_Ou`G4Jh*t%b2*B&)v**y(pL_?odyN~R5-po(l~WL@yW`UbLJ{+{w*KH|0Ye|!F% zDL+|P`@>sDxjTFN$ClY(_YOhWqcZ66y_1nfkd|iF2&iT)OPE~hRcg@U#-=_MdF~PJK&Me)P+q}%b zw^N_?PvlDHW?bfQ8MLkk=DX3kTgIVGmj_oDR>?W*6fNVl!ZplxmxgRCzKm13YiEv> zc5GOeaS+M$0gZJThbuXLJBHvc<+&eDc@JM&S0O2xn{cF8pHFS^i?bx39>h1Rfa|D*n6>2Ex`deF~wO|RYa z8y*@aEkEEDy03BLqn$Lxbf@n&yWg&Q%Fk44TluCOj0MuMA3W}FEC02w=2l{*Lt}1? zJ@kbCVx@{NC2&qHSMU8jIdJlA%l6niSNT_ajEGmBr{D81oZ>`_EMiHEe$QPKlv)2-X8knle`Q!ci z+m4_KQrr#%c6-k6l?m0wOYPFHydJjeI)7z?d&NME7tPpgZuUKmgwb3%BOE`9D}PNb zX<_s<(2@I#-SD(Ox$X6xA{eXif_X$KJA`` z*!Da#=)P=7FeVLWa?}A%PuaTZLE6hhV7H79j9N?pb0+-=%!0BY>xIQ|9>WV-eR*&~jarY;u2nR60kk9R!t&rwKR>VtjfPvk zTR_7NV&=xftr&}jTY{PzkHBtLFgO7)dgOjYu*eSw6~HKlvCiq)nxg~ykTDv3D}&D@ zGYCN}gNhcR-=XO63h33gd(YtKUUmo>$6$Zfr)6BQv#R}29Z$Y+kqYT@#0`KxJ)MNi zI>=ETYuSD$1q-XpFz}&S=x{lPBjEmn6M}9YSJ|G!$kt=cGx%CHIOVmYY_|*#`lg|R z`e|P459uC?iy1ZGG8&xZi7~dYh%VOJpdDqqbVSg%MrlU0?@`(ahtQt?UC^i3^|5b7!ca1vOSx~*6Vl~F4yQx zZ@LBWx!p1&=x)Cr8q|5LEfFxE-MEaK4oRg^)Bvzq4pDZ8HlPr3St6i}qX_IfSsnu* zG7^E$Mj!%bl2eGl;-IRvdxAXbgnYi3JoWNI(pk-3Ii2n=y(a|CRb~RIAp{fU7@iF? z5&~2SulmV_%yL;$4;^Wc{UXK-Wo6FRq;ot>kAGa}Kv|e8(}?*;${Y~^^M}3cBtj`l zdyfQjG!W+I+2ja=K=TeYFsHo#fHXjQvK+%7!h(=SmE_$VUYvJ6N8V5OSkeAtI1LJp z%%p~ZGLEA1W`n{z7P?k$!F^tNM!Y{)-iU`}{KZ+w_!M$S$v55~)Y#4E2dk@0GWTdD z<2@OGtP8;CG?c)4%P{e_>%@ zXHnKLur(g}w-*|;qb%81)=?C`(I_A~5{1*R4i=>^ARrCGg1I#C^PLkt01b5D7YD#g zJN~0Q)eCTqEvA9`qZ;1l+6a@`b@&>5B=e&;jUL-z~u%4RqWWbEk1%AkS*H_JLrU?Xn~| zp|Y8@K>iXrhL^#LkVlnpYrUzEH7*Nz=qUMEgJzVKJX;g;u@+fw!QEfUM&u7y@(7BM zFa0HvpG`<{^36vi$fJP{{q@PA4}lDQRs;E4Dz6{~@SY>b@G2M(-l!5<+4Eu$E=|TiT zXxaT6alM~M3gCRB9K!`LAe>PpoKGA?(;IOaMd1t$;cO1npXcuFC@N((#a+GrU$n;6 zI~azFei9 zCN}$P=GmW251}M2>SHaqEHM^y663{%j#rPe#8~M@^hYawghl9o^fp!`i{W3iB&X$8 z%in^~V=-8FmlbT1dDb!4V5{{A?JPxu7lL-`M}(HYqkvZTae!4MBmz_(&}y|9$m4TF zSaH;Dgfm5PfG;?6KPQ}UNdbq}S+p3b3p;uCPyY(u@wiS9dEHu!Nc|{5O(7!4SqceP z1hVZLg3PuQK~f-_eG_^t7PK1<(8G<5$u0yzjG$VN&@NXrcp+$I8AECNMG|dQ7eZrk zENw}&YywTKM`%A&GybU_70Qtzh5rxK614>L}`_o04gSAjVZ8BFM=K30DO2#8Z*R`-&hb zuyejofn~9v-GQeMNwjPNO|3_0GZYP82-;OckjCXjXw*e}jHXV*VnO2}Sd8W|daQ@4 z@d&J0!Qg~|J#z-q_^Tw?%(DoL#RA5ouNaJS=cws`SL+elRf+~L1g&%ua`!+H+Dv+C zG{w-je?Tl~Jo*+;#%0+mj}{FCF>Y!-Lc2lH;Dw-_ISpxR#15ADMf1~H7<~{68b9_+ zqGc0kYCS@`P0`?mp#9>E}D=C&|9+&{RCk#l9x^Zso@ByMSReJi{&c`nN2_{Lfd?Qk@PYB$1Jr#QeDoJ02#PB^uIL)7Tv(Xf&(9xN^- ztQdTiV~K#Z>=_a)2NE&D+!p504v6xLvM8Gu^(?%vqPIx{p`y*b4@vBQ<#dzT;? zwG-cyhW4)BwP%koA6J}lMt8+I0N21NI7gfzw@Yr+2->355nmK+xHGw`CXK%bT)x+Mn-i-9Z3lZh#)|>0Sb(hndK$*0PlqQ@b>;oH2 zwO8+^{`Az2%eG^qIY~A8Z8DQ9br;}pa+G3NVz6sZ-UY4NWadpwH1}8NC%I|g4gcol88?DZ2cbLVt zaf@m2!aSYl_U|zFr%d?J-}z;(eQC3~$gX_J)Z2ZVO^t16Gj+!Nks4A8P}zXW5bMO= z{M(xL;5IVVjK^P=p5|UJJ2M+hDm~75i-a&y-HwRFVf&C{;p*}F4F6HTlaA~!!LGMA z^$V)#P3buq$Ld%+X?Xe=5;e>p2xw{rt(BzZnv9_`P)bTxBGSW_-*?~e569sje2HY6 zAgNv($u>&6>a`z^i*zBQcGYXE*FwgBu(yd?ovq3&WMwoH6qCucM|y zgx?A;ZJ_rZ*xc4qM>|}RCcF1f=CUeIrgCi|6-jPW-aPDaj_meV%w<0Jg86pXt7cY} z>lq9}B)KlP|Ig+$dZvtCWBWXBc6pqB+wr`)yi&Uq6tV=tUChpV!A!5w-KB^o!sY&W zS1b2VYqlGDTi(SxSoS1YrtUDUBAiZ}cF5(BFG1*1M-n9#8zmDsI3uO<_ zf9!(IgQSN?UGP)y-ejNqPKvgriS1n!EQbsxjpQt!+ZDUaj|5gi%6@4``=b^6dFv}? zl*gC|>3d!X-w>b6mNuBK6GxPkG*AfK{@PRJsxfo78NIZDb|iL9rBl1?gMCU*#cKIH&qsqzMyL9s?>gT;lF7O6| zes7tpJ;vk>1a|XA+FXb>zOnDWFvxgvj*Sva8#4Cf4~#Ec62OjNBeohLgDBYAedgI(^Mra< z@-bgBO=;{XdlF83hoa!xIseR)U{dieMZs-K7$0QuTx)&_(%jSI@N-DYx)2+wvwL=% zYTNRjF|}+V9;2tk6GpOY-Xq4xfN|6N#5h}9V9a|RSYSK;*YvJYy~wlGYKJ{M_X8KX zjt>yI&Dbg~dmRwDG|ugs56wxnM)jPXaE(R=_UV_V$c|$=w(R1IKN(pc%Yy8`fWS7j zn_jg}*%>oAbqXMMMSF}KjJ1sni;ZQ{Y^(MF@l#c2DqN?2!9P3nqlBq@Mw$VbX~gz( zu)sEbLAF%a*)q?lTfne;KQ6Mh{e{URTREdKTP(2bm+D5gHmF~~u=Dm8*;;N;ED=SmM4cIcN0 zTbtWjFTlqh;++8kyW$`vP<5Rx^H22)7zJ*rGm?HmAhA+iXDd9U zegOj?0j#tyb(ogu3V{t;UU=#Xy3FGCj{R8~52tcJvi&|Vook&DXViSH4gySO3UmH# zmPVIBHk#e_Anjy!Mrjb?eA$LfuUe-bnftf;2w#_VWb_U)u~TN8`QFyn>+gm)ynAfs zEV_rtx!glMJGV6Rof-tW>QQNXz* zU2n~uD;38@Ap{=m9%bt~XO+tLca_uN@&GmK$h;#ciR!osh)PpbN*qu=EE}kI?Z>}EBa)kELV7%&i^iVU?Qd?&e1NM2w^+?3KAPeg4Et z==))NWjduR>W9coJL`|7UO`U+24fOyY-4?H-AJiv0@ZY$Jv^=97yX+&y+4=11 z4Y+Uz$nE@oW@oy#mAfJ-?2^>FV;0WZ4Z|{vk8F-P*#o^moA$w!uDiz;a?}|!DGJ)5 zQr>pj&)GeakP)<#`$(*_)vdgw0ptE8+w`NrNs6L+Hb0iucr}x5G e{1hSqQSRJJ%DZ*(*t^?jUss-+eO<*-SNuO)B(R|X diff --git a/blends/door.blend1 b/blends/door.blend1 index d239a1da1d7bd28b1dc02fafca3dc4a57a3382bd..d5a9b1d411d9bdc65c2d6cf873db588660fb53f3 100644 GIT binary patch delta 1745 zcmYjS4@?tR7{7PDdt7NHDBYq6IwtCE3Mz^qlwLde7u}3Yz+k2sicAEYx?mA3_UblT zbSjAQ6g4Ul#bqi+%7K%%TGU%4;D&MN9I}}V2W0-)vY`mwySuvVC11Yp-R1jzzwh_n zch~5RYxKrd7E$6?(RsFQ&TU{dtzu&~p}7G-hlXgtP+6JY9ATISUjXn2DhmLtrsB~0 z`&NQruooHwfMqiKV{bn9?(+}1`1c(yg5Wvgf9o4Z9oMHCjlKV5DJNu116z$M6uSv^ zb+xq!+ah)8U$negN#z&@i2>6~Eh_D*-sV z>7c(K$L_Oo6o!^>02J!01+=hb4)l@Q;TF4$D|x{Z0|BWb1{WiK0sKX?_GP{-3-*do zY`LFpWX*a-sEKWMISOlD2(v-W46s~LtThg@B(V!Uii5oxbL=KXUg@ynVTxvYja>6_ znO|>J)}u>`T+1UVHQKNUUK&3%=JO@s!`A_VkUfe@fKIgRA-+w~(q}ipV;|8(=UwdXBFPpA6H4JAAc+j*+YW!#?DhA6y`n|>E#=G`u=igY_X$M{#P7kErlJh8 zD&nvgHI>1i)g}J?5>&eb;&X30C{xP&;lJ$BWBwzWYlT-Pbo$$m@wXoX(3lmj0@u(- zJeIWDe;cqz$u^j*WxEwRViyKHV1tp=@Sp;yL$__PeX<1uideEj4EWkBvo#X|7l=TT z^uoQJ&<(YR9u>*##1VFf)SC{qRKQ@WXCJ;r9Tl+1I{Sc?Th_Z+|GX);O#+GU&2Os@ z%QW2lyTmQ+9~gU_N!g{`0duB7+PALmafJZhu;IxWk2KY@aQ;G^GdlI26TjwDFjgJT zUxag{{ZowV#aR25e12$_FUgXB+LKYd62IrI+>*W?PD4BNO`hB&Od=`%gPU#p#;Ohb zRizvz!C7o^&8ZL1aW-3~3zKlYJRIk)6)zgLRGl&`@vYFb3y7u5X^Q;vDC+<+#R&m~&jwyH2@J z{8{Hp`(%L;gBa1X>EJ1Ps-^hZ^}nZbzm2@*?(C}8U#)M}GuJ#uiIcQisp|>1JVUOv z+0pL!S6v2s;U0)BKq%b9=w@rOKI@ieK0VQbcDFK7T5&8@9$xXzg^%THu5x($g~3+l zQ!=1#C{vni1THh{(B?LVMZuSuFys-Lw*vyDBB;DfsuZB5?aW;jE`%O*GKJx<=}9T+IOX*|4aX3D zuOmYQ&vm9Kl{rbAB$&z~Wuk;Et@^f3%jzx4w-%RLM%G(xln?LvBY%5IQ2pa?^MJkgL#xUXD|;G3$jUf?#Wf!6FZx>QB#z{4)wxJ zJ(>*0Z*&H@@i#BCOg9XRY&&!g@rmLd?>fprJVb_gnL8{emun*p}i9K8cJdfPyz?5FlnFfWAMtn z4{515Z)O=SS^}iG@i{Oyvy%WTcqLRdvtz)i;6Cv{Oat*?tHw4dTyUJWm3`TvT-aNU zQ@GaDD2oYtt8pi^s_Z26Dxd&L2HKT3w&Ea`8qdVqs&b?ptu@%l*>ec^QVn*wcloXc zmfK|WcY7T{ttw@O&Y(H}P#ZJ;idoyQAIG*F=_hjYbwDXBp7Xfp70{Vbu)@rd`sg(y13sgw-T-7f5mNyB+m<`ohdL^ zH8?Cpge5PtE9k#+t*s~dN`Qz6babz7aa}uMS-K`OKtu#Sez@Nfs;Upf9hhk)BCL=9 ztOztc5Q1LT*Btq_c-F-g4;J3&%xyc6GnWe3cYR*Aa%^n-^jC^Qx1ZF9j@HTT3&)As zc)!CM&$%0{S{6~$^fJuJCiE3<2fMEhlRYrEh^?40eYu0zPt7O<>SxT+(8 z;HMs;C~-ul2C);!$bKg&tqBf!HWwA~8wzC668x`Ug!0j}-s_ diff --git a/lib/game_objects/camera.rb b/lib/game_objects/camera.rb index 71e2348..3bd607f 100644 --- a/lib/game_objects/camera.rb +++ b/lib/game_objects/camera.rb @@ -91,7 +91,6 @@ class IMICFPS if @entity @entity.orientation.y += delta - @entity.orientation.y %= 360 position_camera else free_move diff --git a/lib/game_objects/entities/player.rb b/lib/game_objects/entities/player.rb index acd338f..b46e11a 100644 --- a/lib/game_objects/entities/player.rb +++ b/lib/game_objects/entities/player.rb @@ -9,6 +9,7 @@ class IMICFPS def setup bind_model("base", "biped") @collision = :dynamic + @physics = true @speed = 2.5 # meter's per second @running_speed = 5.0 # meter's per second @@ -93,11 +94,6 @@ class IMICFPS # Do not handle movement if mouse is not captured return if @camera && !@camera.mouse_captured - if @_time_in_air - air_time = (Gosu.milliseconds - @_time_in_air) / 1000.0 - @velocity.y -= IMICFPS::GRAVITY * air_time * delta_time - end - super end @@ -138,25 +134,8 @@ class IMICFPS end def jump - if InputMapper.down?(:jump) && !@jumping - @jumping = true - @_time_in_air = Gosu.milliseconds - - elsif !@jumping - @falling = true - @_time_in_air ||= Gosu.milliseconds # FIXME - else - if @jumping && @velocity.y <= 0 - @falling = false - @jumping = false - end - end - - if @jumping && !@falling - if InputMapper.down?(:jump) - @velocity.y = 1.5 - @falling = true - end + if InputMapper.down?(:jump) && window.current_state.collision_manager.on_ground?(self) + @velocity.y = 1.5 end end diff --git a/lib/game_objects/entity.rb b/lib/game_objects/entity.rb index a82f195..7ce3b17 100644 --- a/lib/game_objects/entity.rb +++ b/lib/game_objects/entity.rb @@ -9,13 +9,14 @@ class IMICFPS attr_accessor :position, :orientation, :velocity attr_reader :name, :debug_color, :bounding_box, :collision, :physics, :mass, :drag, :camera - def initialize(manifest:, map_entity: nil, spawnpoint: nil, backface_culling: true, auto_manage: true) + def initialize(manifest:, map_entity: nil, spawnpoint: nil, backface_culling: false, auto_manage: true) @manifest = manifest - @position = map_entity ? map_entity.position : spawnpoint.position - @orientation = map_entity ? map_entity.orientation : spawnpoint.orientation + @position = map_entity ? map_entity.position.clone : spawnpoint.position.clone + @orientation = map_entity ? map_entity.orientation.clone : spawnpoint.orientation.clone @scale = map_entity ? map_entity.scale : 1.0 @backface_culling = backface_culling + @name = @manifest.name @bound_model = map_entity ? bind_model(map_entity.package, map_entity.model) : nil @visible = true @@ -41,7 +42,6 @@ class IMICFPS if @bound_model @bound_model.model.entity = self - @bound_model.model.objects.each { |o| o.scale = self.scale } @normalized_bounding_box = normalize_bounding_box_with_offset normalize_bounding_box @@ -62,7 +62,6 @@ class IMICFPS raise "model isn't a model!" unless model.is_a?(ModelLoader) @bound_model = model @bound_model.model.entity = self - @bound_model.model.objects.each { |o| o.scale = self.scale } @bounding_box = normalize_bounding_box_with_offset return model diff --git a/lib/managers/collision_manager.rb b/lib/managers/collision_manager.rb index 645d8cb..f0662f6 100644 --- a/lib/managers/collision_manager.rb +++ b/lib/managers/collision_manager.rb @@ -82,5 +82,29 @@ class IMICFPS return box end + + def on_ground?(entity) # TODO: Use some form of caching to speed this up + on_ground = false + @collisions.detect do |a, b| + next unless entity == a || entity == b + + vs = a + vs = b if a == entity + + broadphase = search(Ray.new(entity.position, Vector.new(0, -1, 0), entity.velocity.y.abs)) + + broadphase.detect do |ent| + ray = Ray.new(entity.position - ent.position, Vector.new(0, -1, 0)) + if ent.model.aabb_tree.search(ray).size > 0 + on_ground = true + return true + end + end + + break if on_ground + end + + return on_ground + end end end diff --git a/lib/managers/physics_manager.rb b/lib/managers/physics_manager.rb index 69d1061..367f583 100644 --- a/lib/managers/physics_manager.rb +++ b/lib/managers/physics_manager.rb @@ -15,21 +15,24 @@ class IMICFPS end def resolve(entity, other) - if other.is_a?(Terrain) - entity.velocity.y = 0 if entity.velocity.y < 0 - else - entity.velocity.y = other.velocity.y if other.velocity.y < entity.velocity.y && entity.velocity.y < 0 - end + entity.velocity.y = other.velocity.y if other.velocity.y < entity.velocity.y && entity.velocity.y < 0 end def simulate @collision_manager.game_state.entities.each do |entity| - entity.velocity.x *= entity.drag - entity.velocity.z *= entity.drag - entity.position.x += entity.velocity.x * entity.delta_time entity.position.y += entity.velocity.y * entity.delta_time entity.position.z += entity.velocity.z * entity.delta_time + + on_ground = @collision_manager.on_ground?(entity) + entity.velocity.x *= entity.drag + entity.velocity.z *= entity.drag + + if on_ground + entity.velocity.y = 0 + else + entity.velocity.y -= IMICFPS::GRAVITY * entity.delta_time if entity.physics + end end end end diff --git a/maps/test_map.json b/maps/test_map.json index b45785b..19f5a92 100644 --- a/maps/test_map.json +++ b/maps/test_map.json @@ -26,7 +26,7 @@ "model":"tree", "position": { "x":0, - "y":1, + "y":0.6, "z":0 }, "orientation": { @@ -36,6 +36,134 @@ }, "scale": 1.0, "scripts": [] + }, + { + "package":"base", + "model":"tree", + "position": { + "x":16.7, + "y":1.1, + "z":-7.27 + }, + "orientation": { + "x": 0, + "y": 37.0, + "z": 0 + }, + "scale": 0.9, + "scripts": [] + }, + { + "package":"base", + "model":"tree", + "position": { + "x":-21.2121, + "y":0.06, + "z":6.06061 + }, + "orientation": { + "x": 0, + "y": 64.0, + "z": 0 + }, + "scale": 0.25, + "scripts": [] + }, + { + "package":"base", + "model":"power_plant", + "position": { + "x":37.8788, + "y":0.343869, + "z":-6.06061 + }, + "orientation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1, + "scripts": [] + }, + { + "package":"base", + "model":"purchase_terminal", + "position": { + "x":37.8788, + "y":1.843869, + "z":-6.06061 + }, + "orientation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1, + "scripts": [] + }, + { + "package":"base", + "model":"information_panel", + "position": { + "x":37.8788, + "y":0.343869, + "z":-6.06061 + }, + "orientation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1, + "scripts": [] + }, + { + "package":"base", + "model":"door", + "position": { + "x":37.8788, + "y":0.343869, + "z":-12.06061 + }, + "orientation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1, + "scripts": [] + }, + { + "package":"base", + "model":"door", + "position": { + "x":37.8788, + "y":0.343869, + "z":-12.06061 + }, + "orientation": { + "x": 0, + "y": 180, + "z": 0 + }, + "scale": 1, + "scripts": [] + }, + { + "package":"base", + "model":"war_factory", + "position": { + "x":39.3939, + "y":0.499657, + "z":9.69697 + }, + "orientation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": 1, + "scripts": [] } ], @@ -43,26 +171,26 @@ { "team":0, "position": { - "x": 0, - "y": 1, - "z": 0 + "x": 37.8788, + "y": 0.343869, + "z": -2.06061 }, "orientation": { "x": 0, - "y": 0, + "y": 180, "z": 0 } }, { "team":1, "position": { - "x": 0, - "y": 1, - "z": 0 + "x": 37.8788, + "y": 0.343869, + "z": -4.06061 }, "orientation": { "x": 0, - "y": 0, + "y": 180, "z": 0 } }