utils/weather/Lightning.js

/*
 * @Author: jianlei wang
 * @Date: 2024-02-22 17:32:36
 * @Last Modified by: jianlei wang
 * @Last Modified time: 2024-03-28 15:18:24
 */
import { Cesium } from '../../../namespace'
import lightingShader from '../shaders/weather/lightning.glsl'
/**
 * 闪电效果
 * @class
 */
class LightningEffect {
  /**
   * 构造函数
   * @param {Object} viewer 地图场景对象
   */
  constructor(viewer) {
    this._viewer = viewer
  }
  _init() {
    this._clear()
    this._lighting = new Cesium.PostProcessStage({
      name: 'weather_lighting',
      fragmentShader: lightingShader,
      uniforms: {
        fogByDistance: new Cesium.Cartesian4(10, 0.0, 1000, 0.8),
        fogColor: Cesium.Color.WHITE,
      },
    })
    this._viewer.scene.postProcessStages.add(this._lighting)
  }
  /**
   * 销毁对象
   */
  destroy() {
    this._clear()
    this._lighting.destroy()
  }
  _clear() {
    if (!this._viewer || !this._lighting) return
    this._viewer.scene.postProcessStages.remove(this._lighting)
  }
  /**
   * 控制雷电显示
   * @type {Boolean}
   */
  set show(bool) {
    bool ? this._init() : this._clear()
  }
}

export default LightningEffect