From 6b7cca9cfd0447fd62814b0f0f6c7c2831066a28 Mon Sep 17 00:00:00 2001 From: "PolicyChanges1@gmail.com" Date: Fri, 12 Feb 2021 01:37:49 -0500 Subject: [PATCH] lotta stuff --- css/styles.css | 1 + dist/tetrion.js | 176 ++++++++++++++++----------- favicon.ico | Bin 0 -> 15406 bytes media/ico/about.txt | 6 + media/ico/android-chrome-192x192.png | Bin 0 -> 5584 bytes media/ico/android-chrome-512x512.png | Bin 0 -> 17565 bytes media/ico/apple-touch-icon.png | Bin 0 -> 4961 bytes media/ico/favicon-16x16.png | Bin 0 -> 337 bytes media/ico/favicon-32x32.png | Bin 0 -> 748 bytes media/ico/favicon.ico | Bin 0 -> 15406 bytes media/ico/site.webmanifest | 1 + src/canvas.js | 2 +- src/input.js | 133 +++++++++++--------- src/main.js | 29 +++-- src/shapes.js | 12 +- 15 files changed, 216 insertions(+), 144 deletions(-) create mode 100644 favicon.ico create mode 100644 media/ico/about.txt create mode 100644 media/ico/android-chrome-192x192.png create mode 100644 media/ico/android-chrome-512x512.png create mode 100644 media/ico/apple-touch-icon.png create mode 100644 media/ico/favicon-16x16.png create mode 100644 media/ico/favicon-32x32.png create mode 100644 media/ico/favicon.ico create mode 100644 media/ico/site.webmanifest diff --git a/css/styles.css b/css/styles.css index 3eec534..df899e8 100644 --- a/css/styles.css +++ b/css/styles.css @@ -52,6 +52,7 @@ body{ #gameOver{ height:100%; position: absolute; + right:120px; background:rgba(0,0,0,.75); z-index:999; color:#ffe100; diff --git a/dist/tetrion.js b/dist/tetrion.js index ac113d9..ef3d6f5 100644 --- a/dist/tetrion.js +++ b/dist/tetrion.js @@ -158,7 +158,7 @@ var tetrisCanvas = { if (value === 1){ var x = gsize *(shape.x + j); var y = gsize *(bottomY + i); //(shape.y + i); - drawBox(this.sceneContext,shape.color,x,y,gsize); + drawBox(this.sceneContext,"rgba(255, 255, 255, 0.4)",x,y,gsize); } } } @@ -402,24 +402,16 @@ var UserInputs = { updateGamepad() { this.gpButtons = gamepad.update(); }, - - incFrame() { - this.frames++; - this.nframe++; - }, + incDeciframes() { this.nDeciframes++; this.nDeciframesKey++; + this.keyboardButtonsDeciframes++; + this.keyboardDirectionArrowsDeciframes++; + this.gamepadButtonsDeciFrames++; + this.gamepadDirectionPadDeciFrames++; }, processGamepadInput() { - - this.gamepadDown("DPad-Left"); - this.gamepadDown("DPad-Right"); - this.gamepadDown("DPad-Down"); - - return; - }, - processButtons() { this.gamepadButtonsDown("RB"); this.gamepadButtonsDown("LB"); this.gamepadButtonsDown("A"); @@ -427,13 +419,24 @@ var UserInputs = { this.gamepadButtonsDown("DPad-Up"); //this.gamepadButtonsDown("X"); //this.gamepadButtonsDown("Y"); + + this.gamepadDPadDown("DPad-Left"); + this.gamepadDPadDown("DPad-Right"); + this.gamepadDPadDown("DPad-Down"); + return; }, + /* + processButtons() { + + return; + }, + */ // X, Y, A, B , RB, LB Buttons gamepadButtonsDown(finds) { - var deciDAS = 50; - var deciARR = 10; + var deciDAS = 50.0; + var deciARR = 10.0; var isContained = this.gpButtons.includes(finds); var isPrevContained = this.prevGpButtons.includes(finds); @@ -443,25 +446,26 @@ var UserInputs = { if(isContained) this.gamepadQueue.push(finds); } + var gamepadDASFrames = this.gamepadButtonsDeciFrames / 1.0; if (!this.isGamepadButtonDown) { - if (this.nDeciframes >= deciDAS) { - this.nDeciframes = 0; + if (gamepadDASFrames >= deciDAS) { + this.gamepadButtonsDeciFrames = 0; this.isGamepadButtonDown = true; } } else { - if (this.nDeciframes >= deciARR && isContained) { + if (gamepadDASFrames >= deciARR && isContained) { this.gamepadQueue.push(finds); - this.nDeciframes = 0; + this.gamepadButtonsDeciFrames = 0; } } }, // Direction Pad - gamepadDown(finds) { + gamepadDPadDown(finds) { var DAS = 7; var ARR = 3; var isContained = this.gpButtons.includes(finds); @@ -493,59 +497,68 @@ var UserInputs = { this.processKeyDown(88); // X this.processKeyDown(90); // Z }, - processKeyShift() { - this.processInput(39); // right - this.processInput(37); // left - this.processInput(40); // down - }, + // keyboard keys z,x,space processKeyDown(key) { var deciDAS = 10; - var deciARR = 9; + var deciARR = 15 + + if(this.prevKeyboardKeys[key] != this.keyboardKeys[key]) { + this.isKeyboardKeyDown = false; + if(this.keyboardKeys[key] == true) + this.inputqueue.push(key); + } + + var keyboardDASFrames = this.keyboardButtonsDeciframes; - if(this.prevKeyboardKeys[key] != this.keyboardKeys[key]) { - this.isKeyDown = false; - if(this.keyboardKeys[key] == true) - this.inputqueue.push(key); - } - - if (!this.isKeyDown) { - if (this.nDeciframesKey >= deciDAS) { - this.nDeciframesKey = 0; - this.isKeyDown = true; + if (!this.isKeyboardKeyDown) { + if (keyboardDASFrames >= deciDAS) { + this.keyboardButtonsDeciframes = 0; + this.isKeyboardKeyDown = true; } } else { - if (this.nDeciframesKey >= deciARR && this.keyboardKeys[key] == true) { + if (keyboardDASFrames >= deciARR && this.keyboardKeys[key] == true) { this.inputqueue.push(key); - this.nDeciframesKey = 0; + this.keyboardButtonsDeciframes = 0; } } + }, + + processKeyShift() { + this.processKeyboardArrowKeys(39); // right + this.processKeyboardArrowKeys(37); // left + this.processKeyboardArrowKeys(40); // down }, // Direction arrows - processInput(key) { + processKeyboardArrowKeys(key) { var DAS = 13; - var ARR = 5; + var ARR = 3.0; + /* do once? if(this.prevKeyboardKeys[key] != this.keyboardKeys[key]) { - this.held = false; + this.isDirectionArrowDown = false; if(this.keyboardKeys[key] == true) this.inputqueue.push(key); } - - if (!this.held) { - if (this.frames >= DAS) { - this.frames = 0; - this.held = true; + */ + //console.log(key + " " + this.held + var keyboardDASFrames = this.keyboardDirectionArrowsDeciframes / 1.0; // why isnt this 10? + //console.log(keyboardDASFrames + " " + this.held); + if (!this.isDirectionArrowDown) { + + if (keyboardDASFrames >= DAS) { + this.keyboardDirectionArrowsDeciframes = 0; + this.isDirectionArrowDown = true; } } else { - if (this.frames >= ARR && this.keyboardKeys[key] == true) { + if (keyboardDASFrames >= ARR && this.keyboardKeys[key] == true) { this.inputqueue.push(key); - this.frames = 0; + this.keyboardDirectionArrowsDeciframes = 0; } } //} @@ -554,13 +567,11 @@ var UserInputs = { this.keyboardKeys[event.keyCode] = true; }, keyUp(event) { - this.nDeciframesKey = 0; this.isKeyDown = false; this.keyboardKeys[event.keyCode] = false; }, gamepadButtonClear() { gpButtons = []; - nDeciframes = 0; isGamepadDown = false; isGamepadButtonDown = false; gamepadQueue = []; @@ -571,20 +582,26 @@ var UserInputs = { saveKeyboardKeys() { this.prevKeyboardKeys = {...this.keyboardKeys}; }, - isDown: false, - isKeyDown: false, + // button states + isDirectionArrowDown: false, + isKeyboardKeyDown: false, isGamepadDown: false, isGamepadButtonDown: false, - held: false, - nframe: 0, - frames: 0, - nDeciframes: 0, - nDeciframesKey: 0, + + // das frame counters + keyboardButtonsDeciframes: 0, // DAS controlled frames/10 for non-shifted keys + keyboardDirectionArrowsDeciframes: 0, // DAS controlled frames/10 for mino shifting keys + gamepadButtonsDeciFrames: 0, // DAS controlled frames/10 for non-shifted keys + gamepadDirectionPadDeciFrames: 0, // DAS controlled frames/10 for mino shifting keys + + // buttons state contatiners gpButtons: [], prevGpButtons:[], keyboardKeys: [], prevKeyboardKeys: [], - inputqueue: [], + + // button pressed containers + inputqueue: [], gamepadQueue: [] }; @@ -785,6 +802,7 @@ Tetris.prototype = { this.holdQueue.push(this.shape); this.shape = this.shapeQueue.shift(); this.canPullFromHoldQueue = false; + this.shape.resetOrigin(); //canvas.drawHoldShape(this.holdQueue); this._draw(); // update? } @@ -793,10 +811,10 @@ Tetris.prototype = { { if(this.holdQueue.length >= 1 && this.canPullFromHoldQueue) { - this.canPullFromHoldQueue = false; this.shapeQueue.unshift(this.shape); this.shape = this.holdQueue.pop(); + this.shape.resetOrigin(); //canvas.drawHoldShape(this.holdQueue); this._draw(); } @@ -903,21 +921,25 @@ Tetris.prototype = { } this.currentTime = new Date().getTime(); var deltaTime = this.currentTime - this.prevTime; - + +/* if(deltaTime >= 10) { inputs.incFrame(); } - +*/ + if(deltaTime >= 1) { // 600hz inputs.incDeciframes(); - inputs.updateGamepad(); - inputs.processButtons(); - inputs.processGamepadInput(); - } - + + if(deltaTime >= 1) { + inputs.updateGamepad(); + //inputs.processButtons(); + inputs.processGamepadInput(); + } + // drain gamepad queue if(deltaTime > 5) { @@ -997,14 +1019,14 @@ Tetris.prototype = { this._update(); } if(curkey == 16) { - //holdQueue.push(this.shape); + this.pullHoldQueue(); - this._update(); + //this._update(); } if(curkey == 16) { - //holdQueue.pop(this.shape); + this.pushHoldQueue(); - this._update(); + //this._update(); } } inputs.inputqueue = []; @@ -1120,6 +1142,7 @@ function ShapeL() { this.states = [state1, state2, state3, state4]; this.x = 4; this.y = -3; + this.originY = -3; this.flag = 'L'; } @@ -1150,6 +1173,7 @@ function ShapeLR() { this.states = [state1, state2, state3, state4]; this.x = 4; this.y = -3; + this.originY = -3; this.flag = 'LR'; } @@ -1164,6 +1188,7 @@ function ShapeO() { this.states = [state1]; this.x = 4; this.y = -2; + this.originY = -2; this.flag = 'O'; } @@ -1183,6 +1208,7 @@ function ShapeI() { this.x = 5; this.y = -4; + this.originY = -4; this.flag = 'I'; } @@ -1212,6 +1238,7 @@ function ShapeT() { this.states = [state1, state2, state3, state4]; this.x = 4; this.y = -2; + this.originY = -2; this.flag = 'T'; } @@ -1230,6 +1257,7 @@ function ShapeZ() { this.states = [state1, state2]; this.x = 4; this.y = -2; + this.originY = -2; this.flag = 'Z'; } @@ -1247,7 +1275,8 @@ function ShapeZR() { this.states = [state1, state2]; this.x = 4; - this.y = -2; + this.y = -2 + this.originY = -2; this.flag = 'ZR'; } @@ -1463,6 +1492,9 @@ ShapeZR.prototype = { } } } + }, + resetOrigin: function() { + this.y = this.originY + 1; } } diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8a2b0538b5fe657ab1d610674425893992ae2975 GIT binary patch literal 15406 zcmeHN>2nlC6mLua0Q}(h1(Og!Br1fc2vHCe33B9woDf1J2OCHNl3)TNF$YN?Kmwt# z%JQ}_DpgilURYY7mKvd;3IR2sqH_HU?fdm^&kpR&?({IT*(|eFT{GLqd#~TTe*G@S z?qYYdapM?0eXQ~x#?l#MK40K}>b;B|roOba;CKpS$M0h-mFCbAS`p}{hvDzWAs`Ues_b2fNqCw>wzp>>}zG+Qp&Ccq1{O4U$EW_BidLe(O zDMOootSwD^3oA67?@Qr1IXV37?upv^YlGu?RY?}VY=Mv9S5d(-{%&)|O|7APA^(W@ z8I6V^n$u0++^DI3hiJIsVcbwDD0D*4_^4%4gMKpm#lv1b8WL02C-QgwiS+KVooW2S z-jt}i%V|Db8}#wjE0+j;+*$in%<+HUIaT1seXt^LIsdaiDW)_G)ITBcugqUAp6}D$ z;xv!V;K6=bTeMi?eHp z;)138%E9q`WM2}`CwpwydVBVmDt~H9vjqMQo!sxJnkVG&uYPrVP6hv&-botoKilz; z#_uml4}d2}6zxG3+?WgdPoBBU0~0j-SIG{8KJb@4r}e4AwlW{~Bk*ru_jDMZgAIW* z`D2$mawzRj;QzQa++I9Qwl&6j{F!02S=n2(Ij~;=KaXS`w!6`M_!NbtlkE5vM)34~ zFIGGw@Z+iP*T2Ir0gXc~YJQ0xhSB>7`77|b02_QTnu9*<8#;NzDre-5Ba!y7TG#(J|Fl8!}Ko2_N@Oif>(~*tQCs(U=Pw+iT`(yq9~}x^@A-GzNUm z3zW-UR}zR}gZ4E=&uj4ox8iqBey7hV_F7E2WXbm-io33-I6VH_tqX9HzDTgH(zzXM zm_>B}fp|(8onge4k>3XW*w=5PkW-38vwrO2{$$=1j75T8#KtaB{^u;k_Z(=&vcuig`{;&*Mn%Zv}GzptFQz2k|*M|LC^q zBK`^)(&s1ScsxA)!E*}wp@U#MNV?AVP2`oui^bVMZtY+CCUPtuo~L>yYdQz?ch!dH zypVsuSQX`|&e4A2fo@5|p~hJ^(f@VZv@rT$Lmh%lTOp50uOnqw(5|*hMaw*x{d!x@1RBz^jDB=gmbTg&*{0p zin}#nqk*Pw%C+OZiiGFWmme1Ob_IFal(Wm=s9T6M-_0@5BJCaIu&mVU{k}JuR|j+b z+sMX`XuJo0+`G`9stxuW)StR%|F^Rb*!8Gym%MlCi5eum z&u}|5Mp}!y1K9FS6$>0~@EJy8pod_y;m*W9oNRzO7GiXfzO6SldbXg)dyn^?40tjy Q)?|RngS?-|0oxq-AMvYVEC2ui literal 0 HcmV?d00001 diff --git a/media/ico/about.txt b/media/ico/about.txt new file mode 100644 index 0000000..a336efe --- /dev/null +++ b/media/ico/about.txt @@ -0,0 +1,6 @@ +This favicon was generated using the following font: + +- Font Title: Ubuntu +- Font Author: Copyright 2011 Canonical Ltd. Licensed under the Ubuntu Font Licence 1.0 +- Font Source: http://fonts.gstatic.com/s/ubuntu/v15/4iCs6KVjbNBYlgo6eAT3v02QFg.ttf +- Font License: Ubuntu Font License, 1.0 (http://font.ubuntu.com/ufl/) diff --git a/media/ico/android-chrome-192x192.png b/media/ico/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..74a7d16ec3a72df2f15cd70892c33f80a221ad36 GIT binary patch literal 5584 zcmeHrF1pojPT94I?h;#pcgX}i(YxLcf z6ab*l(o$1K_*wt5@(;3{eTmn&5;1E!#n{vi$JuvD^Fj1fru!R;oj8Px!+ANwh1X{D0l=Ui{WW1{F2!5Ep=;q7sii^br{@P4t^pn=9hBr)xq@G^mO1h zenTl}!m8ItX&iG_Fr0ZjQ$+jyJ}{08Wd|~yIq7!21>^&GfOWY0!Hvxq{>Qq26_QL1 zECl8B`}cYdpqo@E0YKY7wY5Dg0rb0T$^_)YmW_XjdjUFPYm@}(0(9~U8NPs56;Mv# zY(S>8(!&Bse_;O4ihGuDuyfmTWKOc_bZt5W z#bg{1!l?^5wCgURK4(CwA3-v504mW>O|XzvtLq%V%CPTn&-94LLCOf#qp8mI-uAF0 zE>Y%Y%9j>>F*&P$%R@&HIDq0EiN_5W6yJP>VJdZ5c1 z*Z6pvd+VKZjh|^%;=E~}hm{~dHb`+!({MPJkVae`hT*=qH|y;T|K9xYQ?yq^(|m3R zDqTThHd3I0{=!Lb+*17D2GqQLBb=`o4BMP5h<1Xk%E*M)Ru^(N5yG31qw~KyvWgyT zJk)!+tp^7u_;U80P=j^vLcMa%?kf8nBkv~)(toN)0;g#J`lPA3cv7u|1}uK>V{7P8 zouhCk%bj55rs~MdB$q(us#9Eb0DnID6XoS^3gv^Vt|U2G0PM+JVeqY;Ie2Tzm#&`c zr(@ue(Q2lrE55-{#s>w;=r7NZK5w&d2k}p;QmtxK%K5Ok{rgbL?@6mM?oL;ezeYYL z*bI7F<}}wE((jxbdmfD(6|&Ond#xyuKbW`@*$EsS8=nDl43^DZGkN_Alv*(GzY*%t zPOGQRpvkpSt^PzhP|*COsO~6E!!lBH+dcpke)pST$X`H(q$e7$ba{NWdPI@_O)B^G zxLDG<@1e@1eW9oGo!-#crQh~yxdyN5?qnALq(?xpxE@;Nw3}SlS<_Q`a=vtzDXCN= z#G%+G+eKBiKtk<94ddO}a%ixP`&#(}fUtZSUY$ppV3=`i6){SR-z@(rwacXOaTmU_ zR>;xRXD-Xz2~y0s`Um|YXbNr8uOqxd114j2da4+SVfj5ku?mB?!C%r7z}}?RHNy7I zR-9PESfeL|?(b~l#ckcl3aG<42MPibiqyu_6>|$uNtfkqZ{ zhR#H0!EwM6X}Uhf1c$i+r{DB3x$6XBWq`Q60)D8ir|i9>^be71#LD)!&GI6d!)4P}Dr zO{Rrz#)(?OJ0Vp7$PP1dH7b96=jm2BmJjrU&Z1* z!>Xtg`H(k(KDL(J`ta>u|_XM{`H>z21{Id`TjI{BhPm7;LBEV2VGdXY{ z(l2nxEXkM>yI9x8NXTAAbG^Gj@)Tb8RGUU8?#F%2@kv=!u!H^cnVQ41n*D;59eg9W zv;`7CoCL&cI()3&gB{AqCGJ;OP>C4`vShK~_4lvqo$P|u0j7xnggRg8rJ0&*XU2Tb;Kr{~AQQ zg)lQp^-)u*Pq?%G!%!^vTf$|}O|@NA3#dbb6)j;-efvS_@jwf|`;3nSb)NWoL}F}@ z^)`t6YvXQ!uG(|wfqo(FOkVhrAA@waZ(FsCiizEH%G!K=;Hs$Ur}U%uk2YBXY0!6g zoCkl#Wx(10vM3$8 z4~|*MK6?l?%>}&QVEvS1=CWSf8M_?WK>=lN7JQcEe1KnqK2&{@`wl1G-M;;0cX0}A z8YG6Hp(e475;FaK{A8jB)}^cKp+^*7xK^eDYt4 zreeXLD(KB?iXCUP6thD=cVCE9$jwz69#p3u;;|DYukfx}5=gdFxl&5>cpW5XSbd~f z(BsQb)lu4fl0A_#x4pFZwf)o~A*89TyB#Cs3YkA3a7J$E-D|Q?n0UGHOY-W4Q(@gG z-um1Wf!5GoyBYaC!vWl4T_D^8@ckZjqdbrd{3*AnrTvw~`?4LaibtTDX|5}Mj-TzF zzoxeO63r}o?MzQG@ zg`3Ple$?{ygJs>0n>)9O7Aohvn$|OTacbi-WffyI1gAKGvD0_@ByZ&PTtAOjXQ;K8 zHQo~k>gQ!lRc<2{YXw61)uRoi7<(jO$vS791>6G(|FC7$wYwXrF}L{;!Bzf;!H|Ia z{!#4eqw@m03QbG}83^+3^EYx4;bq+BCf{Dbfj2cb)|?czlu%vlG{-bI&Bd+Zg2e|E zau}46LfuMplFm0&~OQe5YldYL0ml#52?1?nzG=QE+5WW#<7@!N&CF zxu&7#kuo^R7b^2W;hU6eui@E7j;HPI|0HoB)8^3`DZ=h@I{ns-;)Aj01|Sd>K1w~- zHCjir2ycqpsjb=#BQT;I{|f&?^9vYrMea$>q%GLR1<>BOf{$BI{K9^#3?kY@Mr?CGL=9FP#tpr)6VtEtDD8 zt!Mm+uDVVK$@@lerKY~Aep|FDNkO3dszUHdtVvNRqYNK*hOKCBwz3x{@aAqrRqr=X z*D5}%cd4}gQEbYa@B{<2Xfa5bxflHD`a=SQqlL7ji;|;j&*{Iv1-zab3((J<1~I*i zMJ*lS6^f=B4ww{1Tkcs#;?sXi*1gx(4g#AGEN(Jcc^(1X+LSrHw2>b>iujWbOPd#o z_UC&wC#ve8lN8pb8>Nfo#TNfm?|hEfc)nWQyUPB$eEngd{01mPwk)X7dHr7H{4Lgy z_86jSg(9fS7(D#-AX(|-?A7gT_V|oc_wQ+C8oQ>MhBq$fBD!5IFbsCiwGX5BO@h|L zDdJYJeOF`+b9xGiDsp1DD-ch zM?Vo(HH!$;D*Y9i`dL7Gdx!robb^$!Oh06?T3k}PdYq>Yq>QVd_apA0CWIsx%+_?#i5HP>@uVD}# zEe-wBWm8jd#B|RdR4HkV_+q%phOsRB(_yRNRA`W>>})Xv7d{bWe_F4+ELAqIej%Jq zsb{bx^|^ziA8gRU%YPrUkr%isqf}+I5kK#W;;EkKGeN3rz!ph%ldV*vsw*iNGz^9GX;{ zx|zY}4DgN9B2)&^mnEIr=q+z|ek|USktwFzOWcz?Xl=NKga5cvcJWLok1>bGK#IPO z($$-`6Ks^J?V1wAHRc7~kxeq-q&F&S?@3qXwpT`?X{@C(L@;4Ia*Ce|m9dZ_FPZak zy#oAa;X;i!Y>j&|xag`QIv$zs@VDhA%M-5;t_0R=J)g1pJ9wOdi?)!i3PTTJ0yP-h0_Wsfw4UJ1Y6` zZo>K78G-WDKC9>)h4@KEIF`8mkrqSG=BLZ%e}M*GR$ihXv+RBD z1H$}=#^s2iEsu5a9{l{+IbfJX;my)541XJgB{V=`Ym1e*ovlA3$iFf>(ls92Rm^bx z`m5!2(*0Q6ekh|i!)MNZ@KOKDQ6Z!H#McpO>F=ANEBCsxp*k8?!*%Ye{0h?95puR5 zzy9;hp-giEXx-w6M_49vFZVVV`nk=1=z^#pJZ82taUUZ}w+`vH{!Ij8-DN*Y17dzM@I&m2*zV6xO!lN=e1-Ta3=Y_#?czko zPUJOWoe~c><2}p)Gev{oNkFb#2C+3zQ@z)OU`OEEo=wk*QRl3!nR)sCzZV~^MDNuY zP30M6zF3f^F%G{JmH|q$n;|pjqKVmt+w*hPEd!|>)w`UIO(vb&k$N&H*?NR|5`8nV zYc`p{A=O>1(O8M${nntqu5%bD&_dFWSkU)C&$35Q-*LS{Ry<2stXZ>D!dU; z8BDG%p(e_$vHHC#BEE&Y_Xou+l9#nNR5l|J@;t1xN0j+sij|lVAMW411eBL1SALi) zjB35Wp5Q${kUqSxI>}254;k}UBO%&LG+E3KcKM$q>^^K?;Y9P3+mjc>;)#ntBl((= zRK#;g7{e+`l!%KPv2ALKaAHRf{$aIhCyDsF|2yXY*G)fxWb07%qI0P^h}fwGXsPR~ J)vKUh{}0j`T{i## literal 0 HcmV?d00001 diff --git a/media/ico/android-chrome-512x512.png b/media/ico/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..96c75919e2b6c5f67fffd2f7b2251dd3166534bd GIT binary patch literal 17565 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 OAkyLrV)>$mZ~h+&L-5-G literal 0 HcmV?d00001 diff --git a/media/ico/apple-touch-icon.png b/media/ico/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b6bcf8b6271b204aa011b90d0c6328e5a62832 GIT binary patch literal 4961 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 j!!S@ zo4Tl$xSZu`pvzM@1lu$*BoRdrc-!+dTb2p$3u+fWSMT0Ezwh_+{7wSxgJ~8Ucm$gO zn;H1;Gaw4jLK+z7H7CKXN<_rztH#Eif=o{@3T?%$9u^5Hh_7B3jL-ls|qT-Ln!`m7gMSlxXMn% zg^gPRqLBTi6WW1CRIIP286nw@e+uXKJ;e5j_ZZmUgt?4esR3X@e(0_B5U?!9ifS>b zJ+h*(FcO5JqaF*g9Q2zm$2BJx63PI%Sln|53f~B3vkEX|tXolhDO2v!u$ylqB3ArmQ1b2;WPx$od{L1!wE*Iv7y8a7D(Wgbi78d}G6P9q9J;O> zn94K3RemZVb5127mrJ{wA@`5rd$taaJr|alsE6B;>w1a7eGLd?=C2Ka()k=J$1}PQ zY?jtvGfsAdzM~O~Vg>pSTus=Va|Wb=36ytTrv@YXbMWO>(eF%;9fh|0aF-l|M`Kw# z0HUmWdkvDgukb4O!dY>anibgE=%OOcnaHO6oiO1sTnfr_JjG7u3q(Xx*e$IftJ+{~ zq(Gy()0|$)w;;mE z*AD<}42F&dFkwHuN+X;VXLy; literal 0 HcmV?d00001 diff --git a/media/ico/favicon.ico b/media/ico/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8a2b0538b5fe657ab1d610674425893992ae2975 GIT binary patch literal 15406 zcmeHN>2nlC6mLua0Q}(h1(Og!Br1fc2vHCe33B9woDf1J2OCHNl3)TNF$YN?Kmwt# z%JQ}_DpgilURYY7mKvd;3IR2sqH_HU?fdm^&kpR&?({IT*(|eFT{GLqd#~TTe*G@S z?qYYdapM?0eXQ~x#?l#MK40K}>b;B|roOba;CKpS$M0h-mFCbAS`p}{hvDzWAs`Ues_b2fNqCw>wzp>>}zG+Qp&Ccq1{O4U$EW_BidLe(O zDMOootSwD^3oA67?@Qr1IXV37?upv^YlGu?RY?}VY=Mv9S5d(-{%&)|O|7APA^(W@ z8I6V^n$u0++^DI3hiJIsVcbwDD0D*4_^4%4gMKpm#lv1b8WL02C-QgwiS+KVooW2S z-jt}i%V|Db8}#wjE0+j;+*$in%<+HUIaT1seXt^LIsdaiDW)_G)ITBcugqUAp6}D$ z;xv!V;K6=bTeMi?eHp z;)138%E9q`WM2}`CwpwydVBVmDt~H9vjqMQo!sxJnkVG&uYPrVP6hv&-botoKilz; z#_uml4}d2}6zxG3+?WgdPoBBU0~0j-SIG{8KJb@4r}e4AwlW{~Bk*ru_jDMZgAIW* z`D2$mawzRj;QzQa++I9Qwl&6j{F!02S=n2(Ij~;=KaXS`w!6`M_!NbtlkE5vM)34~ zFIGGw@Z+iP*T2Ir0gXc~YJQ0xhSB>7`77|b02_QTnu9*<8#;NzDre-5Ba!y7TG#(J|Fl8!}Ko2_N@Oif>(~*tQCs(U=Pw+iT`(yq9~}x^@A-GzNUm z3zW-UR}zR}gZ4E=&uj4ox8iqBey7hV_F7E2WXbm-io33-I6VH_tqX9HzDTgH(zzXM zm_>B}fp|(8onge4k>3XW*w=5PkW-38vwrO2{$$=1j75T8#KtaB{^u;k_Z(=&vcuig`{;&*Mn%Zv}GzptFQz2k|*M|LC^q zBK`^)(&s1ScsxA)!E*}wp@U#MNV?AVP2`oui^bVMZtY+CCUPtuo~L>yYdQz?ch!dH zypVsuSQX`|&e4A2fo@5|p~hJ^(f@VZv@rT$Lmh%lTOp50uOnqw(5|*hMaw*x{d!x@1RBz^jDB=gmbTg&*{0p zin}#nqk*Pw%C+OZiiGFWmme1Ob_IFal(Wm=s9T6M-_0@5BJCaIu&mVU{k}JuR|j+b z+sMX`XuJo0+`G`9stxuW)StR%|F^Rb*!8Gym%MlCi5eum z&u}|5Mp}!y1K9FS6$>0~@EJy8pod_y;m*W9oNRzO7GiXfzO6SldbXg)dyn^?40tjy Q)?|RngS?-|0oxq-AMvYVEC2ui literal 0 HcmV?d00001 diff --git a/media/ico/site.webmanifest b/media/ico/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/media/ico/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/src/canvas.js b/src/canvas.js index 42f46b0..2bf0917 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -157,7 +157,7 @@ var tetrisCanvas = { if (value === 1){ var x = gsize *(shape.x + j); var y = gsize *(bottomY + i); //(shape.y + i); - drawBox(this.sceneContext,shape.color,x,y,gsize); + drawBox(this.sceneContext,"rgba(255, 255, 255, 0.4)",x,y,gsize); } } } diff --git a/src/input.js b/src/input.js index c473444..67ea420 100644 --- a/src/input.js +++ b/src/input.js @@ -10,24 +10,16 @@ var UserInputs = { updateGamepad() { this.gpButtons = gamepad.update(); }, - - incFrame() { - this.frames++; - this.nframe++; - }, + incDeciframes() { this.nDeciframes++; this.nDeciframesKey++; + this.keyboardButtonsDeciframes++; + this.keyboardDirectionArrowsDeciframes++; + this.gamepadButtonsDeciFrames++; + this.gamepadDirectionPadDeciFrames++; }, processGamepadInput() { - - this.gamepadDown("DPad-Left"); - this.gamepadDown("DPad-Right"); - this.gamepadDown("DPad-Down"); - - return; - }, - processButtons() { this.gamepadButtonsDown("RB"); this.gamepadButtonsDown("LB"); this.gamepadButtonsDown("A"); @@ -35,13 +27,24 @@ var UserInputs = { this.gamepadButtonsDown("DPad-Up"); //this.gamepadButtonsDown("X"); //this.gamepadButtonsDown("Y"); + + this.gamepadDPadDown("DPad-Left"); + this.gamepadDPadDown("DPad-Right"); + this.gamepadDPadDown("DPad-Down"); + return; }, + /* + processButtons() { + + return; + }, + */ // X, Y, A, B , RB, LB Buttons gamepadButtonsDown(finds) { - var deciDAS = 50; - var deciARR = 10; + var deciDAS = 50.0; + var deciARR = 10.0; var isContained = this.gpButtons.includes(finds); var isPrevContained = this.prevGpButtons.includes(finds); @@ -51,25 +54,26 @@ var UserInputs = { if(isContained) this.gamepadQueue.push(finds); } + var gamepadDASFrames = this.gamepadButtonsDeciFrames / 1.0; if (!this.isGamepadButtonDown) { - if (this.nDeciframes >= deciDAS) { - this.nDeciframes = 0; + if (gamepadDASFrames >= deciDAS) { + this.gamepadButtonsDeciFrames = 0; this.isGamepadButtonDown = true; } } else { - if (this.nDeciframes >= deciARR && isContained) { + if (gamepadDASFrames >= deciARR && isContained) { this.gamepadQueue.push(finds); - this.nDeciframes = 0; + this.gamepadButtonsDeciFrames = 0; } } }, // Direction Pad - gamepadDown(finds) { + gamepadDPadDown(finds) { var DAS = 7; var ARR = 3; var isContained = this.gpButtons.includes(finds); @@ -101,59 +105,68 @@ var UserInputs = { this.processKeyDown(88); // X this.processKeyDown(90); // Z }, - processKeyShift() { - this.processInput(39); // right - this.processInput(37); // left - this.processInput(40); // down - }, + // keyboard keys z,x,space processKeyDown(key) { var deciDAS = 10; - var deciARR = 9; + var deciARR = 15 + + if(this.prevKeyboardKeys[key] != this.keyboardKeys[key]) { + this.isKeyboardKeyDown = false; + if(this.keyboardKeys[key] == true) + this.inputqueue.push(key); + } + + var keyboardDASFrames = this.keyboardButtonsDeciframes; - if(this.prevKeyboardKeys[key] != this.keyboardKeys[key]) { - this.isKeyDown = false; - if(this.keyboardKeys[key] == true) - this.inputqueue.push(key); - } - - if (!this.isKeyDown) { - if (this.nDeciframesKey >= deciDAS) { - this.nDeciframesKey = 0; - this.isKeyDown = true; + if (!this.isKeyboardKeyDown) { + if (keyboardDASFrames >= deciDAS) { + this.keyboardButtonsDeciframes = 0; + this.isKeyboardKeyDown = true; } } else { - if (this.nDeciframesKey >= deciARR && this.keyboardKeys[key] == true) { + if (keyboardDASFrames >= deciARR && this.keyboardKeys[key] == true) { this.inputqueue.push(key); - this.nDeciframesKey = 0; + this.keyboardButtonsDeciframes = 0; } } + }, + + processKeyShift() { + this.processKeyboardArrowKeys(39); // right + this.processKeyboardArrowKeys(37); // left + this.processKeyboardArrowKeys(40); // down }, // Direction arrows - processInput(key) { + processKeyboardArrowKeys(key) { var DAS = 13; - var ARR = 5; + var ARR = 3.0; + /* do once? if(this.prevKeyboardKeys[key] != this.keyboardKeys[key]) { - this.held = false; + this.isDirectionArrowDown = false; if(this.keyboardKeys[key] == true) this.inputqueue.push(key); } - - if (!this.held) { - if (this.frames >= DAS) { - this.frames = 0; - this.held = true; + */ + //console.log(key + " " + this.held + var keyboardDASFrames = this.keyboardDirectionArrowsDeciframes / 1.0; // why isnt this 10? + //console.log(keyboardDASFrames + " " + this.held); + if (!this.isDirectionArrowDown) { + + if (keyboardDASFrames >= DAS) { + this.keyboardDirectionArrowsDeciframes = 0; + this.isDirectionArrowDown = true; } } else { - if (this.frames >= ARR && this.keyboardKeys[key] == true) { + if (keyboardDASFrames >= ARR && this.keyboardKeys[key] == true) { this.inputqueue.push(key); - this.frames = 0; + this.keyboardDirectionArrowsDeciframes = 0; } } //} @@ -162,13 +175,11 @@ var UserInputs = { this.keyboardKeys[event.keyCode] = true; }, keyUp(event) { - this.nDeciframesKey = 0; this.isKeyDown = false; this.keyboardKeys[event.keyCode] = false; }, gamepadButtonClear() { gpButtons = []; - nDeciframes = 0; isGamepadDown = false; isGamepadButtonDown = false; gamepadQueue = []; @@ -179,20 +190,26 @@ var UserInputs = { saveKeyboardKeys() { this.prevKeyboardKeys = {...this.keyboardKeys}; }, - isDown: false, - isKeyDown: false, + // button states + isDirectionArrowDown: false, + isKeyboardKeyDown: false, isGamepadDown: false, isGamepadButtonDown: false, - held: false, - nframe: 0, - frames: 0, - nDeciframes: 0, - nDeciframesKey: 0, + + // das frame counters + keyboardButtonsDeciframes: 0, // DAS controlled frames/10 for non-shifted keys + keyboardDirectionArrowsDeciframes: 0, // DAS controlled frames/10 for mino shifting keys + gamepadButtonsDeciFrames: 0, // DAS controlled frames/10 for non-shifted keys + gamepadDirectionPadDeciFrames: 0, // DAS controlled frames/10 for mino shifting keys + + // buttons state contatiners gpButtons: [], prevGpButtons:[], keyboardKeys: [], prevKeyboardKeys: [], - inputqueue: [], + + // button pressed containers + inputqueue: [], gamepadQueue: [] }; diff --git a/src/main.js b/src/main.js index f00c85a..fdb751e 100644 --- a/src/main.js +++ b/src/main.js @@ -193,6 +193,7 @@ Tetris.prototype = { this.holdQueue.push(this.shape); this.shape = this.shapeQueue.shift(); this.canPullFromHoldQueue = false; + this.shape.resetOrigin(); //canvas.drawHoldShape(this.holdQueue); this._draw(); // update? } @@ -201,10 +202,10 @@ Tetris.prototype = { { if(this.holdQueue.length >= 1 && this.canPullFromHoldQueue) { - this.canPullFromHoldQueue = false; this.shapeQueue.unshift(this.shape); this.shape = this.holdQueue.pop(); + this.shape.resetOrigin(); //canvas.drawHoldShape(this.holdQueue); this._draw(); } @@ -311,21 +312,25 @@ Tetris.prototype = { } this.currentTime = new Date().getTime(); var deltaTime = this.currentTime - this.prevTime; - + +/* if(deltaTime >= 10) { inputs.incFrame(); } - +*/ + if(deltaTime >= 1) { // 600hz inputs.incDeciframes(); - inputs.updateGamepad(); - inputs.processButtons(); - inputs.processGamepadInput(); - } - + + if(deltaTime >= 1) { + inputs.updateGamepad(); + //inputs.processButtons(); + inputs.processGamepadInput(); + } + // drain gamepad queue if(deltaTime > 5) { @@ -405,14 +410,14 @@ Tetris.prototype = { this._update(); } if(curkey == 16) { - //holdQueue.push(this.shape); + this.pullHoldQueue(); - this._update(); + //this._update(); } if(curkey == 16) { - //holdQueue.pop(this.shape); + this.pushHoldQueue(); - this._update(); + //this._update(); } } inputs.inputqueue = []; diff --git a/src/shapes.js b/src/shapes.js index 2b4c41f..567118a 100644 --- a/src/shapes.js +++ b/src/shapes.js @@ -34,6 +34,7 @@ function ShapeL() { this.states = [state1, state2, state3, state4]; this.x = 4; this.y = -3; + this.originY = -3; this.flag = 'L'; } @@ -64,6 +65,7 @@ function ShapeLR() { this.states = [state1, state2, state3, state4]; this.x = 4; this.y = -3; + this.originY = -3; this.flag = 'LR'; } @@ -78,6 +80,7 @@ function ShapeO() { this.states = [state1]; this.x = 4; this.y = -2; + this.originY = -2; this.flag = 'O'; } @@ -97,6 +100,7 @@ function ShapeI() { this.x = 5; this.y = -4; + this.originY = -4; this.flag = 'I'; } @@ -126,6 +130,7 @@ function ShapeT() { this.states = [state1, state2, state3, state4]; this.x = 4; this.y = -2; + this.originY = -2; this.flag = 'T'; } @@ -144,6 +149,7 @@ function ShapeZ() { this.states = [state1, state2]; this.x = 4; this.y = -2; + this.originY = -2; this.flag = 'Z'; } @@ -161,7 +167,8 @@ function ShapeZR() { this.states = [state1, state2]; this.x = 4; - this.y = -2; + this.y = -2 + this.originY = -2; this.flag = 'ZR'; } @@ -377,6 +384,9 @@ ShapeZR.prototype = { } } } + }, + resetOrigin: function() { + this.y = this.originY + 1; } }