Fsm-js
Fsm-js is a module to create and manipulate finite state machines. The module behaviour-js is required to manipulate fsm-js module. The documentation is located in the folder fsm-js_doc.
Installation
Package
Via npm:
$ npm install fsm-js
Getting started
// Add module for OneShotBehaviour
const OneShotBehaviour = require('behaviour-js').OneShotBehaviour;
// Add module for FSM
const FSM = require('fsm-js');
// To create another variables for this exemple
let message = "";
let count = 0;
// To create class "Behaviour1" inherits from OneShotBehaviour
class Behaviour1 extends OneShotBehaviour{
action(){
message += "Hello";
}
onEnd(){
return "t1";
}
}
// To create class "Behaviour2" inherits from OneShotBehaviour
class Behaviour2 extends OneShotBehaviour{
action(){
message += " ";
}
onEnd(){
return "t2";
}
}
// To create class "Behaviour3" inherits from OneShotBehaviour
class Behaviour3 extends OneShotBehaviour{
action(){
message += "world";
}
onEnd(){
return "t3";
}
}
// To create class "Behaviour4" inherits from OneShotBehaviour
class Behaviour4 extends OneShotBehaviour{
action(){
message += "!";
}
onEnd(){
if(count < 3){
count++;
return "t4";
}
return "t5";
}
}
// To create class "Behaviour5" inherits from OneShotBehaviour
class Behaviour5 extends OneShotBehaviour{
action(){
console.log(message);
}
}
// To create a new FSM
let fsm = new FSM();
// To register all states
fsm.registerFirstState(new Behaviour1(), "b1");
fsm.registerState(new Behaviour2(), "b2");
fsm.registerState(new Behaviour3(), "b3");
fsm.registerState(new Behaviour4(), "b4");
fsm.registerLastState(new Behaviour5(), "b5");
// To register all transitions
fsm.registerTransition("b1", "b2", "t1");
fsm.registerTransition("b2", "b3", "t2");
fsm.registerTransition("b3", "b4", "t3");
fsm.registerTransition("b4", "b4", "t4");
fsm.registerTransition("b4", "b5", "t5");
// To execute the FSM
fsm.run();
Author
If you have any questions or suggestions, please don't hesitate to contact me : belaich.david@outlook.fr .