UNPKG

@vtx/cs-map

Version:

React components for Vortex

175 lines (168 loc) 9.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _cesium = require("cesium"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } /** 0-无效果,1-下雪,2-下雨,3-雾霾 */ var Weather = exports["default"] = /*#__PURE__*/function () { function Weather(viewer) { _classCallCheck(this, Weather); _defineProperty(this, "viewer", void 0); /** 天气状态 */ _defineProperty(this, "status", 0); /** 下雪阶段 */ _defineProperty(this, "snowStage", null); /** 下雨阶段 */ _defineProperty(this, "rainStage", null); /** 雾霾阶段 */ _defineProperty(this, "fogStage", null); this.viewer = viewer; } _createClass(Weather, [{ key: "snow", value: /** * @name: snow * @Date: 2023-09-01 15:27:58 * @description: 下雪 * @param {number} snowSize 大小 * @param {number} snowSpeed 速度 */ function snow(_ref) { var snowSize = _ref.snowSize, snowSpeed = _ref.snowSpeed; snowSize = snowSize || 0.02; snowSpeed = snowSpeed || 30.0; this.remove(); this.status = 1; this.snowStage = new _cesium.PostProcessStage({ name: 'snow', fragmentShader: "uniform sampler2D colorTexture;\n varying vec2 v_textureCoordinates;\n uniform float snowSpeed;\n uniform float snowSize;\n float snow(vec2 uv,float scale)\n {\n float time=czm_frameNumber/snowSpeed;\n float w=smoothstep(1.,0.,-uv.y*(scale/10.));if(w<.1)return 0.;\n uv+=time/scale;uv.y+=time*2./scale;uv.x+=sin(uv.y+time*.5)/scale;\n uv*=scale;vec2 s=floor(uv),f=fract(uv),p;float k=3.,d;\n p=.5+.35*sin(11.*fract(sin((s+p+scale)*mat2(7,3,6,5))*5.))-f;d=length(p);k=min(d,k);\n k=smoothstep(0.,k,sin(f.x+f.y)*snowSize);\n return k*w;\n }\n void main(void){\n vec2 resolution=czm_viewport.zw;\n vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\n vec3 finalColor=vec3(0);\n //float c=smoothstep(1.,0.3,clamp(uv.y*.3+.8,0.,.75));\n float c=0.;\n c+=snow(uv,30.)*.0;\n c+=snow(uv,20.)*.0;\n c+=snow(uv,15.)*.0;\n c+=snow(uv,10.);\n c+=snow(uv,8.);\n c+=snow(uv,6.);\n c+=snow(uv,5.);\n finalColor=(vec3(c));\n gl_FragColor=mix(texture2D(colorTexture,v_textureCoordinates),vec4(finalColor,1),.5);\n }\n ", uniforms: { snowSize: snowSize, snowSpeed: snowSpeed } }); this.viewer.scene.postProcessStages.add(this.snowStage); } /** * @name: rain * @Date: 2023-09-01 15:37:01 * @description: 下雨 * @param {number} tiltAngle 倾斜角度 * @param {number} rainSize 大小 * @param {number} rainSpeed 速度 */ }, { key: "rain", value: function rain(_ref2) { var tiltAngle = _ref2.tiltAngle, rainSize = _ref2.rainSize, rainSpeed = _ref2.rainSpeed; tiltAngle = tiltAngle || -0.6; rainSize = rainSize || 0.3; rainSpeed = rainSpeed || 60.0; this.remove(); this.status = 2; this.rainStage = new _cesium.PostProcessStage({ name: 'rain', fragmentShader: "uniform sampler2D colorTexture;\n varying vec2 v_textureCoordinates;\n uniform float tiltAngle;\n uniform float rainSize;\n uniform float rainSpeed;\n float hash(float x) {\n return fract(sin(x * 133.3) * 13.13);\n }\n void main(void) {\n float time = czm_frameNumber / rainSpeed;\n vec2 resolution = czm_viewport.zw;\n vec2 uv = (gl_FragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y);\n vec3 c = vec3(.6, .7, .8);\n float a = tiltAngle;\n float si = sin(a), co = cos(a);\n uv *= mat2(co, -si, si, co);\n uv *= length(uv + vec2(0, 4.9)) * rainSize + 1.;\n float v = 1. - sin(hash(floor(uv.x * 100.)) * 2.);\n float b = clamp(abs(sin(20. * time * v + uv.y * (5. / (2. + v)))) - .95, 0., 1.) * 20.;\n c *= v * b;\n gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(c, 1), .2);\n }\n ", uniforms: { tiltAngle: tiltAngle, rainSize: rainSize, rainSpeed: rainSpeed } }); this.viewer.scene.postProcessStages.add(this.rainStage); } /** * @name: fog * @Date: 2023-09-01 15:37:33 * @description: 雾霾 * @param {number} visibility 可见度 * @param {Color} fogColor 颜色 */ }, { key: "fog", value: function fog(_ref3) { var visibility = _ref3.visibility, fogColor = _ref3.fogColor; visibility = visibility || 0.1; fogColor = fogColor || new _cesium.Color(0.8, 0.8, 0.8, 0.5); this.remove(); this.status = 3; this.fogStage = new _cesium.PostProcessStage({ name: 'fog', fragmentShader: "uniform sampler2D colorTexture;\n uniform sampler2D depthTexture;\n uniform float visibility;\n uniform vec4 fogColor;\n varying vec2 v_textureCoordinates; \n void main(void) \n { \n vec4 origcolor = texture2D(colorTexture, v_textureCoordinates); \n float depth = czm_readDepth(depthTexture, v_textureCoordinates); \n vec4 depthcolor = texture2D(depthTexture, v_textureCoordinates); \n float f = visibility * (depthcolor.r - 0.3) / 0.2; \n if (f < 0.0) f = 0.0; \n else if (f > 1.0) f = 1.0; \n gl_FragColor = mix(origcolor, fogColor, f); \n }\n\n ", uniforms: { visibility: visibility, fogColor: fogColor } }); this.viewer.scene.postProcessStages.add(this.fogStage); } }, { key: "setValue", value: function setValue(value, options) { options = options || {}; this.remove(); // 移除 if (this[value]) { this[value](options); } } /** * @name: remove * @Date: 2023-09-01 16:01:30 * @description: 移除天气 */ }, { key: "remove", value: function remove() { if (this.status == 0) return; switch (this.status) { case 1: this.viewer.scene.postProcessStages.remove(this.snowStage); break; case 2: this.viewer.scene.postProcessStages.remove(this.rainStage); break; case 3: this.viewer.scene.postProcessStages.remove(this.fogStage); break; } this.status = 0; } /** * @name: show * @Date: 2023-09-01 17:38:44 * @description: 控制显示隐藏 * @param {boolean} visible 是否显示 */ }, { key: "show", value: function show(visible) { if (this.status == 0) return; switch (this.status) { case 1: this.snowStage.enabled = visible; break; case 2: this.rainStage.enabled = visible; break; case 3: this.fogStage.enabled = visible; break; } } }]); return Weather; }(); //# sourceMappingURL=Weather.js.map