import Schema from '@/ecs/schema.js'; export default function(Component) { return 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 schema = new Schema({ type: 'object', properties: { isTicking: {defaultValue: 1, type: 'uint8'}, }, }); }; }