import { System } from '@serpentity/serpentity'; import DrawnDasherNode from '../nodes/drawn_dasher'; /** * Shows a different graphic during the duration of lock * * @extends {external:Serpentity.System} * @class DrawDashSystem * @param {object} config a configuration object to extend. */ export default class DrawDashSystem extends System { constructor(config = {}) { super(); /** * The node collection of dashers * * @property {external:Serpentity.NodeCollection} drawnDashers * @instance * @memberof DrawDashSystem */ this.drawnDashers = null; } /** * Initializes system when added. Requests drawn dasher nodes * * @function added * @memberof DrawDashSystem * @instance * @param {external:Serpentity.Engine} engine the serpentity engine to * which we are getting added */ added(engine) { this.drawnDashers = engine.getNodes(DrawnDasherNode); } /** * Clears system resources when removed. * * @function removed * @instance * @memberof DrawDashSystem */ removed() { this.drawnDashers = null; } /** * Runs on every update of the loop. Updates image depending on if * dash is locked * * @function update * @instance * @param {Number} currentFrameDuration the duration of the current * frame * @memberof DrawDashSystem */ update(currentFrameDuration) { for (const drawnDasher of this.drawnDashers) { const dash = drawnDasher.dash; const container = drawnDasher.container.container; if (dash.locked) { this._drawDashFace(container); continue; } this._removeDashFace(container); } } // Draws the dash face _drawDashFace(container) { const blush = container.getChildByName('blush'); const smile = container.getChildByName('smile'); const frown = container.getChildByName('frown'); blush.visible = true; frown.visible = true; smile.visible = false; } // Removes the dash face _removeDashFace(container) { const blush = container.getChildByName('blush'); const smile = container.getChildByName('smile'); const frown = container.getChildByName('frown'); blush.visible = false; frown.visible = false; smile.visible = true; } }