2017-07-04 00:59:31 +00:00
|
|
|
var Class = require('../utils/Class');
|
|
|
|
|
2017-02-08 01:07:01 +00:00
|
|
|
// A proxy class to the Global State Manager
|
2017-07-04 00:59:31 +00:00
|
|
|
var StateManager = new Class({
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-07-04 00:59:31 +00:00
|
|
|
initialize:
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-07-04 00:59:31 +00:00
|
|
|
function StateManager (state, game)
|
|
|
|
{
|
|
|
|
// The State that owns this plugin
|
|
|
|
this.state = state;
|
2017-06-30 02:31:31 +00:00
|
|
|
|
2017-07-04 00:59:31 +00:00
|
|
|
this.settings = state.sys.settings;
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-07-04 00:59:31 +00:00
|
|
|
this.key = state.sys.settings.key;
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-07-04 00:59:31 +00:00
|
|
|
// GlobalStateManager
|
|
|
|
this.manager = game.state;
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-07-04 00:59:31 +00:00
|
|
|
// Private
|
|
|
|
this._queue = [];
|
|
|
|
},
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
update: function ()
|
|
|
|
{
|
|
|
|
var len = this._queue.length;
|
|
|
|
|
|
|
|
if (len === 0)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var manager = this.manager;
|
|
|
|
|
|
|
|
// Process the queue
|
|
|
|
for (var i = 0; i < len; i++)
|
|
|
|
{
|
|
|
|
var action = this._queue[i];
|
|
|
|
|
|
|
|
switch (action.type)
|
|
|
|
{
|
|
|
|
case 'start':
|
|
|
|
manager.stop(this.key);
|
|
|
|
manager.start(action.key, action.data);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'launch':
|
|
|
|
manager.start(action.key, action.data);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'pause':
|
|
|
|
manager.pause(action.key);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'resume':
|
|
|
|
manager.resume(action.key);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'stop':
|
|
|
|
manager.stop(action.key);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'swap':
|
|
|
|
manager.swap(this.key, action.key);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'sleep':
|
|
|
|
manager.sleep(action.key);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'wake':
|
|
|
|
manager.wake(action.key);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this._queue.length = 0;
|
|
|
|
},
|
|
|
|
|
|
|
|
// Shutdown this State and run the given one
|
2017-02-17 02:07:56 +00:00
|
|
|
start: function (key, data)
|
2017-02-08 01:07:01 +00:00
|
|
|
{
|
|
|
|
if (key === undefined) { key = this.key; }
|
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
this._queue.push({ type: 'start', key: key, data: data });
|
|
|
|
|
|
|
|
return this;
|
2017-02-08 01:07:01 +00:00
|
|
|
},
|
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
// Launch the given State and run it in parallel with this one
|
|
|
|
launch: function (key, data)
|
|
|
|
{
|
|
|
|
if (key === undefined) { key = this.key; }
|
|
|
|
|
|
|
|
this._queue.push({ type: 'launch', key: key, data: data });
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
// Pause the State - this stops the update step from happening but it still renders
|
2017-02-08 01:07:01 +00:00
|
|
|
pause: function (key)
|
|
|
|
{
|
|
|
|
if (key === undefined) { key = this.key; }
|
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
this._queue.push({ type: 'pause', key: key });
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
// Resume the State - starts the update loop again
|
|
|
|
resume: function (key)
|
|
|
|
{
|
|
|
|
if (key === undefined) { key = this.key; }
|
|
|
|
|
|
|
|
this._queue.push({ type: 'resume', key: key });
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
// Makes the State sleep (no update, no render) but doesn't shutdown
|
|
|
|
sleep: function (key)
|
|
|
|
{
|
|
|
|
this._queue.push({ type: 'sleep', key: key });
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
// Makes the State wake-up (starts update and render)
|
|
|
|
wake: function (key)
|
|
|
|
{
|
|
|
|
this._queue.push({ type: 'wake', key: key });
|
|
|
|
|
|
|
|
return this;
|
2017-02-08 01:07:01 +00:00
|
|
|
},
|
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
// Makes this State sleep then starts the State given
|
2017-02-08 01:07:01 +00:00
|
|
|
swap: function (key)
|
|
|
|
{
|
2017-06-30 02:31:31 +00:00
|
|
|
this._queue.push({ type: 'swap', key: key });
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
return this;
|
2017-02-08 01:07:01 +00:00
|
|
|
},
|
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
// Shutdown the State, clearing display list, timers, etc
|
|
|
|
stop: function (key)
|
2017-02-08 01:07:01 +00:00
|
|
|
{
|
2017-06-30 02:31:31 +00:00
|
|
|
if (key === undefined) { key = this.key; }
|
|
|
|
|
|
|
|
this._queue.push({ type: 'stop', key: key });
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
return this;
|
2017-02-08 01:07:01 +00:00
|
|
|
},
|
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
setVisible: function (value)
|
2017-02-08 01:07:01 +00:00
|
|
|
{
|
2017-06-30 02:31:31 +00:00
|
|
|
this.settings.visible = value;
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
return this;
|
2017-02-08 01:07:01 +00:00
|
|
|
},
|
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
moveUp: function ()
|
2017-02-08 01:07:01 +00:00
|
|
|
{
|
2017-06-30 02:31:31 +00:00
|
|
|
this._queue.push({ type: 'moveUp' });
|
|
|
|
},
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
moveDown: function ()
|
|
|
|
{
|
|
|
|
this._queue.push({ type: 'moveDown' });
|
2017-02-08 01:07:01 +00:00
|
|
|
},
|
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
bringToTop: function ()
|
2017-02-08 01:07:01 +00:00
|
|
|
{
|
2017-06-30 02:31:31 +00:00
|
|
|
this._queue.push({ type: 'bringToTop' });
|
|
|
|
},
|
2017-02-08 01:07:01 +00:00
|
|
|
|
2017-06-30 02:31:31 +00:00
|
|
|
sendToBack: function ()
|
|
|
|
{
|
|
|
|
this._queue.push({ type: 'sendToBack' });
|
2017-02-08 01:07:01 +00:00
|
|
|
},
|
|
|
|
|
2017-07-05 02:47:32 +00:00
|
|
|
get: function (key)
|
|
|
|
{
|
|
|
|
return this.manager.getState(key);
|
|
|
|
},
|
|
|
|
|
2017-02-08 01:07:01 +00:00
|
|
|
transitionTo: function (key, duration)
|
|
|
|
{
|
|
|
|
},
|
|
|
|
|
|
|
|
isActive: function (key)
|
|
|
|
{
|
|
|
|
if (key === undefined) { key = this.key; }
|
|
|
|
|
|
|
|
return this.manager.isActive(key);
|
|
|
|
}
|
|
|
|
|
2017-07-04 00:59:31 +00:00
|
|
|
});
|
2017-06-30 02:31:31 +00:00
|
|
|
|
2017-02-08 01:07:01 +00:00
|
|
|
module.exports = StateManager;
|