policychanges/src/openers.js

541 lines
14 KiB
JavaScript
Raw Normal View History

2021-02-12 19:02:01 -06:00
var shapes = require("./shapes.js");
2021-03-13 06:34:58 -06:00
var utils = require("./utils.js");
2021-02-24 13:43:52 -06:00
// import * as shapes from './shapes.js';
2021-02-12 19:02:01 -06:00
2021-02-26 08:22:16 -06:00
// https://harddrop.com/wiki/Opener
// https://four.lol/
2021-03-01 13:41:00 -06:00
var openerGenerator = {
2021-02-12 19:02:01 -06:00
shapeQueue: [],
hintQueue: [],
idx: 0,
2021-02-12 22:44:49 -06:00
hintIdx: 0,
2021-02-12 19:02:01 -06:00
isInit: 0,
isHintInit: 0,
2021-03-13 09:08:46 -06:00
customShapeQueue: [],
customHintQueue: [],
2021-02-26 08:22:16 -06:00
// O - 1, I - 6, L - 0, S - 5, J - 4, Z - 2, T - 3
// Current Tetriminos
init(opener) {
2021-02-12 19:02:01 -06:00
if(!this.isInit || this.shapeQueue == undefined) {
switch(opener) {
case 0:
case 1:
// Fonzie Variation
this.shapeQueue = new Array(
shapes.getShape(0),
shapes.getShape(6),
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(2),
shapes.getShape(4),
shapes.getShape(3));
break;
case 2:
// DTCannon
this.shapeQueue = new Array(
shapes.getShape(1),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(5),
shapes.getShape(4),
shapes.getShape(2),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(3));
break;
2021-02-26 08:22:16 -06:00
case 3:
this.shapeQueue = new Array(
shapes.getShape(4),
shapes.getShape(5),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(2),
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(2),
2021-02-26 08:22:16 -06:00
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(3));
break;
2021-02-26 10:57:46 -06:00
case 4:
//Pokemino's STD
this.shapeQueue = new Array(
shapes.getShape(0),
shapes.getShape(6),
shapes.getShape(1),
shapes.getShape(4),
shapes.getShape(2),
shapes.getShape(5),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(2),
shapes.getShape(0),
shapes.getShape(6),
shapes.getShape(2),
shapes.getShape(4),
shapes.getShape(3),
shapes.getShape(0),
shapes.getShape(3));
2021-02-26 16:04:36 -06:00
break;
case 5:
// Mr TSpins STD reversed
this.shapeQueue = new Array(
shapes.getShape(1),
shapes.getShape(2),
shapes.getShape(5),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(6),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(6),
shapes.getShape(2),
shapes.getShape(4),
shapes.getShape(5),
shapes.getShape(0),
shapes.getShape(0),
shapes.getShape(3),
shapes.getShape(3));
break;
case 6:
// Hachispin
this.shapeQueue = new Array(
shapes.getShape(1),
shapes.getShape(2),
shapes.getShape(6),
shapes.getShape(5),
shapes.getShape(4),
shapes.getShape(0),
shapes.getShape(3),
shapes.getShape(6),
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(4),
shapes.getShape(2),
shapes.getShape(0),
shapes.getShape(3));
break;
2021-02-26 16:50:18 -06:00
case 7:
// Albatross
this.shapeQueue = new Array(
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(2),
shapes.getShape(3));
2021-03-11 21:11:35 -06:00
break;
2021-02-26 16:50:18 -06:00
case 8:
2021-03-11 21:11:35 -06:00
// Number One
this.shapeQueue = new Array(
shapes.getShape(1),
shapes.getShape(4),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(2),
shapes.getShape(5),
shapes.getShape(3));
break;
2021-03-08 14:52:04 -06:00
case 9:
2021-03-11 21:11:35 -06:00
// 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;
case 10:
// DT Cannon TSZ base
this.shapeQueue = new Array(
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(2),
shapes.getShape(6),
shapes.getShape(5),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(4),
shapes.getShape(0),
shapes.getShape(3),
shapes.getShape(3));
break;
default:
2021-03-13 06:34:58 -06:00
this.shapeQueue.unshift(utils.deepClone(shapes.randomShape()));
2021-03-11 21:11:35 -06:00
return;
}
2021-02-12 19:02:01 -06:00
}
this.isInit = 1;
2021-02-18 02:51:08 -06:00
return;
2021-02-12 19:02:01 -06:00
},
getNextMino(opener) {
2021-03-13 09:08:46 -06:00
if(this.customShapeQueue.length > 0) return this.customShapeQueue[this.idx++%this.customShapeQueue.length];
this.init(opener);
2021-02-12 19:02:01 -06:00
var mino = this.shapeQueue[this.idx];
this.idx++;
2021-03-13 09:08:46 -06:00
if(this.idx >= this.shapeQueue.length) {
2021-02-12 19:02:01 -06:00
this.idx = 0;
2021-03-13 06:34:58 -06:00
if(opener < 1000)
this.isInit = 0;
else this.isInit = 1;
2021-02-12 19:02:01 -06:00
}
return mino;
},
// Hint Tetrimions
initHint(opener) {
2021-02-12 19:02:01 -06:00
if(!this.isHintInit || this.hintQueue == undefined) {
switch(opener) {
case 0:
2021-03-08 14:52:04 -06:00
this.hintQueue = [];
break;
case 1:
// Fonzie Variation
this.hintQueue = new Array(
shapes.getShape(0),
shapes.getShape(6),
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(2),
shapes.getShape(4),
shapes.getShape(3));
2021-02-26 08:22:16 -06:00
// position x, position y, orientation, position x,...
2021-02-26 23:31:31 -06:00
var hintDataList = [-1,17,1, 3,18,0, 6,18,0, 5,17,1, 3,17,0, 7,16,0, 1,17,2];
2021-02-26 08:22:16 -06:00
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]);
2021-02-26 08:22:16 -06:00
}
break;
case 2:
// DT Cannon
this.hintQueue = new Array(
shapes.getShape(1),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(5),
shapes.getShape(4),
shapes.getShape(2),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(3));
2021-02-26 08:22:16 -06:00
// position x, position y, orientation, position x,...
2021-02-26 23:31:31 -06:00
var hintDataList = [-2,18,0, 4,16,1, 6,17,1, 7,17,1, 4,17,-1, 3,17,3, 3,15,0, 5,15,0, 7,14,1, 2,13,-1, -1,15,1, 1,16,2, 3,16,1, 1,17,-1];
2021-02-26 08:22:16 -06:00
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]);
2021-02-26 08:22:16 -06:00
}
break;
case 3:
2021-02-26 10:57:46 -06:00
//MKO Stacking
this.hintQueue = new Array(
shapes.getShape(4),
shapes.getShape(5),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(2),
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(2),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(3));
// position x, position y, orientation, position x,...
2021-02-26 23:31:31 -06:00
var hintDataList = [0,18,0, 0,16,-1, 8,16,-1, 4,18,0, 4,16,1, 5,18,0, 1,15,-1, 2,17,2, 5,18,0, 3,17,1, 6,16,0, 0,15,2, 0,14,0, 2,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;
2021-02-26 10:57:46 -06:00
case 4:
2021-02-26 16:04:36 -06:00
//Pokemino's STD
2021-02-26 10:57:46 -06:00
this.hintQueue = new Array(
shapes.getShape(0),
shapes.getShape(6),
shapes.getShape(1),
shapes.getShape(4),
shapes.getShape(2),
shapes.getShape(5),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(2),
shapes.getShape(0),
shapes.getShape(6),
shapes.getShape(2),
shapes.getShape(4),
shapes.getShape(3),
shapes.getShape(0),
shapes.getShape(3));
2021-02-26 23:31:31 -06:00
var hintDataList = [0,17,1, -2,16,1, 4,18,0, 4,17,-1, 3,15,1, 8,17,-1, 2,17,2, 0,17,0, 0,15,-1,
1,15,0, 8,16,-2, 5,15,-1, 3,14,1, 6,12,-1, 6,16,1, 2,16,-1, 7,17,2 ];
2021-02-26 16:04:36 -06:00
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;
case 5:
// Mr TSpins STD reversed
this.hintQueue = new Array(
shapes.getShape(1),
shapes.getShape(2),
shapes.getShape(5),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(6),
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(6),
shapes.getShape(2),
shapes.getShape(4),
shapes.getShape(5),
shapes.getShape(0),
shapes.getShape(0),
shapes.getShape(3),
shapes.getShape(3));
2021-02-26 23:31:31 -06:00
var hintDataList = [4,18,0, 0,18,0, 7,17,1, 0,15,1, 4,17,-1, 5,14,-1, 2,17,2, 1,17,0, -1,16,-1, 2,15,-1,
2021-02-26 16:04:36 -06:00
0,14,0, 3,15,1, 8,16,-1, 5,13,2, 6,16,1, 7,17,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;
case 6:
2021-02-26 16:50:18 -06:00
// Hachispin
2021-02-26 16:04:36 -06:00
this.hintQueue = new Array(
shapes.getShape(1),
shapes.getShape(2),
shapes.getShape(6),
shapes.getShape(5),
shapes.getShape(4),
shapes.getShape(0),
shapes.getShape(3),
shapes.getShape(6),
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(4),
shapes.getShape(2),
shapes.getShape(0),
shapes.getShape(3));
2021-02-26 23:31:31 -06:00
var hintDataList = [1,18,0, 0,18,0, 8,16,-1, 2,15,1, 6,17,2, 5,16,2, 1,16,2, -1,16,-1, -1,16,0, 5,16,0, 0,14,0, 3,15,0, 8,14,-1, 7,16,-1];
2021-02-26 16:50:18 -06:00
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;
case 7:
// Albatross
this.hintQueue = new Array(
shapes.getShape(1),
shapes.getShape(5),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(2),
shapes.getShape(3));
2021-02-26 23:31:31 -06:00
var hintDataList = [1,18,0, 0,17,-1, 8,16,-1, 5,17,2, 6,16,2, 3,16,0, 1,16,2];
2021-02-26 16:50:18 -06:00
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;
case 8:
2021-03-11 21:11:35 -06:00
// Number One
2021-02-26 16:50:18 -06:00
this.hintQueue = new Array(
shapes.getShape(1),
shapes.getShape(4),
shapes.getShape(6),
shapes.getShape(0),
shapes.getShape(2),
shapes.getShape(5),
shapes.getShape(3));
2021-02-26 23:31:31 -06:00
var hintDataList = [3,18,0, 0,17,2, 0,16,0, 4,15,-1, 6,17,0, 8,16,-1, 3,17,-1];
2021-02-26 10:57:46 -06:00
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;
2021-03-08 14:52:04 -06:00
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;
2021-03-11 21:11:35 -06:00
case 10: // O - 1, I - 6, L - 0, S - 5, J - 4, Z - 2, T - 3
// DT Cannon TSZ base
this.hintQueue = new Array(
shapes.getShape(3),
shapes.getShape(1),
shapes.getShape(2),
shapes.getShape(6),
shapes.getShape(5),
shapes.getShape(0),
shapes.getShape(4),
shapes.getShape(4),
shapes.getShape(0),
shapes.getShape(3),
shapes.getShape(3));
var hintDataList = [4,18,0, -2,18,0, 2,17,1, 8,16,-1, 6,17,-1, 7,17,-1, 3,15,2, -1,15,1, 2,13,-1, 1,16,2, 1,17,3];
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:
2021-03-13 06:34:58 -06:00
this.hintQueue.unshift(utils.deepClone(shapes.randomShape()));
return;
}
2021-02-21 22:01:28 -06:00
}
this.isHintInit = 1;
2021-02-18 02:51:08 -06:00
return;
2021-02-12 19:02:01 -06:00
},
// End initHint
getNextHint(opener) {
2021-03-13 09:08:46 -06:00
if(this.customHintQueue.length > 0) return this.customHintQueue[this.hintIdx++%this.customHintQueue.length];
this.initHint(opener);
2021-02-12 19:02:01 -06:00
var mino = this.hintQueue[this.hintIdx];
this.hintIdx++;
2021-03-13 09:08:46 -06:00
if(this.hintIdx >= this.hintQueue.length) {
2021-02-12 19:02:01 -06:00
this.hintIdx = 0;
2021-03-13 06:34:58 -06:00
if(opener < 1000)
this.isHintInit = 0;
else this.isHintInit = 1;
2021-02-12 19:02:01 -06:00
}
return mino;
2021-02-12 22:44:49 -06:00
},
2021-02-12 22:44:49 -06:00
reset() {
this.shapeQueue = [];
this.hintQueue = [];
this.idx = 0;
this.hintIdx = 0;
2021-02-18 02:51:08 -06:00
this.isInit = 0;
this.isHintInit = 0;
},
getLength() {
2021-03-13 09:08:46 -06:00
return this.customHintQueue.length || this.hintQueue.length;
2021-03-13 06:34:58 -06:00
},
addSequence(sequence) {
//this.reset();
//this.shapeQueue = utils.deepClone(sequence);
//this.hintQueue = utils.deepClone(sequence);
for(var i in sequence)
{
var shape;
shape = sequence[i];
shape.x = sequence[i].x;
shape.y = sequence[i].y;
shape.state = sequence[i].state;
2021-03-13 09:08:46 -06:00
this.customHintQueue.unshift(utils.deepClone(shape));
2021-03-13 06:34:58 -06:00
shape.x = shape.originX;
shape.y = shape.originY;
2021-03-13 09:08:46 -06:00
this.customShapeQueue.unshift(utils.deepClone(shape));
2021-03-13 06:34:58 -06:00
this.isInit = 1;
this.isHintInit = 1;
this.idx = 0;
this.hintIdx = 0;
}
2021-02-12 19:02:01 -06:00
}
};
2021-02-12 22:44:49 -06:00
function reset() {
2021-03-01 13:41:00 -06:00
openerGenerator.reset();
2021-02-12 22:44:49 -06:00
}
function getNextMino(opener) {
2021-03-01 13:41:00 -06:00
var mino = openerGenerator.getNextMino(opener);
2021-02-12 19:02:01 -06:00
return mino;
}
function getNextHint(opener) {
2021-03-01 13:41:00 -06:00
var mino = openerGenerator.getNextHint(opener);
2021-02-12 19:02:01 -06:00
return mino;
}
function getLength() {
2021-03-01 13:41:00 -06:00
return openerGenerator.getLength();
}
2021-03-13 06:34:58 -06:00
function addSequence(sequence) {
openerGenerator.addSequence(sequence);
}
module.exports.addSequence = addSequence;
2021-02-12 19:02:01 -06:00
module.exports.getNextMino = getNextMino;
2021-02-12 22:44:49 -06:00
module.exports.getNextHint = getNextHint;
module.exports.getLength = getLength;
2021-02-12 22:44:49 -06:00
module.exports.reset = reset;
2021-02-24 13:43:52 -06:00
// export getNextMino;
// export getNextHint;
// export getLength;
// export reset;
2021-02-12 19:02:01 -06:00