{"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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"}