From baf978551245a3ee92a9787c7fa06f3ded0a161f Mon Sep 17 00:00:00 2001 From: nick Date: Sat, 24 May 2008 23:40:27 +0000 Subject: [PATCH] Make mine an AnimatedImage git-svn-id: http://svn.nickg.me.uk/work/lander@420 a97b1542-0b21-0410-a459-e47997c36f34 --- data/Makefile.am | 3 ++- data/images/arrowblue.png | Bin 0 -> 257 bytes data/images/arrowgreen.png | Bin 0 -> 273 bytes data/images/arrowpink.png | Bin 0 -> 256 bytes data/images/arrowred.png | Bin 0 -> 268 bytes data/images/arrowyellow.png | Bin 0 -> 257 bytes data/images/mine.png | Bin 0 -> 37255 bytes src/Game.cpp | 3 ++- src/Image.cpp | 4 ++++ src/LoadOnce.hpp | 25 +++++++++++++++++++++++++ src/Mine.cpp | 34 +++++++++------------------------- src/Mine.hpp | 8 ++++---- src/OpenGL.cpp | 10 ++++++++++ src/OpenGL.hpp | 3 +++ 14 files changed, 59 insertions(+), 31 deletions(-) create mode 100644 data/images/arrowblue.png create mode 100644 data/images/arrowgreen.png create mode 100644 data/images/arrowpink.png create mode 100644 data/images/arrowred.png create mode 100644 data/images/arrowyellow.png create mode 100644 data/images/mine.png create mode 100644 src/LoadOnce.hpp diff --git a/data/Makefile.am b/data/Makefile.am index a342769..ad74973 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -3,7 +3,8 @@ EXTRA_DIST = images/ship.png images/star.png images/start_option.png \ images/exit_option.png images/keyblue.png images/keygreen.png \ images/keyyellow.png images/keygreen.png images/keypink.png \ images/keyred.png images/arrowred.png images/arrowblue.png \ - images/arrowyellow.png images/arrowpink.png images/arrowgreen.png + images/arrowyellow.png images/arrowpink.png images/arrowgreen.png \ + images/mine.png nobase_dist_pkgdata_DATA = $(EXTRA_DIST) diff --git a/data/images/arrowblue.png b/data/images/arrowblue.png new file mode 100644 index 0000000000000000000000000000000000000000..1671180389cc1fb83d42996f256fa14f76455a1a GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPStAvoK^3xWTSwNviPZ!6Kh{JEE zSPLCc;9$M^TYi>^=A4?I1vyLca1z^kl!-~+#lr@@)ya?hq7n9{3%MXS+L{QuTI um4Z~G@7ruS?^K=%{~pVvB7gO&nJvS-Y$dLf`|g9h!QkoY=d#Wzp$P!U0$2zD literal 0 HcmV?d00001 diff --git a/data/images/arrowgreen.png b/data/images/arrowgreen.png new file mode 100644 index 0000000000000000000000000000000000000000..87e781b86025b8ca04404a7469040fc56fa5ef53 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPStAvmYH{)k>O`y<3PZ!6Kh{JCu zpA>8`;9*|tccnhGgo!^b!AZ~hIrD4xzN>5<9mgMktgxB4pS|eB&Tt2pZJq%Q&l9(@ zyg#fg5uVsm;>*D8ByG-Y u!r^^~^@ZY^Lh}V}AC4?n7nu2X8GjzHG5gFFF}HwjVeoYIb6Mw<&;$S$K2&!A literal 0 HcmV?d00001 diff --git a/data/images/arrowred.png b/data/images/arrowred.png new file mode 100644 index 0000000000000000000000000000000000000000..51a7d4d9a0956757bc62e6ce2875a2cf15517bf4 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPStAvm^L+MrXETB-2r;B4q#NoG- zJ^30G1XygeJ6urS9nbHP!Z~M`6oANN*|ZUB~4D13b``x0{MA0 z1=Cp~^`AbuE+jJdide0x%YY!&%$uskBPfBPy{^owH*My_GyH9(<8PZ!6Kh{JC$ zTk;)H;BmP)^SAshO(hkVh@8!$A4@L$ac30hKAN;K;?4WT98a_u81fW7CcG?=a@^OS zURTLA@sa!iP8YfLOl3-^Dug#M2X>b;Y74IYA+UkzV)tqW-VX{Ug~A7#E*v|{ uz&*3h-+Nu}-sk*+!@l;@)Ueil&obs1V-j^yUw7yBJ=+lk*?IPi z)@1}?gMUOc*tWu7A8|cbfxj`iUDnk^ayo>j;a|2|pV!qwQ0#wc6&dmHU$!})x$cG_ z>^#{2nUKU}LHLh2_p^H1xZW*-0y}mcer#ZfAY#Z_ty5RLf6bbCd0)|93v}|8559OM zFPb?dP3)>>{Ogljw0LWnGe5`v-Y5KKjbAzP)%LBA^|z-WcQSj+i~|!$%;GHv`vxf+ z`;uMe2g?qKCuvpr5bZ?ItlF-no^Z4M?e`1W{{QPQRK!@C|MHEC|M!cod+Pt|You|Q z9L;%E|K1ik!jIm=-VqP?D)?p>Xh-uO-ehq0HvTHK|EZWIcX5QkHPe%8MA7Z53>n3@ z%Jcr`7lU?DKiJ=)H!t{yVwRG)&B~vjclGI1V_uH@N%-Sf79`Ok&E z`|uGD&_n%3blryq|Ni5l|NS*yM=}yM{h=Rw;C#Zlego#$OHzBe53I0&j;gv6&@iabyB(IntK%-fB3%*g%~X>KWo6T zGoo(fS(nY%M7gKWo=sf4|K`n`T}ggNOuk4bESMMG<$JjMMB|(s&%q06eFb**)aP~a z_hN*UKJ}98L<#g)&!miUjPDH%dc1%C{(v>l_3PIYCCgIP14@m)Sn&FKPrrShd6Hz~ z^mkZqVunT`-)W55{q76;x65GT0&Zh{&P&X=Sb0jCO0?t(JI3F-)U{z4R(Q}?)DojIF7$1 zBKLRh)yZl6mXb^%lVpyowI|B8O~^Hj&;yqm1laFwoPU1wfK#YNYL3g*&B^m*g|R5f zR57o!i1w`wscRpd{q)YA+x}2krF%LNK9skFqkT15SHx$W@Bn>rpz7H{24%TTX2XBJ zC&z4q@CX%j*%y_zWduK;BXx(-RqA11w6<1NO+ZLzk%k&L<^43$T+t8%-$0lzTTow~ zNUq{$7z#z@q0#@D@*~8ZxhhC|vXbEm<$=iNbRN2n=-=nk*EQ!q4M+UX=}!Nh?$S2j z{n>NwMz%#&V5!W;Xtd1de#f$}6D*ry+jz=LISpPiuq1pR@%OJg1oN|bFHSt&`LQz7 zLH*=22$!H>WR6)GfA2PR-@j85-|Av^pSZ9Rmynii+2}fQ?n!n}2eQa?MBIsnf=JvUMKr zxzfv@`8)OAv_2=?lq+_GrfKr`eo^b0WWuyfDJ&Vb5{yV)*djeJoe1BI0V zkS*@Yu6&tN(vT*nk-S@N{Bz*~=4pNl6-Cwhi`@Hkc%ww#U3h7&EIM9os;Q~@xV6f% zhIz>c$05`yv2UMCy8hzcZ>Qn1=YCi0W#^afoIa_f^m31aqv`m}5G2#*_l6nDgBQmd z9|p`j$Q+@Q$6MlWz%iW@M$eugh?!( zkqH%I-r_5vJJ&*nY7l==@1h{X@Cv1d4?U}=cR>AaP9}{s+7OLq&|*XW*H)`*Ka{h?@JGyNY&EGVIBIe`jTm1dBudlMUu5PHwP^y|=0@Qe20U2}Y%aYX} zuNQpoG534;+jr&&>(;Hcy<3+^c=QKCdgiR~8s{0fmnCa@dit~Th~{i>{%MwF(m_Y4 zPmf#iuH$DOlEm~bT=)TxuIgERXg1lR#PzL-+JzUgHPf3veq2dBX0vs5u0MiG^(HE6 zKoD#zsg;$L<+8G}$}}xGPODvge$?#GWzJc;`KOyvg5;U2!R9HVHw3ZTpJh^XRD?ix zN#O_y4P_T*Gsa#-S)}gSoZF&B;KD$O+evr;VlzHq-TlF%M>=))cUrlJ_&w<|Q7f*6 zn~sc>bs5!?ESqdCf^t3#iFT#T^WOSm9cT0p1_W`YOX0*yy@I5qBJQK37U#Eb-yH7| zQ-*S@7^Sw!>{?;Hy~aW+o-x0^+%tKz94oAHElI`e=*o0g1Tx(D>hullE?OP}zROX>GIiV{kJ45QP{a8rW+`w}W@N{Uek6?#~amS_zKh-a8EFl7|n! zzp_Y#r+OH<_`}eER^M?>3iTNd#<|nU>jeg{LIR)}{iQ0TQb}L#^*?xqo^%`#)L~F+ zaH6-@2EB%MQi!#x8@vi=-apwPC@nG`#VyWsBc9l`&es)5AO*FVb5NKgA;UyCGd zjZ;S}#~!IH!nd`8pn=vJ4v<7I@P)_Ke4BjZ+wd*KBou`>#wRAkB_(y&5EaJ(#nz4v z9ZygB9P^3?Sw^{|OHHCU?w8jLpwE1p{F>y!+2C(GWq{ut=eeb=r8WFWWxjf%?fJJ1 z1JTyzW(^02kE;{UE$%`RzulNGi>+M$BlY}I#ETb#pZe$W`W%|Se%033f7HpMQth`o z8)e^QSh=R9t!*_w zP~yElo$>9xp`^0+V%mI}F~^u`@26YrI|XGCB+qeBc~q%dChO;R&mgt60k^+B7KCjy zrs4LNC!W4|F*W}8jDbPM7IyxiNasI44*RbBGzzelPS=g?o+J?sECN>ex^v8;6ONd? zhI;5eQoF^4=zp;E67JZsV{h*43EY@dSn@faAT17`A9%~oZr_O$Jo7@qv-H#xc8?DB z*FtbJA=|cX!w`qR1PXPnaJnm_tAM0_zRYv(`%$yfH;}T?wRLqal&=b1PF0(empM(o zIEYJx3_9wXn~QwBmPH+aq`3?i@bQ||r%#{a9zPC_iP>SwNmU-isZ>pr#65YU3DrpO zgzXOKG$TAT=$GfQC;#)~J&VL^Nb$K0V&M0GjB?sLOrG1PT?+g{h^Q0qP!d&kKZHH= zzI~^A(U2|dk&($CntN#ho0TWU&;im&UBv0sSna4J$I@+v8Tt(}RrHYcm6_1ULr0G2 zoyb|4|3_iSdu->E9(>l%2Ll79`CBWOTcxm&!lQIUJ2b<9C||gFt1Tfol8c8Y^n_i9 z<#2WIp}T+sI#d?wp}J1@J5@EnJKu+H792U1%;?UJ0uNTKdGgqrqI5}dG427Q50d8KKZ8zD~zf> z#}68$#z0Ab1>IKtF=4RO!=1K#>q4^PV|D5<%j{5y0P6ooR4azze_D*CPdpLBr47ajDS$)^6v z%DrgJU_k)MZ@*=0tN9ycZzViXraCoZcnj_inw9a1u`->_ruzC$Xkb>5rhT7oDbsv* z4hK}(ky5dUuDOjaEiJtbLH%hH&y9;5g-bo>9zb+;mMv7y$f5at4uY!QveNwQ*s+CA z;6I6+dw?b@x@g+>eL5g_yAuJNtn6d9BpS$Q>FD5hy9LF;vY*u6UJpmain?5#Hr++X zH7^8>I4cf2D;^RTKh+HFe{FOow`%nP+Pq4#If6%T-Ml#r{Y%lG>im8bpZLzIE#U~f zvGkskw-H32PKMT(P7GXcv1izrvY0IquNT;Ib6b6XbGDQOuwUUUJ;J|*a8j@C!_};PMz;A9v1ll;KMF;v-<*y2Z~f1)gi&(nA})xrxnb}1+eea_nVDoqTfc>~ z3utI%Ud>7{)G3?Yv3=XNQx`9C(Kk0o78YWIf{>JS8R(HPJ+f`z9@1ca%Gmfte{1a5 zB!w~GmA#iQUk;;`0T3*`mZu#BpLPdO^CE?E8a|@7wzf0dMBx(OcBGNQ?X~b*&!*|o z7G#HzB3E#5u(B{KE9-D+C_7S|D0r*&=_x1;ktsvAkA|Q&iwGpEcs+u$H`>*59H3&h z>qM)df};@j)Ivfr9Ky<6MRnwVif3%jND~|!q{G9)A~o*6Dr5K#YFqtgbXqIs7&>^;(ni@7vP65i$vpJ{Uyi@H>fQ~!ic5l~5 zau>T#KOxN$7Kdwo=_w3`LDku<73RD0=aqSd@6)GGwP08*^&z1{h4un-eFYJ{BTC+j zmQ)(;RM$!Pt5S9__Tdm3C9V^ll>vTtzrWd*Pci8Z6{1&(MAk!w29z=$3MpN7Qxqzm z$tiR0(o+bI?98(|J>W)CJ6a~5w;6H&z63x>z_e{c-kbD#)nT7YFvmgPjSN_jG@yqp!F=){ z%>+gP(`&WYrTNA2xf{!h%R+2Bc4)!zXr4aJy?ggIiCUOll5fn$?p4rN5cvN6d*s@) zZ|S<}Q0k})1ayXnwz0O5JLu9R>Z3GLxerB4`;E&cWo@lzNz`ZO z4tDm_Fjl14*nf&jhAQ1b2TQM^{z)}4FOY`-R6DX`UJMmU&THmYHSs%MZW zKZb^e&f*&7;^v5DJM@U^gJ(Gpz?@gHX8w1k$6(<6MC-GbkL+=e(M9F8^_g6i?BMdP z&2%z0Z_*<3;quuSC%ondc8%a4?veYxBw9&?PFD7DYGOr3QPH@GP;6Gx9_oYIFizb0 z{^oKWq11i)^^(v>!;DA6ctFD6bNVYy7(BeZZ^jrOaT4F>nCNt)UsQu!^NN#tU5m~8 zVyCDEuCB*jzL(_3Z=(XXriAryxM?}iPP#6{wkq$>RO3VGcD5}?G%<;jj?29pvgoMPvvS)6?;j#Vu-&E6eyH4g8QJji}cN;P4#0x4qr@gzA=xsa^6DU#3!l^1I zLSLKhgU=S;#hD8uCO_xqr?KbaxRBf;BOqK5ZfpjPTP`E1V zTK2A?rblmQ^tp+xcqkFsm*1W%hCc;0RfajC(US`GR1tt%$5NXshlr{%nf345S`)Ai z5;wPTaOgNY%R=?Mm}9CmLQfD^sme9#Ko+wpdy&Ri(Oe}V4lJpP0a$7eS6+B|T!Ln^ zHa{3g4zRRLbNr~}40YtKTaXJ^(5;<2cWO60;QRLGEKjNP2=m-vnNjn`FZpT*Q5-|6!$>?wr!?VphD>|c_Yb?!P>z}>?{=3G?Y-3~75L7`OjV`4*^3$Kp z;rH*?ntBBcVJ*Y(^5xsW8;w?c{(SP>`SUy-3s0Z&5|yfUhi={Z{lk^_%n^0LSn0|( zDSCG;`v!OaJq-;6+VRqQ&*wXaDRcITljDfOFLjj~!1qUPPE_CU^)0>a*G4h#I=Mqs zePFDlMLYP_>4>|0QrCEgP)INvs9$IF^}EgN@{OmUkn{5MPd=T!^@9n==QC)z0Thn( zWJiirWi-n{7$^7Zb%o7CcI{skx42q$4CeTB?Cc=VM=PN_izN?#V&obHZ)?gW5{boR zCO4-5cp`XL`Is??D*K%wvGlB%kv?Surk<~VVEUzmjfZ}(K^<;gyku`q8U zyfYx?JmY8VlRU+w@%G#^HUy*g#_+DgNplvzaW~Zjd#WGsNxg<7a%a$ed;#U%Vz9hK zxh~}|5}{SIF-~h~;*g8E=4vUMZFF6Ix{Yw2NQ}MZ#fx!q@1gMD{`NZD7>%LpaxesN z=yZ2>Qll9n;=g#RhTv@qarC-?@DdelN^J6@Q}o311j7dVwFM%qwk6a~v$S z#9ahL3XnDv=xL}KF6$;atFl`gDa*^2Mg34Ba{clSN?`R6s)l~YLS?|lgJC>3O_fT5 zD<9sEsN*)F5IvK6y-25!_9-d~LN&SlyS#+jZ)6d0l{_xHmFb>*l6Njdre-$`53fDv zez`A=YJXczh?KRgM(AWb$~3$&T%~&d**{lz{Y(-<6s}3B0-sy^s)=LYb^VAsCIW#F zcK`mLWC^-CbW)fOqyuGC2*q7bNvE|?}CLhU7cfA0LX{2 zB;R@%9bE_I78|Rdq>vCE)@)n07ak6h$J7Y(FZHS?u;4Fwc+Y2DQI^!8S4 zeR?>(D|Gg+f@gVt{~WTM(sZx?3*W+5U}UE(p|y!gyvfKAm;qIx2ylM`fVBOMuK-X- zMnb;s&11p z&i)0Ivf?>nDB}~y3-n6n#Zyg$R06}N=6P{lgsOlyY0Um6g9rFpfP#HTARH*e&!q{V z+-OTa1^hD=QrS)bB#kk;(EgO>B3`|Eb;#t)M;@6tp5Po&IWejM42kFY&=Egu%0q?$ z)MQjK*4v`cMUjJThZmSs1#b3}OR7`E29`v>pg>i+a&a{qFvodR`{CWR&B@04cs%}? zfMeCBrzB&HOpXA+Fxy{5I)d?^Ql3Ck#i`1>GG74oMl3ft@!d9`n;Vl#B&MO`w_35X zH5w4u=-fbf{rdHT6javkfJ6;pTy8PdZyp1wT0IIn3%@HGhIZ3Ppas;M9x{9vlf!b( z)Kuu7Yaeg75)fV$Y(ji}&SVl_G~gOtd{9Dyd0?gS1)_AjQw&gPSBZv}bu0ktrk5w| z>Nns@UmZrLhpGtq%fy;coITPBT{V`T;kPy~K?^5R1U<{lW}S2xbx{)|BO@X-PEz)$ z=9Mc?8#jyrpQ2Ve|;Mq4eh4jIN1`i(~IpoGSWTQa|~Sh-b--5DQ>k^7`l4I5@Vd zR0Y%T9#^7@?%8w0;oM$z|Kdq!MJ+i|6DGyUsdb>bd#(4>oSVh{pTLbEaGGie~H28fmGb@2q0U_{yBX_!_?G zpIJstz~^OW4cy##PF7Qq^Z7mG+IFN=OE9`YBDvwYjK%%Bk!qmX!)z|(C|V0Q*Px@B zfi^pYm9GeGseV?Cxa%rGMR)GEXaq_aYH{^dE7wlD_7}&nDd+a>%$#$PDd7wT1JI-x zuwhb+$xu%9&dsXg>g>gd{Xvi-mN0-UuB{35xE#njw(S8~^UN7Gs_B(JY`%jjbw^(x zsU{A(yfqAW)`J8f4jv3L(qF$mSrTH%!TRpan@$k%Je1>1h?F7VY)$v;!bHp_%*73@ z{lJq4Fo8c#NI2*f67=rQ>+p}|vFoMlUyB(Sf`PiCob(aeH-KXdBpM3ePP`AKhlwfP zZ`C0zJY0PLe%8RiKq`$)Y)B^SpN2yGT3eNSc<@AbhqjBQeW9W9BX{Qb}60kOIb|9}@-~>7{{H2|6E!X_W z-|8<pPt;<&5gBm&2Z+>a;g9E0&IUrZ?evx z>el$Z*ZZhxiK})K!F%V)c@|;#wl0i1UA`;1=4Py+Ojv(abQxuBO*j($=~ml=8Ktxq z-BU2+Z{vtyf!UKMd+B=a5CK(-JhLcT;^BSgUj^mIxQiWQU+BFmK-0tNEiX_A936$C zVEQ9P*8{~%6J)YoD?yQJkxVB)Gcx}M4T&wNjozfVp!7Z+pz!G0UU>&DdJ~Cc&_tlq zmqlBYEFFX>Fj^}u5ubb_=yka(%Z}kAI7RuBjr7BeEB%#VG~I%VODxeT&_8P&i=xA< zCcSg0oC^UBUkNXWFP21UyD`F=kD`9)(3$=EFPDfGfi!J@bD)iT_hAX&sCw|=JFWj# zYB&SKH|wD9M~M|zRpGDYm~KOQi(U4CXc2C+Pez6lCfz28Ne!+4LqT)6y1HsfAQnmS z@hrgR0;dUb9vARpwPzFK<3qbL4E7y8%Apko)YHt3w@nQVd^2?m&5!pL0^=3EKL`lJ zs31FFyPf~`JIDinZbe-j=`C@~pbEEPe|~n>VNt2X$Hzw#cP)z#s7zf=P2en;h7_mruZSzK&l&}SMgWY(bS%FvFci3v?d;vEtPDXD$p*aamz=qiGiiz`LmGix$rHKPvJ*RN zfU-Tp956ep0$upU+Q(2JclMn;$qVdm7!VPTjyaA;O-tRkr6_ysDlNE?t>`%`7|EvM zIg1cC*m-j)Nyh+QnC;SlVHwk(fK&r5=YrzwoTmzhkYW%>cvIafcAK76|_p3FMlky7S-C(V3d6T@H|<`ZENDY5#ZZLEBhG1bk;)v zO?@y~9_k#g)*BO+`1p92!Z!SRDh;SfC-|x7%LO07zmz0q)$Y23E>e#VM?OT51UZS!<@iw1DoGMll4x=q?ZCy*E9APc4wsv+i zR0F`0$4{KFD!j1;wNg2E;R5ekP3fVtjJld(sKn7Fz&+nFWW*;W*|!ot6%;&%8ubKC zR`uDX6$TexH{vX&u3o7{BY}{SRX`A7*Plli^P|@Pmd^vb0*&>%PkDNN;X#2q;`XbC zn?9e6mM_+_?;)~~=yv^I?jg%8o2pIsFV zx3ahg2+8$3@=1CFO>yF{L9n@Cb$9oU|;O%D!B{iASAX*>c&T34m}={DQqaCxI6&QMU_6_Z>g} zJqiV|1M#>65@giQ9Okg5VsZd@RlK2NX<6R}4F(fn;^HperT&*J%pRz)+ys*KcOed3 zceV*cr7~N_=em)gLC1)%wmfqe<~+-~+Kf*f#yuS$TC&S$xd$rEzt#D<4C#nO!0O@# zbu6|_T4v%}G0WB+T){&`0%NyclKjuXg0Hrx3v9n$n0S7R0VH4Y-x?;{>kJ@otjQfI zRPc@<<3>Nc{`_dkxRu8r9ll52A#;PH!7g_||*mV9LlM@4)4 z1tHK=%0;nA1+Ls1rc`Yc<33sd$XmqcEEJ_&=nh?xY(TJA!+@i`!a=(38MGWNWpeZ7 zL)84aZiWTW8758@d>D`P=nW`L`}gk`J96afTS^&JDfOQXKo))mg?;pWMrtkiXtXch z__7A9lTu&EtfE|phmS~ehc=@fTn*yKkMDxhK6CCIGZNdeP+&*mKga3+C0k`fQlcEF z7Wf6tn>Y8bE(|Svwq0tYs^rk0Wa&Iqw%V=qvf8#lTwb1EBk*TGbn_U%!FL*t4LuZ- z_>p;u1!g^dzIm-MD0#1ZD3hasCD|xkjK>VI9N*lcif%3tQYKj?pEfIF5)4A0qtAD~ z3MJh`LBHf0I(Fy#{)dsWP>V05C|~WZ8gy*J@TNa-{XGv$%C`#kXkF(V_=g7K3|G{C zx&n3(J-bteFo_C8-t`LtnB}O!y5`A&^BP*-qfwH1-b>b(UN)}@ii$4WWJywR(m@%U zDXXW_&0~JX4&1YZa$`+W@>zb<)LnG;>{<1$IyibciCQTB-#%QGa`;`|_Y@T*m(dB8 zzb^n2`ef)ijWbsF>=F^EkddE87C?fhWm?{3jGgm5vEijC1cxV+7r5ywY1T|W4J`@g ziQFqoq7oPoFE*IO13nHx1?Prh*!Qf})|K?Y#%`JgnSrO z^=%x>8%LanA>F$$|5+N)3D#e2%B&b;+Z!4PnAikT1;F0M76$MW7CN-{RhEK6tD(w( z+rK`)e}sB#TG0$3Tn8CuFp9|SL;ETN%H{(f`lV*sA?Y9KC|ta<8m_Ui(HcByAt<$U zrAmrnQ+VTB=B0f*fEDa{I|3wE2->XN3o3cPooE6D1Rl3f?A@G{_h6jjRHvp<9|3P= z?^z}c;)=&89*_ao+R>TX3!W#;^5~HAkYISrf<9-cA1P)fA-OP@M1jCm>sXWykqD@2 zw$O)S3xqQ1?6ooUp?{BU!K-u6{-FY)+~9xc&VP&P!NiP+0nDxz5abU6w991s?(y;Q z;m5in-;_S6ZSkA%T+(sARk6g!#TC@td?4Z#(3I~B^_ZHswGH@lT>a3(B1=8Qd z;$p?G*7+BqGQNkTFST!cB%B5M$qsmI2}|swk?QnV^*@&a3%Y-T|4?8~^j68{=4OKr zW!3=?{o1i?PW}Q>T^PqH;y%Nw;Z1t=<>o&@t9@g?qok zfWEv86=7;|q%JXH>2GEz(3T|?li(rggvY~XSXKn9B!%zg*{8U;Q++0PcNL!E2x@jC z3Rj!b_HuEF-LR&tf$A*?G(uK!5vE?*#H#5)#K2$?a^7r!fNqYrtX5oSiDCnnT?72$ z!O2h8W&4Y_GCP;Zl>S=Li9-w%&Dg{qS1>c!2m~P%cJQ}JAsd{&2 z$#wFe)4waqdMPi_7hC?eGY2`8*(Ph4qb$tK?()MxhXet(^KKyUAGvYm5Tgs?1{lXx zQmp!VX4`(w>p0iWP^)(=>gSXC-{M$Vd6m%jFp~t+44`TQMemfDSL-?W_PoIJQ|3md zVkb@*Hicft`MV<|G-R0wQ**4F6$t6(OQO*Y)~$s0ZjF~{@uz?>>WLTVBDHN51#x?N zmss?Zf8m2ju8Qk88#sTYsIgKVPW%I+3XaJ4Z|)=x;{mL{PH!%8BVXVViw;4d z;u#beOaHCsF^J1z-TM*+>Q{eJ)XP`4BY?v?(M5cW!r6c7>>_+?O-MSvo*2PnntuNp zcOsge&|-^}ElUX05uBlLvub4g5vE}fyLDhnc)Ub}`Ue;K{q1?E@!YCVX4gj#Ng7dz zk)0KOUS0bMCpem2+nVr;OI+>2Ol*w0ZE-NmFgAuzYruq{Yew*(E_Q3nrV8pf*|ifL zgh{+;z~9Higd8df9{)kue~CGMY3C83hPPxJ=ZB0(3_vH1va|#M;lcS3s+^d5dNPX( zya5&lw(GJEtDWo!TpBNDdE;{-*4{j;P(`OFDf2p*lH5y^vuzgyGvZb#$6fm~_+Kjd zLf+&uX#j_H2Pk_C(58qydGf@0en9E7<6z==t7Q%yVQ}1qL=`|fbIeq_f{I?&jltWO zYRIZ=#smiejEBSKgwMehS*ZiE>LRBox!u<%s_Q|m$bgz-2vz_&$M_8}3L9!^h0Py? zj&3mIPkFc%0s4pYp@>={^lxpQ3>@OW+#(5O0j5~Be}L6-*4fRX0TXMi>M|RWhBc#~ z^R_k|NY&=*UL?(p+@Va46=DUcs4-4E&D8bpsD^Uag#JFaoqw1RTs)y1%0{gN0F1oAMhf)R0_h}y6&^R+yHoW!AzU{ zVd&wbKy}=e?$9hBk`3ud+FlS&m`^R!YGNQiFDA*~yAA3pf}~Sa)YVfzT+2R(d7c3K zCMk!@I}V(I?;@FiO^jI0gN*nyP;x?zHXg66w*TP4U7}-9UxI-Ui&R?3sr}ZzbYP}N zkPc#N6P)ugyAB~MH+qGR^P&?_@RPn z_~c0lDC#GjekX(K@@~UKowNtRxSPPCcY1rDKO^LHpGxl{Nz*Vae!DY`$(*q1ky3ZL zQc~Yv*==%%+}$6MIs2-pU@%FW4wF>N9 z{y<)5nw808P9^|9I{eYvMU16#n5{vpZjmIO%=QLHTM5f{L^1=f!cbxZ!ul9COaRPe z;jU??1%UHP8EaYZ4I{v`bQvczRv3A8A|veqQF~9}Q3HvedqPEL!`SE$E|#2C3K(Qo9tOmal)}*BuzA z^T#$Y9Aj;5?d}RKHiqg2SnU_Ys2tP*FgYCuFJY7W&Ve$o+&C40r*JRtY6t}yLz$P- zlbO++RR*xGNV9?b=n{F%Gsb=xGmwKE6ZzmlZA-jlxX2?BwR0esz4Dtci9pf-fa+5w zMj}Mt0YoxnP{1MxRLEFUEKff$pje;!)F1ouC}duGKYRNu9*hCdBTs`Y;*;Wb_RkCS z?ol)Nu2?`7F?hrMba7 z1)4(`KpRM&ix)2Jcm{-(B)+Z12Es|Qs6~C*lnOp_rg6z<#r?RO3<{J0Ylt$1c7o!! zIdGLOKR~evhO9j4K6Me3ew1lnKddtigU5MMkZNaI=Bc+RdV)5w|F#nqVeOWnD8UcU>$qKGDab`W9&Q}>HpTk zco`MWzH9*PmAJW61J~~?4J!j*v!sq&qs`teS$|BbWmy)k!&2`yDotc+&4r=n!BGS= zK&9+FTm>H(b~-$A5n@XMe22gSjeb;Xgea}|fZARMa&bM&Dy&v8BbK_kyHov_&zAbr zjz_XVq37Y8hc{R5?ZY8ph}h+eQ9zmglkyJ%f^qlE|E@4eX0iWq3K+KAZo35paLCkP zSy2})52!21!-#ixUcfFzTvW)Seq{B4^^-07&p>vFrW}r91K{q_f4l?&r~b&E2oB+Y0%g38 zVI#uUaml3SG5?wDqL4_;v7WI?E-5K7F0kDRU1=v`47TQYx_>#mB8M;dP8*^H3LL;N zn6D^sQc8*)dMnS7APc`axs(%gn8r|Uj0nnFB8Vl(1emMBgjRC-T+WZNbDLnfpGv+K zFKNL4lc1M)lAFjaBElhtN*kx*RM$Yq%yT2_yATmsm?*{Z{diObY!vN8yhZy2xD>ZS z=>eBxEr4}!)`jhazN|w&lR$3D%B|dvU<1oQ>k#ycQ4M#ZdO-b)HV!hNNMnBkclXaZ z+J)c|g}&NQ2u8@-)d_)EHKV+SrY0Nc_@zo>C`Lf-f-;>BO;n!-b;@1e%8@43)^^nz$#dvC{@m}BqvO%ajd_)03DE1c z!9LQ zl9D)hXudVff#0<$3;zna8Vu|+=!RP)YGEx2;yag!0v7(?&SLDb+hqG;c}AUQ-CEu9 zk?Wu851@UY@5Dbsfpwmyl7MgVP?qiR0tOo*Os6*hib2XM6Z|W5J6?8lH-s;BlU=4< zY!c&U2A7E-zecUZmc%}WsLiXM@V8USH7h%~8VZPPT5$S9{QX|O8|J3bz%fZ>IvR5&EWn9KKLk;El5cU^#ri#o>#TF zwej3X7xret=SYwQ9|`mw^-&^?WYH7-WWU(h*e00r^*k&KZybZVAjzmpA(v0!A<4HO zMRYP~I2nK{M)4>uc9?$!%(GJlV5uy9eUv|%H~VE z)MEi#VI~2;hqTkBWg?iN6BV!D0Wb2X(|7FH*F zs_zy)$T>(4_(bpP>uUx#EZj&yEkUs+T!o+aDJCT|A*`bEzwn~*&1;JA#2J7$HdL#k z*zlWwM9u-8m}3ZhwW9i9=L<2O?p41V3BA6Ft(gbR@Lj%)HY7 zIz0!%emJ4&IA-k;x`1ho9kKZ~O{1XOarL}ZBK#kFMR@27;bD?0C8lFH&?2(--O_MT zr<-vIOx2(#d{e3#Pm|-eg6Y^B_PLmfz5LsT?;6vjeZ{I0pWg}q!@38-u)^1aiyNe@ zxpBG=*clo;pdh)qvVIa#T&&j5gIAnRwuDEAEe?UuizkP_No z;nwL6uFTPbo5G8IRi9WgVYaFjKQto-G(ENx=#lf{_^k(qvOz3t;43encEAq8cCr8| z0-}})!Fr%bZwpDra~-M1mJkZ*2E0bl7ZM za>U5<-+3vV1Hz;(J$Dg9jX* z{x;-e#M*B^g8?tl?ZKWn`dI*yRYT#6M&KeIDq=>G`04wRL~!`t2NT<=flw84(dXQ4 z8_yR+o1J{xA5DYx?9Xr5L=ggMr(%Ua@{An{%)w7#qb1ymOL{Y^?{z@fszHiw-+csY9)l>ABUkAi#QFTXT#Zak3T=S!$RkX zM#mGwsA>$jB~M!Tw4T!PGv3%sBGs^JP>a`4_xAtLw!JQ z^QgkMP{TRo9eOQW31B-(FYvQj#+JTP{#LuXGV@Z1O`-%-f&B%24gim|^C_6uA$kqa z!u#`V!b+}h4x@cAS{rt*JyiJ3MYn@I8D+q8pP$4-3vv0yV`FWdOyzX@@Ol^zTXkGB z#K)-V(7uK>pp<_;MM0a!w%U|w%gf7)V0)XQk}&8NXyw1PwYBy8SDH*EmHArM)nt~1 z2k7ET(75~+8V47gM02d-CNlSF{ z15`F*{$wd zA`KMs#zK|AGUk>(pb2%7>oN6$(_9r8a$a-2PJ=xH{1>e+0gUH9>=a^V=AjJML)~?t z7St=Yl7avbDbG){|98a<>5r%Z(&~xuKd=tjebrJ{B;fBQkf^m4v%r6v=0||drP`NY zd-BF~a?EG?3NpH0jwmT9DL0Ye5_jlzftzfp+r(-5gBo=RD(=|Z=jOYJeo*^0)u=Fz zKCVO=ekq}krGjGg)4+6K1><$8-}4kak_X^GQZ0|NH;8Q#g0*G3w7ObjFaVZ+fd>aZ zizg~7N;!jb(M#p*{h|)1-B6W&9$-G>%l&L#2k22gpay;nZh#B`YdR7+FXitg>Z^l| z1hnOgUMQwBNqba!f-OS1Nda~W`9(!@-PRZVEy-S1jl?o5q;t!Oo5Fw!8xK#hAi#~f z?y1w^wPgPvFMz^t@6*YT+XcbX5`PpUEK*JYXDRw)OQ^il?-*b$XC_sPGzqZPxSNpU(@c-ZxTGf?&^f1OwUTur%$<%cqE zref{)%nwa(*hVQ$Qy4D!^OY~vdvx16s3z{d^FOl$z-F3NHvcL@q!!#o?sIw%?T2Ar zOdgN#QTH4L)5_O7J5QzxCnhHT6LJAwxb&{keW5d3%Q+csw_!pEpf5G)6E{KnkGd(k z8>6r9vZ!D)LAm!O(-Yv~NYU$`^Bh!~6l%WP|0TPteB_TxA8qG2?$X0kGGlwD9**@# zVvbtw>3Jg1y_~R*jd819z6-Dn?D@S8XlRdn{TPzZpjB@}KFujO^j@^v06n}0tnluh zkDopb1Ez=>0RkYSOhDgSs+~?4f2@0^`@K-wO?6q%Sz~Ux{MJCA3zC1SyA98S#5h_S z%z{&%4v7sOSztiB2pfb)#9#-Rn$V-6G_{4d^3NO`$oIlcOg&6_BF2;k6AC6WpJx=@ z{rL|(%Ag5&!O8|XvVMNpJA*|-F9XbtTCRz?R1)CCcN=u@OhAY!9?FB$Pi1JaE(?VD5;FMu@*p{3Z3f)1N`5DvG}hT1k9FovWVYoJ~Kr$=lF9EE668Ea?n*7Li5%8V%I=zbU#Z{s3n;DP9GTc znRx_O{DVXN@doPC323i_yqU9-xHuD(fS&;ZGXQ`8+`IrjY5QTgGqq)62rIhNPj%^r z%{U&YKDeB3W)@l3j$m_=0vT#o_82FC-fv%T?E|MseN&Ulfya}RlM=GBdB!vYP%oOB zyB@-}rSdDkg`Beae*@75i2u78Hkgt!^B7y|v~cGe-G5>q$|UxL^56;TEb*efV0$eA zri6C|+aM*uJ;h}NSEG-~+C8$dpwfP&dPnUh}}_=b`m*LCvs438S`qPxDXxptY+` z^VsglI*jh_`e}g6)8J%EXE2%b2O}7-VKsu@%%b0HtF^-CrMe|B>#no)my24Gz2=W z>iSgrJ73I+N)_@9WT}SS&MM>dMEJwULd&cKSu8PQj`FcT!Tm#fO@cwHGf{j3kNvjn zzLYg}howX<0o|}j5h>=I3|JeKtc(`62P{<w$-PS?l0+G?Nv2Yd&=#+AWo3Jdn)Ca5Sg&jFyE^vWnJmY|ZY0FL7=(E^Wr<{xF zIy+PLaRp@_vUXlflA?{vIRoo=^d3=o7OE}gn$=t3;^p06xdw!lfak5k8=mt$EXS4KHWNhY!x*B)cFcvFFdP`w0E%w+p*@Fig?~vS@2!IvRxJ2UsQ`J_OoV&iVDRe|o>y653M<v znCb`<+=lj@fBjzF(-@-1cJvpppDz)Gn;ahphn=VjP9p=SZXHD9?B~O8z#a=yjjhKv z4le+7OIZypSdoEANFXjn&OTu}P!c}f`o5A}e;~M|!R!h@q~yBlM%yWSFM5QBjVi+) zxYOEe6(e|T>GQovaoZV}B_gEwcHw5T9p0qTrKdE`xFOnk_`wHtz)9%QV#^o6i2ubN z91Y+h!8Rfq8vl!=qb*V@yi4(w4u|MsTcQNOV9lRXJHAIu8 z&XE-m&=2lHV*G-fi~tMagCRFDUvL*-#*Xl@CU4sV#Or|40uWja!Si>EGE6#J!22@M z1G-gJw5XdvN%%t-7Lzbr6zx=DJU9-6H3pR<*&wp{-S~qXJKU}c#0@P!6;@g<8H9&; ztr-)F&bB{WNxPGHCJbSC-d{F_7tjP(7c%wXu0Q5*1v|N(XE$Yu1qtg)Z8A0A3-Uvj zn{At`Jgl1{omB+F2O>|7_w5BDu!<&TbjWp-HO^w?8ZQ`Zsj$T%SJMBl0cFEX z48M5q^Bg=VLVM=)DZS_R226EeivMu@OMp*D+gx1VQK%%)EuE*oA217f8uQvY5G;Ck z0B_s?Cf$QF3(RBQjqKW0Y>CHT{*eukpiKXYWM4>jC7(nbOD6ca9#4I&sS&9>2&fJm zhHpEA9nj@V2jCxXJyxn>8U~BfFBov-Bs9U@R=+UhLl(}*xu|#zFBDkxQ~=Yg;Sp*C!;jY<4E(e#Kk?m)5Tj%F`^i%S39aDF!~ePqHo9q&gjwc8dpF}87L z7~H|gRBQ;i5&4#(8|=jXtDP3-?&Df^8_UV0wl=p9I}%o&B_@7w3uNI6KAm1NHkcGN`lO4c>K zfhOQ5K;C$jv^GyAf!o-_H_ik0%f&+!j-!v)0`_4)MS%Y&3KkDAnS_Ic7UhCXaW68; z*G^!+A@FCeg(zkv_45O!r_28kjF&-GD&obk60v0F>`3io>Y9gBFzBWd%YL1Us_Fs-vMi8lETft#-;AyHEAx*yq3Kul1nh&o7$NC1Eb_ty1NLwYEt3!3I(3eVz-ykNgJjMSR|tu|3VY;exc-_6Tsn!QCIE zi+qd#ZUdGCS>VTd{J*Qvp+%NaSVU{K&KCn8Y)@ir|8Ps+eB(K`v6pGfK5@&WMmO18 z8N2Wo+wSE*T$~7Xa(6$8t(e0GDDShw{_5}QMr5D$QC$xd(96F6g8~(j2}?C>Y;0Wm zra9wraNr_?tFGFj5wmr1tE1(e+V<3o8?EYD;tM8Mjh8F<~1W?{6vhZOEEw{}bT zX~NP_xz7nuTN>YP?!7nUAX4o2vc)`(X7NfhT*A#i=@pc@lOS9c%@9pj>QVA=an`Zt zStDjGGPo<}#?~c^{N+6TmUM9Qt3ltbQMmAQ_(=n2o1JXY#(>UthFV{x%TDPd%TB*O zM}fKf0=de8lDZmb^u_6EQp(udTbt2QQLjKBj9n#tSvZH&>0hfS#MFd6c|w4W?%pKq zRXmPw?7(lCz^ASf%vsLgWx%#(BK#DDk7Ib%HM1pA^Ztr&!QU9?_oCOU0@bd}zp^c1XQ6DsZLSflFVMuskZIzaB za*+u0>-T#_gOjT?Qp`ru=Il9JFM7tCo+>Dz-@%E7L9HeW)<6)D-LYQ`F=cgdgdWL=cat>*!9Gk zx#sJRh~q7CJ>sS8tiYJPDaWXKGYm_WAE*N@B-gS;+^4zX^}bA8Le>5iF_nPbsgqSI zNsBl8rHhJ|-5NgT%EGESb1oruGE~7+rp^4xm{Y#7`;5h@#-R(i`N`0-l8e@RCs*!% ztZiP%HY<*=IQgqefijd*p2JwUJ8=GTpwg5P*M`@DA}Jbe!cpWYYwL5Fg(swv_^(Mz zUMnYNN>BC@U?e%_E&u@61 z_j><-yUulWPN%)?z1F?%`}_S&-&B{$zty5vvsf%whWByOqOYj-zPFeD$WtzBobl(I zFKfniy35CJzZey1_XMtsoLRb>`H0CGk4uG5-P#Zb)y3#$*446<4sFAucv-^PV{%BZ z^1EE#zs2N z{Y~6a<5=>c+?I84)&9Rmq{|G5k-hAI)mJV{%znSey^^=+rs@T;wuqj<2eIDgdDpBU zHdPE)a18AiV+_6_elcUUm?JYSnwPeJ7>(H7F^l$7?Z>_^?-oJfAe!oYY zh#^~UzDrt7c$~L9_lA7@{Yu`}M_a0B&RlaX6$3Y<%X5|Wm|R?3mT9!O@ZC*o^e>BS zoRxn;i{qs8Eb}m3{%A`YZAe%mf7vC|x`=E$E)P~!G)*J)U5=jMnji>MIYa5&FM39= zwvy=fk0IKwlb#EF^1QmIu&Twtbn9pvq=mlrx(XFPt zrG`S+hU#y0PRYwJXM3zMJ$KND@L#t1j9`3~eI)VAX`p%MB){x=JyjZb*MmdCCl)kv zbi_Xm3@|CmJ;1Hf5U$2cJICjD`8WwNQCfJw&5prCB}dPFy^_bBj6P3e&6Nk`jx3ss zO-sI~{_pst1w)dH*wLZB=a$i&>*xXV*azOQEauFY%$G?Ec=BoMSMh13MdcTUgw^?T zd2{*w9+q1*a29QU$o=b(f3gh2eEm{}j%4q%15v^`8Xh^MXZy#YfHQHfhR22dmoL6H zM8@TME$RMQCTg(BU1sefR=P~YaM1G`N*k(ZLvghHLw@V_b7yj$ce!TWG zkgjOwKdR9o{uXMx(d#9U#>H07t>1UR&RJN~A~Y+h;%ocu_^LTK(fkXw-OY^)?mrGl z@3aOlS*|}Eu$(+xKN)xCCH;UZVRApamB;16Lt`JY)kJ?PmGvX{?)dD2OUrM#6kIZ8 zI@IXsl~wf=J`AOuOewT{Ih8iq6dtLms`{`qi`=V7FBtSQG-QTwwPe0gJ}Z1R)n$7$ z*RzvzmrR=n9Y51NiplTWNU;sapYr>Q*|uMMpl=!KtrtpzinMyB=a6u4PVq?tR>IR# zDgb5m=izm2!-q-(1Nt9r`AN@vvV4JT>h?=}*h4t7&v>8MohN;HEWbCkC$K~oe)=fl z*Yp0ly|>ig-l_1g4kb~O#t0Yj&or6eUqu+TS>rVMpI^WB{xaq)g24U|(5=T{at{Bo zIZA?K3QGp>&r4&(NuD z(>;BnVq!fEE2NMtl4(7b2f9V}4hiFgD^xfO1O#-?oJp*1aLQ@SaQkhNB|q$RngLoW0lGR_RBnIT;{j0<`H{yxZB|0@j1qR{835iifr;ry42L6^qr>N26# zx#>-SL=Wur{}S2;e$N$m@i;PSgoFm%^Kd>iT-nZm^0(ze0zm))QBEgyDru;cs1+g1 z0JMf;(Ls7`%I0uOm)+K5@jw?#?6XwA%u({e*&?8h`7K=e-vYO@>;RUKITTMY zK0JKbpS4(BLu_fMx~u8rFyttZ;I1I=*s8%>qst7f+Qri+XuEAF%>m3O=oy_)G+_~u zbt_k1fz1{b^ht#du+0Szxz1=tzvKZWHYQG>K3S?{VfJ*EQj=3*O7H1c?f%NI!zpjNw`py8Fi(S6S+GjNAfP8_<+Hw4M$P_R+m3oJ4(s@|* z{gagJN$+sOo53<`C4v)#MQ_hqs&NMF<=cDj@jXKLI438^Gn-fbJcb-P+B)1z&K=h7 zTfzD0YJ1knJS+bFcWz(39rs}M@7XKft-cNaJUGoMGUOHCqy7L%iI;vfoFAMU%9?E8 z#lmo1A|{6QEhV5nLJ$eifn9iKfq&L2D1=|TZzjKHO}Um9zKg5g#yhO-^KL_dcha*8 z^tvM4^G*t@m{8+f4@QK6rdh=-LPr`IbLLL(J}y~kR_OCCzZGTo{qeSo?_5LX%N@M$ zPepIRS0=Xt0S6VoC2R|D)jH?Wk7reE3Z6uVeZNH-RE!=Q58$0?)@NmU=AnPs=p7?D z^028iFM$`e`Oh2oP)a=NjXRmj1>?d594uDy^l8O`lij)R3zc!IyA!q=L0(ODfVcgc!1ePPByK=l>AO~y5$;RDoI&nh8> zSLjk+zy98oVnFNOoz>sJJGhNNHyRK;0*L!q&l|EzRbMG0!thZY6Dr1tz2C5SJ@QgW{>a&iMtG0qODX4ppsw{B!Hg7 zXf?7IN=d7^|KnPPiE@_Z7(P{Y70D;lZ4ThJ4e{zy|3Bl3sxATnkrsifwFo zvSSJ&r`I*bc-S~)OQ3i-5l-S>BtoiitYQ{bx!L3uke&sV-B<#O!>eHCjI-Oy7LeGo z@0L0E(jOCn?O9*r`*o>*Z=M1ty8iA{h)Ht>Nh{w8V{`Txa)^%46t;1Hs-ggdcN=W&iK~>nCXX`1UWq7@ z=|`R|z#6riiB%hV`&Zr6^+HGdO~N02bA`8<*AX{EBcrR(fCv#Ak(BW{L(9T?MOX|& z`dhkMm!`Y={a{1HC<@+5Q={ z*U!;-td%`=3;kR zkIu!s$I}M(_6i)gTQls(@Gd1sk^rcsDhaJ`I5z!6JpSbl`m4LRtWt3EA-?B!opF~~ zDULS9t7LKqUDfn;hvweJ-vQ8uU6NM07Ix#t>r6M7A*A_rX#iE@Ck~Dkfr4ZHL!+|! zm<=~bhvwXfn}bT9IG!v{%k5VKO!SC|di5F^|6iHIeXq95*!TOy0L&r0WZ>)KWz|8Ad{5IpvC{$)SXc$RnX zgX-$)0;jxP&~Y-&@m##_a8#wu^vQ>1PtwRKTCPmOj;l%^Jc69X9ozAM)Wphv#kIC6 zsxa{zJ-(>-c=MQuf%>DoZfuY%ep8_gk=OUR?GCPWnh$1i55jsN$RG%hCYNhU;wkfl z&>=V+<5?4a!hU0o`NvF^cLv&L>t8*3_C=EGrh6%VzzhC8=FBcjk7nEF*V@}p-CUuD z{iVE!P38Xt2Bb()K_%vNIyQX=t~Qfvd?}no@G|G`if_E%nUTvz$DR0Qm0NM-wBn4G zqQ=2E^-xhCJ1N_Mmo$j1|h}PcA%eaOScKP#Agp-U|`8Q=cn5t2@Db1qH;` zpTjFWnofS#(bJm`rP4`>rypgPxhy7*N}sJ&f>>ozRSJaD=T=W>L|155ei9$wW(8UB z_ouu$jiD$-fk6L!%DZ*t>dqzn{5R(kzK-HqUmoh=UVK4z58Nc3zmXB6$L_c~%f|+i zJ6yl3G70-_;_St|W=ctToos?zKa!CY#v5t;vh(OZnI~ z+ue~78+}^PCcc-;m~At_bzuMg{Dv4&GNbx>1&xX)U}P(nQbk8U6+e^sG-}^ve#qCq zxf-llvj)fWeRa>**GaR9D=6UME*? z^X<|E4jjQAb{v@Mp8Dg>Hdi7Hhs{6mytth9kcF=}6CD&36d6LR`20tmP&Rzvz=4AP zcGONenNvs@D&K6Rk-Tl?_{wmyt4ot`5aY6Rt2GuJjc2iZtd$vzj zDF1feIjEME8@)lcx3K66D} z0{b+A`;R&sx;-}e!c_#$t?La7Zx|)IuVtfs&Dx_Qx`!+hpFQK)VfxNy;mq4+CupuM zJT#1>?0N1dm$*^6o`jZ{m)E-n>(xWo%P#U;Q884<=M{q$T$6q$D(V__YmNxWZam{~ zbn91Ey-nE8Y%YRgJ55X?TL;L#r1;1}#ek=KDPP^Dz74K9=j)U*9e%<|j9ooiq1-}A z4E^C5ZvmK8GX{7={hV#3!5og|kqD_`6Ht1bToEsa?ckSATPIvpL=!pT zK6xVP8USoCKQqtfR>{f|1f@wE+=;p^QTsL?9ncI_lB7!iW7+92{3lXXT|1%|d^3=| z>y5eqP6TM~U0hV~ksX*}Ud>v+H0@uTcS%F#zA@{%+43=@Rn3Hw$#j>M(_t!oFNfM! zB~03-IE&9}MPPKqA%Dw#Y@4Q_BEVl0GSgud9S^rVJADsK4nUfzilwQg(eF@F-0@2* ziD;o$qw5L7*&?k@P0C5;;*xPr>g-3_i%-74W>Yk-H?K7E z9;xB=YS&CrQV1t+A|udlSV7u|8CEZ9uwvFyDN2_OuwN48zjvpmyW@}myBdt9;GH2C zHFt59Q&+o`_#U5<_Q!|o;1q-O=)aH6h4VVvuNsK#?&!RXY^jTT*m(M)D{0`IHi%fC z+LI4;>9KE@p(p%Y^)lQ4B~thLX0Y={LYDS2b#?%}=*aBqI;9;{G!e5&Gs8CH2C^-V zRirzGDWp{Vu6b_rJur9hdGl3t%8LNFMv~qOE=K82!c=K#8=wWp+>35Ob6I$~t|gAu z6ot8jm_>aK!l~a^xxGU9geZXslO^^DIwGf*^eP!N3Lr9oQr&lXLU8|s$F-*D*38ZC zXnUi>6Z$6;fCu#~H=6Hr=FFLXzt5FRp%m1Z_ipY{Ao@|Hk04#vEbhGMxN)PU(Z*Es zq~nevzc0R{IPK~QoW5PZA<6$f&V=xxDuk*4Ig8%;M`tvM?8vFjuq1oj^IWD!PM+(b z3R9)NbSad^Qoh!M(qzkwiJG);d@uQ7_(o~5*+d`&3pIl`PmYtYAXql|z!hREeRiCt z*eYhO347ClLJwpt4*HZSC&(4lZn%Sp`^RckZ#6PA1pa}*ES5GoaO|^x+SkCD2i000 zo?X(re0D&~bKWy8dHquJLP?Jxq4@=?+VB}_ac(;=^Gc0+F z=;VoU-%(a?NDvv^lP&oTO7)+++#BE1z&wUiXHCgcr7dIz%p?I0aQ>`PICh1Uo73^; z*GSgeq@t9};N>JoJ7=LiR~c+Nfk4N1JyOhu{yT=U$I?s6XafVkd`6@Rao7uc;Ei0&_+(*CaNyEILL*qG*IDxZ%ijSWt3 zf6Z&`j8_)jwO=ryM2-%WghFK2(Q`K>+-}|Pl*;X2`%8eSxStp7zKo^!U>23PgS6N! zhc=fxWpZRO9-)$z;yUq(`?hgAxu*h&q^7y;Hxvz_xjp;v%sP7QN!wX>Rl_cNXZV2& z(CzzYkdQ|ofy~4Z#$0nUX93~GAaA@PZ;X?87E;h)ApK=ZuiTs>*pcLP9be8@C-B?b7qhXx6_%~k=KE-n2H`(-sY=<-=((xZ z%Se?iA}lQ11F=EvX2Cp~RvXYI-=JxlIgAwKJ`)uH)c zML+dhatt41g8x+baOcjzcJ-}Vrxu1&0YPl|s?Lw($UbU`7GZ{NlDw;95+7yCzOjIC zXvowPY5dxtvAJ3wJ_~y5lC`hDUzt(;+DQ()soHY*SC6(|UfX?nNkdZkz(}4fWN1%! zj?(h7v(#P;So`|f%FNOul!)GN&bZUc>((J^*z8#!`C{nX-4)2FrPM;V#sz!lTJhB! zXEncd$FZ!NC*CU=uD23fvV_}$VFSU8Dw)GL>THwX(rB&5{5U)3Wf8Xosd9@nnWI~3o+zErD7XGGDe#mT7Q47+)%x}SWDD@Eo}H>;$K66NYtE4D z@MhbSH##-ZSY|iXHBM9EPhOp@6e-AF6+}suNe=h9c;od&PP>)|v#wE1)_-002$7Yx zi~N&CwcLvhQs-xE=RWnd(UdvJ$?49RNqNFQAJsQL8Rzuypp#UxH~ z_#gI5x^}dc&qyQKKjJt?_d1ULbt>(8KeQq>flW_x6lNC0?ov2P_FR02Y^s6U$;M&8w-XvoD=VLmzmL2VKW=Zo!@k1KBv#?31yg11htIYBKptm<^Qn-vo&&;fGXWOhvt=<`zGyHEGPT*k^ zqu#{?x(b84ZCdd}h-2U9=-w>;tGucxCh|?R8jZOdvfjx1@<`OIAS%Lp-Gs$c7c$J( zI4E_0pl6U{tJCjR7%F-y29hBauJW~HgvL*2o-EF{>erp**}}<_$|*&2p7qAHrhCb$ zYnI%vNwqHjPbw`6<>w=&(-yL-qDCu4#L^rXAq#A+mwMcrXu{Hwe{JT{P*F&fL={$v zq+iMn*_*IZQ?vD3OsP{^&+{XNo66FM{5y@Dl0w=P?~=3qTrJ&mh5a}G?Jh60ZoAA; zgtny*F^p2n9b}&fW0M+?gO-<=S^?Ain zr_(jVi}4pr@os&<7)DYT!%1-v7=Hq~kLek4?xZ}6=_j0L;PvXQOPBum>C=oQ1u!0l zlx)RMdU^=K%HliS{^2^D2@3$OeMx6X@3`QP03$63fBX&*YNLUh`V;oBXn4WBsHmQ^ zLbsLqPsdE&(N}>pNCKr&tK03En1g6dY>#u>dK6lg4E+hua4 z)?F#1VVaQo3_X4F#2Os$>3r-rG}5n}7Q>(!@M|d83mNH*#v?}NJI;)?(2NO@Z#pvd z#RMXg<`iL`2W0`OqaAi{GU&?;_^}^!aktq_#>J9uzDuz9Y^-x;;O1A|K5Dj@A%0faIo)8Ks5GK`LpVoTPoF^+*eRIR}Iojk; zyTmET`-5=RD@dH&ELjqwm9+>63Fb4{#axXd*rm}i2j5B%$ia7ZXtwh~;bkH|U3Xd+ zpwi|cz-2A@gIv;?v@>VqHf`Euc>K7+9PaO)iu7!{{EBG?9=vJr0vl%Oz*XpscyI=o z_ku6?wS$5b8{CYG`4SX&u zE4r^@GlFEmJ{BE4O5~WPqEpX@sn6kr39NI7caKBY+at!L9w4v@Yh?F8sE2&zbN%E^ zwsYy=%kFpXb6N=_@yJcUj4MEm8xcn1k z%h(z@{i*32+x24MzNb7AOcMRNtB4uSD44Se|77t@RXk|Gq=G&xgi+>)Mn0*B0 zsHJ_jwXmR13J>0Tnm5c~;;OF6LsnE)Qeg0_)8)cnOuK?V)B(tFc$lngnY#qIcq9pq zU@B22vT+cwj1Vf8(|g=U>jvGa3WVY^yk1c*LkcYa>T?72+E4xHINJCOpo}G@6I8QTyB6^Qd_HQ)nJhB4^yQ<~|J9jz2)| zx(?r$$KK4-z6xXB=cyLZt(I+_V1@3Hbg;w6kFC(=E)0^w?!G=fIws~OuE4q9*syto zsHC_f?k>UZ6svy9#^x|;YE9*n01iW6hvmqU^9xcTvkQd69fJV51!u0GzxmjZ6 z<_k`ZXBC+`v&zLRWK_|@Xj+<`!J4_Q2<8ule9mei=dDcqI;Pw zz;~YHZO~q{gu9- zjrCh_$Z!UHnvB~;vMzZFAT?&K|D|H*T3sqwrMUnj3>s};lX%2qH_Ra>FPB70|2m2% z!e&PZQQ@5r6OT0%U~ys3z?YJ<-6lnJW{QhDE~Qh>vIo z31r$Vpr~IT#jG>CG_k^=sCzr``g3R2O-9HnpafAC7q1U#&=~R93i&J}9#GT#9?aBI zk&hG|!6K=!9v5kqArj+`-eRte+w!ur!vQ2E8&_IA8bne@Ozy6#G8!2D0ALRGUB5H| zTW#*6BK;^D0RWwIInAh%hS5J1)b^ZLG1}vu1tKVI-Z2G)eo?D*W<;KZ!_B(W8SMYD zUA#?$?g!X+5^4h>tK~N3%M!}#&|KjQx9B;;AE4C%_Ns18Vg#S-ceiGLz(#{H zDQpVhYp9SD;`FSfNLwL8I*Ym|<~~>%yFSOq#H^nq!L3BHl5n6g3MhzJj%`X2fpMPm zkOp!!@toYxS{s3rT2n!KTh?JuTH*qEvLzr;Ay>?pRbMvauxjJ_^jfZe)%hAVB#1;{vX3e$Iv6c?)rX%2a{qf9wahov;tsk(a!5_9+yY1V37AV>EC|57QNJ90P zg-O|?_~29q80B{}Nu=0!%;t()RasS46;-^!0H0TgPnh!PcAb|k0cIYIBz7)>3Ve_N zH*Ua4LclKeF_7+UfdcKQdUHGJeC*)njoRT{J8}e(qez(nAUqCAj#I^iBK0KHCJhB& zcSDMUy38Gqq?owbFI4EY(ca$flTG3}_RWHe-2*<= zjk+>8RBq#n!`LjNrY4Ce<8B>Hj`MKlK9$mr2DI7%2S?Q8uM^*Nr77mXg%ULmM+=* z=FJ<&IcskEOV>y9=o|^~Lte)DM8$7@o{HXjexCIlcEyNbJ}T9vlZJH3SIB$=Po`V9 zlqyEc%5JNcRaKQ@YS2dPjGl2RToYymUR#694l}H|<9U#&y))LyDSvct)8&p(q)5#7 zzhr)DHg`jIJ>!0`ps1+rel`Uko;!CA36nbzzb5NOfib5~pDtT*N;|@J_wFm|NpIiQ zAK^ts_xh#BV1uovwf#tR@M-IfjtyHZ&6`}S554V6j2=O94zVL=L$)$QUS9rlimB`# z>@SDPX?Mi+3=B%4065K%_RkE0%L3&QRZU8r@_#SCf(0x1P8<+_14&## zC5Y+^JeH`h)8$-&75qUTz;p3^mKaMOMa`ciuDG1^4yOX%N}lXya9X9z2~HwTmL=%AJ~YVV8_RDdbK@*1S(#kqls^hk!n%99+~Lp zS}2uMn*xhnk7VRjr3QK(yRDA-r zHYz(7XCfZibrT74B{=fi#E|x~z1j8dLBZKT677;QespgbR2Ee56Y{A{{c=#*{KR{!`Y8E?xR?I_x1!{!e;8wW3g& zVoc}X@X&gOQu7sZj=sC~stTK38GCmxE}2IKjVd&rTdyMfkcxsQx1}Ij)wP$}V=Zl8 zw`umvipuUmZxF+kn3U9k+juYj+SRLOmEKtPx9{CsJzD{%316)FsI;QlXgoN{1AfO$ z*l&;%BKt=vk=RLZ)3m2n`TIrN_Z2FCx`oZR+;Tn!iyUHvxHx0Cwelb`Iy6r$?!8Xl zl+tLB|5rVUxp5i4qg9ycjCgcKOep00AFy^|O9Gj}h(T}L?4xzzBd*4|F?UvJndZQB znE2g_3L56Zu0!T*wl1D7EU*m8gf>lh((bjUBZfTfW$n%cvsWpVTvr$0ET_q{c>PRo?)upuli&8yjEX)mn`j@tDB&LvbcA%vQR=B-A9-jySIp46f>O!Ol*zO!!| zIviK}I)|eZzHTZgkdX|TdZ zV)le5(UWoyv!!LLs4XeYSy1qbvup{a?(htgeg3Sajyj}!C@#xy68T^p{uXbyJGZEZ z4JxNt)vD~h$<^-h(M(2xgle2RRLZMxmqRcmWgWdF1TQ>?j3} z7ZetoLO1Ny+=9+HRoQLQskRd2Q0{2uI#P)L=)kmq&`BUx-+S0Yceh$kS0N6}>p0tXBa|8?*OEx*A^AQ*GtVbIWvXc8@ z6uabxKw@ujXHHU^0C8-k+$}IKAC~ZO`BNz#ahsv^T0}ro%17Xt3&dQpFGtuol!Px< zMsE*$!Fi*7j0)5k-$*U#Ri1wlgkYVX_HHBMwz-Uiv{-@?LD^5&cU=-@33)BOzFLS7 zo2mtPajZ{<(^>l}a91S4A!xDx$4g1d$A2u7Yks3}T{N2FWsX)pQW6sTsZMEO07s94 z3VPdT-cnENm%4!k1~3|*Ka6|zGdoLy5T3tG6aj=Kt%FbBFwu*jCoUjkZodY_z+dc{ zcTy4kSLC)=zO(Ma?rU5L0*O>|vLz5eC8}9Z(1c!yP2CL-f9$<2d4z-j7Y(l%VYY_k zsaar_y5Uv&+x7)Sk)(6}qc`t>RoWARQd0WF>5cW;UX;<3EwZR{{toXDyuE3fBG zTX#3lQ`6M6KI+KEhl-fm4$x*1kybck&*={=3yv&I2unuKaHJ9$jb$7BUw#U}ZG5m^ zM%DrGW{8RFiu%n;fZB!%CIG(BwUzSN9$;$MDhmB{np05t0`2hHDyT=F+|#Xnk26w7 z^c9O$p_u*@?acY5^h5UT);CM-rB`vb+LPdbu3}dCp_~owl>0F(&~R4kQ1xk|Nn!fs zxXzJXcWxUW#zsbTb9dQtJtjJWF?i#zhuG zj!-xf4;uge&APP$q!8?h|12|SvWjU&tq`9jef~nF%dYNP4q#lDy~@2~kTu?+VAHF8aMCKkZ`CWoePJR z*&>pX=V$k2(&w;a)sMzwXi&3_3RSdy-eowTEypI&4xkt1iXpeZ($7x!0FSN~RuQam=*kB(F6LBq*?GXRp2BKh=|2vb`%g z+uVztuOPSL^Z8|5ZS7VcuA08A@q|Fa?e&(kU;XDT6!)jnzb?wM&>-F6a~GdTm`AVG zPEI_>cu?9tMhQmsTmER>w+XRagauz%73BJ`pC@ywv?THQQ?fXtvdb^eMwDTq-hwbY-x6An=Pv&vs;$|hL^Frb$4~?6Gt{ORas;V})hV2n}d`e~I z%HpK9Yx~%ej#fH8KKTp7u`wQ;7Z}7!nL~)&U)X98-KW9MPG0cZo1N;l+&sn9AWY4-+3Dqx;AYG&&V^vPFYm zrgS8|_uoYHim{1Ys_3i!g1@g_yPJ59n!x;23RF`1-DkiBsGL{iWj8sIS%cw9`I3Yn$JUEigJXh<>mc;^DVsko?Y}lPszPsPt2hnzh1F5-lz2~ z-#-;os2BB#&d5%TR=H#2|BcLXZdKxDzqb*~x`qZD?#_Hyz zwt3h_bl_Au^IjzxuF|e{%~QPhC?8709+^>Uu4Oe?07qsO44$BM5}R1MhjOXj8F|a} zoPoL+Mm#W|BO+uRs(%3-_w^(yyOqNGn|dU?d)TL%ldf_j{xAq)Yp(0?Cn}WVCsM-`EElPOi1v zwq+muGnS&Cij*g-DO>E7nocsPQMW@lkDR{j4{I>q10^eFI5`jx&Zo zfFfrex0gThrB-@<(CH$7j$0}0!GXQ?d1k$j`->|{1b&&EqqhXKrYOZs2FflQ@i5NR zZ56vRjqy01weOKmbQa?zrQFURWPAUGr1jm}R)MYd)*MAPghggC@a;pVQd`h?c-Fi} zW>gTQOWw6t`24~owpKimLhGw#&uG;nr9?zl#V;D>4me=OQ&j7nim6N-x2uW=5ym*^ zOUGp3@qac~-HRrZC&@4x>n}MncJj)V5-NJ@uQ-QNQ+7296QboVX*)Ux!2k|hDs7g| zkjAA^FjU|+0Xe%iC@55X+hKYbIyZ{bxmZHeX3)TAi9$_s>yp?*GPsjo zzrQ)2RT{-Zn6OICrF#w7HV4@x(kbq+tTWHvdE#C0>u*V-?Qw@D#CzZ6D50^gZ=Se- z0@r`+-y{LnOD8TMniFHWYN*&|5Qss4|E;@uI4IogIie|dmAk=w1xRMBPYv5vBBY?WlUnF3sF~uO z&fZg+v%mnx`_vk9oRbC{bJW5&sH?|N4kjfH0Juk?lzOH#Fq8rKuLctF z_`#B>F(`-*!1?nS^8!@Eonf4lnst${>%{`l7tr^43)-{>R9pP%MmmlDgl*7<);JMF zwp#Z5yee!$J@qD_^L&Q5B)8gYL&e1C^QI=;H1PsCjR#|511?A*>PuD3&T17BpO-%i z;aqLg2Ke}_PqYEQs>@+WV5M?^jTG1&HB+BUs4l?z5mpK7Ujg=ySfzC?l_F$@{pMmC zZh7^^pDZ*X3NhsLMRriTCJI|MWmc)FWsEcXE}U&}r-*GOh0O6-AUS%G^sf9PW6}mA zK_o17M^GVF@sn7mJJbJj(-L51bLK-@o{8Mq_(BTUp@i6nC!%kl*Tc~)0r2tGFdaNU z{#+%#D;6?>V~$bhuBt9`M#?+j7~dbiP(`mW_T?ZgnY53hreD#peFKxX!1{|O^4lNo zyp-5|$WIjXq?-}b`2(7L4X3%3eyz5Y)U?Owrp%mz1`UEMa)2(KZ|O9pGHHvBP0(*( z4SBs}Z!D=^TFTbOqL{zKl-ZR^!H~6w@xO87Di)X-Fj5hvus&C*)u{wcPTweDPe5sr9$OQbklu+-Mk`G#UY z-(-eRa*Vm_2N&kK_U(c5@Ll%? z!4pBRxr;u2@W4|!4pxo3rgPh-P2m;cEU{t^Yc5SrJSMURjaqTa;*E6KrNm`^pUaJv z(>@jHvg+zhJ)QI-6f~Wyw#CfztBT5R$qrNsdufjEwdgJA2u`JB(G@EWojPD{-S(T4 zFm9!oWCQaPQDRUej-$3cU)VqbZ|T1@(s+H?`!$Iz>Ig*KL4A(_tBwPaJX<(J;_|ES zdfy`QBHa2)8%gDCwKk&?Oslfsj#t}LlAhLYPlZMxO>{W zG`kM5tsPiBr~1hIR literal 0 HcmV?d00001 diff --git a/src/Game.cpp b/src/Game.cpp index 985012a..c696008 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -515,7 +515,8 @@ void Game::StartLevel(int level) } // Create mines (MUST BE CREATED LAST) - int minecount = level/2 + rand()%level; + //int minecount = level/2 + rand()%level; + int minecount = 6; mines.clear(); if (minecount > MAX_MINES) minecount = MAX_MINES; diff --git a/src/Image.cpp b/src/Image.cpp index 8672d1a..cfaec30 100644 --- a/src/Image.cpp +++ b/src/Image.cpp @@ -16,6 +16,7 @@ */ #include "Image.hpp" +#include "OpenGL.hpp" #include @@ -33,6 +34,9 @@ Image::Image(const char *file) if (!IsPowerOfTwo(surface->h)) cerr << "Warning: " << file << " height not a power of 2" << endl; + if (!OpenGL::GetInstance().IsTextureSizeSupported(surface->w, surface->h)) + cerr << "Warning: " << file << " bigger than max OpenGL texture" << endl; + int ncols = surface->format->BytesPerPixel; GLenum texture_format; if (ncols == 4) { diff --git a/src/LoadOnce.hpp b/src/LoadOnce.hpp new file mode 100644 index 0000000..156bf17 --- /dev/null +++ b/src/LoadOnce.hpp @@ -0,0 +1,25 @@ +/* LoadOnce.hpp -- Macros for static initialisation. + * Copyright (C) 2008 Nick Gasson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef INC_LOADONCE_HPP +#define INC_LOADONCE_HPP + +#define LOAD_ONCE \ + static bool _hasLoaded = false; \ + if (!_hasLoaded && (_hasLoaded = true)) + +#endif diff --git a/src/Mine.cpp b/src/Mine.cpp index 964110d..1400b67 100644 --- a/src/Mine.cpp +++ b/src/Mine.cpp @@ -17,25 +17,15 @@ #include "Mine.hpp" #include "OpenGL.hpp" -#include "DataFile.hpp" #include "LoadOnce.hpp" -extern DataFile *g_pData; - -GLuint Mine::uMineTexture[Mine::MINE_FRAME_COUNT]; +AnimatedImage *Mine::image = NULL; Mine::Mine(ObjectGrid *o, Viewport *v, int x, int y) : objgrid(o), viewport(v) { LOAD_ONCE { - OpenGL &opengl = OpenGL::GetInstance(); - const int TEX_NAME_LEN = 128; - char buf[TEX_NAME_LEN]; - - for (int i = 0; i < MINE_FRAME_COUNT; i++) { - snprintf(buf, TEX_NAME_LEN, "mine%d.bmp", i*5); - uMineTexture[i] = opengl.LoadTextureAlpha(g_pData, buf); - } + image = new AnimatedImage("images/mine.png", 64, MINE_FRAME_COUNT); } current = 0; @@ -49,13 +39,6 @@ Mine::Mine(ObjectGrid *o, Viewport *v, int x, int y) xpos = x; ypos = y; - // Allocate frame images - for (int j = 0; j < 36; j++) { - frame[j].width = OBJ_GRID_SIZE*2; - frame[j].height = OBJ_GRID_SIZE*2; - frame[j].uTexture = uMineTexture[j]; - } - // Free space on object grid objgrid->UnlockSpace(xpos, ypos); objgrid->UnlockSpace(xpos + 1, ypos); @@ -159,14 +142,15 @@ bool Mine::CheckCollision(Ship &ship) void Mine::Draw() { - frame[current].x = xpos*OBJ_GRID_SIZE + displace_x + int draw_x = xpos*OBJ_GRID_SIZE + displace_x - viewport->GetXAdjust(); - frame[current].y = ypos*OBJ_GRID_SIZE + displace_y - - viewport->GetYAdjust() + OBJ_GRID_TOP; - OpenGL::GetInstance().Draw(&frame[current]); + int draw_y = ypos*OBJ_GRID_SIZE + displace_y + - viewport->GetYAdjust() + OBJ_GRID_TOP; + image->SetFrame(current); + image->Draw(draw_x, draw_y); + if (--rotcount == 0) { - if (++current == 18) - current = 0; + current = (current + 1) % MINE_FRAME_COUNT; rotcount = MINE_ROTATION_SPEED; } } diff --git a/src/Mine.hpp b/src/Mine.hpp index f01e7da..6c52808 100644 --- a/src/Mine.hpp +++ b/src/Mine.hpp @@ -21,6 +21,7 @@ #include "ObjectGrid.hpp" #include "Ship.hpp" #include "Viewport.hpp" +#include "AnimatedImage.hpp" class Mine : public StaticObject { public: @@ -30,14 +31,12 @@ public: void Draw(); bool CheckCollision(Ship &ship); - static const int MINE_FRAME_COUNT = 36; + static const int MINE_FRAME_COUNT = 18; private: static const int MINE_ROTATION_SPEED = 5; static const int MINE_MOVE_SPEED = 1; - static GLuint uMineTexture[MINE_FRAME_COUNT]; - enum Direction { dirUp, dirRight, dirDown, dirLeft, dirNone }; ObjectGrid *objgrid; @@ -45,7 +44,8 @@ private: Direction dir; int current, rotcount, movetimeout; int displace_x, displace_y, movedelay; - TextureQuad frame[MINE_FRAME_COUNT]; + + static AnimatedImage *image; }; #endif diff --git a/src/OpenGL.cpp b/src/OpenGL.cpp index 520d0ab..3034c18 100644 --- a/src/OpenGL.cpp +++ b/src/OpenGL.cpp @@ -404,6 +404,16 @@ GLuint OpenGL::LoadTexture(DataFile *p_data, const char *filename) return result; } +bool OpenGL::IsTextureSizeSupported(int width, int height, int ncols, GLenum format) +{ + glTexImage2D(GL_PROXY_TEXTURE_2D, 0, ncols, width, height, 0, format, + GL_UNSIGNED_BYTE, NULL); + glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width); + glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height); + + return height != 0 && width != 0; +} + bool OpenGL::InitGL() { // Set options diff --git a/src/OpenGL.hpp b/src/OpenGL.hpp index ef0f51c..c77c197 100644 --- a/src/OpenGL.hpp +++ b/src/OpenGL.hpp @@ -127,6 +127,9 @@ public: void DisableBlending(); void EnableDepthBuffer(); void DisableDepthBuffer(); + + bool IsTextureSizeSupported(int width, int height, int ncols=4, + GLenum format=GL_RGBA); static const Texture INVALID_TEXTURE = 0xFFFFFFFF; -- 2.39.2