Check for delayed events

This triggers onload for all those events whose (possible) reward is registered with a time delay.
This commit is contained in:
Andrea Rendine
2015-05-09 02:17:42 +02:00
committed by Blake Grotewold
parent cb717b41d0
commit da0d39b579
4 changed files with 126 additions and 34 deletions
+55 -5
View File
@@ -31,10 +31,14 @@ var Events = {
//subscribe to stateUpdates
$.Dispatch('stateUpdate').subscribe(Events.handleStateUpdates);
//check for stored delayed events
Events.initDelay();
},
options: {}, // Nothing for now
delayState: 'wait',
activeScene: null,
loadScene: function(name) {
@@ -42,6 +46,13 @@ var Events = {
Events.activeScene = name;
var scene = Events.activeEvent().scenes[name];
// Scene reward
if(scene.reward) {
$SM.addM('stores', scene.reward);
}
// onLoad
if(scene.onLoad) {
scene.onLoad();
@@ -52,11 +63,6 @@ var Events = {
Notifications.notify(null, scene.notification);
}
// Scene reward
if(scene.reward) {
$SM.addM('stores', scene.reward);
}
$('#description', Events.eventPanel()).empty();
$('#buttons', Events.eventPanel()).empty();
if(scene.combat) {
@@ -884,5 +890,49 @@ var Events = {
if((e.category == 'stores' || e.category == 'income') && Events.activeEvent() != null){
Events.updateButtons();
}
},
initDelay: function(){
if($SM.get(Events.delayState)){
Events.recallDelay(Events.delayState, Events);
}
},
recallDelay: function(stateName, target){
var state = $SM.get(stateName);
for(var i in state){
if(typeof(state[i]) == 'object'){
Events.recallDelay(stateName +'["'+ i +'"]', target[i]);
} else {
if(typeof target[i] == 'function'){
target[i]();
} else {
$SM.remove(stateName)
}
}
}
if($.isEmptyObject(state)){
$SM.remove(stateName);
}
},
saveDelay: function(action, stateName, delay){
var state = Events.delayState + '.' + stateName;
if(delay){
$SM.set(state, delay);
} else {
var delay = $SM.get(state, true)
}
var time = Engine.setInterval(function(){
// update state every half second
$SM.set(state, ($SM.get(state) - 0.5), true);
}, 500);
Engine.setTimeout(function(){
// outcome realizes. erase countdown
window.clearInterval(time);
$SM.remove(state);
$SM.removeBranch(Events.delayState);
action();
}, delay * 1000);
}
};