mars3d-wind 3.7.8 → 3.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Mars3D平台插件,支持气象 风向图 功能插件 mars3d-wind
3
3
  *
4
- * 版本信息:v3.7.8
5
- * 编译日期:2024-03-25 20:23:59
4
+ * 版本信息:v3.7.9
5
+ * 编译日期:2024-04-06 21:23:39
6
6
  * 版权所有:Copyright by 火星科技 http://mars3d.cn
7
7
  * 使用单位:免费公开版 ,2024-01-15
8
8
  */
@@ -11,5 +11,5 @@
11
11
  typeof define === 'function' && define.amd ? define(['exports', 'mars3d'], factory) :
12
12
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["mars3d-wind"] = {}, global.mars3d));
13
13
  })(this, (function (exports, mars3d) {
14
- 'use strict';const _0x2549c6=_0x6b3e;(function(_0x568523,_0x4c79d5){const _0x2f0dfd=_0x6b3e,_0x18e495=_0x568523();while(!![]){try{const _0x24d2f1=parseInt(_0x2f0dfd(0x15e))/0x1*(-parseInt(_0x2f0dfd(0x8f))/0x2)+parseInt(_0x2f0dfd(0xc9))/0x3+parseInt(_0x2f0dfd(0x12c))/0x4+-parseInt(_0x2f0dfd(0x144))/0x5*(parseInt(_0x2f0dfd(0x15f))/0x6)+-parseInt(_0x2f0dfd(0xeb))/0x7+-parseInt(_0x2f0dfd(0xf8))/0x8+-parseInt(_0x2f0dfd(0x11c))/0x9*(-parseInt(_0x2f0dfd(0x136))/0xa);if(_0x24d2f1===_0x4c79d5)break;else _0x18e495['push'](_0x18e495['shift']());}catch(_0x4b5767){_0x18e495['push'](_0x18e495['shift']());}}}(_0x5322,0x61412));function _interopNamespace(_0x522c9d){const _0x49566e=_0x6b3e;if(_0x522c9d&&_0x522c9d[_0x49566e(0x158)])return _0x522c9d;var _0x15265b=Object[_0x49566e(0x7f)](null);return _0x522c9d&&Object[_0x49566e(0xf9)](_0x522c9d)['forEach'](function(_0x561537){if(_0x561537!=='default'){var _0x3461f0=Object['getOwnPropertyDescriptor'](_0x522c9d,_0x561537);Object['defineProperty'](_0x15265b,_0x561537,_0x3461f0['get']?_0x3461f0:{'enumerable':!![],'get':function(){return _0x522c9d[_0x561537];}});}}),_0x15265b['default']=_0x522c9d,_0x15265b;}var mars3d__namespace=_interopNamespace(mars3d);const Cesium$7=mars3d__namespace['Cesium'];function getU(_0x3875b9,_0xf68614){const _0x1d426b=_0x6b3e,_0x5675fa=_0x3875b9*Math['cos'](Cesium$7[_0x1d426b(0xfb)]['toRadians'](_0xf68614));return _0x5675fa;}function getV(_0x5aa139,_0x13c151){const _0x3e4eda=_0x6b3e,_0x8dd4c=_0x5aa139*Math['sin'](Cesium$7[_0x3e4eda(0xfb)]['toRadians'](_0x13c151));return _0x8dd4c;}function getSpeed(_0x1258f3,_0x78991c){const _0x39fdf5=_0x6b3e,_0x33fd6b=Math[_0x39fdf5(0x106)](Math['pow'](_0x1258f3,0x2)+Math['pow'](_0x78991c,0x2));return _0x33fd6b;}function _0x6b3e(_0x3d18e8,_0x33784b){const _0x532280=_0x5322();return _0x6b3e=function(_0x6b3e63,_0x38da6e){_0x6b3e63=_0x6b3e63-0x78;let _0x3f29ed=_0x532280[_0x6b3e63];return _0x3f29ed;},_0x6b3e(_0x3d18e8,_0x33784b);}function getDirection(_0x2b6920,_0x167872){let _0x376104=Cesium$7['Math']['toDegrees'](Math['atan2'](_0x167872,_0x2b6920));return _0x376104+=_0x376104<0x0?0x168:0x0,_0x376104;}var WindUtil={'__proto__':null,'getU':getU,'getV':getV,'getSpeed':getSpeed,'getDirection':getDirection};const Cesium$6=mars3d__namespace['Cesium'];class CustomPrimitive{constructor(_0x3e871b){const _0x5b2ef4=_0x6b3e;this['commandType']=_0x3e871b['commandType'],this['geometry']=_0x3e871b[_0x5b2ef4(0x157)],this['attributeLocations']=_0x3e871b['attributeLocations'],this['primitiveType']=_0x3e871b['primitiveType'],this['uniformMap']=_0x3e871b['uniformMap'],this['vertexShaderSource']=_0x3e871b['vertexShaderSource'],this[_0x5b2ef4(0x131)]=_0x3e871b['fragmentShaderSource'],this['rawRenderState']=_0x3e871b['rawRenderState'],this['framebuffer']=_0x3e871b['framebuffer'],this['outputTexture']=_0x3e871b['outputTexture'],this['autoClear']=_0x3e871b['autoClear']??![],this[_0x5b2ef4(0x9b)]=_0x3e871b['preExecute'],this['show']=!![],this[_0x5b2ef4(0x120)]=undefined,this[_0x5b2ef4(0xbd)]=undefined,this['autoClear']&&(this[_0x5b2ef4(0xbd)]=new Cesium$6['ClearCommand']({'color':new Cesium$6['Color'](0x0,0x0,0x0,0x0),'depth':0x1,'framebuffer':this[_0x5b2ef4(0xe0)],'pass':Cesium$6[_0x5b2ef4(0x148)]['OPAQUE']}));}['createCommand'](_0x253b98){const _0xb66e96=_0x6b3e;switch(this['commandType']){case'Draw':{const _0x7c9a7c=Cesium$6['VertexArray']['fromGeometry']({'context':_0x253b98,'geometry':this['geometry'],'attributeLocations':this['attributeLocations'],'bufferUsage':Cesium$6['BufferUsage'][_0xb66e96(0xd3)]}),_0x5db46c=Cesium$6['ShaderProgram']['fromCache']({'context':_0x253b98,'attributeLocations':this['attributeLocations'],'vertexShaderSource':this['vertexShaderSource'],'fragmentShaderSource':this['fragmentShaderSource']}),_0x50e067=Cesium$6['RenderState']['fromCache'](this['rawRenderState']);return new Cesium$6['DrawCommand']({'primitiveType':this['primitiveType'],'shaderProgram':_0x5db46c,'vertexArray':_0x7c9a7c,'modelMatrix':Cesium$6['Matrix4']['IDENTITY'],'renderState':_0x50e067,'uniformMap':this['uniformMap'],'castShadows':![],'receiveShadows':![],'framebuffer':this['framebuffer'],'pass':Cesium$6['Pass']['OPAQUE'],'pickOnly':!![],'owner':this});}case _0xb66e96(0x110):{return new Cesium$6['ComputeCommand']({'owner':this,'fragmentShaderSource':this['fragmentShaderSource'],'uniformMap':this['uniformMap'],'outputTexture':this['outputTexture'],'persists':!![]});}}}['setGeometry'](_0x484bfe,_0x2803b3){const _0x26bb91=_0x6b3e;this[_0x26bb91(0x157)]=_0x2803b3;const _0x3d92ac=Cesium$6[_0x26bb91(0x11a)]['fromGeometry']({'context':_0x484bfe,'geometry':this['geometry'],'attributeLocations':this['attributeLocations'],'bufferUsage':Cesium$6['BufferUsage']['STATIC_DRAW']});this[_0x26bb91(0x120)][_0x26bb91(0xe5)]=_0x3d92ac;}['update'](_0x59f9b7){const _0x2a83d7=_0x6b3e;if(!this['show'])return;if(_0x59f9b7['mode']!==Cesium$6[_0x2a83d7(0x9e)]['SCENE3D'])return;!Cesium$6['defined'](this[_0x2a83d7(0x120)])&&(this['commandToExecute']=this[_0x2a83d7(0x13b)](_0x59f9b7['context'])),Cesium$6[_0x2a83d7(0x125)](this[_0x2a83d7(0x9b)])&&this['preExecute'](),Cesium$6['defined'](this['clearCommand'])&&_0x59f9b7[_0x2a83d7(0x115)][_0x2a83d7(0xad)](this[_0x2a83d7(0xbd)]),_0x59f9b7[_0x2a83d7(0x115)][_0x2a83d7(0xad)](this[_0x2a83d7(0x120)]);}['isDestroyed'](){return![];}[_0x2549c6(0x116)](){const _0x26ab6f=_0x2549c6;if(this[_0x26ab6f(0xbd)]){var _0x464ca6,_0xbb4e9e;(_0x464ca6=this['clearCommand'])!==null&&_0x464ca6!==void 0x0&&_0x464ca6['vertexArray']&&this['clearCommand']['vertexArray']['destroy'](),(_0xbb4e9e=this['clearCommand'])!==null&&_0xbb4e9e!==void 0x0&&_0xbb4e9e['shaderProgram']&&this['clearCommand']['shaderProgram']['destroy'](),delete this['clearCommand'];}return this['commandToExecute']&&(this[_0x26ab6f(0x120)][_0x26ab6f(0xe5)]&&this[_0x26ab6f(0x120)]['vertexArray']['destroy'](),this['commandToExecute'][_0x26ab6f(0x7e)]&&this['commandToExecute']['shaderProgram']['destroy'](),delete this[_0x26ab6f(0x120)]),Cesium$6['destroyObject'](this);}}const Cesium$5=mars3d__namespace['Cesium'],Util=(function(){const _0xc1fb9e=function(){const _0x336aac=_0x6b3e,_0x1a6a21=new Cesium$5['Geometry']({'attributes':new Cesium$5['GeometryAttributes']({'position':new Cesium$5['GeometryAttribute']({'componentDatatype':Cesium$5['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x3,'values':new Float32Array([-0x1,-0x1,0x0,0x1,-0x1,0x0,0x1,0x1,0x0,-0x1,0x1,0x0])}),'st':new Cesium$5['GeometryAttribute']({'componentDatatype':Cesium$5[_0x336aac(0x8a)]['FLOAT'],'componentsPerAttribute':0x2,'values':new Float32Array([0x0,0x0,0x1,0x0,0x1,0x1,0x0,0x1])})}),'indices':new Uint32Array([0x3,0x2,0x0,0x0,0x2,0x1])});return _0x1a6a21;},_0x24159b=function(_0x35eff9,_0x2ee9f9){const _0x1f1ae8=_0x6b3e;if(Cesium$5[_0x1f1ae8(0x125)](_0x2ee9f9)){const _0x116809={};_0x116809[_0x1f1ae8(0xe4)]=_0x2ee9f9,_0x35eff9['source']=_0x116809;}const _0x1b2460=new Cesium$5['Texture'](_0x35eff9);return _0x1b2460;},_0x3280fd=function(_0x4b1637,_0x15ec34,_0x563a8c){const _0xde825c=new Cesium$5['Framebuffer']({'context':_0x4b1637,'colorTextures':[_0x15ec34],'depthTexture':_0x563a8c});return _0xde825c;},_0x2ff7ea=function(_0x23406a){const _0x5401ac=_0x6b3e,_0x349687=!![],_0x34598e=![],_0x178cc0={'viewport':_0x23406a[_0x5401ac(0xb2)],'depthTest':_0x23406a['depthTest'],'depthMask':_0x23406a['depthMask'],'blending':_0x23406a['blending']},_0x2e616a=Cesium$5[_0x5401ac(0x162)][_0x5401ac(0x124)](_0x349687,_0x34598e,_0x178cc0);return _0x2e616a;},_0x3d723a=function(_0x1f5960){const _0x192417=_0x6b3e,_0x580f7b={},_0x20b8b3=Cesium$5['Math']['mod'](_0x1f5960[_0x192417(0xcd)],Cesium$5['Math']['TWO_PI']),_0x261224=Cesium$5['Math'][_0x192417(0x11f)](_0x1f5960[_0x192417(0x99)],Cesium$5[_0x192417(0xfb)]['TWO_PI']),_0x10d6dc=_0x1f5960['width'];let _0x452ae2,_0x2fba45;_0x10d6dc>Cesium$5['Math']['THREE_PI_OVER_TWO']?(_0x452ae2=0x0,_0x2fba45=Cesium$5['Math']['TWO_PI']):_0x261224-_0x20b8b3<_0x10d6dc?(_0x452ae2=_0x20b8b3,_0x2fba45=_0x20b8b3+_0x10d6dc):(_0x452ae2=_0x20b8b3,_0x2fba45=_0x261224);_0x580f7b['lon']={'min':Cesium$5[_0x192417(0xfb)]['toDegrees'](_0x452ae2),'max':Cesium$5['Math']['toDegrees'](_0x2fba45)};const _0x4edf42=_0x1f5960[_0x192417(0x14b)],_0xf9feeb=_0x1f5960['north'],_0x46f6a5=_0x1f5960['height'],_0x95da14=_0x46f6a5>Cesium$5[_0x192417(0xfb)]['PI']/0xc?_0x46f6a5/0x2:0x0;let _0x3f052f=Cesium$5[_0x192417(0xfb)]['clampToLatitudeRange'](_0x4edf42-_0x95da14),_0x5735e2=Cesium$5['Math']['clampToLatitudeRange'](_0xf9feeb+_0x95da14);return _0x3f052f<-Cesium$5['Math']['PI_OVER_THREE']&&(_0x3f052f=-Cesium$5[_0x192417(0xfb)][_0x192417(0x8c)]),_0x5735e2>Cesium$5['Math']['PI_OVER_THREE']&&(_0x5735e2=Cesium$5['Math']['PI_OVER_TWO']),_0x580f7b['lat']={'min':Cesium$5['Math']['toDegrees'](_0x3f052f),'max':Cesium$5['Math']['toDegrees'](_0x5735e2)},_0x580f7b;};return{'getFullscreenQuad':_0xc1fb9e,'createTexture':_0x24159b,'createFramebuffer':_0x3280fd,'createRawRenderState':_0x2ff7ea,'viewRectangleToLonLatRange':_0x3d723a};}());var segmentDraw_vert='in\x20vec2\x20st;\x0a//\x20it\x20is\x20not\x20normal\x20itself,\x20but\x20used\x20to\x20control\x20normal\x0ain\x20vec3\x20normal;\x20//\x20(point\x20to\x20use,\x20offset\x20sign,\x20not\x20used\x20component)\x0a\x0auniform\x20sampler2D\x20currentParticlesPosition;\x0auniform\x20sampler2D\x20postProcessingPosition;\x0auniform\x20sampler2D\x20postProcessingSpeed;\x0a\x0auniform\x20float\x20particleHeight;\x0a\x0auniform\x20float\x20aspect;\x0auniform\x20float\x20pixelSize;\x0auniform\x20float\x20lineWidth;\x0a\x0aout\x20float\x20speedNormalization;\x0a\x0avec3\x20convertCoordinate(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20WGS84\x20(lon,\x20lat,\x20lev)\x20->\x20ECEF\x20(x,\x20y,\x20z)\x0a\x20\x20\x20\x20//\x20see\x20https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates\x20for\x20detail\x0a\x0a\x20\x20\x20\x20//\x20WGS\x2084\x20geometric\x20constants\x0a\x20\x20\x20\x20float\x20a\x20=\x206378137.0;\x20//\x20Semi-major\x20axis\x0a\x20\x20\x20\x20float\x20b\x20=\x206356752.3142;\x20//\x20Semi-minor\x20axis\x0a\x20\x20\x20\x20float\x20e2\x20=\x206.69437999014e-3;\x20//\x20First\x20eccentricity\x20squared\x0a\x0a\x20\x20\x20\x20float\x20latitude\x20=\x20radians(lonLatLev.y);\x0a\x20\x20\x20\x20float\x20longitude\x20=\x20radians(lonLatLev.x);\x0a\x0a\x20\x20\x20\x20float\x20cosLat\x20=\x20cos(latitude);\x0a\x20\x20\x20\x20float\x20sinLat\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20float\x20cosLon\x20=\x20cos(longitude);\x0a\x20\x20\x20\x20float\x20sinLon\x20=\x20sin(longitude);\x0a\x0a\x20\x20\x20\x20float\x20N_Phi\x20=\x20a\x20/\x20sqrt(1.0\x20-\x20e2\x20*\x20sinLat\x20*\x20sinLat);\x0a\x20\x20\x20\x20float\x20h\x20=\x20particleHeight;\x20//\x20it\x20should\x20be\x20high\x20enough\x20otherwise\x20the\x20particle\x20may\x20not\x20pass\x20the\x20terrain\x20depth\x20test\x0a\x0a\x20\x20\x20\x20vec3\x20cartesian\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20cartesian.x\x20=\x20(N_Phi\x20+\x20h)\x20*\x20cosLat\x20*\x20cosLon;\x0a\x20\x20\x20\x20cartesian.y\x20=\x20(N_Phi\x20+\x20h)\x20*\x20cosLat\x20*\x20sinLon;\x0a\x20\x20\x20\x20cartesian.z\x20=\x20((b\x20*\x20b)\x20/\x20(a\x20*\x20a)\x20*\x20N_Phi\x20+\x20h)\x20*\x20sinLat;\x0a\x20\x20\x20\x20return\x20cartesian;\x0a}\x0a\x0avec4\x20calcProjectedCoordinate(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20the\x20range\x20of\x20longitude\x20in\x20Cesium\x20is\x20[-180,\x20180]\x20but\x20the\x20range\x20of\x20longitude\x20in\x20the\x20NetCDF\x20file\x20is\x20[0,\x20360]\x0a\x20\x20\x20\x20//\x20[0,\x20180]\x20is\x20corresponding\x20to\x20[0,\x20180]\x20and\x20[180,\x20360]\x20is\x20corresponding\x20to\x20[-180,\x200]\x0a\x20\x20\x20\x20lonLatLev.x\x20=\x20mod(lonLatLev.x\x20+\x20180.0,\x20360.0)\x20-\x20180.0;\x0a\x20\x20\x20\x20vec3\x20particlePosition\x20=\x20convertCoordinate(lonLatLev);\x0a\x20\x20\x20\x20vec4\x20projectedCoordinate\x20=\x20czm_modelViewProjection\x20*\x20vec4(particlePosition,\x201.0);\x0a\x20\x20\x20\x20return\x20projectedCoordinate;\x0a}\x0a\x0avec4\x20calcOffset(vec4\x20currentProjectedCoordinate,\x20vec4\x20nextProjectedCoordinate,\x20float\x20offsetSign)\x20{\x0a\x20\x20\x20\x20vec2\x20aspectVec2\x20=\x20vec2(aspect,\x201.0);\x0a\x20\x20\x20\x20vec2\x20currentXY\x20=\x20(currentProjectedCoordinate.xy\x20/\x20currentProjectedCoordinate.w)\x20*\x20aspectVec2;\x0a\x20\x20\x20\x20vec2\x20nextXY\x20=\x20(nextProjectedCoordinate.xy\x20/\x20nextProjectedCoordinate.w)\x20*\x20aspectVec2;\x0a\x0a\x20\x20\x20\x20float\x20offsetLength\x20=\x20lineWidth\x20/\x202.0;\x0a\x20\x20\x20\x20vec2\x20direction\x20=\x20normalize(nextXY\x20-\x20currentXY);\x0a\x20\x20\x20\x20vec2\x20normalVector\x20=\x20vec2(-direction.y,\x20direction.x);\x0a\x20\x20\x20\x20normalVector.x\x20=\x20normalVector.x\x20/\x20aspect;\x0a\x20\x20\x20\x20normalVector\x20=\x20offsetLength\x20*\x20normalVector;\x0a\x0a\x20\x20\x20\x20vec4\x20offset\x20=\x20vec4(offsetSign\x20*\x20normalVector,\x200.0,\x200.0);\x0a\x20\x20\x20\x20return\x20offset;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec2\x20particleIndex\x20=\x20st;\x0a\x0a\x20\x20\x20\x20vec3\x20currentPosition\x20=\x20texture(currentParticlesPosition,\x20particleIndex).rgb;\x0a\x20\x20\x20\x20vec4\x20nextPosition\x20=\x20texture(postProcessingPosition,\x20particleIndex);\x0a\x0a\x20\x20\x20\x20vec4\x20currentProjectedCoordinate\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20vec4\x20nextProjectedCoordinate\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20if\x20(nextPosition.w\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20currentProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20currentProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextProjectedCoordinate\x20=\x20calcProjectedCoordinate(nextPosition.xyz);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20float\x20pointToUse\x20=\x20normal.x;\x20//\x20-1\x20is\x20currentProjectedCoordinate\x20and\x20+1\x20is\x20nextProjectedCoordinate\x0a\x20\x20\x20\x20float\x20offsetSign\x20=\x20normal.y;\x0a\x0a\x20\x20\x20\x20vec4\x20offset\x20=\x20pixelSize\x20*\x20calcOffset(currentProjectedCoordinate,\x20nextProjectedCoordinate,\x20offsetSign);\x0a\x20\x20\x20\x20if\x20(pointToUse\x20<\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl_Position\x20=\x20currentProjectedCoordinate\x20+\x20offset;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl_Position\x20=\x20nextProjectedCoordinate\x20+\x20offset;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20speedNormalization\x20=\x20texture(postProcessingSpeed,\x20particleIndex).a;\x0a}\x0a',segmentDraw_frag='uniform\x20sampler2D\x20colorTable;\x0a\x0ain\x20float\x20speedNormalization;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20out_FragColor\x20=\x20texture(colorTable,\x20vec2(speedNormalization,\x200.0));\x0a}\x0a',fullscreen_vert='in\x20vec3\x20position;\x0ain\x20vec2\x20st;\x0a\x0aout\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20textureCoordinate\x20=\x20st;\x0a\x20\x20\x20\x20gl_Position\x20=\x20vec4(position,\x201.0);\x0a}\x0a',trailDraw_frag='uniform\x20sampler2D\x20segmentsColorTexture;\x0auniform\x20sampler2D\x20segmentsDepthTexture;\x0a\x0auniform\x20sampler2D\x20currentTrailsColor;\x0auniform\x20sampler2D\x20trailsDepthTexture;\x0a\x0auniform\x20float\x20fadeOpacity;\x0a\x0ain\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20pointsColor\x20=\x20texture(segmentsColorTexture,\x20textureCoordinate);\x0a\x20\x20\x20\x20vec4\x20trailsColor\x20=\x20texture(currentTrailsColor,\x20textureCoordinate);\x0a\x0a\x20\x20\x20\x20trailsColor\x20=\x20floor(fadeOpacity\x20*\x20255.0\x20*\x20trailsColor)\x20/\x20255.0;\x20//\x20make\x20sure\x20the\x20trailsColor\x20will\x20be\x20strictly\x20decreased\x0a\x0a\x20\x20\x20\x20float\x20pointsDepth\x20=\x20texture(segmentsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20trailsDepth\x20=\x20texture(trailsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20globeDepth\x20=\x20czm_unpackDepth(texture(czm_globeDepthTexture,\x20textureCoordinate));\x0a\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20if\x20(pointsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20out_FragColor\x20+\x20pointsColor;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(trailsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20out_FragColor\x20+\x20trailsColor;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20gl_FragDepth\x20=\x20min(pointsDepth,\x20trailsDepth);\x0a}\x0a',screenDraw_frag='uniform\x20sampler2D\x20trailsColorTexture;\x0auniform\x20sampler2D\x20trailsDepthTexture;\x0a\x0ain\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20trailsColor\x20=\x20texture(trailsColorTexture,\x20textureCoordinate);\x0a\x20\x20\x20\x20float\x20trailsDepth\x20=\x20texture(trailsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20globeDepth\x20=\x20czm_unpackDepth(texture(czm_globeDepthTexture,\x20textureCoordinate));\x0a\x0a\x20\x20\x20\x20if\x20(trailsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20trailsColor;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20}\x0a}\x0a';const Cesium$4=mars3d__namespace['Cesium'];class ParticlesRendering{constructor(_0x52def0,_0x1231d4,_0x2c16ce,_0x4aefcf,_0x1910a5){const _0x3ed0da=_0x2549c6;this[_0x3ed0da(0xd7)](_0x52def0,_0x1231d4,_0x2c16ce[_0x3ed0da(0xcc)]),this['createRenderingFramebuffers'](_0x52def0),this['createRenderingPrimitives'](_0x52def0,_0x2c16ce,_0x4aefcf,_0x1910a5);}['createRenderingTextures'](_0x4b35dd,_0x113514,_0x4809ab){const _0x329165=_0x2549c6,_0xa9f39b={'context':_0x4b35dd,'width':_0x4b35dd['drawingBufferWidth'],'height':_0x4b35dd[_0x329165(0x107)],'pixelFormat':Cesium$4['PixelFormat']['RGBA'],'pixelDatatype':Cesium$4[_0x329165(0x95)]['UNSIGNED_BYTE']},_0x2482ef={'context':_0x4b35dd,'width':_0x4b35dd[_0x329165(0xc3)],'height':_0x4b35dd[_0x329165(0x107)],'pixelFormat':Cesium$4['PixelFormat']['DEPTH_COMPONENT'],'pixelDatatype':Cesium$4['PixelDatatype']['UNSIGNED_INT']},_0x21bf16=_0x4809ab['length'],_0x3e725e=new Float32Array(_0x21bf16*0x3);for(let _0x3c8794=0x0;_0x3c8794<_0x21bf16;_0x3c8794++){const _0x517603=Cesium$4['Color']['fromCssColorString'](_0x4809ab[_0x3c8794]);_0x3e725e[0x3*_0x3c8794]=_0x517603['red'],_0x3e725e[0x3*_0x3c8794+0x1]=_0x517603[_0x329165(0xaa)],_0x3e725e[0x3*_0x3c8794+0x2]=_0x517603['blue'];}const _0x1e80a2={'context':_0x4b35dd,'width':_0x21bf16,'height':0x1,'pixelFormat':Cesium$4[_0x329165(0x121)]['RGB'],'pixelDatatype':Cesium$4['PixelDatatype']['FLOAT'],'sampler':new Cesium$4[(_0x329165(0x14c))]({'minificationFilter':Cesium$4['TextureMinificationFilter']['LINEAR'],'magnificationFilter':Cesium$4[_0x329165(0x149)][_0x329165(0x118)]})};this['textures']={'segmentsColor':Util['createTexture'](_0xa9f39b),'segmentsDepth':Util['createTexture'](_0x2482ef),'currentTrailsColor':Util[_0x329165(0xf2)](_0xa9f39b),'currentTrailsDepth':Util['createTexture'](_0x2482ef),'nextTrailsColor':Util[_0x329165(0xf2)](_0xa9f39b),'nextTrailsDepth':Util[_0x329165(0xf2)](_0x2482ef),'colorTable':Util['createTexture'](_0x1e80a2,_0x3e725e)};}['createRenderingFramebuffers'](_0x1da60e){const _0x166f69=_0x2549c6;this['framebuffers']={'segments':Util['createFramebuffer'](_0x1da60e,this['textures'][_0x166f69(0xce)],this[_0x166f69(0x9d)]['segmentsDepth']),'currentTrails':Util['createFramebuffer'](_0x1da60e,this['textures']['currentTrailsColor'],this[_0x166f69(0x9d)]['currentTrailsDepth']),'nextTrails':Util['createFramebuffer'](_0x1da60e,this['textures']['nextTrailsColor'],this[_0x166f69(0x9d)][_0x166f69(0xb4)])};}[_0x2549c6(0xd6)](_0x521044){const _0x1179a3=_0x2549c6,_0x190a14=0x4;let _0x3dfe50=[];for(let _0x523c78=0x0;_0x523c78<_0x521044['particlesTextureSize'];_0x523c78++){for(let _0x946e8=0x0;_0x946e8<_0x521044['particlesTextureSize'];_0x946e8++){for(let _0x3dc877=0x0;_0x3dc877<_0x190a14;_0x3dc877++){_0x3dfe50[_0x1179a3(0xad)](_0x523c78/_0x521044['particlesTextureSize']),_0x3dfe50['push'](_0x946e8/_0x521044['particlesTextureSize']);}}}_0x3dfe50=new Float32Array(_0x3dfe50);let _0x3de854=[];const _0x276827=[-0x1,0x1],_0x1de493=[-0x1,0x1];for(let _0x364826=0x0;_0x364826<_0x521044['maxParticles'];_0x364826++){for(let _0x1707b1=0x0;_0x1707b1<_0x190a14/0x2;_0x1707b1++){for(let _0x1aa809=0x0;_0x1aa809<_0x190a14/0x2;_0x1aa809++){_0x3de854['push'](_0x276827[_0x1707b1]),_0x3de854['push'](_0x1de493[_0x1aa809]),_0x3de854['push'](0x0);}}}_0x3de854=new Float32Array(_0x3de854);const _0x19be18=0x6*_0x521044['maxParticles'],_0x43fc2d=new Uint32Array(_0x19be18);for(let _0x346067=0x0,_0x5bd05b=0x0,_0x17701c=0x0;_0x346067<_0x521044[_0x1179a3(0xbf)];_0x346067++){_0x43fc2d[_0x5bd05b++]=_0x17701c+0x0,_0x43fc2d[_0x5bd05b++]=_0x17701c+0x1,_0x43fc2d[_0x5bd05b++]=_0x17701c+0x2,_0x43fc2d[_0x5bd05b++]=_0x17701c+0x2,_0x43fc2d[_0x5bd05b++]=_0x17701c+0x1,_0x43fc2d[_0x5bd05b++]=_0x17701c+0x3,_0x17701c+=0x4;}const _0x57492a=new Cesium$4[(_0x1179a3(0x81))]({'attributes':new Cesium$4['GeometryAttributes']({'st':new Cesium$4['GeometryAttribute']({'componentDatatype':Cesium$4['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x2,'values':_0x3dfe50}),'normal':new Cesium$4['GeometryAttribute']({'componentDatatype':Cesium$4[_0x1179a3(0x8a)]['FLOAT'],'componentsPerAttribute':0x3,'values':_0x3de854})}),'indices':_0x43fc2d});return _0x57492a;}['createRenderingPrimitives'](_0x5b86c1,_0x3b0667,_0x552062,_0x33451c){const _0x3ddea1=_0x2549c6,_0x56fdd7=this;this[_0x3ddea1(0xe2)]={'segments':new CustomPrimitive({'commandType':_0x3ddea1(0x155),'attributeLocations':{'st':0x0,'normal':0x1},'geometry':this['createSegmentsGeometry'](_0x3b0667),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'currentParticlesPosition':function(){const _0x7a2d9a=_0x3ddea1;return _0x33451c['particlesTextures'][_0x7a2d9a(0xa9)];},'postProcessingPosition':function(){const _0x5498c2=_0x3ddea1;return _0x33451c[_0x5498c2(0x150)]['postProcessingPosition'];},'postProcessingSpeed':function(){const _0x383a61=_0x3ddea1;return _0x33451c['particlesTextures'][_0x383a61(0x9f)];},'colorTable':function(){const _0xcbca15=_0x3ddea1;return _0x56fdd7[_0xcbca15(0x9d)][_0xcbca15(0xcb)];},'aspect':function(){const _0x42e88a=_0x3ddea1;return _0x5b86c1[_0x42e88a(0xc3)]/_0x5b86c1[_0x42e88a(0x107)];},'pixelSize':function(){return _0x552062['pixelSize'];},'lineWidth':function(){const _0x4772a5=_0x3ddea1;return _0x3b0667[_0x4772a5(0xc2)];},'particleHeight':function(){return _0x3b0667['particleHeight'];}},'vertexShaderSource':new Cesium$4['ShaderSource']({'sources':[segmentDraw_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'sources':[segmentDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':!![]},'depthMask':!![]}),'framebuffer':this['framebuffers'][_0x3ddea1(0x119)],'autoClear':!![]}),'trails':new CustomPrimitive({'commandType':'Draw','attributeLocations':{'position':0x0,'st':0x1},'geometry':Util['getFullscreenQuad'](),'primitiveType':Cesium$4['PrimitiveType'][_0x3ddea1(0x117)],'uniformMap':{'segmentsColorTexture':function(){return _0x56fdd7['textures']['segmentsColor'];},'segmentsDepthTexture':function(){const _0x428ef8=_0x3ddea1;return _0x56fdd7['textures'][_0x428ef8(0x13e)];},'currentTrailsColor':function(){return _0x56fdd7['framebuffers']['currentTrails']['getColorTexture'](0x0);},'trailsDepthTexture':function(){const _0x179cbd=_0x3ddea1;return _0x56fdd7['framebuffers'][_0x179cbd(0x86)]['depthTexture'];},'fadeOpacity':function(){return _0x3b0667['fadeOpacity'];}},'vertexShaderSource':new Cesium$4[(_0x3ddea1(0xd2))]({'defines':['DISABLE_GL_POSITION_LOG_DEPTH'],'sources':[fullscreen_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_LOG_DEPTH_FRAGMENT_WRITE'],'sources':[trailDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':!![],'func':Cesium$4['DepthFunction']['ALWAYS']},'depthMask':!![]}),'framebuffer':this[_0x3ddea1(0x7c)]['nextTrails'],'autoClear':!![],'preExecute':function(){const _0x10a2a6=_0x3ddea1,_0x19f2cf=_0x56fdd7['framebuffers']['currentTrails'];_0x56fdd7[_0x10a2a6(0x7c)][_0x10a2a6(0x86)]=_0x56fdd7['framebuffers'][_0x10a2a6(0x83)],_0x56fdd7[_0x10a2a6(0x7c)]['nextTrails']=_0x19f2cf,_0x56fdd7['primitives'][_0x10a2a6(0xb0)]['commandToExecute'][_0x10a2a6(0xe0)]=_0x56fdd7[_0x10a2a6(0x7c)]['nextTrails'],_0x56fdd7['primitives'][_0x10a2a6(0xb0)]['clearCommand']['framebuffer']=_0x56fdd7['framebuffers']['nextTrails'];}}),'screen':new CustomPrimitive({'commandType':'Draw','attributeLocations':{'position':0x0,'st':0x1},'geometry':Util['getFullscreenQuad'](),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'trailsColorTexture':function(){const _0x3cb12a=_0x3ddea1;return _0x56fdd7['framebuffers'][_0x3cb12a(0x83)][_0x3cb12a(0xe3)](0x0);},'trailsDepthTexture':function(){return _0x56fdd7['framebuffers']['nextTrails']['depthTexture'];}},'vertexShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_GL_POSITION_LOG_DEPTH'],'sources':[fullscreen_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_LOG_DEPTH_FRAGMENT_WRITE'],'sources':[screenDraw_frag]}),'rawRenderState':Util[_0x3ddea1(0x90)]({'viewport':undefined,'depthTest':{'enabled':![]},'depthMask':!![],'blending':{'enabled':!![]}}),'framebuffer':undefined})};}}var getWind_frag=_0x2549c6(0x104),updateSpeed_frag='uniform\x20sampler2D\x20currentParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0auniform\x20sampler2D\x20particlesWind;\x0a\x0a//\x20used\x20to\x20calculate\x20the\x20wind\x20norm\x0auniform\x20vec2\x20uSpeedRange;\x20//\x20(min,\x20max);\x0auniform\x20vec2\x20vSpeedRange;\x0auniform\x20float\x20pixelSize;\x0auniform\x20float\x20speedFactor;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0afloat\x20calculateWindNorm(vec3\x20speed)\x20{\x0a\x20\x20\x20\x20vec3\x20percent\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20percent.x\x20=\x20(speed.x\x20-\x20uSpeedRange.x)\x20/\x20(uSpeedRange.y\x20-\x20uSpeedRange.x);\x0a\x20\x20\x20\x20percent.y\x20=\x20(speed.y\x20-\x20vSpeedRange.x)\x20/\x20(vSpeedRange.y\x20-\x20vSpeedRange.x);\x0a\x20\x20\x20\x20float\x20normalization\x20=\x20length(percent);\x0a\x0a\x20\x20\x20\x20return\x20normalization;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20//\x20vec3\x20currentSpeed\x20=\x20texture(currentParticlesSpeed,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20windVector\x20=\x20texture(particlesWind,\x20v_textureCoordinates).rgb;\x0a\x0a\x20\x20\x20\x20vec4\x20nextSpeed\x20=\x20vec4(speedFactor\x20*\x20pixelSize\x20*\x20windVector,\x20calculateWindNorm(windVector));\x0a\x20\x20\x20\x20out_FragColor\x20=\x20nextSpeed;\x0a}\x0a',updatePosition_frag=_0x2549c6(0xdf),postProcessingPosition_frag=_0x2549c6(0x79),postProcessingSpeed_frag='uniform\x20sampler2D\x20postProcessingPosition;\x0auniform\x20sampler2D\x20nextParticlesSpeed;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20randomParticle\x20=\x20texture(postProcessingPosition,\x20v_textureCoordinates);\x0a\x20\x20\x20\x20vec4\x20particleSpeed\x20=\x20texture(nextParticlesSpeed,\x20v_textureCoordinates);\x0a\x0a\x20\x20\x20\x20if\x20(randomParticle.a\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20particleSpeed;\x0a\x20\x20\x20\x20}\x0a}\x0a';const Cesium$3=mars3d__namespace[_0x2549c6(0x12f)];function _0x5322(){const _0x246b06=['postProcessingSpeed','context','currentParticlesSpeed','mouseUp','_onMouseUpEvent','pointerEvents','_canrefresh','clientWidth','randomBetween','getWind','currentParticlesPosition','green','lev','speedFactor','push','speedRate','outputTexture','trails','hidden','viewport','removeEventListener','nextTrailsDepth','stroke','_addedHook','options','preRender','canvasWidth','WindUtil','mouseMove','reverseY','clearCommand','fixedHeight','maxParticles','randomizeParticles','lat','lineWidth','drawingBufferWidth','_tomap','array','refreshParticles','bindEvent','dimensions','864831iYBXkk','canvasContext','colorTable','colors','west','segmentsColor','random','refreshTimer','none','ShaderSource','STATIC_DRAW','_onMouseMoveEvent','setData','createSegmentsGeometry','createRenderingTextures','wheel','cols','xmax','CanvasWindField','particlesRendering','tlat','max','uniform\x20sampler2D\x20currentParticlesPosition;\x20//\x20(lon,\x20lat,\x20lev)\x0auniform\x20sampler2D\x20currentParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avec2\x20lengthOfLonLat(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20unit\x20conversion:\x20meters\x20->\x20longitude\x20latitude\x20degrees\x0a\x20\x20\x20\x20//\x20see\x20https://en.wikipedia.org/wiki/Geographic_coordinate_system#Length_of_a_degree\x20for\x20detail\x0a\x0a\x20\x20\x20\x20//\x20Calculate\x20the\x20length\x20of\x20a\x20degree\x20of\x20latitude\x20and\x20longitude\x20in\x20meters\x0a\x20\x20\x20\x20float\x20latitude\x20=\x20radians(lonLatLev.y);\x0a\x0a\x20\x20\x20\x20float\x20term1\x20=\x20111132.92;\x0a\x20\x20\x20\x20float\x20term2\x20=\x20559.82\x20*\x20cos(2.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term3\x20=\x201.175\x20*\x20cos(4.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term4\x20=\x200.0023\x20*\x20cos(6.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20latLength\x20=\x20term1\x20-\x20term2\x20+\x20term3\x20-\x20term4;\x0a\x0a\x20\x20\x20\x20float\x20term5\x20=\x20111412.84\x20*\x20cos(latitude);\x0a\x20\x20\x20\x20float\x20term6\x20=\x2093.5\x20*\x20cos(3.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term7\x20=\x200.118\x20*\x20cos(5.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20longLength\x20=\x20term5\x20-\x20term6\x20+\x20term7;\x0a\x0a\x20\x20\x20\x20return\x20vec2(longLength,\x20latLength);\x0a}\x0a\x0avoid\x20updatePosition(vec3\x20lonLatLev,\x20vec3\x20speed)\x20{\x0a\x20\x20\x20\x20vec2\x20lonLatLength\x20=\x20lengthOfLonLat(lonLatLev);\x0a\x20\x20\x20\x20float\x20u\x20=\x20speed.x\x20/\x20lonLatLength.x;\x0a\x20\x20\x20\x20float\x20v\x20=\x20speed.y\x20/\x20lonLatLength.y;\x0a\x20\x20\x20\x20float\x20w\x20=\x200.0;\x0a\x20\x20\x20\x20vec3\x20windVectorInLonLatLev\x20=\x20vec3(u,\x20v,\x20w);\x0a\x0a\x20\x20\x20\x20vec3\x20nextParticle\x20=\x20lonLatLev\x20+\x20windVectorInLonLatLev;\x0a\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(nextParticle,\x200.0);\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20vec3\x20lonLatLev\x20=\x20texture(currentParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20speed\x20=\x20texture(currentParticlesSpeed,\x20v_textureCoordinates).rgb;\x0a\x0a\x20\x20\x20\x20updatePosition(lonLatLev,\x20speed);\x0a}\x0a','framebuffer','_onMouseDownEvent','primitives','getColorTexture','arrayBufferView','vertexArray','visibility','rows','show','_colorRamp','mouseDown','244944RCuAzK','windField','fromDegrees','canvasHeight','ymin','getColor','_onMapWhellEvent','createTexture','_calcUV','getOptions','length','mouse_down','dropRate','887800XBLgSO','keys','off','Math','createWindTextures','fadeOpacity','particlesNumber','Cartesian3','nextParticlesSpeed','BaseLayer','viewerParameters','style','//\x20the\x20size\x20of\x20UV\x20textures:\x20width\x20=\x20lon,\x20height\x20=\x20lat*lev\x0auniform\x20sampler2D\x20U;\x20//\x20eastward\x20wind\x0auniform\x20sampler2D\x20V;\x20//\x20northward\x20wind\x0a\x0auniform\x20sampler2D\x20currentParticlesPosition;\x20//\x20(lon,\x20lat,\x20lev)\x0a\x0auniform\x20vec3\x20dimension;\x20//\x20(lon,\x20lat,\x20lev)\x0auniform\x20vec3\x20minimum;\x20//\x20minimum\x20of\x20each\x20dimension\x0auniform\x20vec3\x20maximum;\x20//\x20maximum\x20of\x20each\x20dimension\x0auniform\x20vec3\x20interval;\x20//\x20interval\x20of\x20each\x20dimension\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avec2\x20mapPositionToNormalizedIndex2D(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20ensure\x20the\x20range\x20of\x20longitude\x20and\x20latitude\x0a\x20\x20\x20\x20lonLatLev.x\x20=\x20mod(lonLatLev.x,\x20360.0);\x0a\x20\x20\x20\x20lonLatLev.y\x20=\x20clamp(lonLatLev.y,\x20-90.0,\x2090.0);\x0a\x0a\x20\x20\x20\x20vec3\x20index3D\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20index3D.x\x20=\x20(lonLatLev.x\x20-\x20minimum.x)\x20/\x20interval.x;\x0a\x20\x20\x20\x20index3D.y\x20=\x20(lonLatLev.y\x20-\x20minimum.y)\x20/\x20interval.y;\x0a\x20\x20\x20\x20index3D.z\x20=\x20(lonLatLev.z\x20-\x20minimum.z)\x20/\x20interval.z;\x0a\x0a\x20\x20\x20\x20//\x20the\x20st\x20texture\x20coordinate\x20corresponding\x20to\x20(col,\x20row)\x20index\x0a\x20\x20\x20\x20//\x20example\x0a\x20\x20\x20\x20//\x20data\x20array\x20is\x20[0,\x201,\x202,\x203,\x204,\x205],\x20width\x20=\x203,\x20height\x20=\x202\x0a\x20\x20\x20\x20//\x20the\x20content\x20of\x20texture\x20will\x20be\x0a\x20\x20\x20\x20//\x20t\x201.0\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x20\x203\x204\x205\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x20\x200\x201\x202\x0a\x20\x20\x20\x20//\x20\x20\x200.0------1.0\x20s\x0a\x0a\x20\x20\x20\x20vec2\x20index2D\x20=\x20vec2(index3D.x,\x20index3D.z\x20*\x20dimension.y\x20+\x20index3D.y);\x0a\x20\x20\x20\x20vec2\x20normalizedIndex2D\x20=\x20vec2(index2D.x\x20/\x20dimension.x,\x20index2D.y\x20/\x20(dimension.y\x20*\x20dimension.z));\x0a\x20\x20\x20\x20return\x20normalizedIndex2D;\x0a}\x0a\x0afloat\x20getWind(sampler2D\x20windTexture,\x20vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20vec2\x20normalizedIndex2D\x20=\x20mapPositionToNormalizedIndex2D(lonLatLev);\x0a\x20\x20\x20\x20float\x20result\x20=\x20texture(windTexture,\x20normalizedIndex2D).r;\x0a\x20\x20\x20\x20return\x20result;\x0a}\x0a\x0aconst\x20mat4\x20kernelMatrix\x20=\x20mat4(\x0a\x20\x20\x20\x200.0,\x20-1.0,\x202.0,\x20-1.0,\x20//\x20first\x20column\x0a\x20\x20\x20\x202.0,\x200.0,\x20-5.0,\x203.0,\x20//\x20second\x20column\x0a\x20\x20\x20\x200.0,\x201.0,\x204.0,\x20-3.0,\x20//\x20third\x20column\x0a\x20\x20\x20\x200.0,\x200.0,\x20-1.0,\x201.0\x20//\x20fourth\x20column\x0a);\x0afloat\x20oneDimensionInterpolation(float\x20t,\x20float\x20p0,\x20float\x20p1,\x20float\x20p2,\x20float\x20p3)\x20{\x0a\x20\x20\x20\x20vec4\x20tVec4\x20=\x20vec4(1.0,\x20t,\x20t\x20*\x20t,\x20t\x20*\x20t\x20*\x20t);\x0a\x20\x20\x20\x20tVec4\x20=\x20tVec4\x20/\x202.0;\x0a\x20\x20\x20\x20vec4\x20pVec4\x20=\x20vec4(p0,\x20p1,\x20p2,\x20p3);\x0a\x20\x20\x20\x20return\x20dot((tVec4\x20*\x20kernelMatrix),\x20pVec4);\x0a}\x0a\x0afloat\x20calculateB(sampler2D\x20windTexture,\x20float\x20t,\x20float\x20lon,\x20float\x20lat,\x20float\x20lev)\x20{\x0a\x20\x20\x20\x20float\x20lon0\x20=\x20floor(lon)\x20-\x201.0\x20*\x20interval.x;\x0a\x20\x20\x20\x20float\x20lon1\x20=\x20floor(lon);\x0a\x20\x20\x20\x20float\x20lon2\x20=\x20floor(lon)\x20+\x201.0\x20*\x20interval.x;\x0a\x20\x20\x20\x20float\x20lon3\x20=\x20floor(lon)\x20+\x202.0\x20*\x20interval.x;\x0a\x0a\x20\x20\x20\x20float\x20p0\x20=\x20getWind(windTexture,\x20vec3(lon0,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p1\x20=\x20getWind(windTexture,\x20vec3(lon1,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p2\x20=\x20getWind(windTexture,\x20vec3(lon2,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p3\x20=\x20getWind(windTexture,\x20vec3(lon3,\x20lat,\x20lev));\x0a\x0a\x20\x20\x20\x20return\x20oneDimensionInterpolation(t,\x20p0,\x20p1,\x20p2,\x20p3);\x0a}\x0a\x0afloat\x20interpolateOneTexture(sampler2D\x20windTexture,\x20vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20float\x20lon\x20=\x20lonLatLev.x;\x0a\x20\x20\x20\x20float\x20lat\x20=\x20lonLatLev.y;\x0a\x20\x20\x20\x20float\x20lev\x20=\x20lonLatLev.z;\x0a\x0a\x20\x20\x20\x20float\x20lat0\x20=\x20floor(lat)\x20-\x201.0\x20*\x20interval.y;\x0a\x20\x20\x20\x20float\x20lat1\x20=\x20floor(lat);\x0a\x20\x20\x20\x20float\x20lat2\x20=\x20floor(lat)\x20+\x201.0\x20*\x20interval.y;\x0a\x20\x20\x20\x20float\x20lat3\x20=\x20floor(lat)\x20+\x202.0\x20*\x20interval.y;\x0a\x0a\x20\x20\x20\x20vec2\x20coefficient\x20=\x20lonLatLev.xy\x20-\x20floor(lonLatLev.xy);\x0a\x20\x20\x20\x20float\x20b0\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat0,\x20lev);\x0a\x20\x20\x20\x20float\x20b1\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat1,\x20lev);\x0a\x20\x20\x20\x20float\x20b2\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat2,\x20lev);\x0a\x20\x20\x20\x20float\x20b3\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat3,\x20lev);\x0a\x0a\x20\x20\x20\x20return\x20oneDimensionInterpolation(coefficient.y,\x20b0,\x20b1,\x20b2,\x20b3);\x0a}\x0a\x0avec3\x20bicubic(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20https://en.wikipedia.org/wiki/Bicubic_interpolation#Bicubic_convolution_algorithm\x0a\x20\x20\x20\x20float\x20u\x20=\x20interpolateOneTexture(U,\x20lonLatLev);\x0a\x20\x20\x20\x20float\x20v\x20=\x20interpolateOneTexture(V,\x20lonLatLev);\x0a\x20\x20\x20\x20float\x20w\x20=\x200.0;\x0a\x20\x20\x20\x20return\x20vec3(u,\x20v,\x20w);\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20vec3\x20lonLatLev\x20=\x20texture(currentParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20windVector\x20=\x20bicubic(lonLatLev);\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(windVector,\x200.0);\x0a}\x0a','tlng','sqrt','drawingBufferHeight','_setOptionsHook','udata','beginPath','applyViewerParameters','forEach','windTextures','particleSystem','createParticlesTextures','Compute','SceneTransforms','vdata','particles','isPointVisible','commandList','destroy','TRIANGLES','LINEAR','segments','VertexArray','canvas','568719uPQBhn','lng','viewRectangleToLonLatRange','mod','commandToExecute','PixelFormat','computeViewRectangle','execute','getDefaultRenderState','defined','#ffffff','getParticles','lon','wind','globalCompositeOperation','_createCanvas','3050768HLgslq','NEAREST','Color','Cesium','getUVByXY','fragmentShaderSource','addEventListener','dropRateBump','grid','createComputingPrimitives','50KOPHmN','nextParticlesPosition','visible','destroyParticlesTextures','Cartesian2','createCommand','toGridXY','maxAge','segmentsDepth','lonRange','worker','particlesWind','windData','_updateIng','1675nPXKSu','container','vmax','TextureMinificationFilter','Pass','TextureMagnificationFilter','redraw','south','Sampler','data','auto','floor','particlesTextures','frameTime','log','add','SCENE3D','Draw','clientHeight','geometry','__esModule','scene','_speedRate','top','EventType','getUVByPoint','124LEbxWA','9654GDgSRo','layer','position','Appearance','EllipsoidalOccluder','attributeLocations','min','canvasResize','uniform\x20sampler2D\x20nextParticlesPosition;\x0auniform\x20sampler2D\x20nextParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0a\x0a//\x20range\x20(min,\x20max)\x0auniform\x20vec2\x20lonRange;\x0auniform\x20vec2\x20latRange;\x0a\x0auniform\x20float\x20randomCoefficient;\x20//\x20use\x20to\x20improve\x20the\x20pseudo-random\x20generator\x0auniform\x20float\x20dropRate;\x20//\x20drop\x20rate\x20is\x20a\x20chance\x20a\x20particle\x20will\x20restart\x20at\x20random\x20position\x20to\x20avoid\x20degeneration\x0auniform\x20float\x20dropRateBump;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0a//\x20pseudo-random\x20generator\x0aconst\x20vec3\x20randomConstants\x20=\x20vec3(12.9898,\x2078.233,\x204375.85453);\x0aconst\x20vec2\x20normalRange\x20=\x20vec2(0.0,\x201.0);\x0afloat\x20rand(vec2\x20seed,\x20vec2\x20range)\x20{\x0a\x20\x20\x20\x20vec2\x20randomSeed\x20=\x20randomCoefficient\x20*\x20seed;\x0a\x20\x20\x20\x20float\x20temp\x20=\x20dot(randomConstants.xy,\x20randomSeed);\x0a\x20\x20\x20\x20temp\x20=\x20fract(sin(temp)\x20*\x20(randomConstants.z\x20+\x20temp));\x0a\x20\x20\x20\x20return\x20temp\x20*\x20(range.y\x20-\x20range.x)\x20+\x20range.x;\x0a}\x0a\x0avec3\x20generateRandomParticle(vec2\x20seed,\x20float\x20lev)\x20{\x0a\x20\x20\x20\x20//\x20ensure\x20the\x20longitude\x20is\x20in\x20[0,\x20360]\x0a\x20\x20\x20\x20float\x20randomLon\x20=\x20mod(rand(seed,\x20lonRange),\x20360.0);\x0a\x20\x20\x20\x20float\x20randomLat\x20=\x20rand(-seed,\x20latRange);\x0a\x0a\x20\x20\x20\x20return\x20vec3(randomLon,\x20randomLat,\x20lev);\x0a}\x0a\x0abool\x20particleOutbound(vec3\x20particle)\x20{\x0a\x20\x20\x20\x20return\x20particle.y\x20<\x20-90.0\x20||\x20particle.y\x20>\x2090.0;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec3\x20nextParticle\x20=\x20texture(nextParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec4\x20nextSpeed\x20=\x20texture(nextParticlesSpeed,\x20v_textureCoordinates);\x0a\x20\x20\x20\x20float\x20particleDropRate\x20=\x20dropRate\x20+\x20dropRateBump\x20*\x20nextSpeed.a;\x0a\x0a\x20\x20\x20\x20vec2\x20seed1\x20=\x20nextParticle.xy\x20+\x20v_textureCoordinates;\x0a\x20\x20\x20\x20vec2\x20seed2\x20=\x20nextSpeed.xy\x20+\x20v_textureCoordinates;\x0a\x20\x20\x20\x20vec3\x20randomParticle\x20=\x20generateRandomParticle(seed1,\x20nextParticle.z);\x0a\x20\x20\x20\x20float\x20randomNumber\x20=\x20rand(seed2,\x20normalRange);\x0a\x0a\x20\x20\x20\x20if\x20(randomNumber\x20<\x20particleDropRate\x20||\x20particleOutbound(nextParticle))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(randomParticle,\x201.0);\x20//\x201.0\x20means\x20this\x20is\x20a\x20random\x20particle\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(nextParticle,\x200.0);\x0a\x20\x20\x20\x20}\x0a}\x0a','_map','color','framebuffers','ymax','shaderProgram','create','height','Geometry','setOptions','nextTrails','getContext','bind','currentTrails','_pointerEvents','age','latRange','ComponentDatatype','getRandomLatLng','PI_OVER_TWO','update','particlesComputing','4574gGjhhT','createRawRenderState','ceil','ellipsoid','now','ColorRamp','PixelDatatype','xmin','resize','canvasWind','east','pixelSize','preExecute','particlesTextureSize','textures','SceneMode'];_0x5322=function(){return _0x246b06;};return _0x5322();}class ParticlesComputing{constructor(_0x576297,_0x3e4178,_0x4e5d97,_0x5a158f){const _0x3d3441=_0x2549c6;this['data']=_0x3e4178,this[_0x3d3441(0xfc)](_0x576297,_0x3e4178),this[_0x3d3441(0x10f)](_0x576297,_0x4e5d97,_0x5a158f),this['createComputingPrimitives'](_0x3e4178,_0x4e5d97,_0x5a158f);}['createWindTextures'](_0x110274,_0x39061e){const _0x34cc9a=_0x2549c6,_0x4e863a={'context':_0x110274,'width':_0x39061e[_0x34cc9a(0xc8)]['lon'],'height':_0x39061e['dimensions'][_0x34cc9a(0xc1)]*(_0x39061e[_0x34cc9a(0xc8)]['lev']||0x1),'pixelFormat':Cesium$3['PixelFormat']['LUMINANCE'],'pixelDatatype':Cesium$3['PixelDatatype']['FLOAT'],'flipY':![],'sampler':new Cesium$3['Sampler']({'minificationFilter':Cesium$3['TextureMinificationFilter'][_0x34cc9a(0x12d)],'magnificationFilter':Cesium$3[_0x34cc9a(0x149)]['NEAREST']})};this['windTextures']={'U':Util['createTexture'](_0x4e863a,_0x39061e['U'][_0x34cc9a(0xc5)]),'V':Util['createTexture'](_0x4e863a,_0x39061e['V']['array'])};}['createParticlesTextures'](_0x4e20ae,_0x58bba2,_0x1c49e1){const _0x1cde62=_0x2549c6,_0x4f635c={'context':_0x4e20ae,'width':_0x58bba2['particlesTextureSize'],'height':_0x58bba2[_0x1cde62(0x9c)],'pixelFormat':Cesium$3[_0x1cde62(0x121)]['RGBA'],'pixelDatatype':Cesium$3[_0x1cde62(0x95)]['FLOAT'],'flipY':![],'sampler':new Cesium$3['Sampler']({'minificationFilter':Cesium$3[_0x1cde62(0x147)]['NEAREST'],'magnificationFilter':Cesium$3[_0x1cde62(0x149)]['NEAREST']})},_0x405e54=this[_0x1cde62(0xc0)](_0x58bba2[_0x1cde62(0xbf)],_0x1c49e1),_0x503bf1=new Float32Array(0x4*_0x58bba2['maxParticles'])['fill'](0x0);this['particlesTextures']={'particlesWind':Util[_0x1cde62(0xf2)](_0x4f635c),'currentParticlesPosition':Util['createTexture'](_0x4f635c,_0x405e54),'nextParticlesPosition':Util['createTexture'](_0x4f635c,_0x405e54),'currentParticlesSpeed':Util[_0x1cde62(0xf2)](_0x4f635c,_0x503bf1),'nextParticlesSpeed':Util[_0x1cde62(0xf2)](_0x4f635c,_0x503bf1),'postProcessingPosition':Util['createTexture'](_0x4f635c,_0x405e54),'postProcessingSpeed':Util['createTexture'](_0x4f635c,_0x503bf1)};}[_0x2549c6(0xc0)](_0x22018c,_0x530c67){const _0x3607ed=_0x2549c6,_0x5783fa=new Float32Array(0x4*_0x22018c);for(let _0x33be23=0x0;_0x33be23<_0x22018c;_0x33be23++){_0x5783fa[0x4*_0x33be23]=Cesium$3['Math']['randomBetween'](_0x530c67['lonRange']['x'],_0x530c67[_0x3607ed(0x13f)]['y']),_0x5783fa[0x4*_0x33be23+0x1]=Cesium$3[_0x3607ed(0xfb)][_0x3607ed(0xa7)](_0x530c67['latRange']['x'],_0x530c67['latRange']['y']),_0x5783fa[0x4*_0x33be23+0x2]=Cesium$3['Math'][_0x3607ed(0xa7)](this['data'][_0x3607ed(0xab)][_0x3607ed(0x165)],this[_0x3607ed(0x14d)]['lev']['max']),_0x5783fa[0x4*_0x33be23+0x3]=0x0;}return _0x5783fa;}['destroyParticlesTextures'](){const _0x2858d5=_0x2549c6;Object[_0x2858d5(0xf9)](this['particlesTextures'])[_0x2858d5(0x10c)](_0x478142=>{this['particlesTextures'][_0x478142]['destroy']();});}[_0x2549c6(0x135)](_0x47df0b,_0x402dc5,_0x2d0e5b){const _0x479754=_0x2549c6,_0x45fab0=new Cesium$3['Cartesian3'](_0x47df0b['dimensions']['lon'],_0x47df0b[_0x479754(0xc8)][_0x479754(0xc1)],_0x47df0b['dimensions'][_0x479754(0xab)]),_0xf61290=new Cesium$3['Cartesian3'](_0x47df0b[_0x479754(0x128)]['min'],_0x47df0b['lat']['min'],_0x47df0b['lev']['min']),_0x438b09=new Cesium$3['Cartesian3'](_0x47df0b[_0x479754(0x128)]['max'],_0x47df0b[_0x479754(0xc1)][_0x479754(0xde)],_0x47df0b['lev'][_0x479754(0xde)]),_0x32c7c2=new Cesium$3['Cartesian3']((_0x438b09['x']-_0xf61290['x'])/(_0x45fab0['x']-0x1),(_0x438b09['y']-_0xf61290['y'])/(_0x45fab0['y']-0x1),_0x45fab0['z']>0x1?(_0x438b09['z']-_0xf61290['z'])/(_0x45fab0['z']-0x1):0x1),_0x273737=new Cesium$3['Cartesian2'](_0x47df0b['U']['min'],_0x47df0b['U'][_0x479754(0xde)]),_0x2dbf09=new Cesium$3['Cartesian2'](_0x47df0b['V']['min'],_0x47df0b['V'][_0x479754(0xde)]),_0x4a8070=this;this[_0x479754(0xe2)]={'getWind':new CustomPrimitive({'commandType':'Compute','uniformMap':{'U':function(){return _0x4a8070['windTextures']['U'];},'V':function(){const _0x596a43=_0x479754;return _0x4a8070[_0x596a43(0x10d)]['V'];},'currentParticlesPosition':function(){const _0x5cf9d5=_0x479754;return _0x4a8070['particlesTextures'][_0x5cf9d5(0xa9)];},'dimension':function(){return _0x45fab0;},'minimum':function(){return _0xf61290;},'maximum':function(){return _0x438b09;},'interval':function(){return _0x32c7c2;}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[getWind_frag]}),'outputTexture':this['particlesTextures']['particlesWind'],'preExecute':function(){const _0x5639e1=_0x479754;_0x4a8070[_0x5639e1(0xe2)]['getWind']['commandToExecute']['outputTexture']=_0x4a8070['particlesTextures'][_0x5639e1(0x141)];}}),'updateSpeed':new CustomPrimitive({'commandType':_0x479754(0x110),'uniformMap':{'currentParticlesSpeed':function(){const _0x5b9bc2=_0x479754;return _0x4a8070[_0x5b9bc2(0x150)][_0x5b9bc2(0xa1)];},'particlesWind':function(){const _0x32fb34=_0x479754;return _0x4a8070[_0x32fb34(0x150)][_0x32fb34(0x141)];},'uSpeedRange':function(){return _0x273737;},'vSpeedRange':function(){return _0x2dbf09;},'pixelSize':function(){const _0x463fee=_0x479754;return _0x2d0e5b[_0x463fee(0x9a)];},'speedFactor':function(){const _0x112c5f=_0x479754;return _0x402dc5[_0x112c5f(0xac)];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[updateSpeed_frag]}),'outputTexture':this[_0x479754(0x150)]['nextParticlesSpeed'],'preExecute':function(){const _0x4062ee=_0x479754,_0x550c6e=_0x4a8070[_0x4062ee(0x150)][_0x4062ee(0xa1)];_0x4a8070['particlesTextures'][_0x4062ee(0xa1)]=_0x4a8070['particlesTextures']['postProcessingSpeed'],_0x4a8070['particlesTextures']['postProcessingSpeed']=_0x550c6e,_0x4a8070['primitives']['updateSpeed']['commandToExecute'][_0x4062ee(0xaf)]=_0x4a8070['particlesTextures']['nextParticlesSpeed'];}}),'updatePosition':new CustomPrimitive({'commandType':'Compute','uniformMap':{'currentParticlesPosition':function(){return _0x4a8070['particlesTextures']['currentParticlesPosition'];},'currentParticlesSpeed':function(){return _0x4a8070['particlesTextures']['currentParticlesSpeed'];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[updatePosition_frag]}),'outputTexture':this['particlesTextures']['nextParticlesPosition'],'preExecute':function(){const _0x835751=_0x479754,_0x3a1117=_0x4a8070[_0x835751(0x150)]['currentParticlesPosition'];_0x4a8070['particlesTextures']['currentParticlesPosition']=_0x4a8070['particlesTextures']['postProcessingPosition'],_0x4a8070[_0x835751(0x150)]['postProcessingPosition']=_0x3a1117,_0x4a8070['primitives']['updatePosition'][_0x835751(0x120)]['outputTexture']=_0x4a8070[_0x835751(0x150)]['nextParticlesPosition'];}}),'postProcessingPosition':new CustomPrimitive({'commandType':'Compute','uniformMap':{'nextParticlesPosition':function(){const _0x2803f3=_0x479754;return _0x4a8070['particlesTextures'][_0x2803f3(0x137)];},'nextParticlesSpeed':function(){return _0x4a8070['particlesTextures']['nextParticlesSpeed'];},'lonRange':function(){const _0x48cd23=_0x479754;return _0x2d0e5b[_0x48cd23(0x13f)];},'latRange':function(){const _0x271055=_0x479754;return _0x2d0e5b[_0x271055(0x89)];},'randomCoefficient':function(){const _0x2cd912=_0x479754,_0xe37bbb=Math[_0x2cd912(0xcf)]();return _0xe37bbb;},'dropRate':function(){return _0x402dc5['dropRate'];},'dropRateBump':function(){const _0x1cb348=_0x479754;return _0x402dc5[_0x1cb348(0x133)];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[postProcessingPosition_frag]}),'outputTexture':this['particlesTextures']['postProcessingPosition'],'preExecute':function(){_0x4a8070['primitives']['postProcessingPosition']['commandToExecute']['outputTexture']=_0x4a8070['particlesTextures']['postProcessingPosition'];}}),'postProcessingSpeed':new CustomPrimitive({'commandType':'Compute','uniformMap':{'postProcessingPosition':function(){return _0x4a8070['particlesTextures']['postProcessingPosition'];},'nextParticlesSpeed':function(){const _0xe54fe=_0x479754;return _0x4a8070['particlesTextures'][_0xe54fe(0x100)];}},'fragmentShaderSource':new Cesium$3[(_0x479754(0xd2))]({'sources':[postProcessingSpeed_frag]}),'outputTexture':this[_0x479754(0x150)]['postProcessingSpeed'],'preExecute':function(){const _0x35c089=_0x479754;_0x4a8070['primitives']['postProcessingSpeed']['commandToExecute'][_0x35c089(0xaf)]=_0x4a8070[_0x35c089(0x150)]['postProcessingSpeed'];}})};}}const Cesium$2=mars3d__namespace['Cesium'];class ParticleSystem{constructor(_0x2ee283,_0x2bf2f0,_0x304af6,_0x5ec273){const _0x144cdd=_0x2549c6;this['context']=_0x2ee283,_0x2bf2f0={..._0x2bf2f0},_0x2bf2f0[_0x144cdd(0x109)]&&_0x2bf2f0[_0x144cdd(0x112)]&&(_0x2bf2f0['dimensions']={},_0x2bf2f0['dimensions']['lon']=_0x2bf2f0['cols'],_0x2bf2f0[_0x144cdd(0xc8)][_0x144cdd(0xc1)]=_0x2bf2f0['rows'],_0x2bf2f0['dimensions'][_0x144cdd(0xab)]=_0x2bf2f0['lev']||0x1,_0x2bf2f0['lon']={},_0x2bf2f0['lon'][_0x144cdd(0x165)]=_0x2bf2f0['xmin'],_0x2bf2f0['lon'][_0x144cdd(0xde)]=_0x2bf2f0[_0x144cdd(0xda)],_0x2bf2f0['lat']={},_0x2bf2f0[_0x144cdd(0xc1)]['min']=_0x2bf2f0['ymin'],_0x2bf2f0[_0x144cdd(0xc1)]['max']=_0x2bf2f0['ymax'],_0x2bf2f0['lev']={},_0x2bf2f0[_0x144cdd(0xab)]['min']=_0x2bf2f0['levmin']??0x1,_0x2bf2f0[_0x144cdd(0xab)][_0x144cdd(0xde)]=_0x2bf2f0['levmax']??0x1,_0x2bf2f0['U']={},_0x2bf2f0['U'][_0x144cdd(0xc5)]=new Float32Array(_0x2bf2f0['udata']),_0x2bf2f0['U']['min']=_0x2bf2f0['umin']??Math[_0x144cdd(0x165)](..._0x2bf2f0['udata']),_0x2bf2f0['U'][_0x144cdd(0xde)]=_0x2bf2f0['umax']??Math['max'](..._0x2bf2f0['udata']),_0x2bf2f0['V']={},_0x2bf2f0['V']['array']=new Float32Array(_0x2bf2f0['vdata']),_0x2bf2f0['V'][_0x144cdd(0x165)]=_0x2bf2f0['vmin']??Math[_0x144cdd(0x165)](..._0x2bf2f0['vdata']),_0x2bf2f0['V'][_0x144cdd(0xde)]=_0x2bf2f0[_0x144cdd(0x146)]??Math['max'](..._0x2bf2f0['vdata'])),this[_0x144cdd(0x14d)]=_0x2bf2f0,this['options']=_0x304af6,this['viewerParameters']=_0x5ec273,this['particlesComputing']=new ParticlesComputing(this['context'],this[_0x144cdd(0x14d)],this['options'],this['viewerParameters']),this[_0x144cdd(0xdc)]=new ParticlesRendering(this[_0x144cdd(0xa0)],this[_0x144cdd(0x14d)],this['options'],this['viewerParameters'],this['particlesComputing']);}[_0x2549c6(0x78)](_0x40f86d){const _0x419050=_0x2549c6;this[_0x419050(0x8e)][_0x419050(0x139)](),Object['keys'](this[_0x419050(0x8e)][_0x419050(0x10d)])['forEach'](_0x437fd4=>{this['particlesComputing']['windTextures'][_0x437fd4]['destroy']();}),this['particlesRendering']['textures']['colorTable']['destroy'](),Object['keys'](this['particlesRendering']['framebuffers'])['forEach'](_0x4d2861=>{const _0xd3b9f9=_0x419050;this[_0xd3b9f9(0xdc)]['framebuffers'][_0x4d2861][_0xd3b9f9(0x116)]();}),this[_0x419050(0xa0)]=_0x40f86d,this['particlesComputing']=new ParticlesComputing(this['context'],this[_0x419050(0x14d)],this['options'],this[_0x419050(0x102)]),this['particlesRendering']=new ParticlesRendering(this['context'],this[_0x419050(0x14d)],this['options'],this[_0x419050(0x102)],this['particlesComputing']);}['clearFramebuffers'](){const _0x34ec62=_0x2549c6,_0x4d324d=new Cesium$2['ClearCommand']({'color':new Cesium$2[(_0x34ec62(0x12e))](0x0,0x0,0x0,0x0),'depth':0x1,'framebuffer':undefined,'pass':Cesium$2['Pass']['OPAQUE']});Object['keys'](this['particlesRendering']['framebuffers'])['forEach'](_0x1b082c=>{const _0x1d2a33=_0x34ec62;_0x4d324d['framebuffer']=this['particlesRendering']['framebuffers'][_0x1b082c],_0x4d324d[_0x1d2a33(0x123)](this[_0x1d2a33(0xa0)]);});}[_0x2549c6(0xc6)](_0x56028e){const _0x1784ad=_0x2549c6;this['clearFramebuffers'](),this['particlesComputing']['destroyParticlesTextures'](),this['particlesComputing']['createParticlesTextures'](this['context'],this['options'],this['viewerParameters']);if(_0x56028e){var _0x49a46a;const _0x1ecb2c=this['particlesRendering']['createSegmentsGeometry'](this['options']);this[_0x1784ad(0xdc)]['primitives']['segments']['geometry']=_0x1ecb2c;const _0x5f0516=Cesium$2['VertexArray']['fromGeometry']({'context':this[_0x1784ad(0xa0)],'geometry':_0x1ecb2c,'attributeLocations':this['particlesRendering']['primitives']['segments'][_0x1784ad(0x164)],'bufferUsage':Cesium$2['BufferUsage'][_0x1784ad(0xd3)]});(_0x49a46a=this[_0x1784ad(0xdc)][_0x1784ad(0xe2)])!==null&&_0x49a46a!==void 0x0&&(_0x49a46a=_0x49a46a['segments'])!==null&&_0x49a46a!==void 0x0&&_0x49a46a['commandToExecute']&&(this[_0x1784ad(0xdc)]['primitives']['segments'][_0x1784ad(0x120)][_0x1784ad(0xe5)]=_0x5f0516);}}['setOptions'](_0x2d8081){const _0x3f5297=_0x2549c6;let _0x5e810b=![];this['options'][_0x3f5297(0xbf)]!==_0x2d8081['maxParticles']&&(_0x5e810b=!![]),Object['keys'](_0x2d8081)[_0x3f5297(0x10c)](_0x52f2dd=>{this['options'][_0x52f2dd]=_0x2d8081[_0x52f2dd];}),this['refreshParticles'](_0x5e810b);}[_0x2549c6(0x10b)](_0x5466ec){const _0x3a36ea=_0x2549c6;Object['keys'](_0x5466ec)['forEach'](_0x4139f4=>{this['viewerParameters'][_0x4139f4]=_0x5466ec[_0x4139f4];}),this[_0x3a36ea(0xc6)](![]);}[_0x2549c6(0x116)](){const _0x50b5e5=_0x2549c6;clearTimeout(this['canrefresh']),this['particlesComputing'][_0x50b5e5(0x139)](),Object['keys'](this['particlesComputing'][_0x50b5e5(0x10d)])['forEach'](_0x54a928=>{this['particlesComputing']['windTextures'][_0x54a928]['destroy']();}),this['particlesRendering']['textures']['colorTable']['destroy'](),Object['keys'](this['particlesRendering']['framebuffers'])[_0x50b5e5(0x10c)](_0x52eea1=>{const _0x29b119=_0x50b5e5;this['particlesRendering']['framebuffers'][_0x52eea1][_0x29b119(0x116)]();});for(const _0x279180 in this){delete this[_0x279180];}}}const Cesium$1=mars3d__namespace['Cesium'],BaseLayer$1=mars3d__namespace[_0x2549c6(0x160)]['BaseLayer'],DEF_OPTIONS={'particlesNumber':0x1000,'fixedHeight':0x0,'fadeOpacity':0.996,'dropRate':0.003,'dropRateBump':0.01,'speedFactor':0.5,'lineWidth':0x2,'colors':['rgb(206,255,255)']};class WindLayer extends BaseLayer$1{constructor(_0x20dd9a={}){_0x20dd9a={...DEF_OPTIONS,..._0x20dd9a},super(_0x20dd9a),this['_setOptionsHook'](_0x20dd9a);}get['layer'](){const _0x5682f2=_0x2549c6;return this[_0x5682f2(0xe2)];}get['data'](){return this['_data'];}set[_0x2549c6(0x14d)](_0x452985){this['setData'](_0x452985);}get[_0x2549c6(0xcc)](){return this['options']['colors'];}set['colors'](_0x24dd34){const _0x47fc4f=_0x2549c6;this[_0x47fc4f(0xb7)][_0x47fc4f(0xcc)]=_0x24dd34,this[_0x47fc4f(0x10e)]&&this[_0x47fc4f(0x10e)][_0x47fc4f(0x82)]({'colors':_0x24dd34}),this['resize']();}['_mountedHook'](){}['_addedHook'](){const _0x1344be=_0x2549c6;this['scene']=this[_0x1344be(0x7a)][_0x1344be(0x159)],this['camera']=this[_0x1344be(0x7a)]['camera'],this['primitives']=new Cesium$1['PrimitiveCollection'](),this['_map']['scene'][_0x1344be(0xe2)][_0x1344be(0x153)](this['primitives']),this['viewerParameters']={'lonRange':new Cesium$1[(_0x1344be(0x13a))](),'latRange':new Cesium$1[(_0x1344be(0x13a))](),'pixelSize':0x0},this['globeBoundingSphere']=new Cesium$1['BoundingSphere'](Cesium$1[_0x1344be(0xff)]['ZERO'],0.99*0x615299),this['updateViewerParameters'](),window[_0x1344be(0x132)]('resize',this[_0x1344be(0x97)]['bind'](this),![]),this['mouse_down']=![],this['mouse_move']=![],this['_map']['on'](mars3d__namespace['EventType'][_0x1344be(0xd8)],this[_0x1344be(0xf1)],this),this['_map']['on'](mars3d__namespace[_0x1344be(0x15c)]['mouseDown'],this['_onMouseDownEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseUp'],this[_0x1344be(0xa3)],this),this[_0x1344be(0x7a)]['on'](mars3d__namespace[_0x1344be(0x15c)]['mouseMove'],this['_onMouseMoveEvent'],this),this['_data']&&this['setData'](this['_data']);}['_removedHook'](){const _0x5d005f=_0x2549c6;window[_0x5d005f(0xb3)]('resize',this['resize']),this[_0x5d005f(0x7a)]['off'](mars3d__namespace[_0x5d005f(0x15c)][_0x5d005f(0xb8)],this['_onMap_preRenderEvent'],this),this[_0x5d005f(0x7a)]['off'](mars3d__namespace[_0x5d005f(0x15c)]['wheel'],this[_0x5d005f(0xf1)],this),this['_map']['off'](mars3d__namespace['EventType']['mouseDown'],this['_onMouseDownEvent'],this),this['_map']['off'](mars3d__namespace['EventType']['mouseUp'],this['_onMouseUpEvent'],this),this[_0x5d005f(0x7a)]['off'](mars3d__namespace['EventType'][_0x5d005f(0xbb)],this['_onMouseMoveEvent'],this),this['primitives']['removeAll'](),this['_map']['scene']['primitives']['remove'](this['primitives']);}['resize'](){const _0x5a8871=_0x2549c6;if(!this['show']||!this['particleSystem'])return;this['primitives'][_0x5a8871(0xe8)]=![],this['primitives']['removeAll'](),this[_0x5a8871(0x7a)]['once'](mars3d__namespace[_0x5a8871(0x15c)]['preRender'],this['_onMap_preRenderEvent'],this);}['_onMap_preRenderEvent'](_0x3d98e8){const _0x275572=_0x2549c6;this[_0x275572(0x10e)]['canvasResize'](this['scene']['context']),this['addPrimitives'](),this['primitives']['show']=!![];}['_onMapWhellEvent'](_0x4610ac){clearTimeout(this['refreshTimer']);if(!this['show']||!this['particleSystem'])return;this['primitives']['show']=![],this['refreshTimer']=setTimeout(()=>{if(!this['show'])return;this['redraw']();},0xc8);}['_onMouseDownEvent'](_0x4810b2){const _0x130470=_0x2549c6;this[_0x130470(0xf6)]=!![];}['_onMouseMoveEvent'](_0x43c5d1){if(!this['show']||!this['particleSystem'])return;this['mouse_down']&&(this['primitives']['show']=![],this['mouse_move']=!![]);}[_0x2549c6(0xa3)](_0x2175e4){const _0x1fe69b=_0x2549c6;if(!this['show']||!this['particleSystem'])return;this[_0x1fe69b(0xf6)]&&this['mouse_move']&&this['redraw'](),this['primitives']['show']=!![],this['mouse_down']=![],this['mouse_move']=![];}[_0x2549c6(0x14a)](){const _0x5a69a1=_0x2549c6;if(!this['_map']||!this['show'])return;this['updateViewerParameters'](),this['particleSystem']['applyViewerParameters'](this[_0x5a69a1(0x102)]),this['primitives'][_0x5a69a1(0xe8)]=!![];}['setData'](_0x288ba5){const _0x1cdd33=_0x2549c6;this['_data']=_0x288ba5,this['particleSystem']&&this['particleSystem'][_0x1cdd33(0x116)](),this['particleSystem']=new ParticleSystem(this[_0x1cdd33(0x159)]['context'],_0x288ba5,this[_0x1cdd33(0xf4)](),this['viewerParameters']),this['addPrimitives']();}[_0x2549c6(0x108)](_0x33cf6e,_0x46db92){const _0x598532=_0x2549c6;if(_0x33cf6e)for(const _0x139d6d in _0x33cf6e){this[_0x139d6d]=_0x33cf6e[_0x139d6d];}this['particleSystem']&&this['particleSystem'][_0x598532(0x82)](this['getOptions']());}['getOptions'](){const _0x8fc3d6=_0x2549c6,_0x346799=Math[_0x8fc3d6(0x91)](Math['sqrt'](this['particlesNumber']));return this['particlesNumber']=_0x346799*_0x346799,{'particlesTextureSize':_0x346799,'maxParticles':this['particlesNumber'],'particleHeight':this['fixedHeight'],'fadeOpacity':this[_0x8fc3d6(0xfd)],'dropRate':this[_0x8fc3d6(0xf7)],'dropRateBump':this['dropRateBump'],'speedFactor':this['speedFactor'],'lineWidth':this['lineWidth'],'colors':this['colors']};}['addPrimitives'](){const _0x167d9e=_0x2549c6;this['primitives'][_0x167d9e(0x153)](this['particleSystem']['particlesComputing']['primitives'][_0x167d9e(0xa8)]),this[_0x167d9e(0xe2)]['add'](this['particleSystem'][_0x167d9e(0x8e)]['primitives']['updateSpeed']),this['primitives']['add'](this[_0x167d9e(0x10e)]['particlesComputing'][_0x167d9e(0xe2)]['updatePosition']),this['primitives']['add'](this[_0x167d9e(0x10e)][_0x167d9e(0x8e)][_0x167d9e(0xe2)]['postProcessingPosition']),this['primitives']['add'](this[_0x167d9e(0x10e)]['particlesComputing'][_0x167d9e(0xe2)]['postProcessingSpeed']),this['primitives']['add'](this['particleSystem']['particlesRendering']['primitives']['segments']),this['primitives']['add'](this['particleSystem']['particlesRendering'][_0x167d9e(0xe2)]['trails']),this['primitives']['add'](this['particleSystem']['particlesRendering'][_0x167d9e(0xe2)]['screen']);}['updateViewerParameters'](){const _0x471596=_0x2549c6;let _0x27d406=this['camera'][_0x471596(0x122)](this['scene']['globe'][_0x471596(0x92)]);if(!_0x27d406){const _0x3803ae=this['_map']['getExtent']();_0x27d406=Cesium$1['Rectangle']['fromDegrees'](_0x3803ae['xmin'],_0x3803ae['ymin'],_0x3803ae['xmax'],_0x3803ae['ymax']);}const _0x25ebfe=Util[_0x471596(0x11e)](_0x27d406);this['viewerParameters'][_0x471596(0x13f)]['x']=_0x25ebfe['lon']['min'],this['viewerParameters']['lonRange']['y']=_0x25ebfe['lon']['max'],this[_0x471596(0x102)][_0x471596(0x89)]['x']=_0x25ebfe[_0x471596(0xc1)]['min'],this[_0x471596(0x102)][_0x471596(0x89)]['y']=_0x25ebfe['lat']['max'];const _0x1bb67f=this['camera']['getPixelSize'](this['globeBoundingSphere'],this[_0x471596(0x159)][_0x471596(0xc3)],this['scene']['drawingBufferHeight']);_0x1bb67f>0x0&&(this['viewerParameters']['pixelSize']=_0x1bb67f);}}mars3d__namespace['LayerUtil']['register'](_0x2549c6(0x129),WindLayer),mars3d__namespace[_0x2549c6(0x160)]['WindLayer']=WindLayer;class CanvasParticle{constructor(){const _0x25292b=_0x2549c6;this[_0x25292b(0x11d)]=null,this[_0x25292b(0xc1)]=null,this[_0x25292b(0x105)]=null,this['tlat']=null,this[_0x25292b(0x88)]=null,this['speed']=null;}[_0x2549c6(0x116)](){for(const _0x3800ad in this){delete this[_0x3800ad];}}}class CanvasWindField{constructor(_0x3e8c66){const _0x59ed1c=_0x2549c6;this[_0x59ed1c(0x82)](_0x3e8c66);}get['speedRate'](){const _0x488c56=_0x2549c6;return this[_0x488c56(0x15a)];}set[_0x2549c6(0xae)](_0x38b7de){const _0x5d0ab4=_0x2549c6;this['_speedRate']=(0x64-(_0x38b7de>0x63?0x63:_0x38b7de))*0x64,this['_calc_speedRate']=[(this[_0x5d0ab4(0xda)]-this['xmin'])/this['_speedRate'],(this[_0x5d0ab4(0x7d)]-this[_0x5d0ab4(0xef)])/this['_speedRate']];}get['maxAge'](){return this['_maxAge'];}set[_0x2549c6(0x13d)](_0x2e0504){this['_maxAge']=_0x2e0504;}[_0x2549c6(0x82)](_0x51f7c2){const _0x49065e=_0x2549c6;this['options']=_0x51f7c2,this['maxAge']=_0x51f7c2['maxAge']||0x78,this[_0x49065e(0xae)]=_0x51f7c2['speedRate']||0x32,this[_0x49065e(0x113)]=[];const _0x5d9b5e=_0x51f7c2[_0x49065e(0xfe)]||0x1000;for(let _0x3f5e99=0x0;_0x3f5e99<_0x5d9b5e;_0x3f5e99++){const _0x5a2298=this['_randomParticle'](new CanvasParticle());this['particles']['push'](_0x5a2298);}}['setDate'](_0x4d7c26){const _0x2038b3=_0x2549c6;this[_0x2038b3(0xe7)]=_0x4d7c26[_0x2038b3(0xe7)],this['cols']=_0x4d7c26['cols'],this[_0x2038b3(0x96)]=_0x4d7c26['xmin'],this[_0x2038b3(0xda)]=_0x4d7c26[_0x2038b3(0xda)],this[_0x2038b3(0xef)]=_0x4d7c26['ymin'],this['ymax']=_0x4d7c26['ymax'],this[_0x2038b3(0x134)]=[];const _0xb5cf0a=_0x4d7c26['udata'],_0x141d18=_0x4d7c26['vdata'];let _0x1b6367=![];_0xb5cf0a[_0x2038b3(0xf5)]===this[_0x2038b3(0xe7)]&&_0xb5cf0a[0x0]['length']===this['cols']&&(_0x1b6367=!![]);let _0xdab804=0x0,_0x12e247=null,_0x1810fd=null;for(let _0xaee134=0x0;_0xaee134<this['rows'];_0xaee134++){_0x12e247=[];for(let _0x534fec=0x0;_0x534fec<this[_0x2038b3(0xd9)];_0x534fec++,_0xdab804++){_0x1b6367?_0x1810fd=this['_calcUV'](_0xb5cf0a[_0xaee134][_0x534fec],_0x141d18[_0xaee134][_0x534fec]):_0x1810fd=this['_calcUV'](_0xb5cf0a[_0xdab804],_0x141d18[_0xdab804]),_0x12e247['push'](_0x1810fd);}this[_0x2038b3(0x134)]['push'](_0x12e247);}this['options'][_0x2038b3(0xbc)]&&this['grid']['reverse']();}['clear'](){const _0x59d4b1=_0x2549c6;delete this['rows'],delete this['cols'],delete this[_0x59d4b1(0x96)],delete this[_0x59d4b1(0xda)],delete this['ymin'],delete this[_0x59d4b1(0x7d)],delete this['grid'],delete this['particles'];}[_0x2549c6(0x13c)](_0x13ddba,_0x67e85d){const _0x1db330=_0x2549c6,_0x578fc4=(_0x13ddba-this['xmin'])/(this[_0x1db330(0xda)]-this['xmin'])*(this['cols']-0x1),_0x36962a=(this['ymax']-_0x67e85d)/(this['ymax']-this['ymin'])*(this['rows']-0x1);return[_0x578fc4,_0x36962a];}['getUVByXY'](_0x133b04,_0x49c66c){const _0x31a7da=_0x2549c6;if(_0x133b04<0x0||_0x133b04>=this[_0x31a7da(0xd9)]||_0x49c66c>=this['rows'])return[0x0,0x0,0x0];const _0x34f16c=Math[_0x31a7da(0x14f)](_0x133b04),_0x170b23=Math['floor'](_0x49c66c);if(_0x34f16c===_0x133b04&&_0x170b23===_0x49c66c)return this['grid'][_0x49c66c][_0x133b04];const _0x5cb14e=_0x34f16c+0x1,_0x5b5d13=_0x170b23+0x1,_0x54d1e2=this['getUVByXY'](_0x34f16c,_0x170b23),_0x58ba7e=this[_0x31a7da(0x130)](_0x5cb14e,_0x170b23),_0x15939f=this[_0x31a7da(0x130)](_0x34f16c,_0x5b5d13),_0x512632=this['getUVByXY'](_0x5cb14e,_0x5b5d13);let _0x4f860b=null;try{_0x4f860b=this['_bilinearInterpolation'](_0x133b04-_0x34f16c,_0x49c66c-_0x170b23,_0x54d1e2,_0x58ba7e,_0x15939f,_0x512632);}catch(_0x527de8){console[_0x31a7da(0x152)](_0x133b04,_0x49c66c);}return _0x4f860b;}['_bilinearInterpolation'](_0x4920a4,_0xd6f500,_0x3423eb,_0x21f699,_0x1c616e,_0x337bc2){const _0x4a38c7=_0x2549c6,_0x423fd8=0x1-_0x4920a4,_0x48850c=0x1-_0xd6f500,_0x48acdf=_0x423fd8*_0x48850c,_0x236c84=_0x4920a4*_0x48850c,_0x14504e=_0x423fd8*_0xd6f500,_0x16a5e9=_0x4920a4*_0xd6f500,_0x3cb85d=_0x3423eb[0x0]*_0x48acdf+_0x21f699[0x0]*_0x236c84+_0x1c616e[0x0]*_0x14504e+_0x337bc2[0x0]*_0x16a5e9,_0x35e7f1=_0x3423eb[0x1]*_0x48acdf+_0x21f699[0x1]*_0x236c84+_0x1c616e[0x1]*_0x14504e+_0x337bc2[0x1]*_0x16a5e9;return this[_0x4a38c7(0xf3)](_0x3cb85d,_0x35e7f1);}['_calcUV'](_0x310e90,_0x1e6634){return[+_0x310e90,+_0x1e6634,Math['sqrt'](_0x310e90*_0x310e90+_0x1e6634*_0x1e6634)];}['getUVByPoint'](_0x23e079,_0x366d4c){const _0x377bf0=_0x2549c6;if(!this['isInExtent'](_0x23e079,_0x366d4c))return null;const _0x45e9bc=this['toGridXY'](_0x23e079,_0x366d4c),_0x46d5e6=this[_0x377bf0(0x130)](_0x45e9bc[0x0],_0x45e9bc[0x1]);return _0x46d5e6;}['isInExtent'](_0x24b813,_0x243fd3){return _0x24b813>=this['xmin']&&_0x24b813<=this['xmax']&&_0x243fd3>=this['ymin']&&_0x243fd3<=this['ymax']?!![]:![];}[_0x2549c6(0x8b)](){const _0x2b69e7=fRandomByfloat(this['xmin'],this['xmax']),_0x2e7c62=fRandomByfloat(this['ymin'],this['ymax']);return{'lat':_0x2e7c62,'lng':_0x2b69e7};}[_0x2549c6(0x127)](){const _0x5e4581=_0x2549c6;let _0x2efaf5,_0x215b27,_0x518e06;for(let _0x41b06b=0x0,_0x27c7dd=this['particles']['length'];_0x41b06b<_0x27c7dd;_0x41b06b++){let _0x4c4469=this['particles'][_0x41b06b];_0x4c4469['age']<=0x0&&(_0x4c4469=this['_randomParticle'](_0x4c4469));if(_0x4c4469[_0x5e4581(0x88)]>0x0){const _0x2eeb13=_0x4c4469['tlng'],_0x15d06c=_0x4c4469[_0x5e4581(0xdd)];_0x518e06=this[_0x5e4581(0x15d)](_0x2eeb13,_0x15d06c),_0x518e06?(_0x2efaf5=_0x2eeb13+this['_calc_speedRate'][0x0]*_0x518e06[0x0],_0x215b27=_0x15d06c+this['_calc_speedRate'][0x1]*_0x518e06[0x1],_0x4c4469[_0x5e4581(0x11d)]=_0x2eeb13,_0x4c4469['lat']=_0x15d06c,_0x4c4469[_0x5e4581(0x105)]=_0x2efaf5,_0x4c4469[_0x5e4581(0xdd)]=_0x215b27,_0x4c4469['speed']=_0x518e06[0x2],_0x4c4469['age']--):_0x4c4469['age']=0x0;}}return this['particles'];}['_randomParticle'](_0x4e927b){const _0x40f499=_0x2549c6;let _0x2921f2,_0x1d2fb8;for(let _0x14a75d=0x0;_0x14a75d<0x1e;_0x14a75d++){_0x2921f2=this['getRandomLatLng'](),_0x1d2fb8=this['getUVByPoint'](_0x2921f2[_0x40f499(0x11d)],_0x2921f2['lat']);if(_0x1d2fb8&&_0x1d2fb8[0x2]>0x0)break;}if(!_0x1d2fb8)return _0x4e927b;const _0x179fdd=_0x2921f2[_0x40f499(0x11d)]+this['_calc_speedRate'][0x0]*_0x1d2fb8[0x0],_0x2316f5=_0x2921f2['lat']+this['_calc_speedRate'][0x1]*_0x1d2fb8[0x1];return _0x4e927b[_0x40f499(0x11d)]=_0x2921f2['lng'],_0x4e927b['lat']=_0x2921f2['lat'],_0x4e927b[_0x40f499(0x105)]=_0x179fdd,_0x4e927b[_0x40f499(0xdd)]=_0x2316f5,_0x4e927b['age']=Math['round'](Math[_0x40f499(0xcf)]()*this['maxAge']),_0x4e927b['speed']=_0x1d2fb8[0x2],_0x4e927b;}['destroy'](){for(const _0x4098cc in this){delete this[_0x4098cc];}}}function fRandomByfloat(_0x15f62d,_0x1eca6c){return _0x15f62d+Math['random']()*(_0x1eca6c-_0x15f62d);}const Cesium=mars3d__namespace['Cesium'],BaseLayer=mars3d__namespace['layer'][_0x2549c6(0x101)];class CanvasWindLayer extends BaseLayer{constructor(_0x29a89f={}){const _0x57066f=_0x2549c6;super(_0x29a89f),this['_setOptionsHook'](_0x29a89f),this['canvas']=null,_0x29a89f[_0x57066f(0xcc)]&&_0x29a89f['steps']&&(this[_0x57066f(0xe9)]=new mars3d__namespace[(_0x57066f(0x94))](_0x29a89f));}['_setOptionsHook'](_0x22bca5,_0xf23543){const _0x38fae2=_0x2549c6;this['frameTime']=0x3e8/(_0x22bca5['frameRate']||0xa),this[_0x38fae2(0x87)]=this[_0x38fae2(0xb7)][_0x38fae2(0xa4)]??![],this['color']=_0x22bca5[_0x38fae2(0x7b)]||_0x38fae2(0x126),this['lineWidth']=_0x22bca5[_0x38fae2(0xc2)]||0x1,this[_0x38fae2(0xbe)]=_0x22bca5['fixedHeight']??0x0,this['reverseY']=_0x22bca5[_0x38fae2(0xbc)]??![],this['windField']&&this[_0x38fae2(0xec)]['setOptions'](_0x22bca5);}get['layer'](){return this['canvas'];}get[_0x2549c6(0xb9)](){return this['_map']['scene']['canvas']['clientWidth'];}get[_0x2549c6(0xee)](){const _0x356903=_0x2549c6;return this[_0x356903(0x7a)]['scene']['canvas']['clientHeight'];}get['pointerEvents'](){return this['_pointerEvents'];}set['pointerEvents'](_0x24b5a2){const _0x1638c3=_0x2549c6;this[_0x1638c3(0x87)]=_0x24b5a2;if(!this['canvas'])return;_0x24b5a2?this[_0x1638c3(0x11b)]['style']['pointer-events']='all':this[_0x1638c3(0x11b)]['style']['pointer-events']=_0x1638c3(0xd1);}get[_0x2549c6(0xfe)](){const _0x22afe7=_0x2549c6;return this[_0x22afe7(0xb7)][_0x22afe7(0xfe)];}set['particlesNumber'](_0x36022a){const _0x296ee1=_0x2549c6;this['options']['particlesNumber']=_0x36022a,clearTimeout(this[_0x296ee1(0xa5)]),this['_canrefresh']=setTimeout(()=>{this['redraw']();},0x1f4);}get['speedRate'](){return this['options']['speedRate'];}set['speedRate'](_0x52c0d7){this['options']['speedRate']=_0x52c0d7,this['windField']&&(this['windField']['speedRate']=_0x52c0d7);}get['maxAge'](){const _0x1895f8=_0x2549c6;return this['options'][_0x1895f8(0x13d)];}set[_0x2549c6(0x13d)](_0x33e613){const _0x1bd63d=_0x2549c6;this[_0x1bd63d(0xb7)][_0x1bd63d(0x13d)]=_0x33e613,this['windField']&&(this['windField']['maxAge']=_0x33e613);}get[_0x2549c6(0x14d)](){return this['windData'];}set[_0x2549c6(0x14d)](_0x3ecb87){const _0x35d326=_0x2549c6;this[_0x35d326(0xd5)](_0x3ecb87);}['_showHook'](_0x191055){_0x191055?this['_addedHook']():(this['windData']&&(this['options']['data']=this['windData']),this['_removedHook']());}['_mountedHook'](){const _0x190c65=_0x2549c6;this['options']['worker']?this['initWorker']():this[_0x190c65(0xec)]=new CanvasWindField(this[_0x190c65(0xb7)]);}[_0x2549c6(0xb6)](){const _0xa4c89=_0x2549c6;this[_0xa4c89(0x11b)]=this[_0xa4c89(0x12b)](),this[_0xa4c89(0xca)]=this['canvas'][_0xa4c89(0x84)]('2d',{'willReadFrequently':!![]}),this[_0xa4c89(0xc7)](),this[_0xa4c89(0xb7)][_0xa4c89(0x14d)]&&this['setData'](this['options'][_0xa4c89(0x14d)]);}['_removedHook'](){const _0x411c77=_0x2549c6;this['clear'](),this['unbindEvent'](),this['canvas']&&(this[_0x411c77(0x7a)][_0x411c77(0x145)]['removeChild'](this['canvas']),delete this['canvas']);}[_0x2549c6(0x12b)](){const _0x380a99=_0x2549c6,_0x2bbc8b=mars3d__namespace['DomUtil']['create'](_0x380a99(0x11b),'mars3d-canvasWind',this['_map']['container']);return _0x2bbc8b[_0x380a99(0x103)][_0x380a99(0x161)]='absolute',_0x2bbc8b['style'][_0x380a99(0x15b)]='0px',_0x2bbc8b[_0x380a99(0x103)]['left']='0px',_0x2bbc8b[_0x380a99(0x103)]['width']=this['_map']['scene'][_0x380a99(0x11b)]['clientWidth']+'px',_0x2bbc8b[_0x380a99(0x103)][_0x380a99(0x80)]=this['_map'][_0x380a99(0x159)]['canvas']['clientHeight']+'px',_0x2bbc8b['style']['pointerEvents']=this[_0x380a99(0x87)]?_0x380a99(0x14e):'none',_0x2bbc8b[_0x380a99(0x103)]['zIndex']=this['options']['zIndex']??0x9,_0x2bbc8b['width']=this['_map']['scene']['canvas']['clientWidth'],_0x2bbc8b[_0x380a99(0x80)]=this['_map']['scene'][_0x380a99(0x11b)][_0x380a99(0x156)],_0x2bbc8b;}['resize'](){const _0x5f5845=_0x2549c6;this['canvas']&&(this['canvas']['style']['width']=this[_0x5f5845(0x7a)]['scene']['canvas'][_0x5f5845(0xa6)]+'px',this['canvas'][_0x5f5845(0x103)]['height']=this[_0x5f5845(0x7a)]['scene']['canvas'][_0x5f5845(0x156)]+'px',this[_0x5f5845(0x11b)]['width']=this[_0x5f5845(0x7a)]['scene'][_0x5f5845(0x11b)]['clientWidth'],this[_0x5f5845(0x11b)][_0x5f5845(0x80)]=this[_0x5f5845(0x7a)]['scene']['canvas']['clientHeight']);}['bindEvent'](){const _0x2bd537=_0x2549c6,_0x34ec74=this;let _0x39f910=Date[_0x2bd537(0x93)]();(function _0x24e7cb(){const _0x38ef5d=_0x2bd537;_0x34ec74['animateFrame']=window['requestAnimationFrame'](_0x24e7cb);if(_0x34ec74['show']&&_0x34ec74['windField']){const _0x4005b5=Date['now'](),_0x5a0a42=_0x4005b5-_0x39f910;_0x5a0a42>_0x34ec74[_0x38ef5d(0x151)]&&(_0x39f910=_0x4005b5-_0x5a0a42%_0x34ec74['frameTime'],_0x34ec74['update']());}}(),window['addEventListener']('resize',this['resize'][_0x2bd537(0x85)](this),![]),this['mouse_down']=![],this['mouse_move']=![],this['options']['mouseHidden']&&(this[_0x2bd537(0x7a)]['on'](mars3d__namespace['EventType']['wheel'],this[_0x2bd537(0xf1)],this),this['_map']['on'](mars3d__namespace['EventType'][_0x2bd537(0xea)],this[_0x2bd537(0xe1)],this),this[_0x2bd537(0x7a)]['on'](mars3d__namespace['EventType']['mouseUp'],this['_onMouseUpEvent'],this)));}['unbindEvent'](){const _0x47b820=_0x2549c6;window['cancelAnimationFrame'](this['animateFrame']),delete this['animateFrame'],window[_0x47b820(0xb3)]('resize',this['resize']),this['options']['mouseHidden']&&(this[_0x47b820(0x7a)]['off'](mars3d__namespace['EventType']['wheel'],this[_0x47b820(0xf1)],this),this['_map'][_0x47b820(0xfa)](mars3d__namespace['EventType']['mouseDown'],this[_0x47b820(0xe1)],this),this['_map'][_0x47b820(0xfa)](mars3d__namespace['EventType'][_0x47b820(0xa2)],this['_onMouseUpEvent'],this),this['_map']['off'](mars3d__namespace['EventType'][_0x47b820(0xbb)],this['_onMouseMoveEvent'],this));}[_0x2549c6(0xf1)](_0x13b6d0){const _0x2a3ba0=_0x2549c6;clearTimeout(this['refreshTimer']);if(!this['show']||!this['canvas'])return;this['canvas']['style']['visibility']=_0x2a3ba0(0xb1),this[_0x2a3ba0(0xd0)]=setTimeout(()=>{const _0xd3c81b=_0x2a3ba0;if(!this['show'])return;this['redraw'](),this['canvas']['style']['visibility']=_0xd3c81b(0x138);},0xc8);}[_0x2549c6(0xe1)](_0x34f2ed){const _0x59fc38=_0x2549c6;this['mouse_down']=!![],this['_map']['off'](mars3d__namespace[_0x59fc38(0x15c)]['mouseMove'],this['_onMouseMoveEvent'],this),this['_map']['on'](mars3d__namespace['EventType'][_0x59fc38(0xbb)],this['_onMouseMoveEvent'],this);}[_0x2549c6(0xd4)](_0x240bfe){const _0x2145d8=_0x2549c6;if(!this['show']||!this['canvas'])return;this['mouse_down']&&(this['canvas'][_0x2145d8(0x103)]['visibility']='hidden',this['mouse_move']=!![]);}[_0x2549c6(0xa3)](_0x42c4b8){const _0x483502=_0x2549c6;if(!this[_0x483502(0xe8)]||!this[_0x483502(0x11b)])return;this[_0x483502(0x7a)]['off'](mars3d__namespace[_0x483502(0x15c)]['mouseMove'],this[_0x483502(0xd4)],this),this[_0x483502(0xf6)]&&this['mouse_move']&&this[_0x483502(0x14a)](),this['canvas'][_0x483502(0x103)][_0x483502(0xe6)]='visible',this[_0x483502(0xf6)]=![],this['mouse_move']=![];}['setData'](_0x333580){const _0x40e712=_0x2549c6;this['clear'](),this[_0x40e712(0x142)]=_0x333580,this['windField']['setDate'](_0x333580),this['redraw']();}['redraw'](){const _0x59b2d7=_0x2549c6;if(!this['show'])return;this['windField']['setOptions'](this[_0x59b2d7(0xb7)]),this[_0x59b2d7(0x8d)]();}['update'](){const _0x21223d=_0x2549c6;if(this[_0x21223d(0x143)])return;this['_updateIng']=!![];if(this[_0x21223d(0x140)])this['windField']['update']();else{const _0x138564=this['windField']['getParticles']();this['_drawLines'](_0x138564);}this['_updateIng']=![];}['_drawLines'](_0x2334be){const _0x4a79c5=_0x2549c6;this['canvasContext'][_0x4a79c5(0x12a)]='destination-in',this['canvasContext']['fillRect'](0x0,0x0,this['canvasWidth'],this[_0x4a79c5(0xee)]),this[_0x4a79c5(0xca)]['globalCompositeOperation']='lighter',this['canvasContext']['globalAlpha']=0.9;const _0x3766dd=this[_0x4a79c5(0x7a)]['scene']['mode']!==Cesium['SceneMode'][_0x4a79c5(0x154)],_0x59174f=this[_0x4a79c5(0xb9)]*0.25;if(this[_0x4a79c5(0xe9)])for(let _0x2ccbec=0x0,_0x5ee0c4=_0x2334be[_0x4a79c5(0xf5)];_0x2ccbec<_0x5ee0c4;_0x2ccbec++){const _0x2dde40=_0x2334be[_0x2ccbec],_0xdd255f=this['_tomap'](_0x2dde40['lng'],_0x2dde40[_0x4a79c5(0xc1)],_0x2dde40),_0x12c9fe=this[_0x4a79c5(0xc4)](_0x2dde40['tlng'],_0x2dde40['tlat'],_0x2dde40);if(!_0xdd255f||!_0x12c9fe)continue;if(_0x3766dd&&Math['abs'](_0xdd255f[0x0]-_0x12c9fe[0x0])>=_0x59174f)continue;this['canvasContext'][_0x4a79c5(0x10a)](),this['canvasContext']['lineWidth']=this['lineWidth'],this[_0x4a79c5(0xca)]['strokeStyle']=this['_colorRamp'][_0x4a79c5(0xf0)](_0x2dde40['speed']),this['canvasContext']['moveTo'](_0xdd255f[0x0],_0xdd255f[0x1]),this['canvasContext']['lineTo'](_0x12c9fe[0x0],_0x12c9fe[0x1]),this['canvasContext'][_0x4a79c5(0xb5)]();}else{this['canvasContext']['beginPath'](),this['canvasContext']['lineWidth']=this[_0x4a79c5(0xc2)],this['canvasContext']['strokeStyle']=this['color'];for(let _0x2cc829=0x0,_0xc6e81b=_0x2334be[_0x4a79c5(0xf5)];_0x2cc829<_0xc6e81b;_0x2cc829++){const _0x1c252c=_0x2334be[_0x2cc829],_0x4a3043=this['_tomap'](_0x1c252c[_0x4a79c5(0x11d)],_0x1c252c[_0x4a79c5(0xc1)],_0x1c252c),_0x585ea5=this['_tomap'](_0x1c252c[_0x4a79c5(0x105)],_0x1c252c['tlat'],_0x1c252c);if(!_0x4a3043||!_0x585ea5)continue;if(_0x3766dd&&Math['abs'](_0x4a3043[0x0]-_0x585ea5[0x0])>=_0x59174f)continue;this['canvasContext']['moveTo'](_0x4a3043[0x0],_0x4a3043[0x1]),this['canvasContext']['lineTo'](_0x585ea5[0x0],_0x585ea5[0x1]);}this['canvasContext'][_0x4a79c5(0xb5)]();}}['_tomap'](_0x37566c,_0x1a57e6,_0x3f4229){const _0x2f7e04=_0x2549c6,_0x52d668=Cesium['Cartesian3'][_0x2f7e04(0xed)](_0x37566c,_0x1a57e6,this['fixedHeight']),_0xc504a2=this['_map'][_0x2f7e04(0x159)];if(_0xc504a2['mode']===Cesium['SceneMode']['SCENE3D']){const _0x2f1e6b=new Cesium[(_0x2f7e04(0x163))](_0xc504a2['globe']['ellipsoid'],_0xc504a2['camera']['positionWC']),_0x410aa9=_0x2f1e6b[_0x2f7e04(0x114)](_0x52d668);if(!_0x410aa9)return _0x3f4229['age']=0x0,null;}const _0x531d38=Cesium[_0x2f7e04(0x111)]['wgs84ToWindowCoordinates'](this['_map']['scene'],_0x52d668);return _0x531d38?[_0x531d38['x'],_0x531d38['y']]:null;}['clear'](){const _0x2a6541=_0x2549c6;this[_0x2a6541(0xec)]['clear'](),delete this['windData'];}['initWorker'](){const _0x48e01e=_0x2549c6;this['worker']=new Worker(this[_0x48e01e(0xb7)]['worker']),this['worker']['onmessage']=_0x472694=>{this['_drawLines'](_0x472694['data']['particles']),this['_updateIng2']=![];},this['windField']={'init':_0x3e7d46=>{const _0x142cfe=_0x48e01e;this[_0x142cfe(0x140)]['postMessage']({'type':'init','options':_0x3e7d46});},'setOptions':_0x40b03c=>{const _0x11dbd3=_0x48e01e;this['worker']['postMessage']({'type':_0x11dbd3(0x82),'options':_0x40b03c});},'setDate':_0x509949=>{this['worker']['postMessage']({'type':'setDate','data':_0x509949});},'update':()=>{const _0x4edc33=_0x48e01e;if(this['_updateIng2'])return;this['_updateIng2']=!![],this[_0x4edc33(0x140)]['postMessage']({'type':'update'});},'clear':()=>{const _0x4bcadc=_0x48e01e;this[_0x4bcadc(0x140)]['postMessage']({'type':'clear'});}},this['windField']['init'](this[_0x48e01e(0xb7)]);}}mars3d__namespace['LayerUtil']['register'](_0x2549c6(0x98),CanvasWindLayer),mars3d__namespace['layer']['CanvasWindLayer']=CanvasWindLayer,mars3d__namespace[_0x2549c6(0xdb)]=CanvasWindField,mars3d__namespace[_0x2549c6(0xba)]=WindUtil,exports[_0x2549c6(0xdb)]=CanvasWindField,exports['CanvasWindLayer']=CanvasWindLayer,exports['WindLayer']=WindLayer,exports[_0x2549c6(0xba)]=WindUtil,Object['defineProperty'](exports,_0x2549c6(0x158),{'value':!![]});
14
+ 'use strict';const _0x2840f1=_0xdb20;(function(_0x26e58d,_0x3d279e){const _0x209884=_0xdb20,_0xc31c85=_0x26e58d();while(!![]){try{const _0x580314=-parseInt(_0x209884(0x201))/0x1+parseInt(_0x209884(0x251))/0x2+-parseInt(_0x209884(0x2a0))/0x3*(parseInt(_0x209884(0x280))/0x4)+-parseInt(_0x209884(0x2a9))/0x5+-parseInt(_0x209884(0x200))/0x6+-parseInt(_0x209884(0x1f4))/0x7*(-parseInt(_0x209884(0x24d))/0x8)+-parseInt(_0x209884(0x1e0))/0x9*(-parseInt(_0x209884(0x296))/0xa);if(_0x580314===_0x3d279e)break;else _0xc31c85['push'](_0xc31c85['shift']());}catch(_0x2e37c5){_0xc31c85['push'](_0xc31c85['shift']());}}}(_0x26d8,0x88c8c));function _0xdb20(_0x5cc516,_0x4d2648){const _0x26d8f3=_0x26d8();return _0xdb20=function(_0xdb2007,_0xf6c638){_0xdb2007=_0xdb2007-0x1c3;let _0x3b2575=_0x26d8f3[_0xdb2007];return _0x3b2575;},_0xdb20(_0x5cc516,_0x4d2648);}function _interopNamespace(_0x5c89e4){const _0x337fe8=_0xdb20;if(_0x5c89e4&&_0x5c89e4['__esModule'])return _0x5c89e4;var _0x5cf24b=Object['create'](null);return _0x5c89e4&&Object[_0x337fe8(0x22f)](_0x5c89e4)[_0x337fe8(0x1c7)](function(_0xe8717){if(_0xe8717!=='default'){var _0x13a01b=Object['getOwnPropertyDescriptor'](_0x5c89e4,_0xe8717);Object['defineProperty'](_0x5cf24b,_0xe8717,_0x13a01b['get']?_0x13a01b:{'enumerable':!![],'get':function(){return _0x5c89e4[_0xe8717];}});}}),_0x5cf24b['default']=_0x5c89e4,_0x5cf24b;}var mars3d__namespace=_interopNamespace(mars3d);const Cesium$7=mars3d__namespace['Cesium'];function getU(_0x36f1c6,_0x516cbc){const _0x3ceef5=_0xdb20,_0x4aa7e4=_0x36f1c6*Math['cos'](Cesium$7[_0x3ceef5(0x229)]['toRadians'](_0x516cbc));return _0x4aa7e4;}function getV(_0x52f04f,_0xf2692d){const _0x13f756=_0xdb20,_0x307f5a=_0x52f04f*Math[_0x13f756(0x26b)](Cesium$7['Math']['toRadians'](_0xf2692d));return _0x307f5a;}function getSpeed(_0x4dee62,_0x531aac){const _0x4facea=_0xdb20,_0x111555=Math['sqrt'](Math[_0x4facea(0x253)](_0x4dee62,0x2)+Math[_0x4facea(0x253)](_0x531aac,0x2));return _0x111555;}function getDirection(_0x1d3498,_0x20b11f){let _0x5f28fa=Cesium$7['Math']['toDegrees'](Math['atan2'](_0x20b11f,_0x1d3498));return _0x5f28fa+=_0x5f28fa<0x0?0x168:0x0,_0x5f28fa;}var WindUtil={'__proto__':null,'getU':getU,'getV':getV,'getSpeed':getSpeed,'getDirection':getDirection};const Cesium$6=mars3d__namespace['Cesium'];class CustomPrimitive{constructor(_0x5acc3f){const _0x3e2a90=_0xdb20;this['commandType']=_0x5acc3f['commandType'],this['geometry']=_0x5acc3f['geometry'],this['attributeLocations']=_0x5acc3f['attributeLocations'],this[_0x3e2a90(0x228)]=_0x5acc3f['primitiveType'],this['uniformMap']=_0x5acc3f['uniformMap'],this[_0x3e2a90(0x2b9)]=_0x5acc3f['vertexShaderSource'],this[_0x3e2a90(0x245)]=_0x5acc3f['fragmentShaderSource'],this['rawRenderState']=_0x5acc3f[_0x3e2a90(0x208)],this['framebuffer']=_0x5acc3f['framebuffer'],this['outputTexture']=_0x5acc3f['outputTexture'],this[_0x3e2a90(0x1cc)]=_0x5acc3f['autoClear']??![],this[_0x3e2a90(0x1cb)]=_0x5acc3f['preExecute'],this['show']=!![],this['commandToExecute']=undefined,this[_0x3e2a90(0x1f8)]=undefined,this['autoClear']&&(this['clearCommand']=new Cesium$6[(_0x3e2a90(0x273))]({'color':new Cesium$6[(_0x3e2a90(0x2b3))](0x0,0x0,0x0,0x0),'depth':0x1,'framebuffer':this['framebuffer'],'pass':Cesium$6['Pass']['OPAQUE']}));}[_0x2840f1(0x20e)](_0x357e7e){const _0x15bdaf=_0x2840f1;switch(this['commandType']){case'Draw':{const _0x1aa962=Cesium$6['VertexArray'][_0x15bdaf(0x1d4)]({'context':_0x357e7e,'geometry':this[_0x15bdaf(0x236)],'attributeLocations':this['attributeLocations'],'bufferUsage':Cesium$6['BufferUsage']['STATIC_DRAW']}),_0x1efc1a=Cesium$6['ShaderProgram'][_0x15bdaf(0x1cf)]({'context':_0x357e7e,'attributeLocations':this[_0x15bdaf(0x1f1)],'vertexShaderSource':this['vertexShaderSource'],'fragmentShaderSource':this['fragmentShaderSource']}),_0x1dda30=Cesium$6['RenderState']['fromCache'](this['rawRenderState']);return new Cesium$6[(_0x15bdaf(0x246))]({'primitiveType':this['primitiveType'],'shaderProgram':_0x1efc1a,'vertexArray':_0x1aa962,'modelMatrix':Cesium$6[_0x15bdaf(0x22b)]['IDENTITY'],'renderState':_0x1dda30,'uniformMap':this[_0x15bdaf(0x282)],'castShadows':![],'receiveShadows':![],'framebuffer':this[_0x15bdaf(0x27e)],'pass':Cesium$6['Pass']['OPAQUE'],'pickOnly':!![],'owner':this});}case _0x15bdaf(0x28c):{return new Cesium$6['ComputeCommand']({'owner':this,'fragmentShaderSource':this['fragmentShaderSource'],'uniformMap':this['uniformMap'],'outputTexture':this['outputTexture'],'persists':!![]});}}}['setGeometry'](_0x3e5a39,_0x4309c8){const _0x1f858e=_0x2840f1;this['geometry']=_0x4309c8;const _0x4bcfe5=Cesium$6['VertexArray']['fromGeometry']({'context':_0x3e5a39,'geometry':this['geometry'],'attributeLocations':this[_0x1f858e(0x1f1)],'bufferUsage':Cesium$6[_0x1f858e(0x25e)]['STATIC_DRAW']});this['commandToExecute']['vertexArray']=_0x4bcfe5;}[_0x2840f1(0x298)](_0x357c79){const _0x116386=_0x2840f1;if(!this['show'])return;if(_0x357c79[_0x116386(0x264)]!==Cesium$6['SceneMode']['SCENE3D'])return;!Cesium$6[_0x116386(0x1e7)](this[_0x116386(0x26f)])&&(this['commandToExecute']=this[_0x116386(0x20e)](_0x357c79[_0x116386(0x20a)])),Cesium$6[_0x116386(0x1e7)](this[_0x116386(0x1cb)])&&this['preExecute'](),Cesium$6['defined'](this[_0x116386(0x1f8)])&&_0x357c79[_0x116386(0x260)]['push'](this['clearCommand']),_0x357c79['commandList'][_0x116386(0x283)](this['commandToExecute']);}['isDestroyed'](){return![];}['destroy'](){const _0x1d177c=_0x2840f1;if(this[_0x1d177c(0x1f8)]){var _0x2d9408,_0x6dc632;(_0x2d9408=this['clearCommand'])!==null&&_0x2d9408!==void 0x0&&_0x2d9408['vertexArray']&&this['clearCommand'][_0x1d177c(0x2b6)][_0x1d177c(0x1d9)](),(_0x6dc632=this[_0x1d177c(0x1f8)])!==null&&_0x6dc632!==void 0x0&&_0x6dc632[_0x1d177c(0x23f)]&&this['clearCommand']['shaderProgram']['destroy'](),delete this[_0x1d177c(0x1f8)];}return this['commandToExecute']&&(this['commandToExecute']['vertexArray']&&this[_0x1d177c(0x26f)]['vertexArray'][_0x1d177c(0x1d9)](),this['commandToExecute']['shaderProgram']&&this[_0x1d177c(0x26f)]['shaderProgram'][_0x1d177c(0x1d9)](),delete this[_0x1d177c(0x26f)]),Cesium$6[_0x1d177c(0x1dd)](this);}}const Cesium$5=mars3d__namespace['Cesium'],Util=(function(){const _0x5a2139=function(){const _0x484c3c=new Cesium$5['Geometry']({'attributes':new Cesium$5['GeometryAttributes']({'position':new Cesium$5['GeometryAttribute']({'componentDatatype':Cesium$5['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x3,'values':new Float32Array([-0x1,-0x1,0x0,0x1,-0x1,0x0,0x1,0x1,0x0,-0x1,0x1,0x0])}),'st':new Cesium$5['GeometryAttribute']({'componentDatatype':Cesium$5['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x2,'values':new Float32Array([0x0,0x0,0x1,0x0,0x1,0x1,0x0,0x1])})}),'indices':new Uint32Array([0x3,0x2,0x0,0x0,0x2,0x1])});return _0x484c3c;},_0x212bed=function(_0x4a2c35,_0x2c1014){const _0x3eed64=_0xdb20;if(Cesium$5['defined'](_0x2c1014)){const _0x55caa1={};_0x55caa1[_0x3eed64(0x287)]=_0x2c1014,_0x4a2c35['source']=_0x55caa1;}const _0x518ebb=new Cesium$5[(_0x3eed64(0x27d))](_0x4a2c35);return _0x518ebb;},_0x3a3a56=function(_0x4e29ef,_0x458a26,_0x5e743c){const _0x5b8384=_0xdb20,_0x4dccba=new Cesium$5[(_0x5b8384(0x1ec))]({'context':_0x4e29ef,'colorTextures':[_0x458a26],'depthTexture':_0x5e743c});return _0x4dccba;},_0x31e7e5=function(_0x445fcd){const _0x8360d0=!![],_0x437d2b=![],_0x5efca0={'viewport':_0x445fcd['viewport'],'depthTest':_0x445fcd['depthTest'],'depthMask':_0x445fcd['depthMask'],'blending':_0x445fcd['blending']},_0x41b5f4=Cesium$5['Appearance']['getDefaultRenderState'](_0x8360d0,_0x437d2b,_0x5efca0);return _0x41b5f4;},_0x1dc9b9=function(_0x47f2b2){const _0x7cb43=_0xdb20,_0x27b8e2={},_0xf96f3f=Cesium$5[_0x7cb43(0x229)]['mod'](_0x47f2b2['west'],Cesium$5['Math']['TWO_PI']),_0xbfc4ef=Cesium$5['Math']['mod'](_0x47f2b2[_0x7cb43(0x2a2)],Cesium$5['Math'][_0x7cb43(0x281)]),_0x2ce81d=_0x47f2b2['width'];let _0x530f97,_0x14cd3f;_0x2ce81d>Cesium$5['Math']['THREE_PI_OVER_TWO']?(_0x530f97=0x0,_0x14cd3f=Cesium$5['Math']['TWO_PI']):_0xbfc4ef-_0xf96f3f<_0x2ce81d?(_0x530f97=_0xf96f3f,_0x14cd3f=_0xf96f3f+_0x2ce81d):(_0x530f97=_0xf96f3f,_0x14cd3f=_0xbfc4ef);_0x27b8e2[_0x7cb43(0x1d6)]={'min':Cesium$5['Math']['toDegrees'](_0x530f97),'max':Cesium$5['Math']['toDegrees'](_0x14cd3f)};const _0x39e537=_0x47f2b2['south'],_0x13a9b4=_0x47f2b2['north'],_0x40ed93=_0x47f2b2['height'],_0x361fcd=_0x40ed93>Cesium$5[_0x7cb43(0x229)]['PI']/0xc?_0x40ed93/0x2:0x0;let _0x450cba=Cesium$5['Math']['clampToLatitudeRange'](_0x39e537-_0x361fcd),_0x4ece1b=Cesium$5['Math']['clampToLatitudeRange'](_0x13a9b4+_0x361fcd);return _0x450cba<-Cesium$5[_0x7cb43(0x229)]['PI_OVER_THREE']&&(_0x450cba=-Cesium$5[_0x7cb43(0x229)]['PI_OVER_TWO']),_0x4ece1b>Cesium$5['Math'][_0x7cb43(0x27a)]&&(_0x4ece1b=Cesium$5['Math']['PI_OVER_TWO']),_0x27b8e2['lat']={'min':Cesium$5[_0x7cb43(0x229)]['toDegrees'](_0x450cba),'max':Cesium$5[_0x7cb43(0x229)][_0x7cb43(0x286)](_0x4ece1b)},_0x27b8e2;};return{'getFullscreenQuad':_0x5a2139,'createTexture':_0x212bed,'createFramebuffer':_0x3a3a56,'createRawRenderState':_0x31e7e5,'viewRectangleToLonLatRange':_0x1dc9b9};}());var segmentDraw_vert='in\x20vec2\x20st;\x0a//\x20it\x20is\x20not\x20normal\x20itself,\x20but\x20used\x20to\x20control\x20normal\x0ain\x20vec3\x20normal;\x20//\x20(point\x20to\x20use,\x20offset\x20sign,\x20not\x20used\x20component)\x0a\x0auniform\x20sampler2D\x20currentParticlesPosition;\x0auniform\x20sampler2D\x20postProcessingPosition;\x0auniform\x20sampler2D\x20postProcessingSpeed;\x0a\x0auniform\x20float\x20particleHeight;\x0a\x0auniform\x20float\x20aspect;\x0auniform\x20float\x20pixelSize;\x0auniform\x20float\x20lineWidth;\x0a\x0aout\x20float\x20speedNormalization;\x0a\x0avec3\x20convertCoordinate(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20WGS84\x20(lon,\x20lat,\x20lev)\x20->\x20ECEF\x20(x,\x20y,\x20z)\x0a\x20\x20\x20\x20//\x20see\x20https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates\x20for\x20detail\x0a\x0a\x20\x20\x20\x20//\x20WGS\x2084\x20geometric\x20constants\x0a\x20\x20\x20\x20float\x20a\x20=\x206378137.0;\x20//\x20Semi-major\x20axis\x0a\x20\x20\x20\x20float\x20b\x20=\x206356752.3142;\x20//\x20Semi-minor\x20axis\x0a\x20\x20\x20\x20float\x20e2\x20=\x206.69437999014e-3;\x20//\x20First\x20eccentricity\x20squared\x0a\x0a\x20\x20\x20\x20float\x20latitude\x20=\x20radians(lonLatLev.y);\x0a\x20\x20\x20\x20float\x20longitude\x20=\x20radians(lonLatLev.x);\x0a\x0a\x20\x20\x20\x20float\x20cosLat\x20=\x20cos(latitude);\x0a\x20\x20\x20\x20float\x20sinLat\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20float\x20cosLon\x20=\x20cos(longitude);\x0a\x20\x20\x20\x20float\x20sinLon\x20=\x20sin(longitude);\x0a\x0a\x20\x20\x20\x20float\x20N_Phi\x20=\x20a\x20/\x20sqrt(1.0\x20-\x20e2\x20*\x20sinLat\x20*\x20sinLat);\x0a\x20\x20\x20\x20float\x20h\x20=\x20particleHeight;\x20//\x20it\x20should\x20be\x20high\x20enough\x20otherwise\x20the\x20particle\x20may\x20not\x20pass\x20the\x20terrain\x20depth\x20test\x0a\x0a\x20\x20\x20\x20vec3\x20cartesian\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20cartesian.x\x20=\x20(N_Phi\x20+\x20h)\x20*\x20cosLat\x20*\x20cosLon;\x0a\x20\x20\x20\x20cartesian.y\x20=\x20(N_Phi\x20+\x20h)\x20*\x20cosLat\x20*\x20sinLon;\x0a\x20\x20\x20\x20cartesian.z\x20=\x20((b\x20*\x20b)\x20/\x20(a\x20*\x20a)\x20*\x20N_Phi\x20+\x20h)\x20*\x20sinLat;\x0a\x20\x20\x20\x20return\x20cartesian;\x0a}\x0a\x0avec4\x20calcProjectedCoordinate(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20the\x20range\x20of\x20longitude\x20in\x20Cesium\x20is\x20[-180,\x20180]\x20but\x20the\x20range\x20of\x20longitude\x20in\x20the\x20NetCDF\x20file\x20is\x20[0,\x20360]\x0a\x20\x20\x20\x20//\x20[0,\x20180]\x20is\x20corresponding\x20to\x20[0,\x20180]\x20and\x20[180,\x20360]\x20is\x20corresponding\x20to\x20[-180,\x200]\x0a\x20\x20\x20\x20lonLatLev.x\x20=\x20mod(lonLatLev.x\x20+\x20180.0,\x20360.0)\x20-\x20180.0;\x0a\x20\x20\x20\x20vec3\x20particlePosition\x20=\x20convertCoordinate(lonLatLev);\x0a\x20\x20\x20\x20vec4\x20projectedCoordinate\x20=\x20czm_modelViewProjection\x20*\x20vec4(particlePosition,\x201.0);\x0a\x20\x20\x20\x20return\x20projectedCoordinate;\x0a}\x0a\x0avec4\x20calcOffset(vec4\x20currentProjectedCoordinate,\x20vec4\x20nextProjectedCoordinate,\x20float\x20offsetSign)\x20{\x0a\x20\x20\x20\x20vec2\x20aspectVec2\x20=\x20vec2(aspect,\x201.0);\x0a\x20\x20\x20\x20vec2\x20currentXY\x20=\x20(currentProjectedCoordinate.xy\x20/\x20currentProjectedCoordinate.w)\x20*\x20aspectVec2;\x0a\x20\x20\x20\x20vec2\x20nextXY\x20=\x20(nextProjectedCoordinate.xy\x20/\x20nextProjectedCoordinate.w)\x20*\x20aspectVec2;\x0a\x0a\x20\x20\x20\x20float\x20offsetLength\x20=\x20lineWidth\x20/\x202.0;\x0a\x20\x20\x20\x20vec2\x20direction\x20=\x20normalize(nextXY\x20-\x20currentXY);\x0a\x20\x20\x20\x20vec2\x20normalVector\x20=\x20vec2(-direction.y,\x20direction.x);\x0a\x20\x20\x20\x20normalVector.x\x20=\x20normalVector.x\x20/\x20aspect;\x0a\x20\x20\x20\x20normalVector\x20=\x20offsetLength\x20*\x20normalVector;\x0a\x0a\x20\x20\x20\x20vec4\x20offset\x20=\x20vec4(offsetSign\x20*\x20normalVector,\x200.0,\x200.0);\x0a\x20\x20\x20\x20return\x20offset;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec2\x20particleIndex\x20=\x20st;\x0a\x0a\x20\x20\x20\x20vec3\x20currentPosition\x20=\x20texture(currentParticlesPosition,\x20particleIndex).rgb;\x0a\x20\x20\x20\x20vec4\x20nextPosition\x20=\x20texture(postProcessingPosition,\x20particleIndex);\x0a\x0a\x20\x20\x20\x20vec4\x20currentProjectedCoordinate\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20vec4\x20nextProjectedCoordinate\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20if\x20(nextPosition.w\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20currentProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20currentProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextProjectedCoordinate\x20=\x20calcProjectedCoordinate(nextPosition.xyz);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20float\x20pointToUse\x20=\x20normal.x;\x20//\x20-1\x20is\x20currentProjectedCoordinate\x20and\x20+1\x20is\x20nextProjectedCoordinate\x0a\x20\x20\x20\x20float\x20offsetSign\x20=\x20normal.y;\x0a\x0a\x20\x20\x20\x20vec4\x20offset\x20=\x20pixelSize\x20*\x20calcOffset(currentProjectedCoordinate,\x20nextProjectedCoordinate,\x20offsetSign);\x0a\x20\x20\x20\x20if\x20(pointToUse\x20<\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl_Position\x20=\x20currentProjectedCoordinate\x20+\x20offset;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl_Position\x20=\x20nextProjectedCoordinate\x20+\x20offset;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20speedNormalization\x20=\x20texture(postProcessingSpeed,\x20particleIndex).a;\x0a}\x0a',segmentDraw_frag=_0x2840f1(0x1c4),fullscreen_vert='in\x20vec3\x20position;\x0ain\x20vec2\x20st;\x0a\x0aout\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20textureCoordinate\x20=\x20st;\x0a\x20\x20\x20\x20gl_Position\x20=\x20vec4(position,\x201.0);\x0a}\x0a',trailDraw_frag='uniform\x20sampler2D\x20segmentsColorTexture;\x0auniform\x20sampler2D\x20segmentsDepthTexture;\x0a\x0auniform\x20sampler2D\x20currentTrailsColor;\x0auniform\x20sampler2D\x20trailsDepthTexture;\x0a\x0auniform\x20float\x20fadeOpacity;\x0a\x0ain\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20pointsColor\x20=\x20texture(segmentsColorTexture,\x20textureCoordinate);\x0a\x20\x20\x20\x20vec4\x20trailsColor\x20=\x20texture(currentTrailsColor,\x20textureCoordinate);\x0a\x0a\x20\x20\x20\x20trailsColor\x20=\x20floor(fadeOpacity\x20*\x20255.0\x20*\x20trailsColor)\x20/\x20255.0;\x20//\x20make\x20sure\x20the\x20trailsColor\x20will\x20be\x20strictly\x20decreased\x0a\x0a\x20\x20\x20\x20float\x20pointsDepth\x20=\x20texture(segmentsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20trailsDepth\x20=\x20texture(trailsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20globeDepth\x20=\x20czm_unpackDepth(texture(czm_globeDepthTexture,\x20textureCoordinate));\x0a\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20if\x20(pointsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20out_FragColor\x20+\x20pointsColor;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(trailsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20out_FragColor\x20+\x20trailsColor;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20gl_FragDepth\x20=\x20min(pointsDepth,\x20trailsDepth);\x0a}\x0a',screenDraw_frag='uniform\x20sampler2D\x20trailsColorTexture;\x0auniform\x20sampler2D\x20trailsDepthTexture;\x0a\x0ain\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20trailsColor\x20=\x20texture(trailsColorTexture,\x20textureCoordinate);\x0a\x20\x20\x20\x20float\x20trailsDepth\x20=\x20texture(trailsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20globeDepth\x20=\x20czm_unpackDepth(texture(czm_globeDepthTexture,\x20textureCoordinate));\x0a\x0a\x20\x20\x20\x20if\x20(trailsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20trailsColor;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20}\x0a}\x0a';const Cesium$4=mars3d__namespace[_0x2840f1(0x1f2)];class ParticlesRendering{constructor(_0x1cf5e0,_0x37e1ea,_0x16b4f9,_0xb6deae,_0x378c70){const _0x521f37=_0x2840f1;this['createRenderingTextures'](_0x1cf5e0,_0x37e1ea,_0x16b4f9['colors']),this['createRenderingFramebuffers'](_0x1cf5e0),this[_0x521f37(0x268)](_0x1cf5e0,_0x16b4f9,_0xb6deae,_0x378c70);}['createRenderingTextures'](_0xc53815,_0x2b93bc,_0x149fd4){const _0x4fbd4c=_0x2840f1,_0x4470b4={'context':_0xc53815,'width':_0xc53815['drawingBufferWidth'],'height':_0xc53815['drawingBufferHeight'],'pixelFormat':Cesium$4['PixelFormat']['RGBA'],'pixelDatatype':Cesium$4['PixelDatatype']['UNSIGNED_BYTE']},_0x61066a={'context':_0xc53815,'width':_0xc53815['drawingBufferWidth'],'height':_0xc53815[_0x4fbd4c(0x217)],'pixelFormat':Cesium$4[_0x4fbd4c(0x23e)]['DEPTH_COMPONENT'],'pixelDatatype':Cesium$4['PixelDatatype']['UNSIGNED_INT']},_0x38e5f3=_0x149fd4[_0x4fbd4c(0x1ca)],_0x411cfc=new Float32Array(_0x38e5f3*0x3);for(let _0x1cc0b0=0x0;_0x1cc0b0<_0x38e5f3;_0x1cc0b0++){const _0x501b39=Cesium$4['Color']['fromCssColorString'](_0x149fd4[_0x1cc0b0]);_0x411cfc[0x3*_0x1cc0b0]=_0x501b39[_0x4fbd4c(0x29b)],_0x411cfc[0x3*_0x1cc0b0+0x1]=_0x501b39['green'],_0x411cfc[0x3*_0x1cc0b0+0x2]=_0x501b39['blue'];}const _0x1e36d8={'context':_0xc53815,'width':_0x38e5f3,'height':0x1,'pixelFormat':Cesium$4[_0x4fbd4c(0x23e)][_0x4fbd4c(0x21e)],'pixelDatatype':Cesium$4['PixelDatatype']['FLOAT'],'sampler':new Cesium$4['Sampler']({'minificationFilter':Cesium$4['TextureMinificationFilter']['LINEAR'],'magnificationFilter':Cesium$4[_0x4fbd4c(0x220)]['LINEAR']})};this['textures']={'segmentsColor':Util['createTexture'](_0x4470b4),'segmentsDepth':Util['createTexture'](_0x61066a),'currentTrailsColor':Util['createTexture'](_0x4470b4),'currentTrailsDepth':Util[_0x4fbd4c(0x1fb)](_0x61066a),'nextTrailsColor':Util['createTexture'](_0x4470b4),'nextTrailsDepth':Util['createTexture'](_0x61066a),'colorTable':Util['createTexture'](_0x1e36d8,_0x411cfc)};}[_0x2840f1(0x29c)](_0x3493f9){const _0xd25457=_0x2840f1;this['framebuffers']={'segments':Util['createFramebuffer'](_0x3493f9,this['textures']['segmentsColor'],this[_0xd25457(0x1f3)]['segmentsDepth']),'currentTrails':Util['createFramebuffer'](_0x3493f9,this[_0xd25457(0x1f3)]['currentTrailsColor'],this['textures'][_0xd25457(0x1c3)]),'nextTrails':Util['createFramebuffer'](_0x3493f9,this['textures']['nextTrailsColor'],this['textures']['nextTrailsDepth'])};}['createSegmentsGeometry'](_0x2d20ae){const _0x269fd0=_0x2840f1,_0x183292=0x4;let _0x38c721=[];for(let _0x3425ac=0x0;_0x3425ac<_0x2d20ae['particlesTextureSize'];_0x3425ac++){for(let _0x5071e6=0x0;_0x5071e6<_0x2d20ae['particlesTextureSize'];_0x5071e6++){for(let _0x2786c8=0x0;_0x2786c8<_0x183292;_0x2786c8++){_0x38c721[_0x269fd0(0x283)](_0x3425ac/_0x2d20ae[_0x269fd0(0x215)]),_0x38c721['push'](_0x5071e6/_0x2d20ae['particlesTextureSize']);}}}_0x38c721=new Float32Array(_0x38c721);let _0x54bf20=[];const _0x5ab8a8=[-0x1,0x1],_0xa88d71=[-0x1,0x1];for(let _0x4e58e=0x0;_0x4e58e<_0x2d20ae['maxParticles'];_0x4e58e++){for(let _0x29fd5c=0x0;_0x29fd5c<_0x183292/0x2;_0x29fd5c++){for(let _0x28b1ed=0x0;_0x28b1ed<_0x183292/0x2;_0x28b1ed++){_0x54bf20[_0x269fd0(0x283)](_0x5ab8a8[_0x29fd5c]),_0x54bf20['push'](_0xa88d71[_0x28b1ed]),_0x54bf20['push'](0x0);}}}_0x54bf20=new Float32Array(_0x54bf20);const _0x5e8efe=0x6*_0x2d20ae['maxParticles'],_0x52dc80=new Uint32Array(_0x5e8efe);for(let _0x436625=0x0,_0x53ceb2=0x0,_0x51fb74=0x0;_0x436625<_0x2d20ae['maxParticles'];_0x436625++){_0x52dc80[_0x53ceb2++]=_0x51fb74+0x0,_0x52dc80[_0x53ceb2++]=_0x51fb74+0x1,_0x52dc80[_0x53ceb2++]=_0x51fb74+0x2,_0x52dc80[_0x53ceb2++]=_0x51fb74+0x2,_0x52dc80[_0x53ceb2++]=_0x51fb74+0x1,_0x52dc80[_0x53ceb2++]=_0x51fb74+0x3,_0x51fb74+=0x4;}const _0x38fd5b=new Cesium$4['Geometry']({'attributes':new Cesium$4['GeometryAttributes']({'st':new Cesium$4['GeometryAttribute']({'componentDatatype':Cesium$4['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x2,'values':_0x38c721}),'normal':new Cesium$4['GeometryAttribute']({'componentDatatype':Cesium$4['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x3,'values':_0x54bf20})}),'indices':_0x52dc80});return _0x38fd5b;}['createRenderingPrimitives'](_0x437e64,_0xd177e9,_0x1bdd94,_0x26388d){const _0xcd9603=_0x2840f1,_0x4e9b10=this;this['primitives']={'segments':new CustomPrimitive({'commandType':_0xcd9603(0x1ee),'attributeLocations':{'st':0x0,'normal':0x1},'geometry':this['createSegmentsGeometry'](_0xd177e9),'primitiveType':Cesium$4[_0xcd9603(0x2a3)]['TRIANGLES'],'uniformMap':{'currentParticlesPosition':function(){return _0x26388d['particlesTextures']['currentParticlesPosition'];},'postProcessingPosition':function(){return _0x26388d['particlesTextures']['postProcessingPosition'];},'postProcessingSpeed':function(){const _0x56c83e=_0xcd9603;return _0x26388d['particlesTextures'][_0x56c83e(0x250)];},'colorTable':function(){return _0x4e9b10['textures']['colorTable'];},'aspect':function(){return _0x437e64['drawingBufferWidth']/_0x437e64['drawingBufferHeight'];},'pixelSize':function(){return _0x1bdd94['pixelSize'];},'lineWidth':function(){return _0xd177e9['lineWidth'];},'particleHeight':function(){const _0x315a65=_0xcd9603;return _0xd177e9[_0x315a65(0x274)];}},'vertexShaderSource':new Cesium$4['ShaderSource']({'sources':[segmentDraw_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'sources':[segmentDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':!![]},'depthMask':!![]}),'framebuffer':this['framebuffers'][_0xcd9603(0x207)],'autoClear':!![]}),'trails':new CustomPrimitive({'commandType':_0xcd9603(0x1ee),'attributeLocations':{'position':0x0,'st':0x1},'geometry':Util['getFullscreenQuad'](),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'segmentsColorTexture':function(){const _0x5a7d62=_0xcd9603;return _0x4e9b10[_0x5a7d62(0x1f3)]['segmentsColor'];},'segmentsDepthTexture':function(){const _0x579c77=_0xcd9603;return _0x4e9b10['textures'][_0x579c77(0x21f)];},'currentTrailsColor':function(){return _0x4e9b10['framebuffers']['currentTrails']['getColorTexture'](0x0);},'trailsDepthTexture':function(){return _0x4e9b10['framebuffers']['currentTrails']['depthTexture'];},'fadeOpacity':function(){return _0xd177e9['fadeOpacity'];}},'vertexShaderSource':new Cesium$4[(_0xcd9603(0x247))]({'defines':['DISABLE_GL_POSITION_LOG_DEPTH'],'sources':[fullscreen_vert]}),'fragmentShaderSource':new Cesium$4[(_0xcd9603(0x247))]({'defines':['DISABLE_LOG_DEPTH_FRAGMENT_WRITE'],'sources':[trailDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':!![],'func':Cesium$4['DepthFunction']['ALWAYS']},'depthMask':!![]}),'framebuffer':this[_0xcd9603(0x254)]['nextTrails'],'autoClear':!![],'preExecute':function(){const _0x4957c4=_0xcd9603,_0x1a1cd6=_0x4e9b10['framebuffers']['currentTrails'];_0x4e9b10['framebuffers']['currentTrails']=_0x4e9b10[_0x4957c4(0x254)]['nextTrails'],_0x4e9b10['framebuffers']['nextTrails']=_0x1a1cd6,_0x4e9b10[_0x4957c4(0x231)]['trails']['commandToExecute'][_0x4957c4(0x27e)]=_0x4e9b10['framebuffers']['nextTrails'],_0x4e9b10['primitives'][_0x4957c4(0x205)]['clearCommand']['framebuffer']=_0x4e9b10['framebuffers']['nextTrails'];}}),'screen':new CustomPrimitive({'commandType':'Draw','attributeLocations':{'position':0x0,'st':0x1},'geometry':Util['getFullscreenQuad'](),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'trailsColorTexture':function(){const _0x169b40=_0xcd9603;return _0x4e9b10['framebuffers'][_0x169b40(0x2aa)]['getColorTexture'](0x0);},'trailsDepthTexture':function(){const _0x5c19ba=_0xcd9603;return _0x4e9b10['framebuffers']['nextTrails'][_0x5c19ba(0x28e)];}},'vertexShaderSource':new Cesium$4['ShaderSource']({'defines':[_0xcd9603(0x2b2)],'sources':[fullscreen_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_LOG_DEPTH_FRAGMENT_WRITE'],'sources':[screenDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':![]},'depthMask':!![],'blending':{'enabled':!![]}}),'framebuffer':undefined})};}}var getWind_frag='//\x20the\x20size\x20of\x20UV\x20textures:\x20width\x20=\x20lon,\x20height\x20=\x20lat*lev\x0auniform\x20sampler2D\x20U;\x20//\x20eastward\x20wind\x0auniform\x20sampler2D\x20V;\x20//\x20northward\x20wind\x0a\x0auniform\x20sampler2D\x20currentParticlesPosition;\x20//\x20(lon,\x20lat,\x20lev)\x0a\x0auniform\x20vec3\x20dimension;\x20//\x20(lon,\x20lat,\x20lev)\x0auniform\x20vec3\x20minimum;\x20//\x20minimum\x20of\x20each\x20dimension\x0auniform\x20vec3\x20maximum;\x20//\x20maximum\x20of\x20each\x20dimension\x0auniform\x20vec3\x20interval;\x20//\x20interval\x20of\x20each\x20dimension\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avec2\x20mapPositionToNormalizedIndex2D(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20ensure\x20the\x20range\x20of\x20longitude\x20and\x20latitude\x0a\x20\x20\x20\x20lonLatLev.x\x20=\x20mod(lonLatLev.x,\x20360.0);\x0a\x20\x20\x20\x20lonLatLev.y\x20=\x20clamp(lonLatLev.y,\x20-90.0,\x2090.0);\x0a\x0a\x20\x20\x20\x20vec3\x20index3D\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20index3D.x\x20=\x20(lonLatLev.x\x20-\x20minimum.x)\x20/\x20interval.x;\x0a\x20\x20\x20\x20index3D.y\x20=\x20(lonLatLev.y\x20-\x20minimum.y)\x20/\x20interval.y;\x0a\x20\x20\x20\x20index3D.z\x20=\x20(lonLatLev.z\x20-\x20minimum.z)\x20/\x20interval.z;\x0a\x0a\x20\x20\x20\x20//\x20the\x20st\x20texture\x20coordinate\x20corresponding\x20to\x20(col,\x20row)\x20index\x0a\x20\x20\x20\x20//\x20example\x0a\x20\x20\x20\x20//\x20data\x20array\x20is\x20[0,\x201,\x202,\x203,\x204,\x205],\x20width\x20=\x203,\x20height\x20=\x202\x0a\x20\x20\x20\x20//\x20the\x20content\x20of\x20texture\x20will\x20be\x0a\x20\x20\x20\x20//\x20t\x201.0\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x20\x203\x204\x205\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x20\x200\x201\x202\x0a\x20\x20\x20\x20//\x20\x20\x200.0------1.0\x20s\x0a\x0a\x20\x20\x20\x20vec2\x20index2D\x20=\x20vec2(index3D.x,\x20index3D.z\x20*\x20dimension.y\x20+\x20index3D.y);\x0a\x20\x20\x20\x20vec2\x20normalizedIndex2D\x20=\x20vec2(index2D.x\x20/\x20dimension.x,\x20index2D.y\x20/\x20(dimension.y\x20*\x20dimension.z));\x0a\x20\x20\x20\x20return\x20normalizedIndex2D;\x0a}\x0a\x0afloat\x20getWind(sampler2D\x20windTexture,\x20vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20vec2\x20normalizedIndex2D\x20=\x20mapPositionToNormalizedIndex2D(lonLatLev);\x0a\x20\x20\x20\x20float\x20result\x20=\x20texture(windTexture,\x20normalizedIndex2D).r;\x0a\x20\x20\x20\x20return\x20result;\x0a}\x0a\x0aconst\x20mat4\x20kernelMatrix\x20=\x20mat4(\x0a\x20\x20\x20\x200.0,\x20-1.0,\x202.0,\x20-1.0,\x20//\x20first\x20column\x0a\x20\x20\x20\x202.0,\x200.0,\x20-5.0,\x203.0,\x20//\x20second\x20column\x0a\x20\x20\x20\x200.0,\x201.0,\x204.0,\x20-3.0,\x20//\x20third\x20column\x0a\x20\x20\x20\x200.0,\x200.0,\x20-1.0,\x201.0\x20//\x20fourth\x20column\x0a);\x0afloat\x20oneDimensionInterpolation(float\x20t,\x20float\x20p0,\x20float\x20p1,\x20float\x20p2,\x20float\x20p3)\x20{\x0a\x20\x20\x20\x20vec4\x20tVec4\x20=\x20vec4(1.0,\x20t,\x20t\x20*\x20t,\x20t\x20*\x20t\x20*\x20t);\x0a\x20\x20\x20\x20tVec4\x20=\x20tVec4\x20/\x202.0;\x0a\x20\x20\x20\x20vec4\x20pVec4\x20=\x20vec4(p0,\x20p1,\x20p2,\x20p3);\x0a\x20\x20\x20\x20return\x20dot((tVec4\x20*\x20kernelMatrix),\x20pVec4);\x0a}\x0a\x0afloat\x20calculateB(sampler2D\x20windTexture,\x20float\x20t,\x20float\x20lon,\x20float\x20lat,\x20float\x20lev)\x20{\x0a\x20\x20\x20\x20float\x20lon0\x20=\x20floor(lon)\x20-\x201.0\x20*\x20interval.x;\x0a\x20\x20\x20\x20float\x20lon1\x20=\x20floor(lon);\x0a\x20\x20\x20\x20float\x20lon2\x20=\x20floor(lon)\x20+\x201.0\x20*\x20interval.x;\x0a\x20\x20\x20\x20float\x20lon3\x20=\x20floor(lon)\x20+\x202.0\x20*\x20interval.x;\x0a\x0a\x20\x20\x20\x20float\x20p0\x20=\x20getWind(windTexture,\x20vec3(lon0,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p1\x20=\x20getWind(windTexture,\x20vec3(lon1,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p2\x20=\x20getWind(windTexture,\x20vec3(lon2,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p3\x20=\x20getWind(windTexture,\x20vec3(lon3,\x20lat,\x20lev));\x0a\x0a\x20\x20\x20\x20return\x20oneDimensionInterpolation(t,\x20p0,\x20p1,\x20p2,\x20p3);\x0a}\x0a\x0afloat\x20interpolateOneTexture(sampler2D\x20windTexture,\x20vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20float\x20lon\x20=\x20lonLatLev.x;\x0a\x20\x20\x20\x20float\x20lat\x20=\x20lonLatLev.y;\x0a\x20\x20\x20\x20float\x20lev\x20=\x20lonLatLev.z;\x0a\x0a\x20\x20\x20\x20float\x20lat0\x20=\x20floor(lat)\x20-\x201.0\x20*\x20interval.y;\x0a\x20\x20\x20\x20float\x20lat1\x20=\x20floor(lat);\x0a\x20\x20\x20\x20float\x20lat2\x20=\x20floor(lat)\x20+\x201.0\x20*\x20interval.y;\x0a\x20\x20\x20\x20float\x20lat3\x20=\x20floor(lat)\x20+\x202.0\x20*\x20interval.y;\x0a\x0a\x20\x20\x20\x20vec2\x20coefficient\x20=\x20lonLatLev.xy\x20-\x20floor(lonLatLev.xy);\x0a\x20\x20\x20\x20float\x20b0\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat0,\x20lev);\x0a\x20\x20\x20\x20float\x20b1\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat1,\x20lev);\x0a\x20\x20\x20\x20float\x20b2\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat2,\x20lev);\x0a\x20\x20\x20\x20float\x20b3\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat3,\x20lev);\x0a\x0a\x20\x20\x20\x20return\x20oneDimensionInterpolation(coefficient.y,\x20b0,\x20b1,\x20b2,\x20b3);\x0a}\x0a\x0avec3\x20bicubic(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20https://en.wikipedia.org/wiki/Bicubic_interpolation#Bicubic_convolution_algorithm\x0a\x20\x20\x20\x20float\x20u\x20=\x20interpolateOneTexture(U,\x20lonLatLev);\x0a\x20\x20\x20\x20float\x20v\x20=\x20interpolateOneTexture(V,\x20lonLatLev);\x0a\x20\x20\x20\x20float\x20w\x20=\x200.0;\x0a\x20\x20\x20\x20return\x20vec3(u,\x20v,\x20w);\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20vec3\x20lonLatLev\x20=\x20texture(currentParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20windVector\x20=\x20bicubic(lonLatLev);\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(windVector,\x200.0);\x0a}\x0a',updateSpeed_frag=_0x2840f1(0x1e2),updatePosition_frag='uniform\x20sampler2D\x20currentParticlesPosition;\x20//\x20(lon,\x20lat,\x20lev)\x0auniform\x20sampler2D\x20currentParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avec2\x20lengthOfLonLat(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20unit\x20conversion:\x20meters\x20->\x20longitude\x20latitude\x20degrees\x0a\x20\x20\x20\x20//\x20see\x20https://en.wikipedia.org/wiki/Geographic_coordinate_system#Length_of_a_degree\x20for\x20detail\x0a\x0a\x20\x20\x20\x20//\x20Calculate\x20the\x20length\x20of\x20a\x20degree\x20of\x20latitude\x20and\x20longitude\x20in\x20meters\x0a\x20\x20\x20\x20float\x20latitude\x20=\x20radians(lonLatLev.y);\x0a\x0a\x20\x20\x20\x20float\x20term1\x20=\x20111132.92;\x0a\x20\x20\x20\x20float\x20term2\x20=\x20559.82\x20*\x20cos(2.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term3\x20=\x201.175\x20*\x20cos(4.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term4\x20=\x200.0023\x20*\x20cos(6.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20latLength\x20=\x20term1\x20-\x20term2\x20+\x20term3\x20-\x20term4;\x0a\x0a\x20\x20\x20\x20float\x20term5\x20=\x20111412.84\x20*\x20cos(latitude);\x0a\x20\x20\x20\x20float\x20term6\x20=\x2093.5\x20*\x20cos(3.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term7\x20=\x200.118\x20*\x20cos(5.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20longLength\x20=\x20term5\x20-\x20term6\x20+\x20term7;\x0a\x0a\x20\x20\x20\x20return\x20vec2(longLength,\x20latLength);\x0a}\x0a\x0avoid\x20updatePosition(vec3\x20lonLatLev,\x20vec3\x20speed)\x20{\x0a\x20\x20\x20\x20vec2\x20lonLatLength\x20=\x20lengthOfLonLat(lonLatLev);\x0a\x20\x20\x20\x20float\x20u\x20=\x20speed.x\x20/\x20lonLatLength.x;\x0a\x20\x20\x20\x20float\x20v\x20=\x20speed.y\x20/\x20lonLatLength.y;\x0a\x20\x20\x20\x20float\x20w\x20=\x200.0;\x0a\x20\x20\x20\x20vec3\x20windVectorInLonLatLev\x20=\x20vec3(u,\x20v,\x20w);\x0a\x0a\x20\x20\x20\x20vec3\x20nextParticle\x20=\x20lonLatLev\x20+\x20windVectorInLonLatLev;\x0a\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(nextParticle,\x200.0);\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20vec3\x20lonLatLev\x20=\x20texture(currentParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20speed\x20=\x20texture(currentParticlesSpeed,\x20v_textureCoordinates).rgb;\x0a\x0a\x20\x20\x20\x20updatePosition(lonLatLev,\x20speed);\x0a}\x0a',postProcessingPosition_frag='uniform\x20sampler2D\x20nextParticlesPosition;\x0auniform\x20sampler2D\x20nextParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0a\x0a//\x20range\x20(min,\x20max)\x0auniform\x20vec2\x20lonRange;\x0auniform\x20vec2\x20latRange;\x0a\x0auniform\x20float\x20randomCoefficient;\x20//\x20use\x20to\x20improve\x20the\x20pseudo-random\x20generator\x0auniform\x20float\x20dropRate;\x20//\x20drop\x20rate\x20is\x20a\x20chance\x20a\x20particle\x20will\x20restart\x20at\x20random\x20position\x20to\x20avoid\x20degeneration\x0auniform\x20float\x20dropRateBump;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0a//\x20pseudo-random\x20generator\x0aconst\x20vec3\x20randomConstants\x20=\x20vec3(12.9898,\x2078.233,\x204375.85453);\x0aconst\x20vec2\x20normalRange\x20=\x20vec2(0.0,\x201.0);\x0afloat\x20rand(vec2\x20seed,\x20vec2\x20range)\x20{\x0a\x20\x20\x20\x20vec2\x20randomSeed\x20=\x20randomCoefficient\x20*\x20seed;\x0a\x20\x20\x20\x20float\x20temp\x20=\x20dot(randomConstants.xy,\x20randomSeed);\x0a\x20\x20\x20\x20temp\x20=\x20fract(sin(temp)\x20*\x20(randomConstants.z\x20+\x20temp));\x0a\x20\x20\x20\x20return\x20temp\x20*\x20(range.y\x20-\x20range.x)\x20+\x20range.x;\x0a}\x0a\x0avec3\x20generateRandomParticle(vec2\x20seed,\x20float\x20lev)\x20{\x0a\x20\x20\x20\x20//\x20ensure\x20the\x20longitude\x20is\x20in\x20[0,\x20360]\x0a\x20\x20\x20\x20float\x20randomLon\x20=\x20mod(rand(seed,\x20lonRange),\x20360.0);\x0a\x20\x20\x20\x20float\x20randomLat\x20=\x20rand(-seed,\x20latRange);\x0a\x0a\x20\x20\x20\x20return\x20vec3(randomLon,\x20randomLat,\x20lev);\x0a}\x0a\x0abool\x20particleOutbound(vec3\x20particle)\x20{\x0a\x20\x20\x20\x20return\x20particle.y\x20<\x20-90.0\x20||\x20particle.y\x20>\x2090.0;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec3\x20nextParticle\x20=\x20texture(nextParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec4\x20nextSpeed\x20=\x20texture(nextParticlesSpeed,\x20v_textureCoordinates);\x0a\x20\x20\x20\x20float\x20particleDropRate\x20=\x20dropRate\x20+\x20dropRateBump\x20*\x20nextSpeed.a;\x0a\x0a\x20\x20\x20\x20vec2\x20seed1\x20=\x20nextParticle.xy\x20+\x20v_textureCoordinates;\x0a\x20\x20\x20\x20vec2\x20seed2\x20=\x20nextSpeed.xy\x20+\x20v_textureCoordinates;\x0a\x20\x20\x20\x20vec3\x20randomParticle\x20=\x20generateRandomParticle(seed1,\x20nextParticle.z);\x0a\x20\x20\x20\x20float\x20randomNumber\x20=\x20rand(seed2,\x20normalRange);\x0a\x0a\x20\x20\x20\x20if\x20(randomNumber\x20<\x20particleDropRate\x20||\x20particleOutbound(nextParticle))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(randomParticle,\x201.0);\x20//\x201.0\x20means\x20this\x20is\x20a\x20random\x20particle\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(nextParticle,\x200.0);\x0a\x20\x20\x20\x20}\x0a}\x0a',postProcessingSpeed_frag='uniform\x20sampler2D\x20postProcessingPosition;\x0auniform\x20sampler2D\x20nextParticlesSpeed;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20randomParticle\x20=\x20texture(postProcessingPosition,\x20v_textureCoordinates);\x0a\x20\x20\x20\x20vec4\x20particleSpeed\x20=\x20texture(nextParticlesSpeed,\x20v_textureCoordinates);\x0a\x0a\x20\x20\x20\x20if\x20(randomParticle.a\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20particleSpeed;\x0a\x20\x20\x20\x20}\x0a}\x0a';const Cesium$3=mars3d__namespace['Cesium'];class ParticlesComputing{constructor(_0x127653,_0x2bc42a,_0x2f1f80,_0x1229c1){this['data']=_0x2bc42a,this['createWindTextures'](_0x127653,_0x2bc42a),this['createParticlesTextures'](_0x127653,_0x2f1f80,_0x1229c1),this['createComputingPrimitives'](_0x2bc42a,_0x2f1f80,_0x1229c1);}[_0x2840f1(0x221)](_0x12f484,_0x2c44dd){const _0x27bf80=_0x2840f1,_0x178580={'context':_0x12f484,'width':_0x2c44dd[_0x27bf80(0x265)]['lon'],'height':_0x2c44dd[_0x27bf80(0x265)]['lat']*(_0x2c44dd['dimensions'][_0x27bf80(0x224)]||0x1),'pixelFormat':Cesium$3['PixelFormat'][_0x27bf80(0x249)],'pixelDatatype':Cesium$3['PixelDatatype']['FLOAT'],'flipY':![],'sampler':new Cesium$3['Sampler']({'minificationFilter':Cesium$3['TextureMinificationFilter']['NEAREST'],'magnificationFilter':Cesium$3['TextureMagnificationFilter'][_0x27bf80(0x2a4)]})};this['windTextures']={'U':Util['createTexture'](_0x178580,_0x2c44dd['U'][_0x27bf80(0x211)]),'V':Util[_0x27bf80(0x1fb)](_0x178580,_0x2c44dd['V']['array'])};}[_0x2840f1(0x243)](_0x152dda,_0x17da51,_0xd206b){const _0x533e46=_0x2840f1,_0x1e3d83={'context':_0x152dda,'width':_0x17da51['particlesTextureSize'],'height':_0x17da51['particlesTextureSize'],'pixelFormat':Cesium$3['PixelFormat'][_0x533e46(0x202)],'pixelDatatype':Cesium$3['PixelDatatype']['FLOAT'],'flipY':![],'sampler':new Cesium$3['Sampler']({'minificationFilter':Cesium$3['TextureMinificationFilter']['NEAREST'],'magnificationFilter':Cesium$3['TextureMagnificationFilter']['NEAREST']})},_0x197846=this['randomizeParticles'](_0x17da51[_0x533e46(0x267)],_0xd206b),_0x290acb=new Float32Array(0x4*_0x17da51['maxParticles'])[_0x533e46(0x1f0)](0x0);this[_0x533e46(0x25c)]={'particlesWind':Util['createTexture'](_0x1e3d83),'currentParticlesPosition':Util['createTexture'](_0x1e3d83,_0x197846),'nextParticlesPosition':Util['createTexture'](_0x1e3d83,_0x197846),'currentParticlesSpeed':Util['createTexture'](_0x1e3d83,_0x290acb),'nextParticlesSpeed':Util['createTexture'](_0x1e3d83,_0x290acb),'postProcessingPosition':Util['createTexture'](_0x1e3d83,_0x197846),'postProcessingSpeed':Util[_0x533e46(0x1fb)](_0x1e3d83,_0x290acb)};}['randomizeParticles'](_0x1b16ef,_0x388d86){const _0x250596=_0x2840f1,_0x221fe4=new Float32Array(0x4*_0x1b16ef);for(let _0xd5b0e1=0x0;_0xd5b0e1<_0x1b16ef;_0xd5b0e1++){_0x221fe4[0x4*_0xd5b0e1]=Cesium$3['Math']['randomBetween'](_0x388d86['lonRange']['x'],_0x388d86['lonRange']['y']),_0x221fe4[0x4*_0xd5b0e1+0x1]=Cesium$3['Math']['randomBetween'](_0x388d86['latRange']['x'],_0x388d86['latRange']['y']),_0x221fe4[0x4*_0xd5b0e1+0x2]=Cesium$3['Math']['randomBetween'](this[_0x250596(0x271)][_0x250596(0x224)]['min'],this['data']['lev']['max']),_0x221fe4[0x4*_0xd5b0e1+0x3]=0x0;}return _0x221fe4;}[_0x2840f1(0x2a7)](){Object['keys'](this['particlesTextures'])['forEach'](_0x59dddb=>{this['particlesTextures'][_0x59dddb]['destroy']();});}[_0x2840f1(0x26e)](_0xfabf65,_0xcb8704,_0x2189d3){const _0xe930fc=_0x2840f1,_0x25d513=new Cesium$3[(_0xe930fc(0x223))](_0xfabf65[_0xe930fc(0x265)]['lon'],_0xfabf65['dimensions']['lat'],_0xfabf65['dimensions']['lev']),_0x3323a3=new Cesium$3['Cartesian3'](_0xfabf65[_0xe930fc(0x1d6)]['min'],_0xfabf65[_0xe930fc(0x299)][_0xe930fc(0x1d0)],_0xfabf65['lev']['min']),_0xae8655=new Cesium$3[(_0xe930fc(0x223))](_0xfabf65['lon'][_0xe930fc(0x233)],_0xfabf65['lat']['max'],_0xfabf65['lev']['max']),_0x5a79c1=new Cesium$3[(_0xe930fc(0x223))]((_0xae8655['x']-_0x3323a3['x'])/(_0x25d513['x']-0x1),(_0xae8655['y']-_0x3323a3['y'])/(_0x25d513['y']-0x1),_0x25d513['z']>0x1?(_0xae8655['z']-_0x3323a3['z'])/(_0x25d513['z']-0x1):0x1),_0x5157e0=new Cesium$3[(_0xe930fc(0x258))](_0xfabf65['U']['min'],_0xfabf65['U']['max']),_0x3e1e06=new Cesium$3[(_0xe930fc(0x258))](_0xfabf65['V'][_0xe930fc(0x1d0)],_0xfabf65['V'][_0xe930fc(0x233)]),_0x591dee=this;this[_0xe930fc(0x231)]={'getWind':new CustomPrimitive({'commandType':'Compute','uniformMap':{'U':function(){return _0x591dee['windTextures']['U'];},'V':function(){return _0x591dee['windTextures']['V'];},'currentParticlesPosition':function(){const _0x56f458=_0xe930fc;return _0x591dee[_0x56f458(0x25c)]['currentParticlesPosition'];},'dimension':function(){return _0x25d513;},'minimum':function(){return _0x3323a3;},'maximum':function(){return _0xae8655;},'interval':function(){return _0x5a79c1;}},'fragmentShaderSource':new Cesium$3[(_0xe930fc(0x247))]({'sources':[getWind_frag]}),'outputTexture':this[_0xe930fc(0x25c)]['particlesWind'],'preExecute':function(){const _0x3c17ef=_0xe930fc;_0x591dee['primitives']['getWind']['commandToExecute'][_0x3c17ef(0x1e6)]=_0x591dee['particlesTextures']['particlesWind'];}}),'updateSpeed':new CustomPrimitive({'commandType':'Compute','uniformMap':{'currentParticlesSpeed':function(){const _0x44f4f8=_0xe930fc;return _0x591dee[_0x44f4f8(0x25c)][_0x44f4f8(0x1c8)];},'particlesWind':function(){const _0x3b3f08=_0xe930fc;return _0x591dee[_0x3b3f08(0x25c)]['particlesWind'];},'uSpeedRange':function(){return _0x5157e0;},'vSpeedRange':function(){return _0x3e1e06;},'pixelSize':function(){return _0x2189d3['pixelSize'];},'speedFactor':function(){const _0x25c93f=_0xe930fc;return _0xcb8704[_0x25c93f(0x266)];}},'fragmentShaderSource':new Cesium$3[(_0xe930fc(0x247))]({'sources':[updateSpeed_frag]}),'outputTexture':this['particlesTextures'][_0xe930fc(0x23d)],'preExecute':function(){const _0x7f3fb9=_0xe930fc,_0x2d02c5=_0x591dee['particlesTextures'][_0x7f3fb9(0x1c8)];_0x591dee['particlesTextures'][_0x7f3fb9(0x1c8)]=_0x591dee['particlesTextures'][_0x7f3fb9(0x250)],_0x591dee['particlesTextures']['postProcessingSpeed']=_0x2d02c5,_0x591dee[_0x7f3fb9(0x231)][_0x7f3fb9(0x23b)][_0x7f3fb9(0x26f)]['outputTexture']=_0x591dee[_0x7f3fb9(0x25c)]['nextParticlesSpeed'];}}),'updatePosition':new CustomPrimitive({'commandType':_0xe930fc(0x28c),'uniformMap':{'currentParticlesPosition':function(){return _0x591dee['particlesTextures']['currentParticlesPosition'];},'currentParticlesSpeed':function(){const _0x1c4d9c=_0xe930fc;return _0x591dee[_0x1c4d9c(0x25c)]['currentParticlesSpeed'];}},'fragmentShaderSource':new Cesium$3[(_0xe930fc(0x247))]({'sources':[updatePosition_frag]}),'outputTexture':this[_0xe930fc(0x25c)][_0xe930fc(0x241)],'preExecute':function(){const _0x1b8eee=_0xe930fc,_0x297845=_0x591dee['particlesTextures']['currentParticlesPosition'];_0x591dee['particlesTextures']['currentParticlesPosition']=_0x591dee['particlesTextures']['postProcessingPosition'],_0x591dee[_0x1b8eee(0x25c)]['postProcessingPosition']=_0x297845,_0x591dee['primitives']['updatePosition'][_0x1b8eee(0x26f)][_0x1b8eee(0x1e6)]=_0x591dee[_0x1b8eee(0x25c)][_0x1b8eee(0x241)];}}),'postProcessingPosition':new CustomPrimitive({'commandType':'Compute','uniformMap':{'nextParticlesPosition':function(){return _0x591dee['particlesTextures']['nextParticlesPosition'];},'nextParticlesSpeed':function(){return _0x591dee['particlesTextures']['nextParticlesSpeed'];},'lonRange':function(){return _0x2189d3['lonRange'];},'latRange':function(){return _0x2189d3['latRange'];},'randomCoefficient':function(){const _0x48fd90=Math['random']();return _0x48fd90;},'dropRate':function(){const _0x3a83ae=_0xe930fc;return _0xcb8704[_0x3a83ae(0x29f)];},'dropRateBump':function(){return _0xcb8704['dropRateBump'];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[postProcessingPosition_frag]}),'outputTexture':this[_0xe930fc(0x25c)]['postProcessingPosition'],'preExecute':function(){const _0x25cf84=_0xe930fc;_0x591dee['primitives'][_0x25cf84(0x204)]['commandToExecute'][_0x25cf84(0x1e6)]=_0x591dee['particlesTextures']['postProcessingPosition'];}}),'postProcessingSpeed':new CustomPrimitive({'commandType':_0xe930fc(0x28c),'uniformMap':{'postProcessingPosition':function(){const _0x4a1653=_0xe930fc;return _0x591dee[_0x4a1653(0x25c)][_0x4a1653(0x204)];},'nextParticlesSpeed':function(){return _0x591dee['particlesTextures']['nextParticlesSpeed'];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[postProcessingSpeed_frag]}),'outputTexture':this[_0xe930fc(0x25c)]['postProcessingSpeed'],'preExecute':function(){const _0x1ecc95=_0xe930fc;_0x591dee['primitives'][_0x1ecc95(0x250)]['commandToExecute'][_0x1ecc95(0x1e6)]=_0x591dee['particlesTextures'][_0x1ecc95(0x250)];}})};}}const Cesium$2=mars3d__namespace['Cesium'];function _0x26d8(){const _0x36e8b3=['clearCommand','init','getColor','createTexture','screen','fixedHeight','isPointVisible','frameTime','5089116RwExcS','572679UNEiDz','RGBA','_calcUV','postProcessingPosition','trails','levmax','segments','rawRenderState','execute','context','clientWidth','updatePosition','speedRate','createCommand','initWorker','_randomParticle','array','clientHeight','cols','camera','particlesTextureSize','BaseLayer','drawingBufferHeight','windData','style','wheel','mouseDown','scene','requestAnimationFrame','RGB','segmentsDepth','TextureMagnificationFilter','createWindTextures','SceneTransforms','Cartesian3','lev','_addedHook','particles','_onMapWhellEvent','primitiveType','Math','OPAQUE','Matrix4','maxAge','stroke','globe','keys','options','primitives','viewerParameters','max','clear','_onMouseDownEvent','geometry','random','visibility','height','lonRange','updateSpeed','WindLayer','nextParticlesSpeed','PixelFormat','shaderProgram','remove','nextParticlesPosition','addEventListener','createParticlesTextures','latRange','fragmentShaderSource','DrawCommand','ShaderSource','destination-in','LUMINANCE','colorTable','mouse_move','colors','194728BoNAwJ','particlesNumber','_tomap','postProcessingSpeed','1052014QhiJKU','getParticles','pow','framebuffers','moveTo','windField','log','Cartesian2','canvasContext','mouseHidden','_pointerEvents','particlesTextures','off','BufferUsage','_showHook','commandList','width','ymin','_onMouseMoveEvent','mode','dimensions','speedFactor','maxParticles','createRenderingPrimitives','_removedHook','setDate','sin','_calc_speedRate','udata','createComputingPrimitives','commandToExecute','viewRectangleToLonLatRange','data','ellipsoid','ClearCommand','particleHeight','refreshTimer','pointer-events','vmax','particlesComputing','refreshParticles','PI_OVER_THREE','BoundingSphere','reverseY','Texture','framebuffer','lng','111116CHJIZU','TWO_PI','uniformMap','push','PrimitiveCollection','getContext','toDegrees','arrayBufferView','toGridXY','rows','sqrt','resize','Compute','canvas','depthTexture','preRender','CanvasWindLayer','bindEvent','color','pixelSize','particlesRendering','visible','880vQNHvU','STATIC_DRAW','update','lat','removeChild','red','createRenderingFramebuffers','drawingBufferWidth','register','dropRate','87YmpDdp','redraw','east','PrimitiveType','NEAREST','worker','_updateIng2','destroyParticlesTextures','_createCanvas','4955210zjBvRQ','nextTrails','SceneMode','lighter','ymax','particleSystem','mouseUp','setData','grid','DISABLE_GL_POSITION_LOG_DEPTH','Color','show','mouseMove','vertexArray','EventType','ZERO','vertexShaderSource','currentTrailsDepth','uniform\x20sampler2D\x20colorTable;\x0a\x0ain\x20float\x20speedNormalization;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20out_FragColor\x20=\x20texture(colorTable,\x20vec2(speedNormalization,\x200.0));\x0a}\x0a','0px','_setOptionsHook','forEach','currentParticlesSpeed','_onMouseUpEvent','length','preExecute','autoClear','xmax','globalAlpha','fromCache','min','getUVByXY','computeViewRectangle','getOptions','fromGeometry','getUVByPoint','lon','mouse_down','age','destroy','_map','globalCompositeOperation','xmin','destroyObject','ceil','lineWidth','325098QrzMdM','applyViewerParameters','uniform\x20sampler2D\x20currentParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0auniform\x20sampler2D\x20particlesWind;\x0a\x0a//\x20used\x20to\x20calculate\x20the\x20wind\x20norm\x0auniform\x20vec2\x20uSpeedRange;\x20//\x20(min,\x20max);\x0auniform\x20vec2\x20vSpeedRange;\x0auniform\x20float\x20pixelSize;\x0auniform\x20float\x20speedFactor;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0afloat\x20calculateWindNorm(vec3\x20speed)\x20{\x0a\x20\x20\x20\x20vec3\x20percent\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20percent.x\x20=\x20(speed.x\x20-\x20uSpeedRange.x)\x20/\x20(uSpeedRange.y\x20-\x20uSpeedRange.x);\x0a\x20\x20\x20\x20percent.y\x20=\x20(speed.y\x20-\x20vSpeedRange.x)\x20/\x20(vSpeedRange.y\x20-\x20vSpeedRange.x);\x0a\x20\x20\x20\x20float\x20normalization\x20=\x20length(percent);\x0a\x0a\x20\x20\x20\x20return\x20normalization;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20//\x20vec3\x20currentSpeed\x20=\x20texture(currentParticlesSpeed,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20windVector\x20=\x20texture(particlesWind,\x20v_textureCoordinates).rgb;\x0a\x0a\x20\x20\x20\x20vec4\x20nextSpeed\x20=\x20vec4(speedFactor\x20*\x20pixelSize\x20*\x20windVector,\x20calculateWindNorm(windVector));\x0a\x20\x20\x20\x20out_FragColor\x20=\x20nextSpeed;\x0a}\x0a','removeAll','pointerEvents','add','outputTexture','defined','Pass','vdata','WindUtil','addPrimitives','Framebuffer','windTextures','Draw','frameRate','fill','attributeLocations','Cesium','textures','21kOkBEA','bind','defineProperty','_colorRamp'];_0x26d8=function(){return _0x36e8b3;};return _0x26d8();}class ParticleSystem{constructor(_0x43b64b,_0x7b34a1,_0x1693e6,_0x151c63){const _0x2315c6=_0x2840f1;this['context']=_0x43b64b,_0x7b34a1={..._0x7b34a1},_0x7b34a1['udata']&&_0x7b34a1['vdata']&&(_0x7b34a1['dimensions']={},_0x7b34a1['dimensions'][_0x2315c6(0x1d6)]=_0x7b34a1['cols'],_0x7b34a1[_0x2315c6(0x265)]['lat']=_0x7b34a1['rows'],_0x7b34a1['dimensions']['lev']=_0x7b34a1[_0x2315c6(0x224)]||0x1,_0x7b34a1['lon']={},_0x7b34a1['lon']['min']=_0x7b34a1['xmin'],_0x7b34a1['lon']['max']=_0x7b34a1['xmax'],_0x7b34a1['lat']={},_0x7b34a1[_0x2315c6(0x299)]['min']=_0x7b34a1['ymin'],_0x7b34a1['lat']['max']=_0x7b34a1['ymax'],_0x7b34a1[_0x2315c6(0x224)]={},_0x7b34a1['lev']['min']=_0x7b34a1['levmin']??0x1,_0x7b34a1[_0x2315c6(0x224)]['max']=_0x7b34a1[_0x2315c6(0x206)]??0x1,_0x7b34a1['U']={},_0x7b34a1['U']['array']=new Float32Array(_0x7b34a1['udata']),_0x7b34a1['U']['min']=_0x7b34a1['umin']??Math['min'](..._0x7b34a1['udata']),_0x7b34a1['U']['max']=_0x7b34a1['umax']??Math['max'](..._0x7b34a1['udata']),_0x7b34a1['V']={},_0x7b34a1['V']['array']=new Float32Array(_0x7b34a1['vdata']),_0x7b34a1['V'][_0x2315c6(0x1d0)]=_0x7b34a1['vmin']??Math['min'](..._0x7b34a1['vdata']),_0x7b34a1['V'][_0x2315c6(0x233)]=_0x7b34a1[_0x2315c6(0x277)]??Math[_0x2315c6(0x233)](..._0x7b34a1[_0x2315c6(0x1e9)])),this['data']=_0x7b34a1,this[_0x2315c6(0x230)]=_0x1693e6,this['viewerParameters']=_0x151c63,this['particlesComputing']=new ParticlesComputing(this['context'],this['data'],this['options'],this[_0x2315c6(0x232)]),this['particlesRendering']=new ParticlesRendering(this[_0x2315c6(0x20a)],this[_0x2315c6(0x271)],this['options'],this[_0x2315c6(0x232)],this[_0x2315c6(0x278)]);}['canvasResize'](_0x48dca9){const _0x32fb70=_0x2840f1;this['particlesComputing']['destroyParticlesTextures'](),Object['keys'](this['particlesComputing']['windTextures'])['forEach'](_0xcc47b2=>{const _0x5463dd=_0xdb20;this[_0x5463dd(0x278)][_0x5463dd(0x1ed)][_0xcc47b2]['destroy']();}),this[_0x32fb70(0x294)][_0x32fb70(0x1f3)][_0x32fb70(0x24a)]['destroy'](),Object[_0x32fb70(0x22f)](this[_0x32fb70(0x294)]['framebuffers'])['forEach'](_0x54df2a=>{const _0x28eb28=_0x32fb70;this['particlesRendering']['framebuffers'][_0x54df2a][_0x28eb28(0x1d9)]();}),this[_0x32fb70(0x20a)]=_0x48dca9,this['particlesComputing']=new ParticlesComputing(this[_0x32fb70(0x20a)],this[_0x32fb70(0x271)],this['options'],this[_0x32fb70(0x232)]),this[_0x32fb70(0x294)]=new ParticlesRendering(this['context'],this[_0x32fb70(0x271)],this['options'],this[_0x32fb70(0x232)],this['particlesComputing']);}['clearFramebuffers'](){const _0x457597=_0x2840f1,_0x10208e=new Cesium$2[(_0x457597(0x273))]({'color':new Cesium$2['Color'](0x0,0x0,0x0,0x0),'depth':0x1,'framebuffer':undefined,'pass':Cesium$2[_0x457597(0x1e8)][_0x457597(0x22a)]});Object['keys'](this['particlesRendering']['framebuffers'])[_0x457597(0x1c7)](_0x33f42c=>{const _0x35b99a=_0x457597;_0x10208e[_0x35b99a(0x27e)]=this['particlesRendering']['framebuffers'][_0x33f42c],_0x10208e[_0x35b99a(0x209)](this['context']);});}['refreshParticles'](_0x3874f4){const _0x3a3774=_0x2840f1;this['clearFramebuffers'](),this['particlesComputing']['destroyParticlesTextures'](),this['particlesComputing'][_0x3a3774(0x243)](this[_0x3a3774(0x20a)],this[_0x3a3774(0x230)],this['viewerParameters']);if(_0x3874f4){var _0x18f77f;const _0x41ff87=this['particlesRendering']['createSegmentsGeometry'](this['options']);this[_0x3a3774(0x294)]['primitives']['segments']['geometry']=_0x41ff87;const _0x1db6c1=Cesium$2['VertexArray']['fromGeometry']({'context':this[_0x3a3774(0x20a)],'geometry':_0x41ff87,'attributeLocations':this[_0x3a3774(0x294)]['primitives']['segments'][_0x3a3774(0x1f1)],'bufferUsage':Cesium$2['BufferUsage'][_0x3a3774(0x297)]});(_0x18f77f=this[_0x3a3774(0x294)][_0x3a3774(0x231)])!==null&&_0x18f77f!==void 0x0&&(_0x18f77f=_0x18f77f['segments'])!==null&&_0x18f77f!==void 0x0&&_0x18f77f[_0x3a3774(0x26f)]&&(this[_0x3a3774(0x294)][_0x3a3774(0x231)]['segments'][_0x3a3774(0x26f)]['vertexArray']=_0x1db6c1);}}['setOptions'](_0x55260d){let _0x36fba0=![];this['options']['maxParticles']!==_0x55260d['maxParticles']&&(_0x36fba0=!![]),Object['keys'](_0x55260d)['forEach'](_0x247e9d=>{this['options'][_0x247e9d]=_0x55260d[_0x247e9d];}),this['refreshParticles'](_0x36fba0);}[_0x2840f1(0x1e1)](_0x4aa51f){const _0x561082=_0x2840f1;Object['keys'](_0x4aa51f)['forEach'](_0x5877fc=>{this['viewerParameters'][_0x5877fc]=_0x4aa51f[_0x5877fc];}),this[_0x561082(0x279)](![]);}['destroy'](){const _0x59ed01=_0x2840f1;clearTimeout(this['canrefresh']),this[_0x59ed01(0x278)]['destroyParticlesTextures'](),Object['keys'](this[_0x59ed01(0x278)][_0x59ed01(0x1ed)])['forEach'](_0x4d44f4=>{const _0x268a26=_0x59ed01;this['particlesComputing']['windTextures'][_0x4d44f4][_0x268a26(0x1d9)]();}),this['particlesRendering']['textures']['colorTable']['destroy'](),Object['keys'](this['particlesRendering']['framebuffers'])['forEach'](_0x1885f8=>{this['particlesRendering']['framebuffers'][_0x1885f8]['destroy']();});for(const _0x1c54f0 in this){delete this[_0x1c54f0];}}}const Cesium$1=mars3d__namespace['Cesium'],BaseLayer$1=mars3d__namespace['layer'][_0x2840f1(0x216)],DEF_OPTIONS={'particlesNumber':0x1000,'fixedHeight':0x0,'fadeOpacity':0.996,'dropRate':0.003,'dropRateBump':0.01,'speedFactor':0.5,'lineWidth':0x2,'colors':['rgb(206,255,255)']};class WindLayer extends BaseLayer$1{constructor(_0x51419c={}){_0x51419c={...DEF_OPTIONS,..._0x51419c},super(_0x51419c),this['_setOptionsHook'](_0x51419c);}get['layer'](){return this['primitives'];}get['data'](){return this['_data'];}set[_0x2840f1(0x271)](_0xbc297e){const _0x8c0326=_0x2840f1;this[_0x8c0326(0x2b0)](_0xbc297e);}get[_0x2840f1(0x24c)](){const _0x482f28=_0x2840f1;return this[_0x482f28(0x230)]['colors'];}set['colors'](_0xf79bde){const _0x461b6c=_0x2840f1;this['options'][_0x461b6c(0x24c)]=_0xf79bde,this['particleSystem']&&this['particleSystem']['setOptions']({'colors':_0xf79bde}),this['resize']();}['_mountedHook'](){}['_addedHook'](){const _0x18cdcf=_0x2840f1;this['scene']=this['_map']['scene'],this['camera']=this['_map']['camera'],this[_0x18cdcf(0x231)]=new Cesium$1[(_0x18cdcf(0x284))](),this[_0x18cdcf(0x1da)][_0x18cdcf(0x21c)]['primitives']['add'](this[_0x18cdcf(0x231)]),this['viewerParameters']={'lonRange':new Cesium$1['Cartesian2'](),'latRange':new Cesium$1[(_0x18cdcf(0x258))](),'pixelSize':0x0},this['globeBoundingSphere']=new Cesium$1[(_0x18cdcf(0x27b))](Cesium$1['Cartesian3'][_0x18cdcf(0x2b8)],0.99*0x615299),this['updateViewerParameters'](),window[_0x18cdcf(0x242)]('resize',this['resize'][_0x18cdcf(0x1f5)](this),![]),this['mouse_down']=![],this[_0x18cdcf(0x24b)]=![],this[_0x18cdcf(0x1da)]['on'](mars3d__namespace[_0x18cdcf(0x2b7)]['wheel'],this[_0x18cdcf(0x227)],this),this['_map']['on'](mars3d__namespace[_0x18cdcf(0x2b7)]['mouseDown'],this['_onMouseDownEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseUp'],this[_0x18cdcf(0x1c9)],this),this[_0x18cdcf(0x1da)]['on'](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this),this['_data']&&this[_0x18cdcf(0x2b0)](this['_data']);}[_0x2840f1(0x269)](){const _0x30eb48=_0x2840f1;window['removeEventListener']('resize',this['resize']),this['_map']['off'](mars3d__namespace['EventType']['preRender'],this['_onMap_preRenderEvent'],this),this['_map'][_0x30eb48(0x25d)](mars3d__namespace['EventType']['wheel'],this['_onMapWhellEvent'],this),this[_0x30eb48(0x1da)]['off'](mars3d__namespace[_0x30eb48(0x2b7)]['mouseDown'],this['_onMouseDownEvent'],this),this[_0x30eb48(0x1da)]['off'](mars3d__namespace['EventType']['mouseUp'],this[_0x30eb48(0x1c9)],this),this[_0x30eb48(0x1da)]['off'](mars3d__namespace['EventType']['mouseMove'],this[_0x30eb48(0x263)],this),this[_0x30eb48(0x231)][_0x30eb48(0x1e3)](),this['_map']['scene']['primitives'][_0x30eb48(0x240)](this[_0x30eb48(0x231)]);}['resize'](){const _0x2de285=_0x2840f1;if(!this[_0x2de285(0x2b4)]||!this['particleSystem'])return;this['primitives']['show']=![],this['primitives'][_0x2de285(0x1e3)](),this['_map']['once'](mars3d__namespace['EventType'][_0x2de285(0x28f)],this['_onMap_preRenderEvent'],this);}['_onMap_preRenderEvent'](_0x5506c7){const _0x41581b=_0x2840f1;this[_0x41581b(0x2ae)]['canvasResize'](this['scene']['context']),this['addPrimitives'](),this[_0x41581b(0x231)]['show']=!![];}[_0x2840f1(0x227)](_0x45015e){const _0x55872b=_0x2840f1;clearTimeout(this[_0x55872b(0x275)]);if(!this[_0x55872b(0x2b4)]||!this['particleSystem'])return;this['primitives']['show']=![],this[_0x55872b(0x275)]=setTimeout(()=>{if(!this['show'])return;this['redraw']();},0xc8);}[_0x2840f1(0x235)](_0x254ecd){const _0x10d446=_0x2840f1;this[_0x10d446(0x1d7)]=!![];}[_0x2840f1(0x263)](_0x15fb6e){const _0x46fb60=_0x2840f1;if(!this['show']||!this[_0x46fb60(0x2ae)])return;this['mouse_down']&&(this['primitives'][_0x46fb60(0x2b4)]=![],this['mouse_move']=!![]);}[_0x2840f1(0x1c9)](_0x263399){const _0x121502=_0x2840f1;if(!this[_0x121502(0x2b4)]||!this['particleSystem'])return;this['mouse_down']&&this['mouse_move']&&this['redraw'](),this[_0x121502(0x231)]['show']=!![],this['mouse_down']=![],this['mouse_move']=![];}['redraw'](){const _0x2b1b11=_0x2840f1;if(!this[_0x2b1b11(0x1da)]||!this['show'])return;this['updateViewerParameters'](),this['particleSystem']['applyViewerParameters'](this['viewerParameters']),this[_0x2b1b11(0x231)][_0x2b1b11(0x2b4)]=!![];}[_0x2840f1(0x2b0)](_0x3cee14){const _0x3347ff=_0x2840f1;this['_data']=_0x3cee14,this['particleSystem']&&this['particleSystem']['destroy'](),this['particleSystem']=new ParticleSystem(this['scene']['context'],_0x3cee14,this['getOptions'](),this[_0x3347ff(0x232)]),this[_0x3347ff(0x1eb)]();}[_0x2840f1(0x1c6)](_0x386caa,_0x5c509e){const _0x45a19d=_0x2840f1;if(_0x386caa)for(const _0xd5fea9 in _0x386caa){this[_0xd5fea9]=_0x386caa[_0xd5fea9];}this['particleSystem']&&this['particleSystem']['setOptions'](this[_0x45a19d(0x1d3)]());}[_0x2840f1(0x1d3)](){const _0x373bec=_0x2840f1,_0x5bfb8c=Math[_0x373bec(0x1de)](Math[_0x373bec(0x28a)](this['particlesNumber']));return this[_0x373bec(0x24e)]=_0x5bfb8c*_0x5bfb8c,{'particlesTextureSize':_0x5bfb8c,'maxParticles':this['particlesNumber'],'particleHeight':this[_0x373bec(0x1fd)],'fadeOpacity':this['fadeOpacity'],'dropRate':this[_0x373bec(0x29f)],'dropRateBump':this['dropRateBump'],'speedFactor':this[_0x373bec(0x266)],'lineWidth':this[_0x373bec(0x1df)],'colors':this['colors']};}['addPrimitives'](){const _0x1f435d=_0x2840f1;this['primitives'][_0x1f435d(0x1e5)](this[_0x1f435d(0x2ae)][_0x1f435d(0x278)][_0x1f435d(0x231)]['getWind']),this['primitives']['add'](this['particleSystem']['particlesComputing']['primitives']['updateSpeed']),this['primitives']['add'](this[_0x1f435d(0x2ae)]['particlesComputing'][_0x1f435d(0x231)][_0x1f435d(0x20c)]),this['primitives'][_0x1f435d(0x1e5)](this['particleSystem']['particlesComputing']['primitives']['postProcessingPosition']),this['primitives']['add'](this['particleSystem']['particlesComputing']['primitives']['postProcessingSpeed']),this['primitives']['add'](this['particleSystem']['particlesRendering']['primitives'][_0x1f435d(0x207)]),this[_0x1f435d(0x231)]['add'](this['particleSystem']['particlesRendering']['primitives']['trails']),this['primitives']['add'](this[_0x1f435d(0x2ae)][_0x1f435d(0x294)]['primitives'][_0x1f435d(0x1fc)]);}['updateViewerParameters'](){const _0x109af5=_0x2840f1;let _0x3a2974=this['camera'][_0x109af5(0x1d2)](this['scene'][_0x109af5(0x22e)][_0x109af5(0x272)]);if(!_0x3a2974){const _0xa1a5e6=this['_map']['getExtent']();_0x3a2974=Cesium$1['Rectangle']['fromDegrees'](_0xa1a5e6[_0x109af5(0x1dc)],_0xa1a5e6['ymin'],_0xa1a5e6[_0x109af5(0x1cd)],_0xa1a5e6[_0x109af5(0x2ad)]);}const _0x3a87d6=Util[_0x109af5(0x270)](_0x3a2974);this[_0x109af5(0x232)][_0x109af5(0x23a)]['x']=_0x3a87d6[_0x109af5(0x1d6)][_0x109af5(0x1d0)],this['viewerParameters']['lonRange']['y']=_0x3a87d6['lon']['max'],this['viewerParameters'][_0x109af5(0x244)]['x']=_0x3a87d6['lat']['min'],this[_0x109af5(0x232)]['latRange']['y']=_0x3a87d6[_0x109af5(0x299)]['max'];const _0x2fb92c=this[_0x109af5(0x214)]['getPixelSize'](this['globeBoundingSphere'],this['scene'][_0x109af5(0x29d)],this['scene'][_0x109af5(0x217)]);_0x2fb92c>0x0&&(this[_0x109af5(0x232)][_0x109af5(0x293)]=_0x2fb92c);}}mars3d__namespace['LayerUtil'][_0x2840f1(0x29e)]('wind',WindLayer),mars3d__namespace['layer'][_0x2840f1(0x23c)]=WindLayer;class CanvasParticle{constructor(){const _0x30aad6=_0x2840f1;this['lng']=null,this[_0x30aad6(0x299)]=null,this['tlng']=null,this['tlat']=null,this['age']=null,this['speed']=null;}['destroy'](){for(const _0x247ccb in this){delete this[_0x247ccb];}}}class CanvasWindField{constructor(_0x2bae56){this['setOptions'](_0x2bae56);}get['speedRate'](){return this['_speedRate'];}set[_0x2840f1(0x20d)](_0x54a002){const _0x2fcc0e=_0x2840f1;this['_speedRate']=(0x64-(_0x54a002>0x63?0x63:_0x54a002))*0x64,this[_0x2fcc0e(0x26c)]=[(this[_0x2fcc0e(0x1cd)]-this['xmin'])/this['_speedRate'],(this['ymax']-this['ymin'])/this['_speedRate']];}get['maxAge'](){return this['_maxAge'];}set['maxAge'](_0x509a58){this['_maxAge']=_0x509a58;}['setOptions'](_0x17f11e){const _0x1073ed=_0x2840f1;this[_0x1073ed(0x230)]=_0x17f11e,this[_0x1073ed(0x22c)]=_0x17f11e[_0x1073ed(0x22c)]||0x78,this['speedRate']=_0x17f11e[_0x1073ed(0x20d)]||0x32,this[_0x1073ed(0x226)]=[];const _0x2535ac=_0x17f11e[_0x1073ed(0x24e)]||0x1000;for(let _0x564c0c=0x0;_0x564c0c<_0x2535ac;_0x564c0c++){const _0xadce7a=this['_randomParticle'](new CanvasParticle());this[_0x1073ed(0x226)]['push'](_0xadce7a);}}['setDate'](_0x3f4782){const _0x15a2dc=_0x2840f1;this[_0x15a2dc(0x289)]=_0x3f4782['rows'],this[_0x15a2dc(0x213)]=_0x3f4782[_0x15a2dc(0x213)],this['xmin']=_0x3f4782['xmin'],this[_0x15a2dc(0x1cd)]=_0x3f4782[_0x15a2dc(0x1cd)],this['ymin']=_0x3f4782['ymin'],this['ymax']=_0x3f4782['ymax'],this[_0x15a2dc(0x2b1)]=[];const _0x4ccdc3=_0x3f4782[_0x15a2dc(0x26d)],_0x2b028c=_0x3f4782['vdata'];let _0x5b5edb=![];_0x4ccdc3[_0x15a2dc(0x1ca)]===this['rows']&&_0x4ccdc3[0x0]['length']===this[_0x15a2dc(0x213)]&&(_0x5b5edb=!![]);let _0x4ec6ce=0x0,_0x1e85a4=null,_0x2c48cc=null;for(let _0x107844=0x0;_0x107844<this['rows'];_0x107844++){_0x1e85a4=[];for(let _0x3c14a8=0x0;_0x3c14a8<this[_0x15a2dc(0x213)];_0x3c14a8++,_0x4ec6ce++){_0x5b5edb?_0x2c48cc=this[_0x15a2dc(0x203)](_0x4ccdc3[_0x107844][_0x3c14a8],_0x2b028c[_0x107844][_0x3c14a8]):_0x2c48cc=this['_calcUV'](_0x4ccdc3[_0x4ec6ce],_0x2b028c[_0x4ec6ce]),_0x1e85a4[_0x15a2dc(0x283)](_0x2c48cc);}this['grid']['push'](_0x1e85a4);}this[_0x15a2dc(0x230)][_0x15a2dc(0x27c)]&&this['grid']['reverse']();}['clear'](){const _0x28b9ec=_0x2840f1;delete this['rows'],delete this['cols'],delete this[_0x28b9ec(0x1dc)],delete this[_0x28b9ec(0x1cd)],delete this['ymin'],delete this['ymax'],delete this['grid'],delete this['particles'];}[_0x2840f1(0x288)](_0xaf702d,_0x4ecb27){const _0x24eff5=_0x2840f1,_0x167f4f=(_0xaf702d-this['xmin'])/(this['xmax']-this['xmin'])*(this[_0x24eff5(0x213)]-0x1),_0x470883=(this['ymax']-_0x4ecb27)/(this['ymax']-this[_0x24eff5(0x262)])*(this[_0x24eff5(0x289)]-0x1);return[_0x167f4f,_0x470883];}[_0x2840f1(0x1d1)](_0x8d14fe,_0x2b9fcd){const _0xfa90c3=_0x2840f1;if(_0x8d14fe<0x0||_0x8d14fe>=this['cols']||_0x2b9fcd>=this['rows'])return[0x0,0x0,0x0];const _0x3b89ea=Math['floor'](_0x8d14fe),_0xf3ef54=Math['floor'](_0x2b9fcd);if(_0x3b89ea===_0x8d14fe&&_0xf3ef54===_0x2b9fcd)return this[_0xfa90c3(0x2b1)][_0x2b9fcd][_0x8d14fe];const _0x115faa=_0x3b89ea+0x1,_0x731e0d=_0xf3ef54+0x1,_0x45748f=this['getUVByXY'](_0x3b89ea,_0xf3ef54),_0x767636=this['getUVByXY'](_0x115faa,_0xf3ef54),_0x5ddd47=this[_0xfa90c3(0x1d1)](_0x3b89ea,_0x731e0d),_0x5b2b6d=this['getUVByXY'](_0x115faa,_0x731e0d);let _0x1c6045=null;try{_0x1c6045=this['_bilinearInterpolation'](_0x8d14fe-_0x3b89ea,_0x2b9fcd-_0xf3ef54,_0x45748f,_0x767636,_0x5ddd47,_0x5b2b6d);}catch(_0xdabb68){console[_0xfa90c3(0x257)](_0x8d14fe,_0x2b9fcd);}return _0x1c6045;}['_bilinearInterpolation'](_0x23f30a,_0x283626,_0x31678e,_0x34f88d,_0x16203f,_0x4a69a0){const _0x5a4f69=_0x2840f1,_0x3d803d=0x1-_0x23f30a,_0x103914=0x1-_0x283626,_0x584760=_0x3d803d*_0x103914,_0x10900a=_0x23f30a*_0x103914,_0x5c4db5=_0x3d803d*_0x283626,_0x4b9ad7=_0x23f30a*_0x283626,_0x5219ec=_0x31678e[0x0]*_0x584760+_0x34f88d[0x0]*_0x10900a+_0x16203f[0x0]*_0x5c4db5+_0x4a69a0[0x0]*_0x4b9ad7,_0x48ad2b=_0x31678e[0x1]*_0x584760+_0x34f88d[0x1]*_0x10900a+_0x16203f[0x1]*_0x5c4db5+_0x4a69a0[0x1]*_0x4b9ad7;return this[_0x5a4f69(0x203)](_0x5219ec,_0x48ad2b);}['_calcUV'](_0x129e48,_0x2fd20c){return[+_0x129e48,+_0x2fd20c,Math['sqrt'](_0x129e48*_0x129e48+_0x2fd20c*_0x2fd20c)];}[_0x2840f1(0x1d5)](_0x362640,_0x3f451c){if(!this['isInExtent'](_0x362640,_0x3f451c))return null;const _0x7a5d45=this['toGridXY'](_0x362640,_0x3f451c),_0x1d0054=this['getUVByXY'](_0x7a5d45[0x0],_0x7a5d45[0x1]);return _0x1d0054;}['isInExtent'](_0x35b5fb,_0x47cea1){return _0x35b5fb>=this['xmin']&&_0x35b5fb<=this['xmax']&&_0x47cea1>=this['ymin']&&_0x47cea1<=this['ymax']?!![]:![];}['getRandomLatLng'](){const _0x3a5a91=_0x2840f1,_0x13994d=fRandomByfloat(this[_0x3a5a91(0x1dc)],this[_0x3a5a91(0x1cd)]),_0x47f7e0=fRandomByfloat(this['ymin'],this['ymax']);return{'lat':_0x47f7e0,'lng':_0x13994d};}['getParticles'](){const _0x1e7202=_0x2840f1;let _0x26648b,_0x2ac4c0,_0xc867e2;for(let _0x5e7185=0x0,_0x148fd2=this[_0x1e7202(0x226)][_0x1e7202(0x1ca)];_0x5e7185<_0x148fd2;_0x5e7185++){let _0xc0c381=this[_0x1e7202(0x226)][_0x5e7185];_0xc0c381['age']<=0x0&&(_0xc0c381=this[_0x1e7202(0x210)](_0xc0c381));if(_0xc0c381['age']>0x0){const _0x9a6e61=_0xc0c381['tlng'],_0x147293=_0xc0c381['tlat'];_0xc867e2=this[_0x1e7202(0x1d5)](_0x9a6e61,_0x147293),_0xc867e2?(_0x26648b=_0x9a6e61+this['_calc_speedRate'][0x0]*_0xc867e2[0x0],_0x2ac4c0=_0x147293+this[_0x1e7202(0x26c)][0x1]*_0xc867e2[0x1],_0xc0c381['lng']=_0x9a6e61,_0xc0c381['lat']=_0x147293,_0xc0c381['tlng']=_0x26648b,_0xc0c381['tlat']=_0x2ac4c0,_0xc0c381['speed']=_0xc867e2[0x2],_0xc0c381['age']--):_0xc0c381[_0x1e7202(0x1d8)]=0x0;}}return this['particles'];}['_randomParticle'](_0x81b100){const _0x43b822=_0x2840f1;let _0xeb914e,_0x36482b;for(let _0x1d9220=0x0;_0x1d9220<0x1e;_0x1d9220++){_0xeb914e=this['getRandomLatLng'](),_0x36482b=this['getUVByPoint'](_0xeb914e['lng'],_0xeb914e['lat']);if(_0x36482b&&_0x36482b[0x2]>0x0)break;}if(!_0x36482b)return _0x81b100;const _0xb3b308=_0xeb914e[_0x43b822(0x27f)]+this['_calc_speedRate'][0x0]*_0x36482b[0x0],_0x1136d4=_0xeb914e['lat']+this[_0x43b822(0x26c)][0x1]*_0x36482b[0x1];return _0x81b100[_0x43b822(0x27f)]=_0xeb914e['lng'],_0x81b100[_0x43b822(0x299)]=_0xeb914e['lat'],_0x81b100['tlng']=_0xb3b308,_0x81b100['tlat']=_0x1136d4,_0x81b100['age']=Math['round'](Math[_0x43b822(0x237)]()*this['maxAge']),_0x81b100['speed']=_0x36482b[0x2],_0x81b100;}['destroy'](){for(const _0x54f677 in this){delete this[_0x54f677];}}}function fRandomByfloat(_0x4e4f2c,_0x5b09ad){return _0x4e4f2c+Math['random']()*(_0x5b09ad-_0x4e4f2c);}const Cesium=mars3d__namespace['Cesium'],BaseLayer=mars3d__namespace['layer']['BaseLayer'];class CanvasWindLayer extends BaseLayer{constructor(_0x585bfa={}){super(_0x585bfa),this['_setOptionsHook'](_0x585bfa),this['canvas']=null,_0x585bfa['colors']&&_0x585bfa['steps']&&(this['_colorRamp']=new mars3d__namespace['ColorRamp'](_0x585bfa));}['_setOptionsHook'](_0x2505c0,_0x23b49b){const _0x114067=_0x2840f1;this['frameTime']=0x3e8/(_0x2505c0[_0x114067(0x1ef)]||0xa),this[_0x114067(0x25b)]=this['options']['pointerEvents']??![],this[_0x114067(0x292)]=_0x2505c0[_0x114067(0x292)]||'#ffffff',this[_0x114067(0x1df)]=_0x2505c0[_0x114067(0x1df)]||0x1,this['fixedHeight']=_0x2505c0['fixedHeight']??0x0,this['reverseY']=_0x2505c0['reverseY']??![],this['windField']&&this['windField']['setOptions'](_0x2505c0);}get['layer'](){return this['canvas'];}get['canvasWidth'](){const _0x436c5c=_0x2840f1;return this['_map'][_0x436c5c(0x21c)][_0x436c5c(0x28d)][_0x436c5c(0x20b)];}get['canvasHeight'](){const _0x4622fe=_0x2840f1;return this['_map'][_0x4622fe(0x21c)][_0x4622fe(0x28d)]['clientHeight'];}get['pointerEvents'](){return this['_pointerEvents'];}set[_0x2840f1(0x1e4)](_0x415aa4){const _0x24196f=_0x2840f1;this['_pointerEvents']=_0x415aa4;if(!this['canvas'])return;_0x415aa4?this['canvas'][_0x24196f(0x219)]['pointer-events']='all':this[_0x24196f(0x28d)]['style'][_0x24196f(0x276)]='none';}get['particlesNumber'](){return this['options']['particlesNumber'];}set['particlesNumber'](_0x5750a0){this['options']['particlesNumber']=_0x5750a0,clearTimeout(this['_canrefresh']),this['_canrefresh']=setTimeout(()=>{const _0x540d8e=_0xdb20;this[_0x540d8e(0x2a1)]();},0x1f4);}get['speedRate'](){return this['options']['speedRate'];}set['speedRate'](_0x34f7e8){const _0x498100=_0x2840f1;this['options']['speedRate']=_0x34f7e8,this['windField']&&(this[_0x498100(0x256)][_0x498100(0x20d)]=_0x34f7e8);}get['maxAge'](){const _0x59f23a=_0x2840f1;return this['options'][_0x59f23a(0x22c)];}set['maxAge'](_0x5971c7){this['options']['maxAge']=_0x5971c7,this['windField']&&(this['windField']['maxAge']=_0x5971c7);}get['data'](){const _0x80b815=_0x2840f1;return this[_0x80b815(0x218)];}set['data'](_0x227a98){this['setData'](_0x227a98);}[_0x2840f1(0x25f)](_0x22067a){const _0x35e40f=_0x2840f1;_0x22067a?this[_0x35e40f(0x225)]():(this['windData']&&(this['options']['data']=this['windData']),this['_removedHook']());}['_mountedHook'](){const _0x19044f=_0x2840f1;this['options'][_0x19044f(0x2a5)]?this[_0x19044f(0x20f)]():this['windField']=new CanvasWindField(this['options']);}['_addedHook'](){const _0x30ff9c=_0x2840f1;this['canvas']=this[_0x30ff9c(0x2a8)](),this['canvasContext']=this['canvas'][_0x30ff9c(0x285)]('2d',{'willReadFrequently':!![]}),this['bindEvent'](),this[_0x30ff9c(0x230)]['data']&&this[_0x30ff9c(0x2b0)](this['options']['data']);}['_removedHook'](){const _0x3a3ec7=_0x2840f1;this['clear'](),this['unbindEvent'](),this['canvas']&&(this[_0x3a3ec7(0x1da)]['container'][_0x3a3ec7(0x29a)](this[_0x3a3ec7(0x28d)]),delete this['canvas']);}[_0x2840f1(0x2a8)](){const _0x519551=_0x2840f1,_0x57ddd2=mars3d__namespace['DomUtil']['create']('canvas','mars3d-canvasWind',this['_map']['container']);return _0x57ddd2['style']['position']='absolute',_0x57ddd2['style']['top']=_0x519551(0x1c5),_0x57ddd2['style']['left']=_0x519551(0x1c5),_0x57ddd2['style'][_0x519551(0x261)]=this[_0x519551(0x1da)][_0x519551(0x21c)]['canvas']['clientWidth']+'px',_0x57ddd2['style']['height']=this['_map'][_0x519551(0x21c)]['canvas'][_0x519551(0x212)]+'px',_0x57ddd2[_0x519551(0x219)]['pointerEvents']=this['_pointerEvents']?'auto':'none',_0x57ddd2['style']['zIndex']=this[_0x519551(0x230)]['zIndex']??0x9,_0x57ddd2['width']=this['_map']['scene']['canvas']['clientWidth'],_0x57ddd2[_0x519551(0x239)]=this['_map']['scene']['canvas'][_0x519551(0x212)],_0x57ddd2;}['resize'](){const _0xc37c7f=_0x2840f1;this['canvas']&&(this['canvas'][_0xc37c7f(0x219)]['width']=this['_map']['scene']['canvas']['clientWidth']+'px',this['canvas']['style']['height']=this[_0xc37c7f(0x1da)][_0xc37c7f(0x21c)]['canvas'][_0xc37c7f(0x212)]+'px',this[_0xc37c7f(0x28d)]['width']=this['_map']['scene']['canvas']['clientWidth'],this['canvas']['height']=this[_0xc37c7f(0x1da)]['scene']['canvas']['clientHeight']);}[_0x2840f1(0x291)](){const _0x5432b6=_0x2840f1,_0x4ca48d=this;let _0x9907b8=Date['now']();(function _0x39e16c(){const _0x2de798=_0xdb20;_0x4ca48d['animateFrame']=window[_0x2de798(0x21d)](_0x39e16c);if(_0x4ca48d['show']&&_0x4ca48d['windField']){const _0x42d9c0=Date['now'](),_0x393b77=_0x42d9c0-_0x9907b8;_0x393b77>_0x4ca48d['frameTime']&&(_0x9907b8=_0x42d9c0-_0x393b77%_0x4ca48d[_0x2de798(0x1ff)],_0x4ca48d[_0x2de798(0x298)]());}}(),window[_0x5432b6(0x242)](_0x5432b6(0x28b),this['resize']['bind'](this),![]),this['mouse_down']=![],this['mouse_move']=![],this['options']['mouseHidden']&&(this[_0x5432b6(0x1da)]['on'](mars3d__namespace['EventType'][_0x5432b6(0x21a)],this[_0x5432b6(0x227)],this),this['_map']['on'](mars3d__namespace['EventType'][_0x5432b6(0x21b)],this['_onMouseDownEvent'],this),this['_map']['on'](mars3d__namespace['EventType'][_0x5432b6(0x2af)],this['_onMouseUpEvent'],this)));}['unbindEvent'](){const _0x2ce4ae=_0x2840f1;window['cancelAnimationFrame'](this['animateFrame']),delete this['animateFrame'],window['removeEventListener']('resize',this['resize']),this['options'][_0x2ce4ae(0x25a)]&&(this[_0x2ce4ae(0x1da)][_0x2ce4ae(0x25d)](mars3d__namespace['EventType'][_0x2ce4ae(0x21a)],this[_0x2ce4ae(0x227)],this),this['_map']['off'](mars3d__namespace['EventType']['mouseDown'],this[_0x2ce4ae(0x235)],this),this['_map']['off'](mars3d__namespace[_0x2ce4ae(0x2b7)][_0x2ce4ae(0x2af)],this[_0x2ce4ae(0x1c9)],this),this[_0x2ce4ae(0x1da)]['off'](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this));}[_0x2840f1(0x227)](_0x3c9a90){const _0x238035=_0x2840f1;clearTimeout(this[_0x238035(0x275)]);if(!this['show']||!this['canvas'])return;this['canvas']['style']['visibility']='hidden',this['refreshTimer']=setTimeout(()=>{const _0x35aa28=_0x238035;if(!this[_0x35aa28(0x2b4)])return;this['redraw'](),this['canvas'][_0x35aa28(0x219)]['visibility']=_0x35aa28(0x295);},0xc8);}['_onMouseDownEvent'](_0x56fd9c){const _0x2d6c55=_0x2840f1;this['mouse_down']=!![],this[_0x2d6c55(0x1da)][_0x2d6c55(0x25d)](mars3d__namespace[_0x2d6c55(0x2b7)]['mouseMove'],this[_0x2d6c55(0x263)],this),this[_0x2d6c55(0x1da)]['on'](mars3d__namespace['EventType'][_0x2d6c55(0x2b5)],this['_onMouseMoveEvent'],this);}['_onMouseMoveEvent'](_0x26672c){const _0x56c8b5=_0x2840f1;if(!this[_0x56c8b5(0x2b4)]||!this[_0x56c8b5(0x28d)])return;this['mouse_down']&&(this['canvas'][_0x56c8b5(0x219)]['visibility']='hidden',this[_0x56c8b5(0x24b)]=!![]);}['_onMouseUpEvent'](_0x1292ff){const _0x13fe53=_0x2840f1;if(!this[_0x13fe53(0x2b4)]||!this['canvas'])return;this['_map'][_0x13fe53(0x25d)](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this),this['mouse_down']&&this['mouse_move']&&this[_0x13fe53(0x2a1)](),this['canvas']['style'][_0x13fe53(0x238)]='visible',this['mouse_down']=![],this['mouse_move']=![];}['setData'](_0x4e2c97){const _0x531734=_0x2840f1;this[_0x531734(0x234)](),this['windData']=_0x4e2c97,this[_0x531734(0x256)][_0x531734(0x26a)](_0x4e2c97),this['redraw']();}[_0x2840f1(0x2a1)](){const _0x1414dd=_0x2840f1;if(!this['show'])return;this[_0x1414dd(0x256)]['setOptions'](this['options']),this[_0x1414dd(0x298)]();}['update'](){const _0x181a76=_0x2840f1;if(this['_updateIng'])return;this['_updateIng']=!![];if(this['worker'])this['windField']['update']();else{const _0x556425=this[_0x181a76(0x256)][_0x181a76(0x252)]();this['_drawLines'](_0x556425);}this['_updateIng']=![];}['_drawLines'](_0x2b035d){const _0x5bee72=_0x2840f1;this['canvasContext'][_0x5bee72(0x1db)]=_0x5bee72(0x248),this[_0x5bee72(0x259)]['fillRect'](0x0,0x0,this['canvasWidth'],this['canvasHeight']),this[_0x5bee72(0x259)][_0x5bee72(0x1db)]=_0x5bee72(0x2ac),this['canvasContext'][_0x5bee72(0x1ce)]=0.9;const _0x7426d0=this['_map'][_0x5bee72(0x21c)][_0x5bee72(0x264)]!==Cesium[_0x5bee72(0x2ab)]['SCENE3D'],_0x362c73=this['canvasWidth']*0.25;if(this['_colorRamp'])for(let _0x1ba073=0x0,_0x116497=_0x2b035d[_0x5bee72(0x1ca)];_0x1ba073<_0x116497;_0x1ba073++){const _0x57278a=_0x2b035d[_0x1ba073],_0x22b118=this['_tomap'](_0x57278a['lng'],_0x57278a['lat'],_0x57278a),_0x4f60fc=this[_0x5bee72(0x24f)](_0x57278a['tlng'],_0x57278a['tlat'],_0x57278a);if(!_0x22b118||!_0x4f60fc)continue;if(_0x7426d0&&Math['abs'](_0x22b118[0x0]-_0x4f60fc[0x0])>=_0x362c73)continue;this['canvasContext']['beginPath'](),this['canvasContext']['lineWidth']=this['lineWidth'],this[_0x5bee72(0x259)]['strokeStyle']=this[_0x5bee72(0x1f7)][_0x5bee72(0x1fa)](_0x57278a['speed']),this[_0x5bee72(0x259)]['moveTo'](_0x22b118[0x0],_0x22b118[0x1]),this[_0x5bee72(0x259)]['lineTo'](_0x4f60fc[0x0],_0x4f60fc[0x1]),this[_0x5bee72(0x259)]['stroke']();}else{this['canvasContext']['beginPath'](),this['canvasContext'][_0x5bee72(0x1df)]=this[_0x5bee72(0x1df)],this['canvasContext']['strokeStyle']=this['color'];for(let _0x4f4798=0x0,_0x4bd3e2=_0x2b035d['length'];_0x4f4798<_0x4bd3e2;_0x4f4798++){const _0x26e0cd=_0x2b035d[_0x4f4798],_0x4c7bea=this['_tomap'](_0x26e0cd['lng'],_0x26e0cd[_0x5bee72(0x299)],_0x26e0cd),_0x70d482=this['_tomap'](_0x26e0cd['tlng'],_0x26e0cd['tlat'],_0x26e0cd);if(!_0x4c7bea||!_0x70d482)continue;if(_0x7426d0&&Math['abs'](_0x4c7bea[0x0]-_0x70d482[0x0])>=_0x362c73)continue;this[_0x5bee72(0x259)][_0x5bee72(0x255)](_0x4c7bea[0x0],_0x4c7bea[0x1]),this['canvasContext']['lineTo'](_0x70d482[0x0],_0x70d482[0x1]);}this['canvasContext'][_0x5bee72(0x22d)]();}}['_tomap'](_0x50b4b2,_0x1d54fc,_0x3ac9d2){const _0x307cf5=_0x2840f1,_0x760df8=Cesium[_0x307cf5(0x223)]['fromDegrees'](_0x50b4b2,_0x1d54fc,this['fixedHeight']),_0x18e2b1=this['_map']['scene'];if(_0x18e2b1['mode']===Cesium['SceneMode']['SCENE3D']){const _0x16504a=new Cesium['EllipsoidalOccluder'](_0x18e2b1['globe']['ellipsoid'],_0x18e2b1['camera']['positionWC']),_0x376e90=_0x16504a[_0x307cf5(0x1fe)](_0x760df8);if(!_0x376e90)return _0x3ac9d2[_0x307cf5(0x1d8)]=0x0,null;}const _0x32e057=Cesium[_0x307cf5(0x222)]['wgs84ToWindowCoordinates'](this['_map'][_0x307cf5(0x21c)],_0x760df8);return _0x32e057?[_0x32e057['x'],_0x32e057['y']]:null;}[_0x2840f1(0x234)](){const _0x1d0305=_0x2840f1;this[_0x1d0305(0x256)][_0x1d0305(0x234)](),delete this['windData'];}['initWorker'](){const _0x4f706f=_0x2840f1;this['worker']=new Worker(this[_0x4f706f(0x230)][_0x4f706f(0x2a5)]),this['worker']['onmessage']=_0x510475=>{this['_drawLines'](_0x510475['data']['particles']),this['_updateIng2']=![];},this[_0x4f706f(0x256)]={'init':_0x577665=>{const _0x452a4a=_0x4f706f;this[_0x452a4a(0x2a5)]['postMessage']({'type':_0x452a4a(0x1f9),'options':_0x577665});},'setOptions':_0x4b368a=>{const _0x52420c=_0x4f706f;this[_0x52420c(0x2a5)]['postMessage']({'type':'setOptions','options':_0x4b368a});},'setDate':_0x5a69fa=>{this['worker']['postMessage']({'type':'setDate','data':_0x5a69fa});},'update':()=>{const _0x4598b1=_0x4f706f;if(this[_0x4598b1(0x2a6)])return;this[_0x4598b1(0x2a6)]=!![],this['worker']['postMessage']({'type':'update'});},'clear':()=>{const _0x5c8959=_0x4f706f;this['worker']['postMessage']({'type':_0x5c8959(0x234)});}},this[_0x4f706f(0x256)]['init'](this['options']);}}mars3d__namespace['LayerUtil']['register']('canvasWind',CanvasWindLayer),mars3d__namespace['layer'][_0x2840f1(0x290)]=CanvasWindLayer,mars3d__namespace['CanvasWindField']=CanvasWindField,mars3d__namespace['WindUtil']=WindUtil,exports['CanvasWindField']=CanvasWindField,exports['CanvasWindLayer']=CanvasWindLayer,exports['WindLayer']=WindLayer,exports[_0x2840f1(0x1ea)]=WindUtil,Object[_0x2840f1(0x1f6)](exports,'__esModule',{'value':!![]});
15
15
  }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mars3d-wind",
3
- "version": "3.7.8",
3
+ "version": "3.7.9",
4
4
  "description": "Mars3D平台插件,支持气象 风向图 功能插件",
5
5
  "main": "dist/mars3d-wind.js",
6
6
  "files": [
@@ -8,7 +8,7 @@
8
8
  ],
9
9
  "peerDependencies": {},
10
10
  "devDependencies": {
11
- "mars3d": "~3.7.8"
11
+ "mars3d": "~3.7.9"
12
12
  },
13
13
  "scripts": {
14
14
  "lint": "eslint ./src/**/*.{js,ts} --fix"