client/src/session.js

82 lines
1.5 KiB
JavaScript

function Session(async) {
var game = JSON.parse(localStorage.getItem('game'));
var options = JSON.parse(localStorage.getItem('options')) || defaultOptions();
return {
getOptions: getOptions,
getGame: getGame,
save: save,
setOptions: setOptions,
update: update
};
function getGame() {
return game;
}
function update() {
return async.bind(
messaging.receive(function(message) {
return message.tag == "Game";
}),
function(message) {
game = message.contents;
return async.wrap();
}
);
}
function save() {
localStorage.setItem('game', JSON.stringify(game));
}
function merge(a, b) {
for(var key in b) {
var value = b[key];
if(typeof value == "object") {
if(Array.isArray(value)) {
a[key] = [];
for(var i = 0; i < value.length; i++) {
a[key][i] = value[i];
}
} else {
merge(a[key], value);
}
} else {
if(value !== undefined) {
a[key] = value;
} else {
delete a[key];
}
}
}
}
function setOptions(newOptions) {
merge(options, newOptions);
localStorage.setItem('options', JSON.stringify(options));
}
function defaultOptions() {
var o = {
layout: {
'a': 'A',
'b': 'B',
'ArrowLeft': 'Left',
'ArrowRight': 'Right',
'ArrowUp': 'Up',
'ArrowDown': 'Down',
'Enter': 'Start',
' ': 'Select'
},
textSpeed: 'medium'
};
localStorage.setItem('options', JSON.stringify(o));
return o;
}
function getOptions() {
return options;
}
}