UNPKG

phaser4-rex-plugins

Version:
137 lines (113 loc) 3.36 kB
import FSMBase from './FSMBase.js'; import GetValue from '../../utils/object/GetValue.js'; import HasListener from '../../utils/eventemitter/HasListener.js'; const StateProperties = ['next', 'exit', 'enter', 'update', 'preupdate', 'postupdate']; class FSM extends FSMBase { /* var config = { start: 'A', // default: undefined states: { A: { next: 'B', // function() { return 'B'; } enter: function() {}, exit: function() {}, update: function(time, delta) {}, preupdate: function(time, delta) {}, postupdate: function(time, delta) {}, }, // ... }, extend: { i: 0, name: 'abc' // ... }, init: function() {}, enable: true, scene: undefined, eventEmitter: true, }; */ shutdown() { this.stopUpdate(); this.stopPreUpdate(); this.stopPostUpdate(); this._scene = undefined; super.shutdown(); } resetFromJSON(o) { super.resetFromJSON(o); this._scene = GetValue(o, 'scene', undefined); return this; } get stateProperties() { return StateProperties; } update(time, delta) { this.runMethod('update', time, delta); } preupdate(time, delta) { this.runMethod('preupdate', time, delta); } postupdate(time, delta) { this.runMethod('postupdate', time, delta); } startUpdate(scene) { if (!scene) { scene = this._scene; } var eventEmitter = scene.sys.events; if (HasListener(eventEmitter, 'update', this.update, this)) { return this; } this._scene = scene; eventEmitter.on('update', this.update, this); return this; } stopUpdate() { if (!this._scene) { return this; } this._scene.sys.events.off('update', this.update, this); return this; } startPreUpdate(scene) { if (!scene) { scene = this._scene; } var eventEmitter = scene.sys.events; if (HasListener(eventEmitter, 'preupdate', this.preupdate, this)) { return this; } this._scene = scene; eventEmitter.on('preupdate', this.preupdate, this); return this; } stopPreUpdate() { if (!this._scene) { return this; } this._scene.sys.events.off('preupdate', this.preupdate, this); return this; } startPostUpdate(scene) { if (!scene) { scene = this._scene; } var eventEmitter = scene.sys.events; if (HasListener(eventEmitter, 'postupdate', this.postupdate, this)) { return this; } this._scene = scene; eventEmitter.on('postupdate', this.postupdate, this); return this; } stopPostUpdate() { if (!this._scene) { return this; } this._scene.sys.events.off('postupdate', this.postupdate, this); return this; } } export default FSM;