From b3b3b1dbbd7a4eb49a6aef06f05c5df01ce57d4b Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Wed, 30 Mar 2022 15:29:55 +0200 Subject: [PATCH] feat: fixing shapes for wall with asset --- assets/images/components/dino-land-top.png | Bin 0 -> 16559 bytes lib/game/components/wall.dart | 141 +++++++-------------- lib/game/pinball_game.dart | 16 +-- lib/gen/assets.gen.dart | 7 + 4 files changed, 57 insertions(+), 107 deletions(-) create mode 100644 assets/images/components/dino-land-top.png diff --git a/assets/images/components/dino-land-top.png b/assets/images/components/dino-land-top.png new file mode 100644 index 0000000000000000000000000000000000000000..85c2619a4197a6ef7063a8d988dabf96730a3069 GIT binary patch literal 16559 zcmX|J1yqz>w57XSKtKcpq+6s@kZzFf6cCW1VURARyF?vN4?kdp3hX?S=3x86Hz zv2?)<^WA$-?0e4MgsCXWVq=hFz`?;`%e|9Q1OM8>!NC)wp@9FP(K_*if6$%Y>AJwd zVG_c=;Neo!$>88<;N+ylH6ZhcJ~om1)AdIplGAUBwsJ~KWEUJ-78j{bkW3os!tuU@ zX44_P3XjF}#iOM`m#4zpjcpCpuUOJNnrxA4oFMGLqf_?pmHxZJ82Cc96J;!nlVJsZ z!NJVzN62T~Y2J+02dBy&!P0*sysmB(lFtWg7JW+grVPExFUuXV)2jcu>FTR_q3`K` zPr-Z~B{Rcmo`*Jnfllx!?jIc;8P-`(_;6YMSDn`9`ZVAcrz2S z7WPWMKyA?GWWL?!?q4*pf6Tv56O@W3J8q{deKo-&DiO{EAfn>1=u{btd(m&7gb%Er zW<4BOi4Jd{dlU`sZw$u0(k|DlFKJ74ah0b1_A|!sew|ubK|w*Fwy__W$YrszPf1&@ zi_^1Ullv7^(d(|8^X;*>wXJ72-jDB%Zht4um(H)fpX50_YB_HAa&>i`vgy)fPLRJ^ z@;YvFd3G^G&Hn-!A)xc{$FlF;%NU`vcMNfZb!)=J(yD@Q-@dibOuR z?k0_0cyYdQ)3P?`^rz4pC1(Y7hNYGAMUOeY7?+t?f9$)ks6`} zN#y*KAM0-)uJK-Un=!cRr*LeYuzk^WxmQ}*p8AfC;BYz<+3&~a!}Z-WMtNro`e#6$H&Khr+uVG7iQgQ z^gZw*$S{3?DpN11zKQQhaziq&aowsJz1y}BLuj=RO< zz4DGcXfZ+ZWV+VsOopi6x+PQ-`Ws#dHdz}z1l=hPrZ;`By!-j>A zc0DdcAY6w}G&$HtWZfHQ|Yl z+sO_8O75e)tP`&3M|I5YYA~Z-tg-i!ol#mf9)!the+aej^{P2n3Xu)`(k_{N#23?r z&(mY#?^=T@p?eBvt^CAnt;%5IN2JH^a=3hA>Euea%JnXH@?u2hXJ%%!?~uLEH!%F) zM85Hczw1-0AF)foqU+C3k;4<9Umm(4q-KuV+uhyuxR{WoHfZy_v~7LqQ8?<%hS4?S zD4;-=9_~$I`O@}=?)FV2C&O?}?C|ENa?4jDJkany(`s-+J2_+CTijXr(*Iif@-A@3 zq{0$QBh zbk)7;^bQH{MB-;GiJMNrR;ka zm*oml9y-m(MQ3GJIJhz?*7%+67|7VWPM4rkgI^AERM8hkN0U`Y-9)<@WDT+!mKo$C z4;F7$@hPrR7uC0%j!=0zg0TM*ngz%(>oAZ_KqYV=(=bIt-w&K14{c_KNl~Xn_ zjwKB)RGIVygA{(ArA;J#YSwCZc&ld_qdng@3D+#QXE9X0r7DBy_mL|_p@C~BVY_Do z8wUqx$?xgmN;YreJEL*=jP`YcU6Wt3Iw|Eq#D2)Z{r8um<3ugV1y+!fH z?N!g6`4e|o&R;RfQ(gdGHvL_nEve<{@$Ps)RWN8Zs%GiB9)htq3imW5`H*;O! zBeRjYud~zWY~Rq50z;gQro8Vjq=J%?+f8=Ao8cJ)_eD3J5Bu74FU{ND@DlJiB_vO& zgmFJEG&nF|Jd+YZAE@O))6%RjFgSBz_zti}A9%xz0q`NAc&VnQ)abv(3>MNm)rM6o z1HU6o8B~=beKT2xSslod3B^ZUzx$a%AduOyV)b{w%xLx$4Ni2>zV(nk7!0G{yin!v zcsI+6?YS+b0z)}Qck?st{qJS(EaV>$j8vJQ-!Ww_6HdrqTXmX-erGNb&V@wuTfxdu zNxb(ka>0JH?{+R>UFc_dn3tdI@;3Xg6AMrW6H+4+*i3 zP1z`@sHhzvKz#9I10X-b+Ub@GXw`La>H7Wsi#%oxR;*UxgY*tO%13!6)963&64w?$ zF;D`#792Ys{w*yn8KNkdZf_F>t zThj(~Z-0Nk1y*+gSN>E#|ClLP_wwPL-nRyLy2>DEb;HdIg>fDXoO|zdw6+E=`eiOl z300!a#19{vkbk5*O)e^|33^cJmA+~(;a4fVGE0OG2>w29hF*WQ=Yovv$2raU;I2QGhWhqw$LE_{JF14_?5RWMNBa6iKjK0weEzr_fSomx*WgzXpFcUo*!^W~ zmid(L#byx;9UmNwuo|^{zcEwD#Z)4dA!=a^SJT|0=ZeZTC0WWf?XX;E*mjX3XE&AP z2t6@7_OPtiG&tL1d6+Z?m^z%YlDe9ygc3pEFloLst-HaYpKhyRQw2vkmJTF$$8NQ$ z!+<~+y{_Jtq$IB%gR=&sOsfjm>RJIh<_$L4p`{p|L^ISZrMo--j5l>VJvZTXk2LyP zt&0Iulpjq@gJ%e{A}qN1;EPS_R_h%MbWWFQSLUel$5Pl7pCp@_9;TF1@JCPVr z)ETA~yc`*ox=hdgR4QegCLO@Hek_ zDz--@aw(q+#aZa;7j_f3ZalC#iSqi<<~9&xBP!Yu5j{#yh_YwA;QHW-Z#S*F;$^dl z=$LbYaF-A?{k9C_1KgNm^gr`?$J$RzsZ6LSSTD(f-@&U09-l)$sTyr4X zG$r3)^3=1iDRkbyKqLf-5~WrsppzTnQH*Ii_foob87I-ZQktOU^$}+k*pK&CCr<#` z-q!|OwS|7H$e+WuVCb~FE4s)s*p?6(LnrS3o&qh_ioxUf@CQ1;1SMzUN%yT7B|m=r z;7=R1Y^saU7#&;!oc8Q&hyR-CFtHt z!04-C9oxz)Ls?p`EzhvlQE9H&A5LO7ik?oM|Co-vDXwEH;?((m6wOe_kP6)@y7(XT zIPmU!p{l547U3*p>B=~gQ(CLBJ({2ifKX8MYvl)rN8!RiVe@UigY3oBBfjKFCFo)Z zf?{O4{CmBe%ZaU6dm_j$6^YFLCszd1j-TVAZl%uz=RF-kt?8>NOMfX4GCZ;3&ZBpPWQB3HU+Y4;I2&+ImRh42-g8BO`?He(WeTbI zXg(jx&S0`H-m^O@s<-0m=(K1fuUC5818q}EN=SK!R#7XjpIKL6q$xIwuegYPIJNVj zK>1=%Cc_8{+mDaX^CNXwFsw~(dtQ)Lh z!7b@cmEA`>-9mT~7A$HyS-IbwslcFqzLp07eF!icA+bTN4o~zBvE(9Y+PV;<*TY=g zij#!--D_SFaB?F;#-EYWYV>Y+DIEjgsxADFIpbm-o8Py;5bs+*6+kAStr%l(Q*vkL z^MPEMncVb+2h$u!E{B5_ad4qyL zLs?lFH|E<3D}u>=g_z+j`LTT2^QrW;McW0wTGlkoEKW}O<+zUsI_6Z2-6@9lBuqE* zie(NS%w?8+N_P`#xIgNJ`J*;ZVGiwQ_ah zxO5IJ)JxPXun_pQc4IT^$_@QI7xsoYK9_OmY;!p29OdUZ3HdRH;h%&;nw_IB>{u2k z?ZrO*jgfr5MrGv*@>JBa{9WIpaOD*!~vl{L03uI2lJ@xQnOO#8cXJY5P(PL5;$9 z*S$kT_dbZxXgf@oa_j9bvH}AOQZhX=n*BeiX{lJcYWV`%vNk;4<qUnFP0@ozW_ zDabA^s7(p=CgqqRJ>M)_Hl{rTdVd$ZPg)}n(<_X*#iU|K`$evRi-H4rp`m$s;5l2M z(ZgYPgrRfmU$CM{R$MYAc+^2 zx+H0tnJB|O=F*lUCRD6}*!hg%@c_MnJW2YV?@F?4Ou3?~I+G4@BPm8yj@B4rxI>CZvCQx=|6}!Af3}M3m{XaU0B- z*hiNJnVFd#bO&J`S&?8M^AmNpZnts)<{?3l563Hx>IhCP^gy+^e35+njdZjCpWd$+~F$OZ9u<$6@sT=PlUdMQ!uXJH< zuC7(`1>Fn`470txNUsy*D^hwp!wN-Q4IE2w49bz|NZ1Wq8&i~!X2n|tF(~;>uH}8O zD?&GkPbIS>f(X%&l1<1)YFHA-whhYV7~(XK32{Q^c6JzF6Jd1A>*3XykSWZ#U7f#T zU;r);wy{Oxw_BSnw`%*R;EZ?m8hPfriJ;oHx2AaVEcxRM393v=%RU?b#6ARn1{Vq5 zJjs)U11?SWrl!#6qP~B9MC}12vy6+2E7M`|q-g=aQ-isBch^RHedRJQFYf>}4nwS7 zYB3XE33t}55upni)iQY)iNpH5ARTM-#2pY!%ZvS$Kv%*-JAs94J-VELef(P^rKx z!tqb9S9IjUBYFP)ojr=1fz_(hEaB|$F}UUY5@yh{rj63z6t+D3+vIX^e{+6teY(z) zHC7A!fJoW|ID|3BPYq3r3G1n-J`Q!|WG`gsl1%f44|2kwIhQan#Uz1If8>$Auy87m zK1Q;BbqzF2)HNA2*B7%HnVFvzRhslIgH0OWwt@qBRGx90v6rUB2WOb#u)x;JMiOCf zZvG`IG7@6i4iP$P&nhV?D=m$%sMY=WOF^~mVdrbCWBz-?OGJVPV52ld^Wx$Z(>uBA zb^Ls30#x1eaxNk#zReY03bPj%JRp2v0mDLsp;@q_IB5<}=?EZEk2RRz{mK*`?jIOP zVHpM)8ibgEJX&UTZEc(dS4zn?0vRrRb1tKTDpBI7rAvSqjS5t1)*f~*5CZmBVK15F zwb~!}fp;H0;S#(j3N7^_CEQs^1g?`!t9LMry}i?ccSF9?W!GvjZ{Ctpl4vj!^TUBG zWx@4~1SiDc1;`aVie_zXZQ$WN6ewB8dv_9Zx-Qj$)skp{_97?^rhWE$()UW=`tP5a z9jxs*Y-x147*d7)R;DRaEA9oSP@op3sHj-&Eiwi&5}00qg?QmTL*WL)7-O&pYV-;6 zeTt6xlQuJ=d(FSpiit3TBo#1iKh}ID(Ok3O{%@8=e!w0QDLDz{Hj`jM9xb4uLcJ#wxq=l)?w3K*V|lU zi5DbcQu_HJOl)wBbvRVM+Qk||1(u*gPaY*>#)_{YD=Ukdjy4{-yB_s?#qB7JJk{oj zQ0%k*2!aZg-E*Yk0I|* z@Q`0->u_w7F|Ia#wPkq79L?X*#Q&-Tn_O9*-Q}wC#w&F(e&vf+{es5ulU*1g6_o|C z&_N;x57Y(A?XfKP2^x+~uyr8Qj&U=EcVh%WOP#BAMz9efvf?V-vbs2wZ$aA*v`>4O zJaV#A0T?{&{+g<-hlPN^sAR_hVa*`BG~q^~$<<)yoaBMU>?!20bnrr0=UOo1Vk`q%t7{kF@v+0LZGD}iKc!}2XT$Mh^j&O#E@Rs8N{b2*^A2Hh0 ziW{MDFS=;A&OOFVNg||^HsNNYeCWJ`Lz3bPN=A4;KK2g_yxa-iA8#U$1Jg515*D3t z7P{>W))Vn-bfF#~@*PVasjkAqU{%h!r#aAnbbrfkLGE~b&3Ae>>aB1h$?bVPQT z|Het7|BP+wRspGTp-v zV8Q~sX}Me5c+eagA0JmK{q=@4s_2`=++qq1()=6oJ7;*Om3icYDo*CW=gR8XCr`kW zp=gZghztfZZlJ>}#6X@L4h~VifB+LEkV@d_w=_2e+?grZ{VY`$5(D^Gv0?cpWG@yP z=nZD-y+uU9*<;XVY0`gB5m_WI7m)fk6E3m9%z4o7O?4nvX5x=l-IT9@Qn`S~L!bhp z)#S!I6S#B>g_Ne|jC;VJ0Gr?}6OmZb;FW($N$yQWkE-&xA zbm8IXAE&y9RdGT>LQt`4#ArGTi;7a{fPsTXYH6=<|+MMg(wE`gCNU#6Dk4XnpxOY-hygevHl>o<7) zlftT%A#L)Q)oaY8SXC+XP+b0($%VTJSnmpyK{$h5HleHB8g zFj^M4DxlQiu5baboL0d z3Rb_;O(v}4!S!Jq)X#xJOm2%GzEA|339Of-rpP+~#|03l=!HDf-}ACg=jsX9P%Q2( zL^&F$!$yn#x7Yo|Nuxs4C++5c*7+p%7nuewuH-~tg#&Tf#nUsDDSQoO2EYISq<>|J z9&^ze!*^l@>ar4HR2Z=&$R`-Id_H7O8Y)PI{&q8RXuva2-ptxmfVd)}3zaL3Fw|`|EjHGav{rHhI*D$J-A$a)+8^3jg z?lB5MM14FZ>EcNiw3OQ;2eIcb&w=Ac zh=>l9laKvPj>X|1mglht@4%j4lo4*M_re@*Ds(OehEKr3iilp^u0fb7acboY)@=DY z|4B!XR4Xv_VD%USrolnS(_M$3JLuhZu!Bn9%t)u3xY-3v<{A1#%0X`Jst0Qv*{$gj z?vDyFmY^Jd)|CEwvai+1wW07R$^0ykrDu`Jp?z7XRpfPej4#u9D5zt&Puw5Criwzc;8haOUqlsL0L;}si|Cu3nu-tksYw(B;;_x|lXzcf zOf*df>$BH_2nh_2)}vWFSlIgaV|4vGb06x^^~^zc#=f*f8zb{2xcJV?!gE6XSA48Z zu-Tj^-7>%p<_9}-hEhua_k}jV^bt-zmM_P}=xStAVFsK+em3)Rb53JVxMxyVvcMw%t;Nw|kF<$H;2h<>s60 z3;zQCJ-nQljw>8~qZR4QcS(+LA6htUd%c_rgm7ag9IT=At_@ht`Qpfx;)-qs5oYiP z%}9bfV<(^TVECA9@`7mn{?2M2W%cv7_n0$pPr^Al@xxp2OjLKLNc6a{IiJyc@1i4< zJzu*gL_<;6$|b`~t?K%FsvvytRfwK*6yN$fS&H_Xb*LaM`3C=A(mT`>M97Tkla%a^ zN<#{td5==x^m~DccQL}bOmV=Axn5+O%&x9SdmGFw61{y8I&tV!>68JE@v(?DS*2H1 ze%G}*FO$vV84oi-m=rmF{PHY+=GJ(i#twvUBy^okBvmtL5my8=W;j3z6OMAly_4NI zE6|4F+J46y6%Cg=HoF1$j*s$dU@^FESXzx`UdGF41MuA@?iKB@P~pXsZg*?BP``@G z!ci20u9RxlUGI3YK@L#NA=Nbj9?}tcuNjiq2hQBQ02UUZs?8I34l-BX=g9<(q>tF$ z2>pK>913kxL)t>FzVL?2vx$VgPV+q07PX$2nIXXu`!_`8^$YwuA=ckRexUpRVp&`73re5v6Jl;Awo1Fet7?2 z&@}+4++Y%;i9uRb$H*vaVG5*kT^@3`(r=7ElLxh@c^eI-iPJ6fEMurz`(E32-MqB@ zCABRk-m46cdAx&)Cvb2AN+n7^nT5&W7tybh-Nq>VOC}BjwFw+{F_x!I-6(i@Hsst` zJ(nrjs*N!^n$yMr+81h#mqPh&rsL7Sp_#N+gQW z!s27U`xY)eoaN)s3}E%m8wTQ0z<51(gdS>y;`;-4bJ3sbwnK4tI;%-pG4u3k#k?dr zg)AffxQw5QWOF8)6d`W!Ze`bR=1S(CUP;6!q>ozKWzrwteh1x=Ou$GhOOol%6ZT+G za($$BY^G;@(SsZh;a^XwuB!=6f1uJ68sGv^dgXZl@(a|Cdz_AslaKmLN<$jf@VGwj=ucbuh z-^4q~vzSkHG}US2zNGtX>Uex^Qzwpt#-Ev9pEl|V#i5%c9c8HT3k4EIn3V13!4_z0 zW@aW8V3idkPe}9PahxRbFJ=|d3t1~tbUN`R=1R;oec=1S>7N)k(bWx+G**EVLm>Iv zrkyAR4UkaK<~T!LLENrz%E56U2&w15%Ck&r#bg-T{B#56=pIERQk6kxJFPCN93yGm z;xTHSsWO;4Ria(ixOM1T+g)pubH3M2PQK__)9{@5&uhceCh6o%ZN)624O=n%{c1)Ml@2Gos`Jp+Y#s1{VLOMgtrZgk7ed#Aeg|Cy69 zbA)p~OX$3fuSgI0lmj~*O=zHZUb|t|5ENuXvAqSSOFU%a>!;Zw2wpComkN~wdUq>r z)pMfY(vl$!Y2uX5)PX$@%6`CHRHhR4ys+kW$f`5@%7<&LM*Nb?@E3;cjqyIyNKu5M zB7LuL4-hPUsK=iF{pf}nc0iILbEjm1|zpgV+9!z z@&*t24tT47{0haUDpmUSYzv!7s^}Dh)vlir`^QG-u@g7n5*7z7&W!Pi!W$V^8f%3F z6F4Z(>~npiq-+4tVQiHTQUUDcUMF_z8>$M8=ut|m-NLesA1N`k83W#rxkA}-#Sm7w zw&t9;DWcuKzv-6FBBL39^X23b^3wQ>WKyNIS^A6GV!XEj^b_U494rjg0r0bJ$WQsD z-^ooQW%g;O(=&Vok_JcGwsO@OO)iRPP2eMpMymXKLv!`F3x4%n0loFbEPd-U>uT(K zO3UkMdd7aTx6W(5VT #}!@|m~T)q?655gnPPjk!j}f#uLm|5YXue=K(@`6a6}NH zTH_r0=OM2?m}cU~&=>R^pLVaa`L(jSKE6dZK7|OaYHRD#!>Ek2bvBa>@_1)U`mS2# z-)SaaN`*PAA9pUQatH7t-ASY(_Xovs$R-X5H_x+s@RRt;e5cAq`xau~)iGh!ttZ=} zeR3Bpk@MB)dGiP-(?76t4e3H2XZdLFPHuC)kKdoEC0cOSnra20irM5oGJ8J~S_n8{ z1(HfmrEMbMHqB4185)nU7|Td#KxI%}R`0CSLuNj1vD}z1LQNy9%?6^MFSL4`TZ;L0 zuMri`8%?NkU!b94%oQ&dkp~az&F6&r#VoUfX0QrluK~v%#dqDc`UG zC&Dt`YmxaSLBe1pu9Qe8Ct+rL)$0fEw!h zZ={0~;NSzh1h3`1wH<=I#mBhxI3?BeN+;}QLjEg(X#b{yr;iEoCt;r{=Z{U~G;!P1 z9o1SM-`qzO)WhWRBL9$WjGgNDWUkpW!@k&v-9xk7;AZw8N0xC+qjR#a@GnJ$WuJ9) z^ryUC+yUogauwkfxT4zA70JK%!DD=1?y!5D2BJ-)dQ{SX`EO=WNAkn{u}=Mvn}`&M z;rWO5k4A}2<7Ww?3k+n7)WRm`_5P@rz;a8p@w-c#L*7s=DBAryQFYN6pT#w)leu#; zp=7Fj;g5lwMkSc&f0e-)s2n2syFo3|m`S4dnNdkK=x)AKiRAnYIF>!^?bmA&bvp>` z$;(HdI`TDz?GWPf<3)0PLqkrS6bL|Bx6&^9(6iES`{`2ko$INS@%t2#)+Q&_SHh;~ z+%KoLK>E5k09O;QGr(}B75Furx@MgCh?DC*PKJkJInU{X zlww96JUG1(gH)g66MK6g&XBWK4l<~Hs$ zP-&8FdDZ{HvF-9t1bF0Jz+GmH>I$rD^+cc~ocJX%kwPJ`seG>0Tv2;;^pT&Vpp|+W zL$49KOLu#dTZiuZSvR&+fr~eV$UL-Pa3p&=l#$*@T?MdnuBX(Mg)d=*Y1wmGUtdhw z2iHOY94VVtsNHKP7HQd7(4zxWt7&i4iDY&8V71$j%v_l{5?co8R}SZOS%{R48(j+W zA`|i1lmpKH4i|nLH*IHnRj3swx1N7uDn07QD%9kSr&`7pmP%&oJdcJ{f3?t6P$dQp zUtKzaVuG&&vN#~#zbQ$7K#|4RGCR0dw0wZjmPn;57_&}WLNSK8K zuHfZ2&k)0oh*Au159Lw}VC8DNV!0)0q zQ*+x3fwbzbt$_7kxUfhArNVyO!PKLBTcTe2vbKANe@) z%9>{{x@r}_OT)|BD)>9u!1L*K!o~;`$BE?$654dRl^`~u0Itu@Q~2yV4z{tgU4f{$ z_XB?S15Z>G6cp>obr&yoCe{QJln|BmbZyB{_74xsho;t;wMnIZ68vxs|HyzVXREE8 zkkiGCA}q8VnuVBV#;lRL)#Vr133vrpEH{NnAVTV4sRBqDMkWhwv>+Pj<-wbp`D)x> z;zFu8=IsAi^n%%?bT|$n8;*3CkckQ%^BSo%JxZ$#-|ce`+4;3?yn>B1f~iRK^m`cd z@f?;X-PjB@8Sv~-EYdyd{UP(DW|6SDihO~$53b|(*{}4X^)<*Y$;jWyH6?lCFa_E} z+SQD|TiRZz$C$p6=nTKoMerG6z9jQZ~ZgYwkR_o`*N zNlr#}@p(paH$_OsJ367sdyfQV-}M#`a)y%TP2~P5g>z$`OKvi$6AbG;^!S|5xwW;m z;ThIp*<@x17rT>1kDEr1n||$&xBF?V!!^#b)b*1PD~UWV?`lv*)pm(yd_N>=PRE9m zCdSqZiJz2w@aU9?r@Y+A6PVT}f>(cfHN>}a=fQN7hz{Gq@f=B1Kfsq3t^+WqW3IvB z9FJ@<=R#lxbctPES1=#fT&r@vvt|6)$$bND#W1ES757kBIwhGJIs4U)(RONeJ{y*ZfpOgl+^p^2*wg*k(|TtBqNCXcRDJ(?gB(qV zFzgE^4Wv_yPAs!&Err@sR7rZg#DJ=4KgpCd!D|w$+Qt0~^Mb2rieP6kYsw4WO)in%u|nIvbOD9Sw^ zg(=&F9yx)4Y3KKJ<=5eK51Okk%#18$Fv4{?pu8A;8#EUzh#;K_lgU#B4gHeO1wRi= z?v4VpOX|MyyF*{G;A{30BC#f}W~{t4m4GY{J5%1_`d#-N<5CJZ8UI2KLRee(x;lDT zh^2pz0%qJ^^m4IGJvbru(}E;YNF6o=W0eE)baeRnThrWUo$zBF6C<@oC0|;z&WB!C zw$^~t5Iw$P<=AlUS}r>tQd-Ved>z+}D^9*aNw z&2lO7_PF-D?qBfw3V`+O;i*Npp-?+}`-8u*x&>IVukpM*!yM1}N}qI|hZ* zQ5GnWs_f@#Ho;0p$bw&-wkPi_$Hx+&%St^{?F#?WLl|nb7)agi!XKdV!5G{@!KAe) z%j>9VJ6l@YB54KO0ALSgV+Klz(8I;#lX7f6PNwcB^-UbY=+&(o@`-0!w3g5TqLrQj z2qy(@${ATq$=K&)M=Z2TaP49Ox|J|s?->};B5UXDnaQJqZRZ@V7m6*&rRRGChlu`6 z(vmD)*mS@p-~Byt3DYdNm-ZQV!c`nJ;(|3TfksM^|BuUG_)5ZVT#|_Nj+T90-rwFB;>7G6B2LYAsI$ibMrQxotpwDK4wjt9r<~LgbGsB}$R1&f~WB2pA zK$IV}mVv0NyF1x{(1&kjO%@y=+hf2b&T7~SaRwqaNAAka=j4O4ea!iK@U=#<)g(jb zlAmdDVnZ~FEmj-^Qe!*lps^OZhCq5HC@;k4waVr*X8L}5P*VFR!UcV5+6z;`d#<0p zDS!0}RWvp0fg9e%V!(6}sdg1jg(=*-`^4!i!&F_W>WrL&Nn9nGv&Y+*r;&?#7fHD4 zIj-*R?meoiNm43cA`ep>B}Cm8St2oD*ghyNotFA!uSg=lGF^7lzgBXYYz(28W^oYrW$xr?Ziix~mqF55;Nh-tzdbT&rx91Qc zst$7~Om=s3qMRfFxx8=xR#|S7iULh_pZsCm1x1Fn>&twmTLA}Sb#}&s`2RRN#l%E3OIt*yD!~Q&uRWSw}M85q1R#k42^H9_J2fnptYJQ4KHbsUiAZGb48dOty0$< zX`~g684xOAG)Q(U+RyD3uuAF$(-#!i$e*9C{x{17Gn+{gNuR2F(2w8VGJxrSU>WDZ( z_h9N#Fv;z1U_ZO0e)einv1E~o7nhV&z%~*k#IlZkm6wZ) zs|MBykx=1FqF!P!-4EG(`}ttj`4R9>fE$CQ)WQ^C4yxBiuzLZ_si1Rb9)z$tFO2AC z3G^!;h#qHl0Qtvacv}&+7LZB}C@|{7X7#GPmw^-%rbO*_7vA232jbE{0AExbX5F(- z@{EqA@jHS>RAxIJY(_Ph1MGiS21cmk{9&Wo04^5v-8?bYHS_1Ki*OiuXU6-S)`mr1+=Iu8H|70$pEMDWHsyQ zep}R0CQpxnalkqKKY!l^6-UtL_F@;NHU&-#QmI2;XT*N3&19h>7|$)ZW-^uM6=8)(_Q{oM5G#WJkP>DUCcJ5q~ZfW8YN0hB-cEif&~?M0F3!!C%s zv!QliK(U|-^q}bq`QVdaxAZBP3fCx4>L5f~Om6+I18*7v!b);1Cb zyeZH`uLYDK(Dz0_)%PW<1S@O=ck-i~QAgkNw7Jf+;UN!@WXXa}K*n@s0er?m5MWy6 zhCn8{va(|AuI%nkoB3|1xuO(Y{%cr_I|eq8+nc6D_H=!B3{z#t-ll}I47aRn-43Lx=lu0RE&=14Yl9Mq3A-%)>JYlBt^ zj51oS!=eOa-|25$wno0al#MUfFN29|C c&i>ga)RgHgH)VoC@H@e8l~$6fkT8b+4>!CY82|tP literal 0 HcmV?d00001 diff --git a/lib/game/components/wall.dart b/lib/game/components/wall.dart index 971d1040..51eb8cad 100644 --- a/lib/game/components/wall.dart +++ b/lib/game/components/wall.dart @@ -1,11 +1,13 @@ // ignore_for_file: avoid_renaming_method_parameters import 'dart:math' as math; + +import 'package:flame/components.dart'; import 'package:flame/extensions.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; -import 'package:pinball/game/components/components.dart'; -import 'package:pinball/game/pinball_game.dart'; -import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball/game/game.dart'; +import 'package:pinball/gen/assets.gen.dart'; +import 'package:pinball_components/pinball_components.dart' hide Assets; /// {@template wall} /// A continuous generic and [BodyType.static] barrier that divides a game area. @@ -101,34 +103,27 @@ class DinoTopWall extends BodyComponent with InitialPosition { final wallPerspectiveAngle = PinballGame.boardPerspectiveAngle + math.pi / 2; - // TODO(ruimiguel): calculate final UI wall shape. - final topCurveShape = BezierCurveShape( - controlPoints: [ - Vector2(0, 0), - Vector2(0, 8), - Vector2(8, 8), - Vector2(15, 0), - ], - )..rotate(wallPerspectiveAngle); - final topFixtureDef = FixtureDef(topCurveShape) - ..restitution = 0.1 - ..friction = 0; - fixturesDef.add(topFixtureDef); - - const bottomCurveShift = -5.0; - // TODO(ruimiguel): calculate final UI wall shape. + final bottomCurveControlPoints = [ + Vector2(-4, 5), + Vector2(-5, 6.8), + Vector2(-9, 11.8), + Vector2(-9.5, 0), + ]; final bottomCurveShape = BezierCurveShape( - controlPoints: [ - Vector2(0 + bottomCurveShift, 0), - Vector2(0 + bottomCurveShift, 8), - Vector2(3 + bottomCurveShift, 8), - Vector2(7 + bottomCurveShift, 0), - ], + controlPoints: bottomCurveControlPoints, )..rotate(wallPerspectiveAngle); - final bottomFixtureDef = FixtureDef(bottomCurveShape) - ..restitution = 0.1 - ..friction = 0; - fixturesDef.add(bottomFixtureDef); + fixturesDef.add(FixtureDef(bottomCurveShape)); + + final topCurveControlPoints = [ + Vector2(-4, 5), + Vector2(2, 10), + Vector2(7, 10), + Vector2(17, 0), + ]; + final topCurveShape = BezierCurveShape( + controlPoints: topCurveControlPoints, + )..rotate(wallPerspectiveAngle); + fixturesDef.add(FixtureDef(topCurveShape)); return fixturesDef; } @@ -141,75 +136,35 @@ class DinoTopWall extends BodyComponent with InitialPosition { ..type = BodyType.static; final body = world.createBody(bodyDef); - _createFixtureDefs().forEach(body.createFixture); + _createFixtureDefs().forEach( + (fixture) => body.createFixture( + fixture + ..restitution = 0.1 + ..friction = 0, + ), + ); return body; } -} - -/// {@template dino_bottom_wall} -/// Wall located below dino, at the right of the board. -/// {@endtemplate} -class DinoBottomWall extends BodyComponent with InitialPosition { - /// {@macro dino_bottom_wall} - DinoBottomWall() : super(priority: 2) { - // TODO(ruimiguel): remove color once sprites are added. - paint = Paint() - ..color = const Color.fromARGB(255, 3, 188, 249) - ..style = PaintingStyle.stroke; - } - - List _createFixtureDefs() { - final fixturesDef = []; - - final wallPerspectiveAngle = - PinballGame.boardPerspectiveAngle + math.pi / 2; - - // TODO(ruimiguel): calculate final UI wall shape. - final topVertices = [ - Vector2(0, 0), - Vector2(0, 5), - Vector2(-2, 8), - Vector2(-10, 6), - Vector2(-20, 4), - Vector2(-20, 0), - ]..forEach((point) { - point.rotate(wallPerspectiveAngle); - }); - final topWallShape = PolygonShape()..set(topVertices); - final topWallFixtureDef = FixtureDef(topWallShape) - ..restitution = 0.1 - ..friction = 0; - fixturesDef.add(topWallFixtureDef); - - const bottomShift = -20.0; - final bottomVertices = [ - Vector2(0 + bottomShift, 0), - Vector2(0 + bottomShift, 4), - Vector2(-40 + bottomShift, 4), - Vector2(-40 + bottomShift, 0), - ]..forEach((point) { - point.rotate(wallPerspectiveAngle); - }); - final bottomWallShape = PolygonShape()..set(bottomVertices); - final bottomWallFixtureDef = FixtureDef(bottomWallShape) - ..restitution = 0.1 - ..friction = 0; - fixturesDef.add(bottomWallFixtureDef); - - return fixturesDef; - } @override - Body createBody() { - final bodyDef = BodyDef() - ..userData = this - ..position = initialPosition - ..type = BodyType.static; - - final body = world.createBody(bodyDef); - _createFixtureDefs().forEach(body.createFixture); + Future onLoad() async { + await super.onLoad(); + await _loadBackground(); + } - return body; + Future _loadBackground() async { + final sprite = await gameRef.loadSprite( + Assets.images.components.dinoLandTop.path, + ); + final spriteComponent = SpriteComponent( + sprite: sprite, + size: Vector2(10.6, 27.7), + anchor: Anchor.center, + ) + ..position = Vector2(-3.2, -4) + ..priority = -1; + + await add(spriteComponent); } } diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 6da8981e..bb81db93 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -70,19 +70,7 @@ class PinballGame extends Forge2DGame await add(BottomWall()); createBoundaries(this).forEach(add); await add( - DinoTopWall() - ..initialPosition = Vector2( - boardBounds.center.dx + 30, - boardBounds.center.dy + 20, - ), - ); - - await add( - DinoBottomWall() - ..initialPosition = Vector2( - boardBounds.center.dx + 31.5, - boardBounds.center.dy + 8, - ), + DinoTopWall()..initialPosition = Vector2(31.5, 24.5), //Vector2(27, 24.5), ); } @@ -124,7 +112,7 @@ class DebugPinballGame extends PinballGame with TapDetector { @override Future onLoad() async { await super.onLoad(); - await _loadBackground(); + //await _loadBackground(); } // TODO(alestiago): Move to PinballGame once we have the real background diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index 370d8fcf..8ba5344e 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -3,6 +3,8 @@ /// FlutterGen /// ***************************************************** +// ignore_for_file: directives_ordering,unnecessary_import + import 'package:flutter/widgets.dart'; class $AssetsImagesGen { @@ -15,8 +17,13 @@ class $AssetsImagesGen { class $AssetsImagesComponentsGen { const $AssetsImagesComponentsGen(); + /// File path: assets/images/components/background.png AssetGenImage get background => const AssetGenImage('assets/images/components/background.png'); + + /// File path: assets/images/components/dino-land-top.png + AssetGenImage get dinoLandTop => + const AssetGenImage('assets/images/components/dino-land-top.png'); } class Assets {