From 0616b3f00653c66b5e34814653e33413b9ec034e Mon Sep 17 00:00:00 2001 From: Rubén Beltrán del Río Date: Sat, 21 Apr 2018 03:48:01 -0500 Subject: Render Sumo (#3) * Use corrected components * Add renderable node * Add render system * Add sumo factory * Add systems and entities to app * Remove reference to weight / accel component * Update dependencies, add pixi and babel-polyfill * Use babel polyfill * Add component to store pixi containers * Add pixi container to the renderable support * Update factories to produce renderables * Update the renderable to use pixi It also uses the new event emitters in serpentity 2.1.0 * Initialize pixi and pass it to renderable system --- lib/factories/sumo.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 lib/factories/sumo.js (limited to 'lib/factories/sumo.js') diff --git a/lib/factories/sumo.js b/lib/factories/sumo.js new file mode 100644 index 0000000..b0e5416 --- /dev/null +++ b/lib/factories/sumo.js @@ -0,0 +1,51 @@ +import { Entity } from '@serpentity/serpentity'; + +import PositionComponent from '@serpentity/components.position'; +import PixiContainerComponent from '../components/pixi_container'; +import PixiFactory from '../factories/pixi'; + +/** + * Factory object that contains many methods to create prefab entities. + * + * @type object + * @name SumoFactory + */ +export default { + + /** + * Creates a sumo entity and adds it to the engine. Can override + * position in the config object + * + * @function createSumo + * @memberof SumoFactory + * @param {external:Serpentity} [engine] the serpentity engine to attach + * to. If not sent, it will not be attached. + * @param {object} [config] the config to override the entity, accepts + * the key `position` as an object with an x and y property. + * @return {external:Serpentity.Entity} the created entity + */ + createSumo(engine, config = {}) { + + const entity = new Entity(); + + entity.addComponent(new PositionComponent(config.position)); + + const container = config.container || { + container: PixiFactory.createSumo() + }; + + // Match the symbol position with the entity position on init + // Otherwise it's up to systems + const position = entity.getComponent(PositionComponent); + container.container.position.x = position.x; + container.container.position.y = position.y; + + entity.addComponent(new PixiContainerComponent(container)); + + if (engine) { + engine.addEntity(entity); + } + + return entity; + } +}; -- cgit