import { System } from '@serpentity/serpentity'; import PhysicalWithAttributesNode from '../nodes/physical_with_attributes'; import Config from '../config'; /** * Distribuets physics data to the related components * * @extends {external:Serpentity.System} * @class PhysicsToAttributesSystem * @param {object} config a configuration object to extend. */ export default class PhysicsToAttributesSystem extends System { constructor(config = {}) { super(); /** * The node collection of physics entities * * @property {external:Serpentity.NodeCollection} physicalEntities * @instance * @memberof PhysicsToAttributesSystem */ this.physicalEntities = null; } /** * Initializes system when added. Requests physics nodes * * @function added * @memberof PhysicsToAttributesSystem * @instance * @param {external:Serpentity.Engine} engine the serpentity engine to * which we are getting added */ added(engine) { this.physicalEntities = engine.getNodes(PhysicalWithAttributesNode); } /** * Clears system resources when removed. * * @function removed * @instance * @memberof PhysicsToAttributesSystem */ removed() { this.physicalEntities = null; } /** * Runs on every update of the loop. Updates the other components * based on physics * * @function update * @instance * @param {Number} currentFrameDuration the duration of the current * frame * @memberof PhysicsToAttributesSystem */ update(currentFrameDuration) { for (const physicalEntity of this.physicalEntities) { physicalEntity.position.x = physicalEntity.body.body.position.x * Config.meterSize; physicalEntity.position.y = physicalEntity.body.body.position.y * Config.meterSize; physicalEntity.angle.angle = physicalEntity.body.body.angle; } } }