2017-07-11 15:48:25 +00:00
|
|
|
var Components = require('./components/');
|
2017-07-04 12:58:45 +00:00
|
|
|
var Class = require('../utils/Class');
|
2016-11-29 13:01:16 +00:00
|
|
|
|
2017-07-04 12:58:45 +00:00
|
|
|
var GlobalStateManager = new Class({
|
2016-11-29 13:01:16 +00:00
|
|
|
|
2017-07-04 12:58:45 +00:00
|
|
|
initialize:
|
2016-11-29 13:01:16 +00:00
|
|
|
|
2017-07-04 12:58:45 +00:00
|
|
|
function GlobalStateManager (game, stateConfig)
|
|
|
|
{
|
|
|
|
this.game = game;
|
2016-11-29 13:01:16 +00:00
|
|
|
|
2017-07-04 12:58:45 +00:00
|
|
|
// Everything kept in here
|
|
|
|
this.keys = {};
|
|
|
|
this.states = [];
|
2016-11-29 13:01:16 +00:00
|
|
|
|
2017-07-11 15:48:25 +00:00
|
|
|
// Only active states are kept in here. They are moved here when started, and moved out when not.
|
|
|
|
// All states are stored in the states array, regardless of being active or not.
|
2017-07-04 12:58:45 +00:00
|
|
|
this.active = [];
|
|
|
|
|
2017-07-11 15:48:25 +00:00
|
|
|
// A state pending to be added to the State Manager is stored in here until the manager has time to add it.
|
2017-07-04 12:58:45 +00:00
|
|
|
this._pending = [];
|
|
|
|
|
2017-07-11 15:48:25 +00:00
|
|
|
// An array of states waiting to be started once the game has booted
|
|
|
|
this._start = [];
|
|
|
|
|
2017-07-04 12:58:45 +00:00
|
|
|
if (stateConfig)
|
2016-11-29 13:01:16 +00:00
|
|
|
{
|
2017-07-04 12:58:45 +00:00
|
|
|
if (Array.isArray(stateConfig))
|
|
|
|
{
|
|
|
|
for (var i = 0; i < stateConfig.length; i++)
|
|
|
|
{
|
|
|
|
// The i === 0 part just starts the first State given
|
|
|
|
this._pending.push({
|
|
|
|
index: i,
|
|
|
|
key: 'default',
|
|
|
|
state: stateConfig[i],
|
|
|
|
autoStart: (i === 0),
|
|
|
|
data: {}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
2016-11-29 13:01:16 +00:00
|
|
|
{
|
2016-11-29 15:25:14 +00:00
|
|
|
this._pending.push({
|
2017-07-04 12:58:45 +00:00
|
|
|
index: 0,
|
2016-11-29 15:25:14 +00:00
|
|
|
key: 'default',
|
2017-07-04 12:58:45 +00:00
|
|
|
state: stateConfig,
|
|
|
|
autoStart: true,
|
2017-02-16 17:18:50 +00:00
|
|
|
data: {}
|
2016-11-29 15:25:14 +00:00
|
|
|
});
|
2016-11-29 13:01:16 +00:00
|
|
|
}
|
|
|
|
}
|
2017-07-04 12:58:45 +00:00
|
|
|
},
|
2016-11-29 13:01:16 +00:00
|
|
|
|
2017-07-11 15:48:25 +00:00
|
|
|
boot: Components.Boot,
|
|
|
|
getKey: Components.GetKey,
|
|
|
|
add: Components.Add,
|
|
|
|
createStateFromInstance: Components.CreateStateFromInstance,
|
|
|
|
createStateFromObject: Components.CreateStateFromObject,
|
|
|
|
createStateFromFunction: Components.CreateStateFromFunction,
|
|
|
|
setupCallbacks: Components.SetupCallbacks,
|
|
|
|
createStateDisplay: Components.CreateStateDisplay,
|
|
|
|
getState: Components.GetState,
|
|
|
|
getStateAt: Components.GetStateAt,
|
|
|
|
getStateIndex: Components.GetStateIndex,
|
|
|
|
getStateIndexByKey: Components.GetStateIndexByKey,
|
|
|
|
getActiveState: Components.GetActiveState,
|
|
|
|
getActiveStateIndex: Components.GetActiveStateIndex,
|
|
|
|
getActiveStateIndexByKey: Components.GetActiveStateIndexByKey,
|
|
|
|
isActive: Components.IsActive,
|
|
|
|
start: Components.Start,
|
|
|
|
payloadComplete: Components.PayloadComplete,
|
|
|
|
bootState: Components.BootState,
|
|
|
|
loadComplete: Components.LoadComplete,
|
|
|
|
create: Components.Create,
|
|
|
|
pause: Components.Pause,
|
|
|
|
resume: Components.Resume,
|
|
|
|
sleep: Components.Sleep,
|
|
|
|
wake: Components.Wake,
|
|
|
|
swap: Components.Swap,
|
|
|
|
isSleeping: Components.IsSleeping,
|
|
|
|
stop: Components.Stop,
|
|
|
|
swapPosition: Components.SwapPosition,
|
|
|
|
moveUp: Components.MoveUp,
|
|
|
|
moveDown: Components.MoveDown,
|
|
|
|
bringToTop: Components.BringToTop
|
2016-11-29 13:01:16 +00:00
|
|
|
|
2017-07-04 12:58:45 +00:00
|
|
|
});
|
2016-11-29 13:01:16 +00:00
|
|
|
|
2017-02-08 01:07:01 +00:00
|
|
|
module.exports = GlobalStateManager;
|