Based on @CodestarGames' proposition in #21.
This is a proposal. I am not sure yet I want to include that. I am concerned that it could change the nature of processors from a simple "function" to something event-based. There are definitely places where I could see abusing the event thing, notably in node.js applications where running a loop is less practical.
The manager will emit events to processors on various occasions. Processors which implement the on method will receive each event emitted by the manager, and then do whatever they want with it. Processors which do not implement the on method will simply be skipped.
The on method accepts 2 arguments, the first one is a string identifying the event, and the second is an object containing data associated with the event. For example:
class MyProcessor {
on(type, data) {
switch (type) {
// ...
}
}
}
For a start, events will be:
| Type |
Data |
COMPONENT_CREATED |
entity, component, state |
COMPONENT_REMOVED |
entity, component |
COMPONENT_STATE_UPDATED |
entity, component, state |
The data sent along with each event will be:
{
entity: 'entity ID',
component: 'component name',
state: {
/* component state */
}
}
Here's what a Processor using that could look like:
class RenderingProcessor {
constructor(manager) {
this.manager = manager;
this._sprites = {};
}
on(type, data) {
switch (type) {
case 'COMPONENT_CREATED':
if (data.component === 'Display') {
let display = data.state;
let position = this.manager.getComponentDataForEntity('Position', data.entity);
let newSprite = this.game.add.sprite(position.x, position.y, display.spriteImagePath);
this._sprites[data.entity] = newSprite;
}
break;
case 'COMPONENT_REMOVED':
if (data.component === 'Display' && this._sprites[data.entity]) {
this._sprites[entity].kill();
delete this._sprites[entity];
}
break;
default:
break;
}
}
update(dt) {
let displays = this.manager.getComponentsData('Display');
for (let entity in displays) {
let display = displays[entity];
let position = this.manager.getComponentDataForEntity('Position', entity);
this._sprites[entity].x = position.x;
this._sprites[entity].y = position.y;
}
}
}
Based on @CodestarGames' proposition in #21.
This is a proposal. I am not sure yet I want to include that. I am concerned that it could change the nature of processors from a simple "function" to something event-based. There are definitely places where I could see abusing the event thing, notably in node.js applications where running a loop is less practical.
The manager will emit events to processors on various occasions. Processors which implement the
onmethod will receive each event emitted by the manager, and then do whatever they want with it. Processors which do not implement theonmethod will simply be skipped.The
onmethod accepts 2 arguments, the first one is a string identifying the event, and the second is an object containing data associated with the event. For example:For a start, events will be:
COMPONENT_CREATEDCOMPONENT_REMOVEDCOMPONENT_STATE_UPDATEDThe data sent along with each event will be:
Here's what a Processor using that could look like: