policychanges/src/input.js

250 lines
7.7 KiB
JavaScript
Raw Normal View History

2021-02-05 03:19:09 -06:00
var gamepad = require('./gamepad.js');
2021-02-25 17:05:22 -06:00
var utils = require('./utils.js');
2021-02-24 13:43:52 -06:00
// import * as gamepad from './gamepad.js';
2021-02-05 03:19:09 -06:00
var UserInputs = {
2021-02-25 17:05:22 -06:00
init() {
2021-03-08 14:52:04 -06:00
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.gamepadButtonTimer = new Date();
this.keyboardKeyTimer = new Date();
this.keyboardShiftTimer = new Date();
2021-03-08 14:52:04 -06:00
this.settingsMap = new Map();
this.gamepadEventMap = new Map();
///this.gamepadEventMap = new Map();
2021-02-25 17:05:22 -06:00
// var init = utils.getCookie("init");
// if(init == "")
for(var i in this.settingsList)
utils.setCookie(this.settingsList[i], this.settingsDefault[i], 30); // cookies expire in 30 days
// else
// for(var i in this.settingsList)
// this.settingsDefault[i] = utils.getCookie(this.settingsList[i]);
for(var i in this.settingsList)
this.settingsMap.set(this.settingsList[i], this.settingsDefault[i]);
2021-03-08 14:52:04 -06:00
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]]);
}
2021-02-05 09:11:17 -06:00
document.addEventListener('keydown', this.keyDown.bind(this));
document.addEventListener('keyup', this.keyUp.bind(this));
2021-02-05 03:19:09 -06:00
},
updateGamepad() {
this.gpButtons = gamepad.update();
},
2021-03-01 13:41:00 -06:00
gamepadEnabled() {
return gamepad.controller || false;
},
2021-02-05 03:19:09 -06:00
processGamepadInput() {
2021-03-08 14:52:04 -06:00
this.gamepadButtonEvents.forEach(gamepadButton => this.gamepadButtonsDown(this.settingsMap.get(gamepadButton)));
2021-02-12 19:02:01 -06:00
},
processGamepadDPad() {
2021-03-08 14:52:04 -06:00
this.gamepadShiftEvents.forEach(dpadButton => this.gamepadDPadDown(this.settingsMap.get(dpadButton)));
2021-02-12 00:37:49 -06:00
},
// Single press gamepad buttons
2021-02-05 03:19:09 -06:00
gamepadButtonsDown(finds) {
var DAS = 167.0;
var ARR = 300.0;
2021-02-05 03:19:09 -06:00
var isContained = this.gpButtons.includes(finds);
2021-02-05 09:11:17 -06:00
var isPrevContained = this.prevGpButtons.includes(finds);
if(isPrevContained != isContained ) {
// Not being held yet
this.gamepadButtonTimer = new Date();
this.isPassedDelayGamepadShift = false;
// Add button to queue on pressed input
2021-02-05 09:11:17 -06:00
if(isContained)
this.gamepadQueue.push(finds);
}
var deltaTime = (new Date()).getTime() - this.gamepadButtonTimer.getTime();
if (!this.isPassedDelayGamepadShift) {
if (deltaTime >= DAS) {
this.gamepadButtonTimer = new Date();
this.isPassedDelayGamepadShift = true;
2021-02-05 03:19:09 -06:00
}
2021-02-05 09:11:17 -06:00
2021-02-05 03:19:09 -06:00
} else {
if (deltaTime >= ARR && isContained) {
this.gamepadQueue.push(finds);
this.gamepadButtonTimer = new Date();
2021-02-05 03:19:09 -06:00
}
}
},
2021-02-05 09:11:17 -06:00
// Direction Pad
2021-02-12 00:37:49 -06:00
gamepadDPadDown(finds) {
var DAS = parseInt(this.settingsMap.get("Gamepad DAS"));
var ARR = parseInt(this.settingsMap.get("Gamepad ARR"));
2021-03-08 14:52:04 -06:00
2021-02-05 03:19:09 -06:00
var isContained = this.gpButtons.includes(finds);
2021-02-05 09:11:17 -06:00
var isPrevContained = this.prevGpButtons.includes(finds);
2021-02-18 02:51:08 -06:00
2021-02-05 09:11:17 -06:00
if(isPrevContained != isContained ) {
// Not being held yet
this.gamepadShiftTimer = new Date();
this.isDelayedPassedGamepadShift = false;
// Add button to queue on pressed input
2021-02-13 08:57:33 -06:00
if(isContained)
this.gamepadQueue.push(finds);
2021-02-05 09:11:17 -06:00
}
var deltaTime = (new Date()).getTime() - this.gamepadShiftTimer.getTime();
if (!this.isDelayedPassedGamepadShift) {
if (deltaTime >= DAS) {
this.gamepadShiftTimer = new Date();
this.isDelayedPassedGamepadShift = true;
}
}
else {
if (deltaTime >= ARR && isContained) {
this.gamepadQueue.push(finds);
this.gamepadShiftTimer = new Date();
2021-02-05 03:19:09 -06:00
}
}
2021-02-05 03:19:09 -06:00
return;
},
2021-03-08 14:52:04 -06:00
processKeys() {
2021-03-08 14:52:04 -06:00
this.keyboardKeyEvents.forEach( key => this.settingsMap.get(key).split(',').forEach( idx => this.processKeyDown( parseInt(idx) ) ) );
},
2021-02-12 00:37:49 -06:00
2021-02-05 14:46:41 -06:00
// keyboard keys z,x,space
processKeyDown(key)
{
var DAS = 167.0;
var ARR = 300.0;
2021-02-12 00:37:49 -06:00
if(this.prevKeyboardKeys[key] != this.keyboardKeys[key]) {
// Not being held yet
this.keyboardKeyTimer = new Date();
this.isPassedDelayKeyboardKey = false;
// Add shift to queue on pressed input
2021-02-12 00:37:49 -06:00
if(this.keyboardKeys[key] == true)
2021-03-01 13:41:00 -06:00
this.inputQueue.push(key);
2021-02-12 00:37:49 -06:00
}
var deltaTime = (new Date()).getTime() - this.keyboardKeyTimer.getTime();
2021-02-05 03:19:09 -06:00
if (!this.isPassedDelayKeyboardKey) {
if (deltaTime >= DAS) {
this.keyboardKeyTimer = new Date();
2021-02-12 00:37:49 -06:00
this.keyboardButtonsDeciframes = 0;
this.isPassedDelayKeyboardKey = true;
}
} else {
if (deltaTime >= ARR && this.keyboardKeys[key] == true) {
this.inputQueue.push(key);
this.keyboardKeyTimer = new Date();
}
}
2021-02-12 00:37:49 -06:00
},
// Process applicable key inputs
2021-02-12 00:37:49 -06:00
processKeyShift() {
2021-03-08 14:52:04 -06:00
this.keyboardShiftEvents.forEach(arrowKey => arrowKey.split(',').forEach(option => this.processKeyboardArrowKeys(parseInt(this.settingsMap.get(option)))));
},
2021-02-05 14:46:41 -06:00
// Direction arrows
2021-02-12 00:37:49 -06:00
processKeyboardArrowKeys(key) {
2021-03-01 18:04:23 -06:00
var DAS = parseInt(this.settingsMap.get("Keyboard DAS"));
var ARR = parseInt(this.settingsMap.get("Keyboard ARR"));
2021-02-05 14:46:41 -06:00
if(this.prevKeyboardKeys[key] != this.keyboardKeys[key]) {
2021-03-01 13:41:00 -06:00
// Not being held yet
this.isPassedDelayKeyboardShift = false;
this.keyboardShiftTimer = new Date();
// Do shift if key has been pushed down
2021-02-05 14:46:41 -06:00
if(this.keyboardKeys[key] == true)
2021-03-01 13:41:00 -06:00
this.inputQueue.push(key);
2021-02-05 14:46:41 -06:00
}
var deltaTime = (new Date()).getTime() - this.keyboardShiftTimer.getTime();
if (!this.isPassedDelayKeyboardShift) {
2021-03-01 13:41:00 -06:00
if (deltaTime >= DAS) {
this.keyboardShiftTimer = new Date();
this.isPassedDelayKeyboardShift = true;
2021-02-05 03:19:09 -06:00
}
2021-03-01 13:41:00 -06:00
}
else if(deltaTime >= ARR && this.keyboardKeys[key] == true) {
2021-03-01 13:41:00 -06:00
this.inputQueue.push(key);
this.keyboardShiftTimer = new Date();
2021-03-01 13:41:00 -06:00
}
2021-02-05 03:19:09 -06:00
},
keyDown(event) {
2021-03-01 18:04:23 -06:00
if(event.keyCode != 38)
2021-02-25 17:05:22 -06:00
if (! ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || event.keyCode == 8))
event.preventDefault();
this.keyboardKeys[event.keyCode] = true;
2021-02-17 18:58:50 -06:00
this.isKeyBoardKeyDown = true;
2021-02-05 03:19:09 -06:00
},
keyUp(event) {
this.isKeyDown = false;
this.keyboardKeys[event.keyCode] = false;
2021-02-17 18:58:50 -06:00
this.isKeyBoardKeyDown = false;
2021-02-05 03:19:09 -06:00
},
2021-03-08 14:52:04 -06:00
gamepadClear() {
//this.gpButtons = [];
//this.gamepadQueue = [];
2021-02-05 09:11:17 -06:00
},
saveButtons() {
this.prevGpButtons = this.gpButtons;
},
2021-02-05 14:46:41 -06:00
saveKeyboardKeys() {
2021-03-01 13:41:00 -06:00
//this.prevKeyboardKeys = utils.deepClone(this.keyboardKeys);
2021-02-05 14:46:41 -06:00
this.prevKeyboardKeys = {...this.keyboardKeys};
},
2021-02-12 00:37:49 -06:00
// button states
isPassedDelayKeyboardShift: false,
isPassedDelayKeyboardKey: false,
isPassedDelayGamepadShift: false,
isPassedDelayGamepadButton: false,
2021-02-12 00:37:49 -06:00
// buttons state contatiners
2021-02-05 03:19:09 -06:00
gpButtons: [],
2021-02-05 09:11:17 -06:00
prevGpButtons:[],
keyboardKeys: [],
2021-02-05 14:46:41 -06:00
prevKeyboardKeys: [],
2021-02-12 00:37:49 -06:00
// button pressed containers
2021-03-01 13:41:00 -06:00
inputQueue: [],
2021-02-21 20:43:05 -06:00
gamepadQueue: [],
2021-03-08 14:52:04 -06:00
keyboardKeySettings: ["Keyboard DAS", "Keyboard ARR"],
keyboardShiftEvents: ["Keyboard Left", "Keyboard Right", "Keyboard Down"],
keyboardKeyEvents: ["Keyboard Harddrop", "Keyboard Hold", "Keyboard Rotateccw", "Keyboard Rotate", "Keyboard Pophold", "Keyboard Reset", "Keyboard Background"],
2021-02-25 17:05:22 -06:00
2021-03-08 14:52:04 -06:00
gamepadSettings: ["Gamepad DAS", "Gamepad ARR"],
gamepadShiftEvents: ["Gamepad Left", "Gamepad Right","Gamepad Down"],
gamepadButtonEvents: ["Gamepad Harddrop", "Gamepad Hold", "Gamepad Rotateccw", "Gamepad Rotate", "Gamepad Pophold", "Gamepad Reset", "Gamepad Background"],
settingsList: [],
settingsDefault: [ "167.0", "33.0",
"37", "39", "40",
"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", ""],
2021-02-25 17:05:22 -06:00
settingsMap: []
2021-02-05 03:19:09 -06:00
};
2021-02-24 13:43:52 -06:00
module.exports = UserInputs;
// export UserInputs;