forked from sent/waves
202 lines
6.0 KiB
JavaScript
202 lines
6.0 KiB
JavaScript
var controlsLoaded = false;
|
|
var curControl = null;
|
|
|
|
function onControlsLoad() {
|
|
jaws.start(InputMonitor);
|
|
// check for an existing controls cookie
|
|
var customControls = readCookie('customControls');
|
|
|
|
// these actions will trigger the controls configurations
|
|
if (customControls === 'TRUE') {
|
|
// if there is a cookie, set up the controls for it
|
|
document.getElementById('customRadio').checked = true;
|
|
configureCustomControls();
|
|
} else {
|
|
// if no cookie, assign defaults, create the cookie
|
|
document.getElementById('defaultRadio').checked = true;
|
|
setDefaultControls();
|
|
}
|
|
|
|
configureAutoRepeat();
|
|
|
|
controlsLoaded = true;
|
|
}
|
|
|
|
function setDefaultControls() {
|
|
stopPollingInput();
|
|
|
|
document.getElementById('instructionsDefault').setAttribute('class', 'withDisplay');
|
|
document.getElementById('instructionsCustom').setAttribute('class', 'noDisplay');
|
|
document.getElementById('instructionsPending').setAttribute('class', 'noDisplay');
|
|
|
|
// set the cookies
|
|
createCookie('customControls', 'FALSE', 1000);
|
|
|
|
// configure the gui to the default text
|
|
document.getElementById('rotateLeftValue')
|
|
.innerHTML = 'Z';
|
|
document.getElementById('rotateRightValue')
|
|
.innerHTML = 'X, UP';
|
|
document.getElementById('shiftLeftValue')
|
|
.innerHTML = 'LEFT';
|
|
document.getElementById('shiftRightValue')
|
|
.innerHTML = 'RIGHT';
|
|
document.getElementById('softDropValue')
|
|
.innerHTML = 'DOWN';
|
|
document.getElementById('hardDropValue')
|
|
.innerHTML = 'SPACE';
|
|
document.getElementById('swapValue')
|
|
.innerHTML = 'SHIFT, C';
|
|
}
|
|
|
|
function configureCustomControls(fromCookie, fromThreshold) {
|
|
stopPollingInput();
|
|
|
|
document.getElementById('instructionsDefault').setAttribute('class', 'noDisplay');
|
|
document.getElementById('instructionsCustom').setAttribute('class', 'withDisplay');
|
|
document.getElementById('instructionsPending').setAttribute('class', 'noDisplay');
|
|
|
|
if (controlsLoaded && !fromCookie) {
|
|
// the cookies need to be created & initialized
|
|
createCookie('rotateLeft', 'Z', 1000);
|
|
createCookie('rotateRight', 'X', 1000);
|
|
createCookie('shiftLeft', 'LEFT', 1000);
|
|
createCookie('shiftRight', 'RIGHT', 1000);
|
|
createCookie('softDrop', 'DOWN', 1000);
|
|
createCookie('hardDrop', 'SPACE', 1000);
|
|
createCookie('swap', 'C', 1000);
|
|
|
|
createCookie('customControls', 'TRUE', 1000);
|
|
}
|
|
|
|
// assign all of the GUI elements based on the cookie
|
|
document.getElementById('rotateLeftValue')
|
|
.innerHTML = readCookie('rotateLeft');
|
|
document.getElementById('rotateRightValue')
|
|
.innerHTML = readCookie('rotateRight');
|
|
document.getElementById('shiftLeftValue')
|
|
.innerHTML = readCookie('shiftLeft');
|
|
document.getElementById('shiftRightValue')
|
|
.innerHTML = readCookie('shiftRight');
|
|
document.getElementById('softDropValue')
|
|
.innerHTML = readCookie('softDrop');
|
|
document.getElementById('hardDropValue')
|
|
.innerHTML = readCookie('hardDrop');
|
|
document.getElementById('swapValue')
|
|
.innerHTML = readCookie('swap');
|
|
}
|
|
|
|
function controlsUnitClicked(controlName) {
|
|
// if default controls, switch to custom
|
|
if (readCookie('customControls') !== 'TRUE') {
|
|
// if no cookie, assign defaults, create the cookie
|
|
document.getElementById('customRadio').checked = true;
|
|
configureCustomControls();
|
|
}
|
|
|
|
document.getElementById('instructionsDefault').setAttribute('class', 'noDisplay');
|
|
document.getElementById('instructionsCustom').setAttribute('class', 'noDisplay');
|
|
document.getElementById('instructionsPending').setAttribute('class', 'withDisplay');
|
|
|
|
if (curControl !== null) {
|
|
stopPollingInput();
|
|
}
|
|
curControl = {
|
|
name: controlName,
|
|
containerId: controlName + 'Div'
|
|
};
|
|
|
|
startPollingInput();
|
|
}
|
|
|
|
function startPollingInput() {
|
|
document.getElementById(curControl.containerId).setAttribute('class', 'controlsUnit controlsUnitPending');
|
|
|
|
inputPolling = true;
|
|
}
|
|
|
|
function stopPollingInput() {
|
|
if (curControl !== null) {
|
|
inputPolling = false;
|
|
|
|
document.getElementById(curControl.containerId).setAttribute('class', 'controlsUnit');
|
|
curControl = null;
|
|
}
|
|
}
|
|
|
|
function findWhereKeyUsed(key) {
|
|
var cookies = ['rotateLeft',
|
|
'rotateRight',
|
|
'shiftLeft',
|
|
'shiftRight',
|
|
'softDrop',
|
|
'hardDrop',
|
|
'swap'],
|
|
i;
|
|
|
|
for (i = 0; i < cookies.length; i += 1) {
|
|
if (readCookie(cookies[i]) === key) {
|
|
return cookies[i];
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function reportKeyPressed(keyLower) {
|
|
// should never fail this case...
|
|
if (curControl !== null) {
|
|
var key = keyLower.toUpperCase();
|
|
|
|
// if this key is used anywhere else
|
|
var controlUsed = findWhereKeyUsed(key);
|
|
if (controlUsed !== null) {
|
|
// swap the two controls
|
|
createCookie(controlUsed, readCookie(curControl.name), 1000);
|
|
createCookie(curControl.name, key, 1000);
|
|
} else {
|
|
// set this key to the new value
|
|
createCookie(curControl.name, key, 1000);
|
|
}
|
|
|
|
configureCustomControls(true);
|
|
|
|
stopPollingInput();
|
|
}
|
|
}
|
|
|
|
function configureAutoRepeat() {
|
|
var autoRepeat = readCookie('autoRepeat');
|
|
if (autoRepeat === null) {
|
|
autoRepeat = "50";
|
|
createCookie('autoRepeat', autoRepeat, 1000);
|
|
}
|
|
var threshold = readCookie('threshold');
|
|
if (threshold === null) {
|
|
threshold = "200";
|
|
createCookie("threshold", threshold, 1000);
|
|
}
|
|
|
|
document.getElementById('autoRepeatRange').value = autoRepeat;
|
|
document.getElementById('autoRepeatValue').innerHTML = autoRepeat;
|
|
document.getElementById('thresholdRange').value = threshold;
|
|
document.getElementById('thresholdValue').innerHTML = threshold;
|
|
}
|
|
|
|
function updateAutoRepeat() {
|
|
var newVal = document.getElementById('autoRepeatRange').value;
|
|
document.getElementById('autoRepeatValue').innerHTML = newVal;
|
|
createCookie('autoRepeat', newVal, 1000);
|
|
}
|
|
|
|
function updateThreshold() {
|
|
var newVal = document.getElementById('thresholdRange').value;
|
|
document.getElementById('thresholdValue').innerHTML = newVal;
|
|
createCookie('threshold', newVal, 1000);
|
|
}
|
|
|
|
function resetAutoRepeat() {
|
|
eraseCookie('autoRepeat');
|
|
eraseCookie('threshold');
|
|
configureAutoRepeat();
|
|
} |