import Component from '@/ecs/component.js'; export default class Ticking extends Component { instanceFromSchema() { const Instance = super.instanceFromSchema(); Instance.prototype.$$finished = []; Instance.prototype.$$tickingPromises = []; Instance.prototype.addTickingPromise = function(tickingPromise) { this.$$tickingPromises.push(tickingPromise); tickingPromise.then(() => { this.$$finished.push(tickingPromise); }); } Instance.prototype.tick = function(elapsed) { for (const tickingPromise of this.$$finished) { this.$$tickingPromises.splice( this.$$tickingPromises.indexOf(tickingPromise), 1, ); } this.$$finished = []; for (const tickingPromise of this.$$tickingPromises) { tickingPromise.tick(elapsed); } for (const tickingPromise of this.$$finished) { this.$$tickingPromises.splice( this.$$tickingPromises.indexOf(tickingPromise), 1, ); } this.$$finished = []; } return Instance; } static properties = { isTicking: {defaultValue: 1, type: 'uint8'}, }; }