client/src/js/buttons.js

62 lines
1.1 KiB
JavaScript

function Buttons(session) {
var mapping;
var mappingsStack = [];
var buttons = {
'A': 0,
'B': 1,
'Left': 2,
'Right': 3,
'Up': 4,
'Down': 5,
'Start': 6,
'Select': 7
};
document.addEventListener('keydown', function(event) {
var button = session.get('options').layout[event.key];
if(button != undefined && mapping[button] != undefined) {
event.preventDefault();
mapping[button]();
}
});
return {
assign: assign,
code: code,
map: map,
pop: pop,
push: push
};
function assign(key, button) {
var layoutDiff = {};
var layout = session.get('options').layout;
for(var currentKey in layout) {
if(layout[currentKey] == button) {
layoutDiff[currentKey] = undefined;
break;
}
}
layoutDiff[key] = button;
return {layoutDiff: layoutDiff, button: layout[key] != button ? layout[key] : null};
}
function code(button) {
return buttons[button];
}
function map(newMapping) {
mapping = newMapping;
}
function pop() {
mappingsStack.pop();
map(mappingsStack[mappingsStack.length-1]);
}
function push(newMapping) {
mappingsStack.push(newMapping);
map(newMapping);
}
}