import { System } from '@serpentity/serpentity'; import { Graphics } from 'pixi.js'; import PositionComponent from '@serpentity/components.position'; import RenderableCoupleNode from '../nodes/renderable_couple'; /** * Renders renderable objects using pixi * * @extends {external:Serpentity.System} * @class CreateCouplingLineSystem * @param {object} config a configuration object to extend. */ export default class CreateCouplingLineSystem extends System { constructor(config = {}) { super(); /** * The node collection of coupled entities entities * * @property {external:Serpentity.NodeCollection} coupledEntities * @instance * @memberof CreateCouplingLineSystem */ this.coupledEntities = null; } /** * Initializes system when added. Requests renderable nodes and * * @function added * @memberof CreateCouplingLineSystem * @instance * @param {external:Serpentity.Engine} engine the serpentity engine to * which we are getting added */ added(engine) { this.coupledEntities = engine.getNodes(RenderableCoupleNode); } /** * Clears system resources when removed. * * @function removed * @instance * @memberof CreateCouplingLineSystem */ removed() { this.coupledEntities = null; } /** * Runs on every update of the loop. Does nothing. * * @function update * @instance * @param {Number} currentFrameDuration the duration of the current * frame * @memberof CreateCouplingLineSystem */ update(currentFrameDuration) { for (const rootEntity of this.coupledEntities) { const rootGraphic = rootEntity.container.container; rootGraphic.removeChildren(); let lineGraphic = new Graphics(); lineGraphic = lineGraphic.lineStyle(5, 0xffffff, 0.9); let initialPosition = false; for (const coupledEntity of rootEntity.coupledEntities.coupledEntities) { if (coupledEntity.hasComponent(PositionComponent)) { const position = coupledEntity.getComponent(PositionComponent); if (!initialPosition) { lineGraphic = lineGraphic.moveTo(position.x, position.y); initialPosition = true; continue; } lineGraphic = lineGraphic.lineTo(position.x, position.y); } } rootGraphic.addChild(lineGraphic); } } }