/** * @Author : Caven Chen */ import { Cesium } from '../../../libs' import State from '../../state/State' import { Util } from '../../utils' import RainShader from '../../material/shader/weather/RainShader.glsl' class Rain { constructor(viewer) { this._id = Util.uuid() this._viewer = viewer this._delegate = undefined this._enable = false this._speed = 10.0 this._mixNum = 0.5 this._state = State.INITIALIZED } get type() { return 'rain' } set enable(enable) { this._enable = enable if (enable && this._viewer && !this._delegate) { this._createPostProcessStage() } this._delegate && (this._delegate.enabled = enable) } get enable() { return this._enable } set speed(speed) { this._speed = speed this._delegate && (this._delegate.uniforms.speed = speed) } get speed() { return this._speed } set mixNum(mixNum) { this._mixNum = mixNum this._delegate && (this._delegate.uniforms.mixNum = mixNum) } get mixNum() { return this._mixNum } /** * * @private */ _createPostProcessStage() { this._delegate = new Cesium.PostProcessStage({ name: this._id, fragmentShader: RainShader, uniforms: { speed: this._speed, mixNum: this._mixNum, }, }) this._viewer.scene.postProcessStages.add(this._delegate) } } export default Rain