diff options
Diffstat (limited to 'js/codeq/stateMachine.js')
-rw-r--r-- | js/codeq/stateMachine.js | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/js/codeq/stateMachine.js b/js/codeq/stateMachine.js index cfb27e7..dff89d5 100644 --- a/js/codeq/stateMachine.js +++ b/js/codeq/stateMachine.js @@ -6,8 +6,17 @@ codeq.makeStateMachine = function(def){ var currState = null; return { 'transition': function(name){ + var newState = def[name]; + if (!newState) { + codeq.log.error('Cannot transition to state ' + name + ': it is not defined'); + return; + } + if (newState === currState) { + codeq.log.info('Will not transition between identical states: ' + name); + return; + } if(currState !== null) currState.exit(); - currState = def[name]; + currState = newState; currState.enter.apply(currState,Array.prototype.slice.apply(arguments,[1])); }, 'destroy': function(){ @@ -15,6 +24,7 @@ codeq.makeStateMachine = function(def){ currState = null; }, 'register': function(name,state){ + if (name in def) codeq.log.error('The state ' + name + ' is already registered, overriding'); def[name] = state; } } |