{"version":3,"file":"particleSystem.mjs","sources":["../../../../../../packages/components/overlays/wind/particleSystem.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-10-28 10:10:09\n * @LastEditTime: 2022-03-09 14:20:51\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\components\\overlays\\wind\\particleSystem.ts\n */\n\nimport ParticlesComputing from './particlesComputing'\nimport ParticlesRendering from './particlesRendering'\nimport { ParticleSystemOptions, VcWindData, ViewerParameters } from './types'\nclass ParticleSystem {\n  context: any\n  data: VcWindData\n  particleSystemOptions: ParticleSystemOptions\n  viewerParameters: ViewerParameters\n  particlesComputing: ParticlesComputing\n  particlesRendering: ParticlesRendering\n  constructor(context, data: VcWindData, particleSystemOptions: ParticleSystemOptions, viewerParameters: ViewerParameters) {\n    this.context = context\n    this.data = data\n    this.particleSystemOptions = particleSystemOptions\n    this.viewerParameters = viewerParameters\n\n    this.particlesComputing = new ParticlesComputing(this.context, this.data, this.particleSystemOptions, this.viewerParameters)\n    this.particlesRendering = new ParticlesRendering(\n      this.context,\n      this.data,\n      this.particleSystemOptions,\n      this.viewerParameters,\n      this.particlesComputing\n    )\n  }\n\n  canvasResize(context) {\n    this.particlesComputing.destroyParticlesTextures()\n    Object.keys(this.particlesComputing.windTextures).forEach(key => {\n      this.particlesComputing.windTextures[key].destroy()\n    })\n\n    Object.keys(this.particlesRendering.framebuffers).forEach(key => {\n      this.particlesRendering.framebuffers[key].destroy()\n    })\n\n    this.context = context\n    this.particlesComputing = new ParticlesComputing(this.context, this.data, this.particleSystemOptions, this.viewerParameters)\n    this.particlesRendering = new ParticlesRendering(\n      this.context,\n      this.data,\n      this.particleSystemOptions,\n      this.viewerParameters,\n      this.particlesComputing\n    )\n  }\n\n  clearFramebuffers() {\n    const clearCommand = new Cesium.ClearCommand({\n      color: new Cesium.Color(0.0, 0.0, 0.0, 0.0),\n      depth: 1.0,\n      framebuffer: undefined,\n      pass: Cesium.Pass.OPAQUE\n    })\n\n    Object.keys(this.particlesRendering.framebuffers).forEach(key => {\n      clearCommand.framebuffer = this.particlesRendering.framebuffers[key]\n      clearCommand.execute(this.context)\n    })\n  }\n\n  refreshParticles(maxParticlesChanged) {\n    this.clearFramebuffers()\n\n    this.particlesComputing.destroyParticlesTextures()\n    this.particlesComputing.createParticlesTextures(this.context, this.particleSystemOptions, this.viewerParameters)\n\n    if (maxParticlesChanged) {\n      const geometry = this.particlesRendering.createSegmentsGeometry(this.particleSystemOptions)\n      this.particlesRendering.primitives.segments.geometry = geometry\n      const vertexArray = Cesium.VertexArray.fromGeometry({\n        context: this.context,\n        geometry: geometry,\n        attributeLocations: this.particlesRendering.primitives.segments.attributeLocations,\n        bufferUsage: Cesium.BufferUsage.STATIC_DRAW\n      })\n      this.particlesRendering.primitives.segments.commandToExecute.vertexArray = vertexArray\n    }\n  }\n\n  applyParticleSystemOptions(particleSystemOptions) {\n    let maxParticlesChanged = false\n    if (this.particleSystemOptions.maxParticles !== particleSystemOptions.maxParticles) {\n      maxParticlesChanged = true\n    }\n\n    Object.keys(particleSystemOptions).forEach(key => {\n      this.particleSystemOptions[key] = particleSystemOptions[key]\n    })\n    this.refreshParticles(maxParticlesChanged)\n  }\n\n  applyViewerParameters(viewerParameters) {\n    Object.keys(viewerParameters).forEach(key => {\n      this.viewerParameters[key] = viewerParameters[key]\n    })\n    this.refreshParticles(false)\n  }\n}\n\nexport default ParticleSystem\n"],"names":[],"mappings":"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"}