2.1.5 • Published 9 years ago

finitestatemachine v2.1.5

Weekly downloads
4
License
MIT
Repository
github
Last release
9 years ago

finitestatemachine

A finite state machine built to use as a mechanism to feed other/larger components. JavaScript performance oriented.

Universal module defined to be used with requirejs, node, commonjs, or global scoped if no module loader is used.

  • All files in the dist folder are minified for production use.
  • All files in the src directory are the source code for development use.
  • Packages point at the dist minified code with source maps.
  • nodejs
  • npm install
  • npm install -g gulp

gulp test

Each process is dependent upon the previous. If one fails the build process exits.

  • gulp
  • gulp test (Unit specifications)
  • gulp build (Test, folder clean-ups, minification, source maps, renaming)
  • gulp deploy (Test, build, versioning)

npm: npm install finitestatemachine bower: bower install finitestatemachine

var stateExample = {
    enter: function() {},
    leave: function() {},
    events: {                               // Optional
        'event': 'State',
    },
    transitions: {
        beforeEnter: function() {},         // Optional
        beforeEnterFromStill: function() {},// Optional
        leaveToWalking: function() {},      // Optional
    }
};

var movementStates = {
    'Still': {
        enter: function() {
            console.log('Standing Still.');
        },
        leave: function() {
            console.log('Leaving \'Still\'.');
        },
        transitions: {
            beforeEnter: function() {
                console.log('Transitioning to \'Still\'.');
            }
        },
        events: {
            'move': 'Walking',
            'sprint': 'Running'
        }
    },
    'Walking': {
        enter: function() {
            console.log('Walking.');
        },
        leave: function() {
            console.log('Leaving \'Walking\'.');
        },
        transitions: {
            beforeEnter: function() {
                console.log('Transitioning to \'Walking\'.');
            }
        },
        events: {
            'move': 'Running',
            'sprint': 'Running',
            'relax': 'Still',
            'stop': 'Still'
        }
    },
    'Running': {
        enter: function() {
            console.log('Running.');
        },
        leave: function() {
            console.log('Leaving \'Running\'.');
        },
        transitions: {
            beforeEnterFromWalking: function() {
                console.log('Enter \'Running\' from \'Walking\'.');
            },
            leaveToStill: function() {
                console.log('Leave \'Running\' to \'Still\'.');
            }
        },
        events: {
            'relax': 'Walking',
            'stop': 'Still'
        }
    }
}

var listener1 = function(data) {
    console.log('State change listener!');
    console.log(JSON.stringify(data));
};

var movementStateManager = new FiniteStateMachine(this);

console.log('Adding states.');
movementStateManager.initialize(movementStates, 'Still');

console.log('Initial state: ' + movementStateManager.getCurrentStateId());

console.log('Handle event: move');
movementStateManager.handleEvent('move');

console.log('Handle event: move');
movementStateManager.handleEvent('relax');

console.log('Handle event: move');
movementStateManager.handleEvent('sprint');

console.log('Handle event: move');
movementStateManager.handleEvent('relax');
  • See statemanager package release notes.
  • See statemanager package release notes.
  • Complete rework.
  • Built on top of my StateManager (npm/bower install statemanager). A machine is meant to have managers so this makes more sense and extracts reusable functionality.
  • handleStateEvent() is now handleEvent().
  • Added getPreviousState() to fetch the previous state.
  • Changed global variable name to FiniteStateMachine but kept support for global FSM if one doesn't exist to avoid confilcts.
  • Added ability to reset to the initial state.
  • Added ability to pass data to handleStateEvent(event, data), changeState(state, data), and triggerChangeEvents(event, data). This allows for the data to be distributed to all change event listeners.

    Ex. var listener = function(event){ console.log(event.event); console.log(event.from); console.log(event.to); console.log(event.data); // Can be anything but typcially would be an object. }

  • Fixed sourcemap linking for minified files. This is also fixed as part of the build process to automate proper sourcemap creation and linking.
  • Removed ability for addStates' states parameter to be optional.
  • setCurrentState no longer tiggers the change events. Use triggerChangeEvents to explicity trigger events for the current state.
  • changeState has been deprecated to handleStateEvent.
  • changeState now takes a state as the parameter, changes the current state, and triggers the change events with the event.event data being undefined.
  • Previous state remains undefined until the state changes after initial state.
  • Added getPreviousState() to fetch the previous state.
  • Changed global variable name to FiniteStateMachine but kept support for global FSM if one doesn't exist to avoid confilcts.
2.1.5

9 years ago

2.1.4

9 years ago

2.1.3

9 years ago

2.1.2

9 years ago

2.1.1

9 years ago

2.1.0

9 years ago

2.0.1

9 years ago

1.2.0

9 years ago

1.1.6

9 years ago

1.1.5

9 years ago

1.0.5

9 years ago

1.0.4

9 years ago

1.0.3

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago

0.0.9

9 years ago