odds and ends
This commit is contained in:
parent
1cccd4adf5
commit
f1b4d94dc7
@ -42,7 +42,7 @@ body{
|
|||||||
left:0px;
|
left:0px;
|
||||||
width:210px;
|
width:210px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
background:rgba(200,200,200,.03);
|
background:rgba(20,20,20,.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
#leftInfo{
|
#leftInfo{
|
||||||
@ -58,12 +58,12 @@ body{
|
|||||||
#leftInfo ul {padding:2%;}
|
#leftInfo ul {padding:2%;}
|
||||||
|
|
||||||
#hold{
|
#hold{
|
||||||
left:55px;
|
left:45%;
|
||||||
position:relative;
|
position:relative;
|
||||||
width:80px;
|
width:80px;
|
||||||
height:400px;
|
height:400px;
|
||||||
margin:5px auto;
|
margin:5px auto;
|
||||||
background:rgba(1,1,1,.3);
|
background: rgba(0,0,0,.8); /*rgba(50,50,50,.5);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#gameOver{
|
#gameOver{
|
||||||
@ -106,7 +106,7 @@ body{
|
|||||||
width:210px;
|
width:210px;
|
||||||
left:210px;
|
left:210px;
|
||||||
margin:0 auto;
|
margin:0 auto;
|
||||||
background:rgba(200,200,200,.03);
|
background:rgba(20,20,20,.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview{
|
#preview{
|
||||||
@ -114,7 +114,7 @@ body{
|
|||||||
height:400px;
|
height:400px;
|
||||||
top:0px;
|
top:0px;
|
||||||
margin:10px auto;
|
margin:10px auto;
|
||||||
background:rgba(1,1,1,.3);
|
background:rgba(0,0,0,.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
262
dist/tetrion.js
vendored
262
dist/tetrion.js
vendored
@ -428,12 +428,16 @@ var utils = require('./utils.js');
|
|||||||
|
|
||||||
var UserInputs = {
|
var UserInputs = {
|
||||||
init() {
|
init() {
|
||||||
|
|
||||||
|
this.settingsList = this.keyboardKeySettings.concat(this.keyboardShiftEvents.concat(this.keyboardKeyEvents.concat(this.gamepadSettings.concat(this.gamepadShiftEvents.concat(this.gamepadButtonEvents)))));
|
||||||
|
//;["Soft Drop Rate [1 - 100]"].concat(this.keyboardSettings.concat(this.gamepadSettings));
|
||||||
this.gamepadShiftTimer = new Date();
|
this.gamepadShiftTimer = new Date();
|
||||||
this.gamepadButtonTimer = new Date();
|
this.gamepadButtonTimer = new Date();
|
||||||
this.keyboardKeyTimer = new Date();
|
this.keyboardKeyTimer = new Date();
|
||||||
this.keyboardShiftTimer = new Date();
|
this.keyboardShiftTimer = new Date();
|
||||||
this.settingsMap = new Map();
|
this.settingsMap = new Map();
|
||||||
|
this.gamepadEventMap = new Map();
|
||||||
|
///this.gamepadEventMap = new Map();
|
||||||
// var init = utils.getCookie("init");
|
// var init = utils.getCookie("init");
|
||||||
// if(init == "")
|
// if(init == "")
|
||||||
for(var i in this.settingsList)
|
for(var i in this.settingsList)
|
||||||
@ -445,6 +449,15 @@ var UserInputs = {
|
|||||||
for(var i in this.settingsList)
|
for(var i in this.settingsList)
|
||||||
this.settingsMap.set(this.settingsList[i], this.settingsDefault[i]);
|
this.settingsMap.set(this.settingsList[i], this.settingsDefault[i]);
|
||||||
|
|
||||||
|
|
||||||
|
this.gamepadEvents = this.gamepadShiftEvents.concat(this.gameButtonsEvents);
|
||||||
|
|
||||||
|
var mapIdx = [14, 7, 13, 5, 4, 1, 2, 12, 8, 3];
|
||||||
|
for(var i in mapIdx) {
|
||||||
|
this.gamepadEventMap.set(this.gamepadEvents[i], gamepad.buttons[mapIdx[i]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
document.addEventListener('keydown', this.keyDown.bind(this));
|
document.addEventListener('keydown', this.keyDown.bind(this));
|
||||||
document.addEventListener('keyup', this.keyUp.bind(this));
|
document.addEventListener('keyup', this.keyUp.bind(this));
|
||||||
},
|
},
|
||||||
@ -455,25 +468,11 @@ var UserInputs = {
|
|||||||
gamepadEnabled() {
|
gamepadEnabled() {
|
||||||
return gamepad.controller || false;
|
return gamepad.controller || false;
|
||||||
},
|
},
|
||||||
|
|
||||||
processGamepadInput() {
|
processGamepadInput() {
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Harddrop")); // hard drop
|
this.gamepadButtonEvents.forEach(gamepadButton => this.gamepadButtonsDown(this.settingsMap.get(gamepadButton)));
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Hold")); // hold
|
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Rotateccw")); // rotate counter
|
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Rotate")); // rotate cwise
|
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Pophold")); // Pop hold stack
|
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Reset")); // reset
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
processGamepadDPad() {
|
processGamepadDPad() {
|
||||||
this.gamepadDPadDown(this.settingsMap.get("Gamepad Left")); // shift left
|
this.gamepadShiftEvents.forEach(dpadButton => this.gamepadDPadDown(this.settingsMap.get(dpadButton)));
|
||||||
this.gamepadDPadDown(this.settingsMap.get("Gamepad Right")); // shift right
|
|
||||||
this.gamepadDPadDown(this.settingsMap.get("Gamepad Down")); // down
|
|
||||||
|
|
||||||
return;
|
|
||||||
},
|
},
|
||||||
// Single press gamepad buttons
|
// Single press gamepad buttons
|
||||||
gamepadButtonsDown(finds) {
|
gamepadButtonsDown(finds) {
|
||||||
@ -512,6 +511,7 @@ var UserInputs = {
|
|||||||
gamepadDPadDown(finds) {
|
gamepadDPadDown(finds) {
|
||||||
var DAS = parseInt(this.settingsMap.get("Gamepad DAS"));
|
var DAS = parseInt(this.settingsMap.get("Gamepad DAS"));
|
||||||
var ARR = parseInt(this.settingsMap.get("Gamepad ARR"));
|
var ARR = parseInt(this.settingsMap.get("Gamepad ARR"));
|
||||||
|
|
||||||
var isContained = this.gpButtons.includes(finds);
|
var isContained = this.gpButtons.includes(finds);
|
||||||
var isPrevContained = this.prevGpButtons.includes(finds);
|
var isPrevContained = this.prevGpButtons.includes(finds);
|
||||||
|
|
||||||
@ -538,20 +538,11 @@ var UserInputs = {
|
|||||||
this.gamepadShiftTimer = new Date();
|
this.gamepadShiftTimer = new Date();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
// doing a lot of back and forth between strings and integers to represtent the same thing -- todo: fix
|
|
||||||
processKeys() {
|
processKeys() {
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Harddrop")));
|
this.keyboardKeyEvents.forEach( key => this.settingsMap.get(key).split(',').forEach( idx => this.processKeyDown( parseInt(idx) ) ) );
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Rotate")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Rotateccw")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Hold")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Pophold")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Background")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Reset")));
|
|
||||||
//this.processKeyDown(this.settingsMap.get("Keyboard hold"))); // c - pop hold stack
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// keyboard keys z,x,space
|
// keyboard keys z,x,space
|
||||||
@ -583,15 +574,10 @@ var UserInputs = {
|
|||||||
this.keyboardKeyTimer = new Date();
|
this.keyboardKeyTimer = new Date();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
// Process applicable key inputs
|
// Process applicable key inputs
|
||||||
processKeyShift() {
|
processKeyShift() {
|
||||||
this.processKeyboardArrowKeys(parseInt(this.settingsMap.get("Keyboard Left")));
|
this.keyboardShiftEvents.forEach(arrowKey => arrowKey.split(',').forEach(option => this.processKeyboardArrowKeys(parseInt(this.settingsMap.get(option)))));
|
||||||
this.processKeyboardArrowKeys(parseInt(this.settingsMap.get("Keyboard Right")));
|
|
||||||
this.processKeyboardArrowKeys(parseInt(this.settingsMap.get("Keyboard Down")));
|
|
||||||
},
|
},
|
||||||
// Direction arrows
|
// Direction arrows
|
||||||
processKeyboardArrowKeys(key) {
|
processKeyboardArrowKeys(key) {
|
||||||
@ -637,11 +623,9 @@ var UserInputs = {
|
|||||||
this.keyboardKeys[event.keyCode] = false;
|
this.keyboardKeys[event.keyCode] = false;
|
||||||
this.isKeyBoardKeyDown = false;
|
this.isKeyBoardKeyDown = false;
|
||||||
},
|
},
|
||||||
gamepadButtonClear() {
|
gamepadClear() {
|
||||||
gpButtons = [];
|
//this.gpButtons = [];
|
||||||
isGamepadDown = false;
|
//this.gamepadQueue = [];
|
||||||
isGamepadButtonDown = false;
|
|
||||||
gamepadQueue = [];
|
|
||||||
},
|
},
|
||||||
saveButtons() {
|
saveButtons() {
|
||||||
this.prevGpButtons = this.gpButtons;
|
this.prevGpButtons = this.gpButtons;
|
||||||
@ -666,25 +650,23 @@ var UserInputs = {
|
|||||||
inputQueue: [],
|
inputQueue: [],
|
||||||
gamepadQueue: [],
|
gamepadQueue: [],
|
||||||
|
|
||||||
settingsList: ["Soft Drop Rate [1 - 100]",
|
keyboardKeySettings: ["Keyboard DAS", "Keyboard ARR"],
|
||||||
"Keyboard DAS", "Keyboard ARR", "Keyboard Harddrop", "Keyboard Hold",
|
keyboardShiftEvents: ["Keyboard Left", "Keyboard Right", "Keyboard Down"],
|
||||||
"Keyboard Left", "Keyboard Right", "Keyboard Rotateccw", "Keyboard Rotate",
|
keyboardKeyEvents: ["Keyboard Harddrop", "Keyboard Hold", "Keyboard Rotateccw", "Keyboard Rotate", "Keyboard Pophold", "Keyboard Reset", "Keyboard Background"],
|
||||||
"Keyboard Down", "Keyboard Pophold", "Keyboard Reset", "Keyboard Background",
|
|
||||||
|
|
||||||
"Gamepad DAS", "Gamepad ARR", "Gamepad Harddrop", "Gamepad Hold",
|
gamepadSettings: ["Gamepad DAS", "Gamepad ARR"],
|
||||||
"Gamepad Left", "Gamepad Right", "Gamepad Rotateccw", "Gamepad Rotate",
|
gamepadShiftEvents: ["Gamepad Left", "Gamepad Right","Gamepad Down"],
|
||||||
"Gamepad Down","Gamepad Pophold", "Gamepad Reset", "Gamepad Background",
|
gamepadButtonEvents: ["Gamepad Harddrop", "Gamepad Hold", "Gamepad Rotateccw", "Gamepad Rotate", "Gamepad Pophold", "Gamepad Reset", "Gamepad Background"],
|
||||||
"path", "High Score"],
|
|
||||||
|
|
||||||
settingsDefault: ["70",
|
settingsList: [],
|
||||||
"167.0", "33.0", "32", "16",
|
|
||||||
"37", "39", "90", "88",
|
|
||||||
"40", "17", "82", "81",
|
|
||||||
|
|
||||||
"167.0", "33.0", "RB", "LB",
|
settingsDefault: [ "167.0", "33.0",
|
||||||
"DPad-Left", "DPad-Right", "A", "B",
|
"37", "39", "40",
|
||||||
"DPad-Down", "DPad-Up", "Back", "",
|
"32", "16", "90", "88,38", "17", "82", "81",
|
||||||
"=/",""],
|
|
||||||
|
"167.0", "33.0",
|
||||||
|
"DPad-Left", "DPad-Right", "DPad-Down",
|
||||||
|
"RB", "LB", "A", "B", "DPad-Up", "Back", ""],
|
||||||
settingsMap: []
|
settingsMap: []
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -839,11 +821,7 @@ function Tetris(id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Tetris.prototype = {
|
Tetris.prototype = {
|
||||||
|
|
||||||
init: function(options) {
|
init: function(options) {
|
||||||
|
|
||||||
// this gameStates = {"
|
|
||||||
// this.state =
|
|
||||||
var cfg = this.config = utils.extend(options, defaults);
|
var cfg = this.config = utils.extend(options, defaults);
|
||||||
this.interval = consts.DEFAULT_INTERVAL;
|
this.interval = consts.DEFAULT_INTERVAL;
|
||||||
|
|
||||||
@ -950,6 +928,7 @@ Tetris.prototype = {
|
|||||||
this.shapeQueue = [];
|
this.shapeQueue = [];
|
||||||
this.hintQueue = [];
|
this.hintQueue = [];
|
||||||
this.holdStack = [];
|
this.holdStack = [];
|
||||||
|
this.shape = shapes.getShape(0);
|
||||||
// gets set to false after mino has been popped from hold stack; set back to true on mino dropped
|
// gets set to false after mino has been popped from hold stack; set back to true on mino dropped
|
||||||
this.canPopFromHoldStack = false;
|
this.canPopFromHoldStack = false;
|
||||||
// manipulation counter for srs extended piece lockdown
|
// manipulation counter for srs extended piece lockdown
|
||||||
@ -1042,14 +1021,19 @@ Tetris.prototype = {
|
|||||||
if(besttime == "" || deltaTime/1000.0 < parseFloat(besttime)) {
|
if(besttime == "" || deltaTime/1000.0 < parseFloat(besttime)) {
|
||||||
document.getElementById("besttime").value = (deltaTime/1000.0).toString();
|
document.getElementById("besttime").value = (deltaTime/1000.0).toString();
|
||||||
}
|
}
|
||||||
this.isSequenceCompleted = true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.hintQueue = [];
|
this.hintQueue = [];
|
||||||
this.shapeQueue = [];
|
this.shapeQueue = [];
|
||||||
|
|
||||||
|
this.isSequenceCompleted = true;
|
||||||
// Recursion warning
|
// Recursion warning
|
||||||
this._restartHandler();
|
this._restartHandler();
|
||||||
|
// this.reset();
|
||||||
|
// this.start();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while(this.shapeQueue.length <= 4)
|
while(this.shapeQueue.length <= 4)
|
||||||
@ -1112,21 +1096,17 @@ Tetris.prototype = {
|
|||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// tick input data -- wont have better than 4-15ms resolution since javascript is single theaded and any ARR or DAS below 15ms will likely be broken
|
// tick input data -- wont have better than 4-15ms resolution since javascript is single theaded and any ARR or DAS below 15ms will likely be broken
|
||||||
_processTick: async function() {
|
_processTick: async function() {
|
||||||
|
|
||||||
|
|
||||||
//var deltaTime = (new Date()).getTime() - this.eventTimer.getTime();
|
|
||||||
//console.log("desync time: " + deltaTime);
|
|
||||||
|
|
||||||
|
|
||||||
if(this.isTimerOn) {
|
if(this.isTimerOn) {
|
||||||
var deltaPlayTime = new Date().getTime() - this.sequencePrevTime;
|
var deltaPlayTime = new Date().getTime() - this.sequencePrevTime;
|
||||||
document.getElementById("Time").value = (deltaPlayTime/1000).toString();
|
document.getElementById("Time").value = (deltaPlayTime/1000).toString();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Don't process game related events if game over
|
// Don't process game related events if game over
|
||||||
if(this.isGameOver) return;
|
if(this.isGameOver) return;
|
||||||
|
|
||||||
@ -1145,56 +1125,52 @@ Tetris.prototype = {
|
|||||||
// drain gamepad queue
|
// drain gamepad queue
|
||||||
// if( inputs.getTickCounter() > halfFrame) // 8 millisecons
|
// if( inputs.getTickCounter() > halfFrame) // 8 millisecons
|
||||||
// {
|
// {
|
||||||
while((inputs.gamepadQueue != undefined && inputs.gamepadQueue.length >= 1)){
|
while((inputs.gamepadQueue != undefined && inputs.gamepadQueue.length >= 1)){
|
||||||
var curkey = inputs.gamepadQueue.shift();
|
var curkey = inputs.gamepadQueue.shift();
|
||||||
if(curkey == "DPad-Left") {
|
if(inputs.settingsMap.get("Gamepad Left").includes(curkey)) {
|
||||||
this.shape.goLeft(this.matrix);
|
this.shape.goLeft(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
|
||||||
if(curkey == "DPad-Right") {
|
|
||||||
this.shape.goRight(this.matrix);
|
|
||||||
this.resetLockdown();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "A") {
|
|
||||||
this.rotationCounter++;
|
|
||||||
this.shape.rotate(this.matrix);
|
|
||||||
this.resetLockdown();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "B") {
|
|
||||||
this.rotationCounter++;
|
|
||||||
this.shape.rotateClockwise(this.matrix);
|
|
||||||
this.resetLockdown();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "DPad-Down") {
|
|
||||||
this.shape.goDown(this.matrix);
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "RB") {
|
|
||||||
this.shape.goBottom(this.matrix);
|
|
||||||
this.lockDownTimer = 5000;
|
|
||||||
this._update();
|
|
||||||
}
|
|
||||||
if(curkey == "LB") {
|
|
||||||
this.pushHoldStack();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "DPad-Up") {
|
|
||||||
this.popHoldStack();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "Back") {
|
|
||||||
this._restartHandler();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Right").includes(curkey)) {
|
||||||
inputs.gamepadQueue = [];
|
this.shape.goRight(this.matrix);
|
||||||
// }
|
this.resetLockdown();
|
||||||
//inputs.gamepadButtonClear();
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Rotateccw").includes(curkey)) {
|
||||||
|
this.shape.rotate(this.matrix);
|
||||||
|
this.resetLockdown();
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Rotate").includes(curkey)) {
|
||||||
|
this.shape.rotateClockwise(this.matrix);
|
||||||
|
this.resetLockdown();
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Down").includes(curkey)) {
|
||||||
|
this.shape.goDown(this.matrix);
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Harddrop").includes(curkey)) {
|
||||||
|
this.shape.goBottom(this.matrix);
|
||||||
|
this.lockDownTimer = 5000;
|
||||||
|
this._update();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Hold").includes(curkey)) {
|
||||||
|
this.pushHoldStack();
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Pophold").includes(curkey)) {
|
||||||
|
this.popHoldStack();
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Reset").includes(curkey)) {
|
||||||
|
this._restartHandler();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inputs.saveButtons();
|
||||||
|
inputs.gamepadClear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1204,54 +1180,51 @@ Tetris.prototype = {
|
|||||||
// Keyboard inputs
|
// Keyboard inputs
|
||||||
while((inputs.inputQueue != undefined && inputs.inputQueue.length >= 1)){
|
while((inputs.inputQueue != undefined && inputs.inputQueue.length >= 1)){
|
||||||
var curkey = inputs.inputQueue.shift();
|
var curkey = inputs.inputQueue.shift();
|
||||||
if(curkey == 37) {
|
if(inputs.settingsMap.get("Keyboard Left").includes(curkey)) {
|
||||||
this.debugTimer = new Date();
|
|
||||||
this.shape.goLeft(this.matrix);
|
this.shape.goLeft(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 39){
|
else if(inputs.settingsMap.get("Keyboard Right").includes(curkey)) {
|
||||||
this.shape.goRight(this.matrix);
|
this.shape.goRight(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 40) {
|
else if(inputs.settingsMap.get("Keyboard Down").includes(curkey)) {
|
||||||
|
|
||||||
this.shape.goDown(this.matrix);
|
this.shape.goDown(this.matrix);
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 90) {
|
else if(inputs.settingsMap.get("Keyboard Rotateccw").includes(curkey)) {
|
||||||
this.rotationCounter++;
|
|
||||||
this.shape.rotate(this.matrix);
|
this.shape.rotate(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 88){
|
else if(inputs.settingsMap.get("Keyboard Rotate").includes(curkey)) {
|
||||||
this.rotationCounter++;
|
|
||||||
this.shape.rotateClockwise(this.matrix);
|
this.shape.rotateClockwise(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 32) {
|
else if(inputs.settingsMap.get("Keyboard Harddrop").includes(curkey)) {
|
||||||
this.shape.goBottom(this.matrix);
|
this.shape.goBottom(this.matrix);
|
||||||
this.lockDownTimer = 5000;
|
this.lockDownTimer = 5000;
|
||||||
this._update();
|
this._update();
|
||||||
}
|
}
|
||||||
if(curkey == 16) {
|
else if(inputs.settingsMap.get("Keyboard Hold").includes(curkey)) {
|
||||||
this.pushHoldStack();
|
this.pushHoldStack();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 17 || curkey == 67) {
|
else if(inputs.settingsMap.get("Keyboard Pophold").includes(curkey)) {
|
||||||
this.popHoldStack();
|
this.popHoldStack();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 81) {
|
else if(inputs.settingsMap.get("Keyboard Hold").includes(curkey)) {
|
||||||
if(document.getElementById("divbg").style.display == "none")
|
if(document.getElementById("divbg").style.display == "none")
|
||||||
document.getElementById("divbg").style.display = "initial";
|
document.getElementById("divbg").style.display = "initial";
|
||||||
else
|
else
|
||||||
document.getElementById("divbg").style.display="none";
|
document.getElementById("divbg").style.display="none";
|
||||||
}
|
}
|
||||||
if(curkey == 82) {
|
if(inputs.settingsMap.get("Keyboard Reset").includes(curkey)) {
|
||||||
this._restartHandler();
|
this._restartHandler();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1387,7 +1360,8 @@ Tetris.prototype = {
|
|||||||
views.setLevel(this.level);
|
views.setLevel(this.level);
|
||||||
this.levelTime = currentTime;
|
this.levelTime = currentTime;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1539,6 +1513,17 @@ var openerGenerator = {
|
|||||||
shapes.getShape(2),
|
shapes.getShape(2),
|
||||||
shapes.getShape(5),
|
shapes.getShape(5),
|
||||||
shapes.getShape(3));
|
shapes.getShape(3));
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
// Pelican
|
||||||
|
this.shapeQueue = new Array(
|
||||||
|
shapes.getShape(5),
|
||||||
|
shapes.getShape(2),
|
||||||
|
shapes.getShape(4),
|
||||||
|
shapes.getShape(0),
|
||||||
|
shapes.getShape(6),
|
||||||
|
shapes.getShape(1),
|
||||||
|
shapes.getShape(3));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
@ -1567,6 +1552,8 @@ var openerGenerator = {
|
|||||||
|
|
||||||
switch(opener) {
|
switch(opener) {
|
||||||
case 0:
|
case 0:
|
||||||
|
this.hintQueue = [];
|
||||||
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
// Fonzie Variation
|
// Fonzie Variation
|
||||||
this.hintQueue = new Array(
|
this.hintQueue = new Array(
|
||||||
@ -1766,6 +1753,25 @@ var openerGenerator = {
|
|||||||
this.hintQueue[i].state = this.hintQueue[i].nextState(hintDataList[i * 3 + 2]);
|
this.hintQueue[i].state = this.hintQueue[i].nextState(hintDataList[i * 3 + 2]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 9:
|
||||||
|
// Pelican
|
||||||
|
this.hintQueue = new Array(
|
||||||
|
shapes.getShape(5),
|
||||||
|
shapes.getShape(2),
|
||||||
|
shapes.getShape(4),
|
||||||
|
shapes.getShape(0),
|
||||||
|
shapes.getShape(6),
|
||||||
|
shapes.getShape(1),
|
||||||
|
shapes.getShape(3));
|
||||||
|
|
||||||
|
var hintDataList = [0,17,-1, 1,16,2, 5,18,0, 5,16,-1, 8,16,-1, 5,17,0, 3,16,2];
|
||||||
|
|
||||||
|
for(var i = 0; i < this.hintQueue.length; i++) {
|
||||||
|
this.hintQueue[i].x = hintDataList[i * 3];
|
||||||
|
this.hintQueue[i].y = hintDataList[i * 3 + 1];
|
||||||
|
this.hintQueue[i].state = this.hintQueue[i].nextState(hintDataList[i * 3 + 2]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
43
index.html
43
index.html
@ -39,28 +39,28 @@
|
|||||||
|
|
||||||
<div id="divbg">
|
<div id="divbg">
|
||||||
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/4lBGDh?gui=true&t=10&paused=true&muted=false" allowfullscreen></iframe> -->
|
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/4lBGDh?gui=true&t=10&paused=true&muted=false" allowfullscreen></iframe> -->
|
||||||
|
|
||||||
<!-- <iframe width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/3tXBWj?gui=true&t=10&paused=true&muted=false" allowfullscreen></iframe> -->
|
<!-- <iframe width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/3tXBWj?gui=true&t=10&paused=true&muted=false" allowfullscreen></iframe> -->
|
||||||
|
|
||||||
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/Xlf3Rj?gui=true&t=10&paused=false&muted=false" allowfullscreen></iframe> -->
|
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/Xlf3Rj?gui=true&t=10&paused=false&muted=false" allowfullscreen></iframe> -->
|
||||||
|
|
||||||
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/tdjyzz?gui=true&t=10&paused=false&muted=false" allowfullscreen></iframe> -->
|
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/tdjyzz?gui=true&t=10&paused=false&muted=false" allowfullscreen></iframe> -->
|
||||||
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/3lVfDm?gui=true&t=10&paused=true&muted=false" allowfullscreen></iframe> -->
|
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/3lVfDm?gui=true&t=10&paused=true&muted=false" allowfullscreen></iframe> -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/WldfWX?gui=&paused=false&muted=false" ></iframe>
|
|
||||||
|
|
||||||
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/MlSSRt?gui=&paused=false&muted=false" allowfullscreen></iframe> -->
|
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/MlSSRt?gui=&paused=false&muted=false" allowfullscreen></iframe> -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/3sy3Wy?gui=true&t=10&paused=false&muted=false" ></iframe> -->
|
<!-- <iframe id="bg" width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/3sy3Wy?gui=true&t=10&paused=false&muted=false" ></iframe> -->
|
||||||
|
|
||||||
|
<iframe id="bg" width="640" height="360" frameborder="0" src="" ></iframe>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
if( (Math.floor(Math.random() * Math.floor(10)) % 10) == 0) {
|
||||||
|
document.getElementById("bg").src="https://www.shadertoy.com/embed/MlSSRt?gui=&paused=false&muted=false";
|
||||||
|
document.getElementById("bg").style.webkitFilter = "blur(4px)";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
document.getElementById("bg").src="https://www.shadertoy.com/embed/WldfWX?gui=&paused=false&muted=false";
|
||||||
|
|
||||||
document.getElementById("bg").width = window.innerWidth;
|
document.getElementById("bg").width = window.innerWidth;
|
||||||
document.getElementById("bg").height = window.innerHeight;
|
document.getElementById("bg").height = window.innerHeight;
|
||||||
|
|
||||||
|
|
||||||
document.getElementById("bg").removeAttribute("tabIndex");
|
document.getElementById("bg").removeAttribute("tabIndex");
|
||||||
document.getElementById("divbg").removeAttribute("tabIndex");
|
document.getElementById("divbg").removeAttribute("tabIndex");
|
||||||
</script>
|
</script>
|
||||||
@ -124,7 +124,6 @@ document.getElementById("divbg").removeAttribute("tabIndex");
|
|||||||
<li style="font-size:12px;padding-left:1em;"><a href="#" id="setLnJVar">Neither L nor J </a></li>
|
<li style="font-size:12px;padding-left:1em;"><a href="#" id="setLnJVar">Neither L nor J </a></li>
|
||||||
<li style="font-size:12px;padding-left:1em;"><a href="#" id="setLaJVar">Both L and J </a></li>
|
<li style="font-size:12px;padding-left:1em;"><a href="#" id="setLaJVar">Both L and J </a></li>
|
||||||
<li style="font-size:12px;padding-left:1em;"><a href="#" id="setPCTPieceVar">T piece </a></li>
|
<li style="font-size:12px;padding-left:1em;"><a href="#" id="setPCTPieceVar">T piece </a></li>
|
||||||
<li style="font-size:12px;padding-left:1em;"><a href="#" id="setSAVar">see also </a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
@ -133,11 +132,11 @@ document.getElementById("divbg").removeAttribute("tabIndex");
|
|||||||
<canvas style="border: 1px solid #6666;" id="hold"></canvas>
|
<canvas style="border: 1px solid #6666;" id="hold"></canvas>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
<input style="padding-left:12px;text-decoration:underline;overflow:visible;font-size:12px;background:rgba(40,40,40,0);color:dodgerblue;border:1px solid #6666;text-align:left;" type="button" id="Timer" value="Timer Off"/>
|
<input style="padding-left:12px;text-decoration:underline;overflow:visible;font-size:12px;background:rgba(40,40,40,.5);color:powderblue;border:1px solid #6666;text-align:left;" type="button" id="Timer" value="Timer Off"/>
|
||||||
<input disabled=true style="padding:1px;overflow:visible;width:70px;font-size:12px;background:rgba(40,40,40,0);color:dodgerblue;border:1px solid #6666;text-align:left;" type="text" id="Time" value=""/>
|
<input disabled=true style="padding:1px;overflow:visible;width:70px;font-size:12px;background:rgba(40,40,40,.5);color:dodgerblue;border:1px solid #6666;text-align:left;" type="text" id="Time" value=""/>
|
||||||
|
|
||||||
<input disabled=true style="overflow:visible;width:63px;font-size:12px;background:rgba(40,40,40,0);color:dodgerblue;border:1px solid #6666;text-align:left;" type="text" id="besttimetext" value="Best Time:"/>
|
<input disabled=true style="overflow:visible;width:63px;font-size:12px;background:rgba(40,40,40,.5);color:dodgerblue;border:1px solid #6666;text-align:left;" type="text" id="besttimetext" value="Best Time:"/>
|
||||||
<input disabled=true style="overflow:visible;width:68px;font-size:12px;background:rgba(40,40,40,0);color:dodgerblue;border:1px solid #6666;text-align:left;" type="text" id="besttime" value=""/>
|
<input disabled=true style="overflow:visible;width:68px;font-size:12px;background:rgba(40,40,40,.5);color:dodgerblue;border:1px solid #6666;text-align:left;" type="text" id="besttime" value=""/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="gameOver">
|
<div id="gameOver">
|
||||||
@ -155,14 +154,14 @@ document.getElementById("divbg").removeAttribute("tabIndex");
|
|||||||
<canvas style="border: 1px solid #6666;" id="preview"></canvas>
|
<canvas style="border: 1px solid #6666;" id="preview"></canvas>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<select style="width:80px;font-size:13px;background:rgba(40,40,40,0);color:dodgerblue;border: 1px solid #6666;text-align:left;" id="settings" name="setting">
|
<select style="width:80px;font-size:13px;background:rgba(40,40,40,.5);color:dodgerblue;border: 1px solid #6666;text-align:left;" id="settings" name="setting">
|
||||||
<option selected="">Settings:</option>
|
<option selected="">Settings:</option>
|
||||||
</select>
|
</select>
|
||||||
<input style="width:50px;font-size:13px;background:rgba(40,40,40,0);color:dodgerblue;border:1px solid #6666;text-align:left;" type="text" id="setting_value">
|
<input style="width:50px;font-size:13px;background:rgba(40,40,40,.5);color:dodgerblue;border:1px solid #6666;text-align:left;" type="text" id="setting_value">
|
||||||
<input style="width:45px;font-size:12px;background:rgba(40,40,40,0);color:dodgerblue;border:1px solid #6666;text-align:left;" id="submitsetting" type="submit" value="Set"></input>
|
<input style="width:45px;font-size:12px;background:rgba(40,40,40,.5);color:dodgerblue;border:1px solid #6666;text-align:left;" id="submitsetting" type="submit" value="Set"></input>
|
||||||
<br>
|
<br>
|
||||||
<input style="width:70px;font-size:12px;background:rgba(40,40,40,0);color:dodgerblue;border:1px solid #6666;text-align:left;" id="test" type="submit" value="Hide Hints"></input>
|
<input style="width:70px;font-size:12px;background:rgba(40,40,40,.5);color:dodgerblue;border:1px solid #6666;text-align:left;" id="test" type="submit" value="Hide Hints"></input>
|
||||||
<input style="width:110px;font-size:12px;background:rgba(40,40,40,0);color:dodgerblue;border:1px solid #6666;text-align:left;" id="enablegamepad" type="button" value="Enable Gamepad"/>
|
<input style="width:110px;font-size:12px;background:rgba(40,40,40,.5);color:dodgerblue;border:1px solid #6666;text-align:left;" id="enablegamepad" type="button" value="Enable Gamepad"/>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -185,6 +184,8 @@ document.getElementById("divbg").removeAttribute("tabIndex");
|
|||||||
document.getElementById("setHachispinVar").addEventListener("click", function() { tetrion.setCurrentOpener(6); } );
|
document.getElementById("setHachispinVar").addEventListener("click", function() { tetrion.setCurrentOpener(6); } );
|
||||||
document.getElementById("setAlbatrossVar").addEventListener("click", function() { tetrion.setCurrentOpener(7); } );
|
document.getElementById("setAlbatrossVar").addEventListener("click", function() { tetrion.setCurrentOpener(7); } );
|
||||||
document.getElementById("setNumberOneVar").addEventListener("click", function() { tetrion.setCurrentOpener(8); } );
|
document.getElementById("setNumberOneVar").addEventListener("click", function() { tetrion.setCurrentOpener(8); } );
|
||||||
|
document.getElementById("setPelicanVar").addEventListener("click", function() { tetrion.setCurrentOpener(9); } );
|
||||||
|
|
||||||
|
|
||||||
document.getElementById("enablegamepad").addEventListener("click", function() { tetrion.toggleGamepad(); } );
|
document.getElementById("enablegamepad").addEventListener("click", function() { tetrion.toggleGamepad(); } );
|
||||||
|
|
||||||
@ -193,6 +194,8 @@ document.getElementById("divbg").removeAttribute("tabIndex");
|
|||||||
document.getElementById("test").addEventListener("click", function() { tetrion.setDoTest(); } );
|
document.getElementById("test").addEventListener("click", function() { tetrion.setDoTest(); } );
|
||||||
document.getElementById("settings").addEventListener("change", function() { tetrion.updateSettingTextBox(); } );
|
document.getElementById("settings").addEventListener("change", function() { tetrion.updateSettingTextBox(); } );
|
||||||
document.getElementById("submitsetting").addEventListener("click", function() { tetrion.setSettings(); } );
|
document.getElementById("submitsetting").addEventListener("click", function() { tetrion.setSettings(); } );
|
||||||
|
|
||||||
|
|
||||||
tetrion.start();
|
tetrion.start();
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
92
src/input.js
92
src/input.js
@ -4,12 +4,16 @@ var utils = require('./utils.js');
|
|||||||
|
|
||||||
var UserInputs = {
|
var UserInputs = {
|
||||||
init() {
|
init() {
|
||||||
|
|
||||||
|
this.settingsList = this.keyboardKeySettings.concat(this.keyboardShiftEvents.concat(this.keyboardKeyEvents.concat(this.gamepadSettings.concat(this.gamepadShiftEvents.concat(this.gamepadButtonEvents)))));
|
||||||
|
//;["Soft Drop Rate [1 - 100]"].concat(this.keyboardSettings.concat(this.gamepadSettings));
|
||||||
this.gamepadShiftTimer = new Date();
|
this.gamepadShiftTimer = new Date();
|
||||||
this.gamepadButtonTimer = new Date();
|
this.gamepadButtonTimer = new Date();
|
||||||
this.keyboardKeyTimer = new Date();
|
this.keyboardKeyTimer = new Date();
|
||||||
this.keyboardShiftTimer = new Date();
|
this.keyboardShiftTimer = new Date();
|
||||||
this.settingsMap = new Map();
|
this.settingsMap = new Map();
|
||||||
|
this.gamepadEventMap = new Map();
|
||||||
|
///this.gamepadEventMap = new Map();
|
||||||
// var init = utils.getCookie("init");
|
// var init = utils.getCookie("init");
|
||||||
// if(init == "")
|
// if(init == "")
|
||||||
for(var i in this.settingsList)
|
for(var i in this.settingsList)
|
||||||
@ -21,6 +25,15 @@ var UserInputs = {
|
|||||||
for(var i in this.settingsList)
|
for(var i in this.settingsList)
|
||||||
this.settingsMap.set(this.settingsList[i], this.settingsDefault[i]);
|
this.settingsMap.set(this.settingsList[i], this.settingsDefault[i]);
|
||||||
|
|
||||||
|
|
||||||
|
this.gamepadEvents = this.gamepadShiftEvents.concat(this.gameButtonsEvents);
|
||||||
|
|
||||||
|
var mapIdx = [14, 7, 13, 5, 4, 1, 2, 12, 8, 3];
|
||||||
|
for(var i in mapIdx) {
|
||||||
|
this.gamepadEventMap.set(this.gamepadEvents[i], gamepad.buttons[mapIdx[i]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
document.addEventListener('keydown', this.keyDown.bind(this));
|
document.addEventListener('keydown', this.keyDown.bind(this));
|
||||||
document.addEventListener('keyup', this.keyUp.bind(this));
|
document.addEventListener('keyup', this.keyUp.bind(this));
|
||||||
},
|
},
|
||||||
@ -31,25 +44,11 @@ var UserInputs = {
|
|||||||
gamepadEnabled() {
|
gamepadEnabled() {
|
||||||
return gamepad.controller || false;
|
return gamepad.controller || false;
|
||||||
},
|
},
|
||||||
|
|
||||||
processGamepadInput() {
|
processGamepadInput() {
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Harddrop")); // hard drop
|
this.gamepadButtonEvents.forEach(gamepadButton => this.gamepadButtonsDown(this.settingsMap.get(gamepadButton)));
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Hold")); // hold
|
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Rotateccw")); // rotate counter
|
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Rotate")); // rotate cwise
|
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Pophold")); // Pop hold stack
|
|
||||||
this.gamepadButtonsDown(this.settingsMap.get("Gamepad Reset")); // reset
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
processGamepadDPad() {
|
processGamepadDPad() {
|
||||||
this.gamepadDPadDown(this.settingsMap.get("Gamepad Left")); // shift left
|
this.gamepadShiftEvents.forEach(dpadButton => this.gamepadDPadDown(this.settingsMap.get(dpadButton)));
|
||||||
this.gamepadDPadDown(this.settingsMap.get("Gamepad Right")); // shift right
|
|
||||||
this.gamepadDPadDown(this.settingsMap.get("Gamepad Down")); // down
|
|
||||||
|
|
||||||
return;
|
|
||||||
},
|
},
|
||||||
// Single press gamepad buttons
|
// Single press gamepad buttons
|
||||||
gamepadButtonsDown(finds) {
|
gamepadButtonsDown(finds) {
|
||||||
@ -88,6 +87,7 @@ var UserInputs = {
|
|||||||
gamepadDPadDown(finds) {
|
gamepadDPadDown(finds) {
|
||||||
var DAS = parseInt(this.settingsMap.get("Gamepad DAS"));
|
var DAS = parseInt(this.settingsMap.get("Gamepad DAS"));
|
||||||
var ARR = parseInt(this.settingsMap.get("Gamepad ARR"));
|
var ARR = parseInt(this.settingsMap.get("Gamepad ARR"));
|
||||||
|
|
||||||
var isContained = this.gpButtons.includes(finds);
|
var isContained = this.gpButtons.includes(finds);
|
||||||
var isPrevContained = this.prevGpButtons.includes(finds);
|
var isPrevContained = this.prevGpButtons.includes(finds);
|
||||||
|
|
||||||
@ -114,20 +114,11 @@ var UserInputs = {
|
|||||||
this.gamepadShiftTimer = new Date();
|
this.gamepadShiftTimer = new Date();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
// doing a lot of back and forth between strings and integers to represtent the same thing -- todo: fix
|
|
||||||
processKeys() {
|
processKeys() {
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Harddrop")));
|
this.keyboardKeyEvents.forEach( key => this.settingsMap.get(key).split(',').forEach( idx => this.processKeyDown( parseInt(idx) ) ) );
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Rotate")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Rotateccw")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Hold")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Pophold")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Background")));
|
|
||||||
this.processKeyDown(parseInt(this.settingsMap.get("Keyboard Reset")));
|
|
||||||
//this.processKeyDown(this.settingsMap.get("Keyboard hold"))); // c - pop hold stack
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// keyboard keys z,x,space
|
// keyboard keys z,x,space
|
||||||
@ -159,15 +150,10 @@ var UserInputs = {
|
|||||||
this.keyboardKeyTimer = new Date();
|
this.keyboardKeyTimer = new Date();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
// Process applicable key inputs
|
// Process applicable key inputs
|
||||||
processKeyShift() {
|
processKeyShift() {
|
||||||
this.processKeyboardArrowKeys(parseInt(this.settingsMap.get("Keyboard Left")));
|
this.keyboardShiftEvents.forEach(arrowKey => arrowKey.split(',').forEach(option => this.processKeyboardArrowKeys(parseInt(this.settingsMap.get(option)))));
|
||||||
this.processKeyboardArrowKeys(parseInt(this.settingsMap.get("Keyboard Right")));
|
|
||||||
this.processKeyboardArrowKeys(parseInt(this.settingsMap.get("Keyboard Down")));
|
|
||||||
},
|
},
|
||||||
// Direction arrows
|
// Direction arrows
|
||||||
processKeyboardArrowKeys(key) {
|
processKeyboardArrowKeys(key) {
|
||||||
@ -213,11 +199,9 @@ var UserInputs = {
|
|||||||
this.keyboardKeys[event.keyCode] = false;
|
this.keyboardKeys[event.keyCode] = false;
|
||||||
this.isKeyBoardKeyDown = false;
|
this.isKeyBoardKeyDown = false;
|
||||||
},
|
},
|
||||||
gamepadButtonClear() {
|
gamepadClear() {
|
||||||
gpButtons = [];
|
//this.gpButtons = [];
|
||||||
isGamepadDown = false;
|
//this.gamepadQueue = [];
|
||||||
isGamepadButtonDown = false;
|
|
||||||
gamepadQueue = [];
|
|
||||||
},
|
},
|
||||||
saveButtons() {
|
saveButtons() {
|
||||||
this.prevGpButtons = this.gpButtons;
|
this.prevGpButtons = this.gpButtons;
|
||||||
@ -242,25 +226,23 @@ var UserInputs = {
|
|||||||
inputQueue: [],
|
inputQueue: [],
|
||||||
gamepadQueue: [],
|
gamepadQueue: [],
|
||||||
|
|
||||||
settingsList: ["Soft Drop Rate [1 - 100]",
|
keyboardKeySettings: ["Keyboard DAS", "Keyboard ARR"],
|
||||||
"Keyboard DAS", "Keyboard ARR", "Keyboard Harddrop", "Keyboard Hold",
|
keyboardShiftEvents: ["Keyboard Left", "Keyboard Right", "Keyboard Down"],
|
||||||
"Keyboard Left", "Keyboard Right", "Keyboard Rotateccw", "Keyboard Rotate",
|
keyboardKeyEvents: ["Keyboard Harddrop", "Keyboard Hold", "Keyboard Rotateccw", "Keyboard Rotate", "Keyboard Pophold", "Keyboard Reset", "Keyboard Background"],
|
||||||
"Keyboard Down", "Keyboard Pophold", "Keyboard Reset", "Keyboard Background",
|
|
||||||
|
|
||||||
"Gamepad DAS", "Gamepad ARR", "Gamepad Harddrop", "Gamepad Hold",
|
gamepadSettings: ["Gamepad DAS", "Gamepad ARR"],
|
||||||
"Gamepad Left", "Gamepad Right", "Gamepad Rotateccw", "Gamepad Rotate",
|
gamepadShiftEvents: ["Gamepad Left", "Gamepad Right","Gamepad Down"],
|
||||||
"Gamepad Down","Gamepad Pophold", "Gamepad Reset", "Gamepad Background",
|
gamepadButtonEvents: ["Gamepad Harddrop", "Gamepad Hold", "Gamepad Rotateccw", "Gamepad Rotate", "Gamepad Pophold", "Gamepad Reset", "Gamepad Background"],
|
||||||
"path", "High Score"],
|
|
||||||
|
|
||||||
settingsDefault: ["70",
|
settingsList: [],
|
||||||
"167.0", "33.0", "32", "16",
|
|
||||||
"37", "39", "90", "88",
|
|
||||||
"40", "17", "82", "81",
|
|
||||||
|
|
||||||
"167.0", "33.0", "RB", "LB",
|
settingsDefault: [ "167.0", "33.0",
|
||||||
"DPad-Left", "DPad-Right", "A", "B",
|
"37", "39", "40",
|
||||||
"DPad-Down", "DPad-Up", "Back", "",
|
"32", "16", "90", "88,38", "17", "82", "81",
|
||||||
"=/",""],
|
|
||||||
|
"167.0", "33.0",
|
||||||
|
"DPad-Left", "DPad-Right", "DPad-Down",
|
||||||
|
"RB", "LB", "A", "B", "DPad-Up", "Back", ""],
|
||||||
settingsMap: []
|
settingsMap: []
|
||||||
};
|
};
|
||||||
|
|
||||||
|
138
src/main.js
138
src/main.js
@ -146,11 +146,7 @@ function Tetris(id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Tetris.prototype = {
|
Tetris.prototype = {
|
||||||
|
|
||||||
init: function(options) {
|
init: function(options) {
|
||||||
|
|
||||||
// this gameStates = {"
|
|
||||||
// this.state =
|
|
||||||
var cfg = this.config = utils.extend(options, defaults);
|
var cfg = this.config = utils.extend(options, defaults);
|
||||||
this.interval = consts.DEFAULT_INTERVAL;
|
this.interval = consts.DEFAULT_INTERVAL;
|
||||||
|
|
||||||
@ -257,6 +253,7 @@ Tetris.prototype = {
|
|||||||
this.shapeQueue = [];
|
this.shapeQueue = [];
|
||||||
this.hintQueue = [];
|
this.hintQueue = [];
|
||||||
this.holdStack = [];
|
this.holdStack = [];
|
||||||
|
this.shape = shapes.getShape(0);
|
||||||
// gets set to false after mino has been popped from hold stack; set back to true on mino dropped
|
// gets set to false after mino has been popped from hold stack; set back to true on mino dropped
|
||||||
this.canPopFromHoldStack = false;
|
this.canPopFromHoldStack = false;
|
||||||
// manipulation counter for srs extended piece lockdown
|
// manipulation counter for srs extended piece lockdown
|
||||||
@ -349,14 +346,19 @@ Tetris.prototype = {
|
|||||||
if(besttime == "" || deltaTime/1000.0 < parseFloat(besttime)) {
|
if(besttime == "" || deltaTime/1000.0 < parseFloat(besttime)) {
|
||||||
document.getElementById("besttime").value = (deltaTime/1000.0).toString();
|
document.getElementById("besttime").value = (deltaTime/1000.0).toString();
|
||||||
}
|
}
|
||||||
this.isSequenceCompleted = true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.hintQueue = [];
|
this.hintQueue = [];
|
||||||
this.shapeQueue = [];
|
this.shapeQueue = [];
|
||||||
|
|
||||||
|
this.isSequenceCompleted = true;
|
||||||
// Recursion warning
|
// Recursion warning
|
||||||
this._restartHandler();
|
this._restartHandler();
|
||||||
|
// this.reset();
|
||||||
|
// this.start();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while(this.shapeQueue.length <= 4)
|
while(this.shapeQueue.length <= 4)
|
||||||
@ -419,21 +421,17 @@ Tetris.prototype = {
|
|||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// tick input data -- wont have better than 4-15ms resolution since javascript is single theaded and any ARR or DAS below 15ms will likely be broken
|
// tick input data -- wont have better than 4-15ms resolution since javascript is single theaded and any ARR or DAS below 15ms will likely be broken
|
||||||
_processTick: async function() {
|
_processTick: async function() {
|
||||||
|
|
||||||
|
|
||||||
//var deltaTime = (new Date()).getTime() - this.eventTimer.getTime();
|
|
||||||
//console.log("desync time: " + deltaTime);
|
|
||||||
|
|
||||||
|
|
||||||
if(this.isTimerOn) {
|
if(this.isTimerOn) {
|
||||||
var deltaPlayTime = new Date().getTime() - this.sequencePrevTime;
|
var deltaPlayTime = new Date().getTime() - this.sequencePrevTime;
|
||||||
document.getElementById("Time").value = (deltaPlayTime/1000).toString();
|
document.getElementById("Time").value = (deltaPlayTime/1000).toString();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Don't process game related events if game over
|
// Don't process game related events if game over
|
||||||
if(this.isGameOver) return;
|
if(this.isGameOver) return;
|
||||||
|
|
||||||
@ -452,56 +450,52 @@ Tetris.prototype = {
|
|||||||
// drain gamepad queue
|
// drain gamepad queue
|
||||||
// if( inputs.getTickCounter() > halfFrame) // 8 millisecons
|
// if( inputs.getTickCounter() > halfFrame) // 8 millisecons
|
||||||
// {
|
// {
|
||||||
while((inputs.gamepadQueue != undefined && inputs.gamepadQueue.length >= 1)){
|
while((inputs.gamepadQueue != undefined && inputs.gamepadQueue.length >= 1)){
|
||||||
var curkey = inputs.gamepadQueue.shift();
|
var curkey = inputs.gamepadQueue.shift();
|
||||||
if(curkey == "DPad-Left") {
|
if(inputs.settingsMap.get("Gamepad Left").includes(curkey)) {
|
||||||
this.shape.goLeft(this.matrix);
|
this.shape.goLeft(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
|
||||||
if(curkey == "DPad-Right") {
|
|
||||||
this.shape.goRight(this.matrix);
|
|
||||||
this.resetLockdown();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "A") {
|
|
||||||
this.rotationCounter++;
|
|
||||||
this.shape.rotate(this.matrix);
|
|
||||||
this.resetLockdown();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "B") {
|
|
||||||
this.rotationCounter++;
|
|
||||||
this.shape.rotateClockwise(this.matrix);
|
|
||||||
this.resetLockdown();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "DPad-Down") {
|
|
||||||
this.shape.goDown(this.matrix);
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "RB") {
|
|
||||||
this.shape.goBottom(this.matrix);
|
|
||||||
this.lockDownTimer = 5000;
|
|
||||||
this._update();
|
|
||||||
}
|
|
||||||
if(curkey == "LB") {
|
|
||||||
this.pushHoldStack();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "DPad-Up") {
|
|
||||||
this.popHoldStack();
|
|
||||||
this._draw();
|
|
||||||
}
|
|
||||||
if(curkey == "Back") {
|
|
||||||
this._restartHandler();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Right").includes(curkey)) {
|
||||||
inputs.gamepadQueue = [];
|
this.shape.goRight(this.matrix);
|
||||||
// }
|
this.resetLockdown();
|
||||||
//inputs.gamepadButtonClear();
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Rotateccw").includes(curkey)) {
|
||||||
|
this.shape.rotate(this.matrix);
|
||||||
|
this.resetLockdown();
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Rotate").includes(curkey)) {
|
||||||
|
this.shape.rotateClockwise(this.matrix);
|
||||||
|
this.resetLockdown();
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Down").includes(curkey)) {
|
||||||
|
this.shape.goDown(this.matrix);
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Harddrop").includes(curkey)) {
|
||||||
|
this.shape.goBottom(this.matrix);
|
||||||
|
this.lockDownTimer = 5000;
|
||||||
|
this._update();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Hold").includes(curkey)) {
|
||||||
|
this.pushHoldStack();
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Pophold").includes(curkey)) {
|
||||||
|
this.popHoldStack();
|
||||||
|
this._draw();
|
||||||
|
}
|
||||||
|
else if(inputs.settingsMap.get("Gamepad Reset").includes(curkey)) {
|
||||||
|
this._restartHandler();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inputs.saveButtons();
|
||||||
|
inputs.gamepadClear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -511,54 +505,51 @@ Tetris.prototype = {
|
|||||||
// Keyboard inputs
|
// Keyboard inputs
|
||||||
while((inputs.inputQueue != undefined && inputs.inputQueue.length >= 1)){
|
while((inputs.inputQueue != undefined && inputs.inputQueue.length >= 1)){
|
||||||
var curkey = inputs.inputQueue.shift();
|
var curkey = inputs.inputQueue.shift();
|
||||||
if(curkey == 37) {
|
if(inputs.settingsMap.get("Keyboard Left").includes(curkey)) {
|
||||||
this.debugTimer = new Date();
|
|
||||||
this.shape.goLeft(this.matrix);
|
this.shape.goLeft(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 39){
|
else if(inputs.settingsMap.get("Keyboard Right").includes(curkey)) {
|
||||||
this.shape.goRight(this.matrix);
|
this.shape.goRight(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 40) {
|
else if(inputs.settingsMap.get("Keyboard Down").includes(curkey)) {
|
||||||
|
|
||||||
this.shape.goDown(this.matrix);
|
this.shape.goDown(this.matrix);
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 90) {
|
else if(inputs.settingsMap.get("Keyboard Rotateccw").includes(curkey)) {
|
||||||
this.rotationCounter++;
|
|
||||||
this.shape.rotate(this.matrix);
|
this.shape.rotate(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 88){
|
else if(inputs.settingsMap.get("Keyboard Rotate").includes(curkey)) {
|
||||||
this.rotationCounter++;
|
|
||||||
this.shape.rotateClockwise(this.matrix);
|
this.shape.rotateClockwise(this.matrix);
|
||||||
this.resetLockdown();
|
this.resetLockdown();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 32) {
|
else if(inputs.settingsMap.get("Keyboard Harddrop").includes(curkey)) {
|
||||||
this.shape.goBottom(this.matrix);
|
this.shape.goBottom(this.matrix);
|
||||||
this.lockDownTimer = 5000;
|
this.lockDownTimer = 5000;
|
||||||
this._update();
|
this._update();
|
||||||
}
|
}
|
||||||
if(curkey == 16) {
|
else if(inputs.settingsMap.get("Keyboard Hold").includes(curkey)) {
|
||||||
this.pushHoldStack();
|
this.pushHoldStack();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 17 || curkey == 67) {
|
else if(inputs.settingsMap.get("Keyboard Pophold").includes(curkey)) {
|
||||||
this.popHoldStack();
|
this.popHoldStack();
|
||||||
this._draw();
|
this._draw();
|
||||||
}
|
}
|
||||||
if(curkey == 81) {
|
else if(inputs.settingsMap.get("Keyboard Hold").includes(curkey)) {
|
||||||
if(document.getElementById("divbg").style.display == "none")
|
if(document.getElementById("divbg").style.display == "none")
|
||||||
document.getElementById("divbg").style.display = "initial";
|
document.getElementById("divbg").style.display = "initial";
|
||||||
else
|
else
|
||||||
document.getElementById("divbg").style.display="none";
|
document.getElementById("divbg").style.display="none";
|
||||||
}
|
}
|
||||||
if(curkey == 82) {
|
if(inputs.settingsMap.get("Keyboard Reset").includes(curkey)) {
|
||||||
this._restartHandler();
|
this._restartHandler();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -694,7 +685,8 @@ Tetris.prototype = {
|
|||||||
views.setLevel(this.level);
|
views.setLevel(this.level);
|
||||||
this.levelTime = currentTime;
|
this.levelTime = currentTime;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,6 +143,17 @@ var openerGenerator = {
|
|||||||
shapes.getShape(2),
|
shapes.getShape(2),
|
||||||
shapes.getShape(5),
|
shapes.getShape(5),
|
||||||
shapes.getShape(3));
|
shapes.getShape(3));
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
// Pelican
|
||||||
|
this.shapeQueue = new Array(
|
||||||
|
shapes.getShape(5),
|
||||||
|
shapes.getShape(2),
|
||||||
|
shapes.getShape(4),
|
||||||
|
shapes.getShape(0),
|
||||||
|
shapes.getShape(6),
|
||||||
|
shapes.getShape(1),
|
||||||
|
shapes.getShape(3));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
@ -171,6 +182,8 @@ var openerGenerator = {
|
|||||||
|
|
||||||
switch(opener) {
|
switch(opener) {
|
||||||
case 0:
|
case 0:
|
||||||
|
this.hintQueue = [];
|
||||||
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
// Fonzie Variation
|
// Fonzie Variation
|
||||||
this.hintQueue = new Array(
|
this.hintQueue = new Array(
|
||||||
@ -370,6 +383,25 @@ var openerGenerator = {
|
|||||||
this.hintQueue[i].state = this.hintQueue[i].nextState(hintDataList[i * 3 + 2]);
|
this.hintQueue[i].state = this.hintQueue[i].nextState(hintDataList[i * 3 + 2]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 9:
|
||||||
|
// Pelican
|
||||||
|
this.hintQueue = new Array(
|
||||||
|
shapes.getShape(5),
|
||||||
|
shapes.getShape(2),
|
||||||
|
shapes.getShape(4),
|
||||||
|
shapes.getShape(0),
|
||||||
|
shapes.getShape(6),
|
||||||
|
shapes.getShape(1),
|
||||||
|
shapes.getShape(3));
|
||||||
|
|
||||||
|
var hintDataList = [0,17,-1, 1,16,2, 5,18,0, 5,16,-1, 8,16,-1, 5,17,0, 3,16,2];
|
||||||
|
|
||||||
|
for(var i = 0; i < this.hintQueue.length; i++) {
|
||||||
|
this.hintQueue[i].x = hintDataList[i * 3];
|
||||||
|
this.hintQueue[i].y = hintDataList[i * 3 + 1];
|
||||||
|
this.hintQueue[i].state = this.hintQueue[i].nextState(hintDataList[i * 3 + 2]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ var sequence = {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
var sequences = {
|
var sequences = {
|
||||||
this.sequenceList = [];
|
this.sequenceList = [];
|
||||||
this.currentMino = [];
|
this.currentMino = [];
|
||||||
@ -63,6 +64,7 @@ var sequences = {
|
|||||||
sequenceList = [];
|
sequenceList = [];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
function getNextMino() {
|
function getNextMino() {
|
||||||
currentSequence.popMino();
|
currentSequence.popMino();
|
||||||
|
Loading…
Reference in New Issue
Block a user