62 lines
1.1 KiB
JavaScript
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);
|
|
}
|
|
}
|