2018-12-02 19:48:59 +01:00
|
|
|
function Session(async) {
|
2018-12-18 20:36:27 +01:00
|
|
|
var session = {
|
|
|
|
character: JSON.parse(localStorage.getItem('character')),
|
|
|
|
game: JSON.parse(localStorage.getItem('game')),
|
|
|
|
options: JSON.parse(localStorage.getItem('options')) || defaultOptions()
|
|
|
|
};
|
2018-11-17 19:07:58 +01:00
|
|
|
|
|
|
|
return {
|
2018-12-18 20:36:27 +01:00
|
|
|
get: get,
|
|
|
|
set: set,
|
|
|
|
syncGame: syncGame,
|
2018-12-02 19:48:59 +01:00
|
|
|
update: update
|
2018-11-17 19:07:58 +01:00
|
|
|
};
|
|
|
|
|
2018-12-18 20:36:27 +01:00
|
|
|
function defaultOptions() {
|
|
|
|
var o = {
|
|
|
|
layout: {
|
|
|
|
'a': 'A',
|
|
|
|
'b': 'B',
|
|
|
|
'ArrowLeft': 'Left',
|
|
|
|
'ArrowRight': 'Right',
|
|
|
|
'ArrowUp': 'Up',
|
|
|
|
'ArrowDown': 'Down',
|
|
|
|
'Enter': 'Start',
|
|
|
|
' ': 'Select'
|
|
|
|
},
|
|
|
|
textSpeed: 'medium'
|
|
|
|
};
|
|
|
|
save('options', o);
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
|
|
|
function get(path, obj) {
|
|
|
|
obj = obj || session;
|
|
|
|
if(Array.isArray(path)) {
|
|
|
|
if(path.length == 0) {
|
|
|
|
return obj;
|
|
|
|
} else {
|
|
|
|
var key = path.shift();
|
|
|
|
return get(path, obj[key]);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return obj[path];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function save(key, value) {
|
|
|
|
if(key != undefined) {
|
|
|
|
localStorage.setItem(key, JSON.stringify(value || session[key]));
|
|
|
|
} else {
|
|
|
|
for(var key in session) {
|
|
|
|
save(key);
|
|
|
|
}
|
|
|
|
}
|
2018-11-17 19:07:58 +01:00
|
|
|
}
|
|
|
|
|
2018-12-18 20:36:27 +01:00
|
|
|
function set(newSession) {
|
|
|
|
for(var key in newSession) {
|
|
|
|
session[key] = newSession[key];
|
|
|
|
save(key);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function syncGame() {
|
2018-12-02 19:48:59 +01:00
|
|
|
return async.bind(
|
|
|
|
messaging.receive(function(message) {
|
|
|
|
return message.tag == "Game";
|
|
|
|
}),
|
|
|
|
function(message) {
|
2018-12-18 20:36:27 +01:00
|
|
|
session.game = message.contents;
|
2018-12-02 19:48:59 +01:00
|
|
|
return async.wrap();
|
|
|
|
}
|
|
|
|
);
|
2018-11-17 19:07:58 +01:00
|
|
|
}
|
|
|
|
|
2018-12-18 20:36:27 +01:00
|
|
|
function update(newSession) {
|
|
|
|
for(var key in newSession) {
|
|
|
|
merge(session[key], newSession[key]);
|
|
|
|
save(key);
|
|
|
|
}
|
2018-11-18 23:08:36 +01:00
|
|
|
}
|
|
|
|
|
2018-11-30 14:51:42 +01:00
|
|
|
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];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-17 19:07:58 +01:00
|
|
|
}
|