From 07036c8e5ab57ec247226145d23b3619ee5c1a3f Mon Sep 17 00:00:00 2001 From: endurance21 <43696525+endurance21@users.noreply.github.com> Date: Wed, 3 Apr 2019 21:53:40 +0530 Subject: [PATCH 1/3] added collision --- index.html | 3 +++ js/Lib/Enemy.js | 3 +++ js/Lib/ReactangleCollision.js | 8 ++++++++ js/Lib/RectangleCollision.js | 36 ++++++++++++++++++++++++++++++++++ js/Lib/TankCollision.js | 7 +++++++ js/init.js | 4 ++-- js/main.js | 23 ++++++++++++++++++---- js/players.js | 20 +++++++++++++++++++ res/sounds/onFire.mp3 | Bin 0 -> 7941 bytes test.htm | 9 +++++++++ 10 files changed, 107 insertions(+), 6 deletions(-) create mode 100644 js/Lib/ReactangleCollision.js create mode 100644 js/Lib/RectangleCollision.js create mode 100644 js/Lib/TankCollision.js create mode 100644 res/sounds/onFire.mp3 create mode 100644 test.htm diff --git a/index.html b/index.html index b6fbe64..8d5cb3c 100644 --- a/index.html +++ b/index.html @@ -12,6 +12,7 @@ + @@ -24,6 +25,8 @@ + + diff --git a/js/Lib/Enemy.js b/js/Lib/Enemy.js index 5cd11cb..a0ca26a 100644 --- a/js/Lib/Enemy.js +++ b/js/Lib/Enemy.js @@ -21,6 +21,9 @@ class Enemy extends Tank{ if(this.position.y + this.height >=HEIGHT || this.position.y <= 0){ this.velocity.y = -this.velocity.y; } + + + this.move(this.velocity); } } \ No newline at end of file diff --git a/js/Lib/ReactangleCollision.js b/js/Lib/ReactangleCollision.js new file mode 100644 index 0000000..92c7e6c --- /dev/null +++ b/js/Lib/ReactangleCollision.js @@ -0,0 +1,8 @@ +function RectangleCollision(rect1, rect2){ + let nearToOrigin = rect1.position.x < rect2.position.x ? rect1:rect2 ; + let farToOrigin = rect1.position.x < rect2.position.x ? rect2 :rect1 ; + if(farToOrigin.position.x - nearToOrigin.position.x <= nearToOrigin.width &&farToOrigin.position.y - nearToOrigin.position.y<= nearToOrigin.height) + return true + else return false +} +alert(); \ No newline at end of file diff --git a/js/Lib/RectangleCollision.js b/js/Lib/RectangleCollision.js new file mode 100644 index 0000000..5a1b77a --- /dev/null +++ b/js/Lib/RectangleCollision.js @@ -0,0 +1,36 @@ +function RectangleCollision(rect1, rect2){ + let x1 = rect1.position.x; + let x2 = rect2.position.x; + let y1 = rect1.position.y; + let y2 = rect2.position.y; + let w1 = rect1.width; + let w2 = rect2.width; + let h1 = rect1.height; + let h2 = rect2.height; + let collisionData = { + collided : false, + collisionDistance : new Vec2(), + }; + + + if(x2 + w2 > x1 && x2 < x1 + w1){ + if(y2 + h2 > y1 && y2 < y1 + h1){ + if(x1 < x2){ + collisionData.collisionDistance.x = x1 + w1 - x2; + } + else{ + collisionData.collisionDistance.x = x2 + w2 - x1; + } + if(y1 < y2){ + collisionData.collisionDistance.y = y1 + h1 - y2; + } + else{ + collisionData.collisionDistance.y = y2 + h2 - y1; + } + collisionData.collided = true; + } + } + return collisionData; +} + + diff --git a/js/Lib/TankCollision.js b/js/Lib/TankCollision.js new file mode 100644 index 0000000..e9c6308 --- /dev/null +++ b/js/Lib/TankCollision.js @@ -0,0 +1,7 @@ +function RectangleCollision(rect1, rect2){ + let nearToOrigin = rect1.position.x < rect2.position.x ? rect1:rect2 ; + let farToOrigin = rect1.position.x < rect2.position.x ? rect2 :rect1 ; + if(farToOrigin.position.x - nearToOrigin.position.x <= nearToOrigin.width &&farToOrigin.position.y - nearToOrigin.position.y<= nearToOrigin.height) + return true + else return false +} \ No newline at end of file diff --git a/js/init.js b/js/init.js index 875b2ed..a24f2f7 100644 --- a/js/init.js +++ b/js/init.js @@ -32,7 +32,7 @@ let WorldSpace = { const ImageLoader = new ImageLoaderClass(); const audioloader = new AudioLoader(); -const blastSound = audioloader.load('res/sounds/blast.mp3'); +//const destroySound = audioloader.load('res/sounds/destroy.mp3'); const fireSound = audioloader.load('res/sounds/fire.wav'); let playerIsAlive = true; @@ -40,4 +40,4 @@ let playerIsAlive = true; const playerImage = ImageLoader.load('res/images/Tanks/tankBlue.png'); const bulletImage = ImageLoader.load('res/images/Bullets/bulletBlue.png'); const enemyImageRed = ImageLoader.load('res/images/Tanks/tankRed.png'); -const enemyImageBlack = ImageLoader.load('res/images/Tanks/tankBlack.png'); \ No newline at end of file +const enemyImageBlack = ImageLoader.load('res/images/Tanks/tankBlack.png'); diff --git a/js/main.js b/js/main.js index de52cc9..16949e1 100644 --- a/js/main.js +++ b/js/main.js @@ -8,17 +8,32 @@ Game.update = ()=>{ } //Check for collisions + for(let i = 0; i{ } //Ending the game - if(!playerIsAlive) - Game.pause(); + // if(!playerIsAlive) console.log("dead"); + // Game.pause(); } \ No newline at end of file diff --git a/js/players.js b/js/players.js index 12a2b12..5509b80 100644 --- a/js/players.js +++ b/js/players.js @@ -21,6 +21,26 @@ ImageLoader.onEveryImageLoaded = () => { enemies[i].loadBullet(bulletImage); } + for(let i = 0; iflEcRZp>;l&sxh+R zHc+y)t|Ma0a6x)XvfrIGO5HjRHmKW^yb8`3MRuBNPBi&q+zh#yygCd>2hw8B$VqmE zV2mPnCa-o3j64sX?@$I4QAWz~D2$mP9U%Xkf+alRP=??y5^Y-J{_lX0a#%$o27>ed zQb=H|vLr+dDaxd4a={cJ(L3=}ecfO<*vSCF7#9xVPQdA7T#ZCz6=J58N!MQ~*l18T zzRpWS)u6m@hEfNAYFJocV6t*}f()N3IrP$xoXl}`N-#+p?!l?)`Zm<^I6ZMnE#g-j z)}1WE`IeX@*WSHZR4g=E%de(wi*qtbMg6DK(K|iiSEDP!`PA~0@T>LU90)J+tI4Vv zu1wazYh9gEgHzLkGb8OxJzY!wpG5)y==!O!?DXsi%M-ylX3B%KihUD1Whxsk@^^N( zm8EYN(mG?eq@WLRVF`SS3@YE%jk?2!uq?8DRmSN*xZ)eFVeE$B69Hoe1&=irM6-gs z(lYVqG)D%Nt~JR>?^rC$%5^r=Q-G$5lo*uANK_Q$rT(EaK;#{OdJd%orT-&@j~V?x zLx@fzKUg*+wqrv?Cj^>)4#H;Y5DjxPa-ny?6 zSr%Ca6nxtch#Lmfr{V+NNU_j=VO!Hujyc$@IMGY}0{#v_(1frwx?mDVeQH^JaFU}k z{5VbgC))9=IaN3i%K16ZV$i}tIs9xkQAd_t5DDamfIXR&nT#XfZRDK**miKcVXl?@ zyPDC5+;sd4Q4tHD1>6N1tjN$S5)QNsb~crY)av57mF@FnMxDYY$-bkSTFIjV#_+g= zwfIde0=q?p)r2}!7P*iNkI87njF>L6t;B$)NidnLD@*iHW7dgKB)v&gc-but*Ah}S zL4~m)D!6O4FnFfsrRjIDg`EZfMH53QmDw%LDDCL6BP{YVAjHl7JUsr&S$skZkH4g> z$en7pBq41l%oI=|oJ4=l=ZAdqs7}%9s;7MJSi6D9yrtFhwl}V~JA0RZPkGUuhO2jW zK*^^X3mlWBJZoHSX`H9ibt1!{+8b^6kd?-bHo29{u^!o-N(^q(z8w{CNWRaxbnw0 zjtvptD?_lPBDqXDr4}m(rD`a3p9zJ6`!U0qP_bDvO9qRIMWXLe%WzEi*PrzJ8|o5P z0#VS713?Q@choCRaBs?&rADRsaXVjhNWIW!NR5~8{Mpb&ki5LHE)3M3ke0dWfBHr3 zB1r7X*Ihl)KW@~4KZ7O)@!6GCe>hjGR`bOn_Z?A7L7y)0VGrJ3wMDV;rPEdoXQ}bM zz~d<|LWA^Pel4|JKnyu2_bK@6l3gP6vkfIAf0 z%7av7hV~EXQ&Nnrsw#PDlKK*inR$66^tdu4^;G-e>*DWz>JN4b>B;%TyQymadP<59J1BuV<18QSGh z(Q4CMn-B3hZ>%={ek4!#tSVVr8}F`b+5L-~q9mh@j*-KZ2qsojF+@r-rX*xOUPUsMK7f;x~ zf{D#)Z-}e}dSNxwxJYF`%fVh7l}Dua@o&{2>L|X;gT#5LL-^S3xq12cLW>%I~5nX zq~1iPVMaZkSc7Y&(vO7Aep-P6;F@>ULRh5#i7u3QVccne_pvl5udy+W56l;`fi9+pcfPs)mFxKG;Su0WmBt_s6eBqGyuYE)ry8A2~N z*o!tB4^8JJd6G17_4(;*Tz6FM*^tUvQKDfbds2zM**%xKn}0(xpPZOC#$iFmTMeB{d--XU#Kfaf)ZP&|7Zkfch z$v3HwZkozLphMl(qWBN(oa?vNKEJR(0&( zcFtiiv{r#3LJuZ8id?{4 zVN&B^akj|Y_iCVsP!4ttC;ZjW%U^BJAA9}6Z@OLue2c!Ca|)XIays$$YX0LHf3sV| zMcIq_#nyKk52SY?a@VhEV8G$`g;5#GIBW8B-&D4;+cS0SwU6#EX3d7g+8ovdy)@uS zQ2ldf#dBKf(Olfywx2)D<+dr1Up3B7O>3MzzNyHmiK@kVi_pU)PSC?0Jt1hX(&X zxOcIH&zd)g`f*fu#H{wHso8k?UD{Kdt7I1j8o`IwWY^ecIWju!9+So7b7ySxkq9~i0+N*1)hpw!CHGa;xY4;Tu zmvPcARyd>Oq-^HeAgrp?UREBLKt_!}$zkw>=iTP}4o5SF(x);>j1^_Dky3b9z}9j_ z8|4ZN9W&jYeK48ItZ6da-8tsMy-^*yn)+5-R~xary}L^rJ94N#-69YAh88Cax2dWC z!^znzp_h^D-~wH_(Un3!nm5Sw#1QL(RdzPrqB`78jMIYoQLG*F2N~g{x5C+`g;FT< zO@vXe7N6(Ri?FQ9-qGxU!H#bw3kM&vTaK>pF+TYg4>kb&k6Y5xcT6z%G>w4L2dS}Ul;qcKP}52-1lM{)-_ktoO3{!ee4PHXa0>A^{03MazW}H4QBV5c&i&u&q+%BfZz-qRPpD z6I0Z?D09O(nuo1>)APcC&(wn46e5!}0yC$=0TSAPL+PmzzeYWiuB^sy3m+++5%IYV z$nO%&OAPVXsEVoep82zznjO_ozwp`=zPeuY+n?XDbY$qH?f`*?fw2T{3P}FGI7bvw zys8mYrIcDu=dcd}MJ1(Oe5(ulZCIW4N1zFnapLEnE*H*{cr6N17!z6T8I$u&FLTcX zl}N`atJ@VvXF(S~ulSSb-qQ8F7f)5V9B1{T3>IA%2L-JX=;8C{eyiI%c}bcg0=d`p z%eTtCmZT0zZ)m-T0F(eK(sdc0m8FCYz3DYProsG56f{Cdl+^)x#j4*HURN)SUrq`> zJ*}qOSl1u7Ww_^_3xLoS5b{uPE(*>HR?#lyd{;L6YbHb>N=g^n+5=-c?WJ-}N5nC&6Ob3V?BLiQ-lL2e0cMe=AR-&6-c# z$Cf01=8}bsE{HI^>ZfzP&bsEE#U-<|+PZ!1uk`W)t2m+}L%)F3)~rgVaWS7JOJ4Fr z(K@HFb^OLtu1&2sO|%jNHWs7$QzU$MmOPXnocnU&#(zyezIV5l`hqv0WK79G!^3-) zX*#3*#DA(7Jh){mI&UHtf7eq#6p329Grx_7p>I6jbLkvcx^$b7^z`OzA27{andxJ@ zkdJx@dyn5o*MmXaV2gG&5?vX|&x3YpUJFKwuqhH|UF*TinONBn#3)->FSAKz(nD;T zBIi|kpH;;m4+T#{6zG_`cf;`tkLWtI+sv(QR$at%{o)G*C>^NTnCr^?N@un^aOYY4lL?-vS}A+I z=XlD0gv>C94l>^yMi^lz44nnQ22iUAzbHkzL23X?Gy&MFSzOSsZ4i(bpI!+=Kxu^W zLZZt#%ZnjIq53c|*rue^i}xboIeW*KUborjl0VNHbA@a9r4#eAQ*Z0AcB2eIjolw3 zU#7J>JQuLK47h}+?fC4pJ^fMmx?wlAMyL7KNG)42r5mo?F4iWn87|Yy*%mmJ>}K1~ zCdtX=a=z7S5=Iz?2tedywtk5V^<8{F5O9w?*H;@|xK=fnm^13sw(xs?jLv~?mRHny z!~SG_p&b-S6yv9Uep`n;5ouV=`+;%r&xLIMpU|Q%TRovS38qyk59(FaGToQ;hXYh@ zF3idGfB9%bE5oWWQoF)cF$Vy=J0=0Se^9L%p**{hxEqcME(xxsHfEo{s{E3t7QNbO z@i&ZF*#1!$dG3q>CRo9`nz}62#XbwbDv3^V+jPU`SoOWYADxrRJg$cfndFbp*$j?c)~HPYOfw6?*tdluog9q+*%}*(2-vT89xMY@H6di4>I^xw8=kY z_(v!ZIDGwN;ewn|n=cn)3uZT^rgg!-Pk-7_0kF0c2<4^m;FQFK^2K(06^>b*{8THC zI1z?FG$_8A?Ol}gjeZp`C^s=#I|DC1l`W!;eI{}{wx~(5&15mH%&%_R10X^}RW;RQ znvKlYpZhpX=!b131aZSqk*jN+7%YHPpDe1~`T94fJ+HWLcgos)r|?6|goIZTc|w8ml?X|hn2d*|642GZkT4>!&F z2bC#hQ#{lB#YOs}t>^Q8P4OD`U0X2bID6ZlJ74LWt?%_?ktBLw*Bk2KmxP$Shpby# z@n{@DQxI3(w1bmZ;yvwY*odeYeinJ7^D(L)DW=#rl=9LA_ndl%3=!LKb+Pxd5qC|~ zq!U76(aSnj*6NwXhMW>@^<;X8J~iI`{i4bg4vje7`R%`kd2$7&+a1bvj~P_Ne$iJ( zVZQzMGf23s2K^l1M?w&)%9i!nHmIaHwswG=GWfBpn*2@t{3vAXsWP0_49@zGP%g0Q zZD+be&Tu4vfw&WpP;+=i6{XuZxB=D>ARJ`Z#(tZc$|li1CIyA*0x|Cxee<+)6aDd8 z5Nvx?Y(>H>#;q{-(VmE$qLcLs&sX9N8zg%>35|9b=x*X1C{4#c_&h`no&cE5- zEKXrsObnj@A|g$*x_6cH)H8ZvS08#z#k#9vdUJ>Yj|{$&H;UfJ-VlHkRM)lcC2u*@ zao@p;%$W6yU~DL|I#h!qJ%j)0H@&-P7|wDc&`IoU(GJhNU*mY&44sk8au~Kt{M#!7 zhVSa5x{O5ZtsTxVwBZ-=9QgB~+QG=n6(00Fcx_0C^}a3dvqGyh!DNQf-qeat8i2m; zJXPef5Je|~(xnzEl%^*BS{Ne72uV}U*3s8EyiTE}fbZJpT{v%}N|~2?{j$SZThpx4 zbN#e?Xzx~SPi{wkuS7=1+g@w9_s6ArMGs=;mXL{O{qc!GVZR)TZH$xu5gGtiu?`D6 z9|lM@_!^W8C>O@bAooavpJwB@s_X?J$a{iZ$(-(L!3oZ&s(G;DHq$RWwZbJ#t8 z3YGkwVd@!QU-ZzSPkB)GyL0oG{;}iNS-s`yIDG%M#_UpauQ~O#J8l21>w}93HF8Cy zVvWFf%kS*1Aj!C+S(bDV{!BOQ6<|$0Qr-Ss*aCb=LTE`o3S|TYqI4+2He^CM709iA zJ{e}Z&)4yet-+LxD}%I;X^qxgTcjoQ-lJzb=S=zfUxkyWzSx}@)CTsw7{dya(sl9N zRg^)DE@mo3DA&f_6AH|7vayS{wS3!I6oORvLNnD`r1bHd&JW)~x_^ZBDc4wyCK($U zJcZlof(iQ&jUuD6YlU~X8wLphAYi=s`mEF~=@Lh>Q81od=WX*cn)qz^jd5r~*0j(q zl^B=)8`5Vvfu|V(OXe3D_9Xj^AL+$wa{?sXYnOaGPoH09bndAC`e8t3^h-$Ct%=2L z(wg!8HJ4aSmZu6_PZ$iQEdM5|;NF#=1OV}x2<~#`LrCtT0SaX3G~>W~|5(Q(*ABs8 zvEaW(efR?!xR?R9eo^rrOx?_#S*olgNY3~8v3lIXAxiN_XMc&a|4UJ!mpPYR-f_a($&zZv->{4-g)Iq~+GsVkdAU zY8GnHs-c173Fj%UB{4~s0s#jYZq4-GDwPCOa5@hW3IgpxueBq zc_^WvIhDn9mu<95$x<;9p=;q=2A+zpD_zyUjL`bql3hprj}Sh3E!$K(se#c-G1^E6 z%$}n?CadJ?VE@@3uvG`b!R>JWH^l8)POrt=b|JSU?1h{ff7vjcVK8Kbsg-zuA+A46 zE_NDcrGD7Tk4uVS8)YAA*RZ4iMBblj;nz37(5EX#-{Q0T^N?QzWI)3tE~3DTHGcC} z>N+L4HiI8+ssI8&Q}{LXR^`OT)^?ZJ#HTWTxUMgB7LVbQ)6iM67jAO;^+LIQYuQNm zji`-|IFffMh)mUXBH;AbGZVXabjoiixxARt3RE6QaIn8LvZvi@)KDgIX4I?wHsUDLz@B?=UM0 zC!P$C{-*!>;b2M%SycNd|B&E7`_|gRkXRSGeV=TI4fB}+-~@kvZl!#uS1^xH8I)^j z5B-eDc=bf4)JBN(hA?_kf(@4jN0N8D)4@hn7{6rY{SCHTvE<5Tg=>g23KV2;^~EFX~`naME#JeVz!Mc zI@7x`fzAMVv0Xp(9x;{-k%-M}B8Agh6g=|CJ^Z>{K(3H$(xVoM#iGJVgunh2P^9Y? zJEmZTH+-f%H0rc}9Vfn*N($Y=m<+&paueVo)HMbl4DtDYK!9n7x8*P(k7BB`=&3HX3ZDlD)iq_U zAv13IAIei+W}X?8yI4UB<66qbzw9a1>=>?@X+8Nl67ZK#se-*VUq0a}Pnv2_K5eQs z$bt)HPmG4eGn|F#gzPh?cw^T@N9!7wX$e?Sf28%)n78K<8K)i<4 zCBVO_qMjjBN0_I)WL#W>!??vV$5tmnbd;|_!0LYznrd(ux;7^?t_aZS0PFy?eOX$| zh4?d}FV{{W6f>Z~65e$)7j?-aJenpPD5%V8^XOcIs?50{eFsr-=WcQE1H;u(#n1S- zYCGpJap*?w9Yl=F3zxmU3@wpkFVA2m=Z2kwwB#@I4K^jMT)0BkR_LQQg(p^2hc9(&W0aZ|ZaBFDfO~GZT zC4?@WiAWhtqD}!A_1dsff-p=#IJ}|bCiEdOkHG0D$17^_xS8Hn-d0dVZ;|c-ZgW3w zsoXR<;n)N#x-B(Jv5 zNZ&`o;L$qX$&+U<2NpkunJ@P~yUiop(wCa19&znv`$?Fwhfy%nmx%ahnUeHm!B}sh zY^j=W(ev4>-pQK3(|!y!jV)q#YNj+~DolF}z(4}F*zwKah>=GY9aRWTa5xPS8r-g* zNIf~)6COjzCLo7uQYWyv*KGt_YGo7F8A-NB!C$7eA+c6z4t?Ompvu%tRn!CB24Ubn@ zf|eEu%^BCt#@JX=W{x{AB*%0;+t1Ok@7&n^3OfiXqWXkPJw1Jw{H_%v_lS^Oug)X! z_yRoMw^yv_c+@^&Ol4A;v|T^By@rwUI=T1oK}$4C=gaPB%e=Ahl(2onBBHSNm0V)_ zydlgrCZeM8LzIyUyoi!f;|S7gp0)sk!MMd;3XJbSnK(>-J5lrJ9fs#|WN7v;h&4&_ zYuvEh<=|5`jZKQaU`veV2u%>`m5VSQvNwz~bbWJQprtW!d#WQe$0t!dTu!-$I#aIT z*7QFB?I3}! literal 0 HcmV?d00001 diff --git a/test.htm b/test.htm new file mode 100644 index 0000000..ffbef23 --- /dev/null +++ b/test.htm @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file From 617a58c0b4d7483b4a3807bc3e24fc1e4502be89 Mon Sep 17 00:00:00 2001 From: endurance21 <43696525+endurance21@users.noreply.github.com> Date: Wed, 3 Apr 2019 23:32:21 +0530 Subject: [PATCH 2/3] updated enemy.js --- js/Lib/Enemy.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/Lib/Enemy.js b/js/Lib/Enemy.js index a0ca26a..7027e30 100644 --- a/js/Lib/Enemy.js +++ b/js/Lib/Enemy.js @@ -12,6 +12,7 @@ class Enemy extends Tank{ this.angle = (Direction[a].getAngle() + PI/2)%(2*PI); this.counter = 0; this.fireBullet(); + } if(this.position.x + this.width >= WIDTH || this.position.x <= 0){ From 587a95356576e70d45c6097584bf5c529c8d7209 Mon Sep 17 00:00:00 2001 From: endurance21 <43696525+endurance21@users.noreply.github.com> Date: Wed, 3 Apr 2019 23:44:59 +0530 Subject: [PATCH 3/3] minor bug fixes --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 74b186c..7a3ec2c 100644 --- a/index.html +++ b/index.html @@ -25,8 +25,8 @@ - - + +