@anov/3d-ability 0.0.4-alpha1 → 0.0.4-alpha12
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.
- package/dist/camera/index.d.ts +69 -0
- package/dist/camera/index.js +257 -0
- package/dist/camera/index.js.map +1 -0
- package/dist/city/flyinglead.js +2 -0
- package/dist/city/flyinglead.js.map +1 -0
- package/dist/city/radar.js +2 -0
- package/dist/city/radar.js.map +1 -0
- package/dist/city/scanning.js +2 -0
- package/dist/city/scanning.js.map +1 -0
- package/dist/city/surroundLine.js +2 -0
- package/dist/city/surroundLine.js.map +1 -0
- package/dist/environment/rain.js +2 -1
- package/dist/environment/rain.js.map +1 -0
- package/dist/environment/{rainShder → rainShader}/index.js +2 -1
- package/dist/environment/rainShader/index.js.map +1 -0
- package/dist/environment/{rainShder → rainShader}/shader.js +2 -1
- package/dist/environment/rainShader/shader.js.map +1 -0
- package/dist/environment/shaderCloud/cloudMaterial.js +2 -1
- package/dist/environment/shaderCloud/cloudMaterial.js.map +1 -0
- package/dist/environment/shaderCloud/index.js +2 -1
- package/dist/environment/shaderCloud/index.js.map +1 -0
- package/dist/environment/shaderCloud/shader.js +2 -1
- package/dist/environment/shaderCloud/shader.js.map +1 -0
- package/dist/environment/{showShder → showShader}/index.js +2 -1
- package/dist/environment/showShader/index.js.map +1 -0
- package/dist/environment/{showShder → showShader}/shader.js +3 -2
- package/dist/environment/showShader/shader.js.map +1 -0
- package/dist/environment/sky/index.js +11 -10
- package/dist/environment/sky/index.js.map +1 -0
- package/dist/environment/skyBox/index.d.ts +41 -0
- package/dist/environment/skyBox/index.js +150 -0
- package/dist/environment/skyBox/index.js.map +1 -0
- package/dist/environment/snow.js +4 -1
- package/dist/environment/snow.js.map +1 -0
- package/dist/environment/sun/index.js +2 -1
- package/dist/environment/sun/index.js.map +1 -0
- package/dist/environment/utils/points.js +4 -3
- package/dist/environment/utils/points.js.map +1 -0
- package/dist/environment/volumetricCloud/cloudMaterial.js +2 -1
- package/dist/environment/volumetricCloud/cloudMaterial.js.map +1 -0
- package/dist/environment/volumetricCloud/inex.js +2 -1
- package/dist/environment/volumetricCloud/inex.js.map +1 -0
- package/dist/heatmap/index.d.ts +9 -0
- package/dist/heatmap/index.js +138 -0
- package/dist/heatmap/index.js.map +1 -0
- package/dist/helper/view/index.js +2 -1
- package/dist/helper/view/index.js.map +1 -0
- package/dist/helper/view/utils.js +2 -1
- package/dist/helper/view/utils.js.map +1 -0
- package/dist/index.d.ts +11 -6
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -0
- package/dist/line/curve.d.ts +33 -0
- package/dist/line/curve.js +71 -0
- package/dist/line/curve.js.map +1 -0
- package/dist/line/index.d.ts +0 -0
- package/dist/line/index.js +2 -0
- package/dist/line/index.js.map +1 -0
- package/dist/line/round-curve.d.ts +19 -0
- package/dist/line/round-curve.js +212 -0
- package/dist/line/round-curve.js.map +1 -0
- package/dist/material/finirMaterialMaterial/index.d.ts +9 -0
- package/dist/material/finirMaterialMaterial/index.js +47 -0
- package/dist/material/finirMaterialMaterial/index.js.map +1 -0
- package/dist/material/pristineGridMaterial/index.js +2 -1
- package/dist/material/pristineGridMaterial/index.js.map +1 -0
- package/dist/material/pristineGridMaterial/shader/fragment.js +2 -1
- package/dist/material/pristineGridMaterial/shader/fragment.js.map +1 -0
- package/dist/material/pristineGridMaterial/shader/vertex.js +2 -1
- package/dist/material/pristineGridMaterial/shader/vertex.js.map +1 -0
- package/dist/poi/core/Base.d.ts +7 -0
- package/dist/poi/core/Base.js +24 -0
- package/dist/poi/core/Base.js.map +1 -0
- package/dist/poi/core/Css2D.js +181 -0
- package/dist/poi/core/Css2D.js.map +1 -0
- package/dist/poi/core/Css3D.d.ts +1 -0
- package/dist/poi/core/Css3D.js +24 -0
- package/dist/poi/core/Css3D.js.map +1 -0
- package/dist/poi/core/Sprite.d.ts +12 -0
- package/dist/poi/core/Sprite.js +145 -0
- package/dist/poi/core/Sprite.js.map +1 -0
- package/dist/poi/core/SpriteBase.d.ts +11 -0
- package/dist/poi/core/SpriteBase.js +58 -0
- package/dist/poi/core/SpriteBase.js.map +1 -0
- package/dist/poi/index.d.ts +12 -0
- package/dist/poi/index.js +29 -0
- package/dist/poi/index.js.map +1 -0
- package/dist/poi/utils/base64.d.ts +3 -0
- package/dist/poi/utils/base64.js +4 -0
- package/dist/poi/utils/base64.js.map +1 -0
- package/dist/poi/utils/canvas.d.ts +3 -0
- package/dist/poi/utils/canvas.js +68 -0
- package/dist/poi/utils/canvas.js.map +1 -0
- package/dist/poi/utils/css.d.ts +35 -0
- package/dist/poi/utils/css.js +45 -0
- package/dist/poi/utils/css.js.map +1 -0
- package/dist/poi/utils/type.d.ts +35 -0
- package/dist/poi/utils/type.js +39 -0
- package/dist/poi/utils/type.js.map +1 -0
- package/dist/poiBack/assets.d.ts +2 -0
- package/dist/poiBack/assets.js +3 -0
- package/dist/poiBack/assets.js.map +1 -0
- package/dist/poiBack/dom.d.ts +2 -0
- package/dist/poiBack/dom.js +36 -0
- package/dist/poiBack/dom.js.map +1 -0
- package/dist/poiBack/index.d.ts +19 -0
- package/dist/poiBack/index.js +145 -0
- package/dist/poiBack/index.js.map +1 -0
- package/dist/poiBack/type.d.ts +20 -0
- package/dist/poiBack/type.js +6 -0
- package/dist/poiBack/type.js.map +1 -0
- package/dist/postEffects/bloomPass.js +2 -1
- package/dist/postEffects/bloomPass.js.map +1 -0
- package/dist/postEffects/index.js +2 -1
- package/dist/postEffects/index.js.map +1 -0
- package/dist/postEffects/outlinePass.js +9 -2
- package/dist/postEffects/outlinePass.js.map +1 -0
- package/dist/scene/grow/grow.d.ts +10 -0
- package/dist/scene/grow/grow.js +128 -0
- package/dist/scene/grow/grow.js.map +1 -0
- package/dist/scene/grow/growStyle.d.ts +2 -0
- package/dist/scene/grow/growStyle.js +3 -0
- package/dist/scene/grow/growStyle.js.map +1 -0
- package/dist/scene/grow/index.d.ts +2 -0
- package/dist/scene/grow/index.js +3 -0
- package/dist/scene/grow/index.js.map +1 -0
- package/dist/scene/grow/style_down.d.ts +13 -0
- package/dist/scene/grow/style_down.js +92 -0
- package/dist/scene/grow/style_down.js.map +1 -0
- package/dist/scene/grow/style_up.d.ts +13 -0
- package/dist/scene/grow/style_up.js +96 -0
- package/dist/scene/grow/style_up.js.map +1 -0
- package/dist/scene/grow/type.d.ts +46 -0
- package/dist/scene/grow/type.js +42 -0
- package/dist/scene/grow/type.js.map +1 -0
- package/dist/scene/index.d.ts +1 -0
- package/dist/scene/index.js +2 -0
- package/dist/scene/index.js.map +1 -0
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/weather/fog2DMesh.d.ts +14 -0
- package/dist/weather/fog2DMesh.js +77 -0
- package/dist/weather/fog2DMesh.js.map +1 -0
- package/dist/weather/glsl/fog.d.ts +2 -0
- package/dist/weather/glsl/fog.js +3 -0
- package/dist/weather/glsl/fog.js.map +1 -0
- package/dist/weather/index.d.ts +4 -0
- package/dist/weather/index.js +12 -0
- package/dist/weather/index.js.map +1 -0
- package/package.json +10 -3
- package/dist/core/mouseDrawe.d.ts +0 -2
- package/dist/core/mouseDrawe.js +0 -1
- package/dist/environment/cloud/cloud.d.ts +0 -1
- package/dist/environment/cloud/cloud.js +0 -1
- package/dist/environment/cloud/index.d.ts +0 -7
- package/dist/environment/cloud/index.js +0 -60
- /package/dist/environment/{rainShder → rainShader}/index.d.ts +0 -0
- /package/dist/environment/{rainShder → rainShader}/shader.d.ts +0 -0
- /package/dist/environment/{showShder → showShader}/index.d.ts +0 -0
- /package/dist/environment/{showShder → showShader}/shader.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DirectionalLight","Group","MathUtils","Vector3","lib","use","getLastValue","getSunPosition","Sky","initsSkySystem","options","sky","position","useScene","renderer","scale","setScalar","effectController","turbidity","rayleigh","mieCoefficient","mieDirectionalG","elevation","azimuth","exposure","uniforms","material","value","phi","degToRad","theta","setFromSphericalCoords","sunPosition","copy","initSunLight","opts","sunLight","color","intensity","castShadow","shadow","bias","mapSize","set","cam","camera","near","far","left","right","top","bottom","createSkySystem","date","latitude","longitude","sunRadius","scene","Error","skyGroup","add","move","altitude","radToDeg","x","Math","cos","z","sin","y","setDate","currentDate"],"sources":["../../../src/environment/sky/index.ts"],"sourcesContent":["import { DirectionalLight, Group, MathUtils, Vector3, lib, use } from '@anov/3d-core'\nimport { getLastValue } from '../../utils'\nimport { getSunPosition } from '../sun'\n\nconst Sky = lib.Sky\n\ntype SkySystemOption = {\n scalarCoefficient?: number\n turbidity?: number\n rayleigh?: number\n mieCoefficient?: number\n mieDirectionalG?: number\n elevation?: number\n azimuth?: number\n exposure?: number\n}\n\n/**\n * 天空盒 shader\n */\nconst initsSkySystem = (options?: SkySystemOption) => {\n const sky = new Sky()\n const position = new Vector3()\n const { renderer } = use.useScene()\n\n sky.scale.setScalar(450000)\n\n const effectController = {\n turbidity: 10,\n rayleigh: 3,\n mieCoefficient: 0.005,\n mieDirectionalG: 0.7,\n elevation: 2,\n azimuth: 180,\n exposure: 0.1,\n }\n // @ts-ignore\n const uniforms = sky.material.uniforms\n uniforms.turbidity.value = effectController.turbidity\n uniforms.rayleigh.value = effectController.rayleigh\n uniforms.mieCoefficient.value = effectController.mieCoefficient\n uniforms.mieDirectionalG.value = effectController.mieDirectionalG\n\n const phi = MathUtils.degToRad(90 - effectController.elevation)\n const theta = MathUtils.degToRad(effectController.azimuth)\n\n position.setFromSphericalCoords(1, phi, theta)\n uniforms.sunPosition.value.copy(position)\n\n return [sky, position, uniforms] as [typeof sky, typeof position, typeof uniforms]\n}\n\ntype SunLightOption = {\n color?: string\n intensity?: number\n bias?: number\n mapSize?: [number, number]\n\n near?: number\n far?: number\n left?: number\n right?: number\n top?: number\n bottom?: number\n}\n\n/**\n * create sun light\n * @param options\n * @returns\n */\nconst initSunLight = (options?: SunLightOption) => {\n const opts = options || {}\n\n const sunLight = new DirectionalLight(getLastValue(opts.color, 'white'), getLastValue(opts.intensity, 10))\n sunLight.castShadow = true\n\n sunLight.shadow.bias = getLastValue(opts.bias, -0.005)\n sunLight.shadow.mapSize.set(getLastValue(opts.mapSize?.[0], 1024 * 2), getLastValue(opts.mapSize?.[1], 1024 * 2))\n\n const cam = sunLight.shadow.camera\n cam.near = getLastValue(opts.near, 1)\n cam.far = getLastValue(opts.far, 10000)\n cam.left = getLastValue(opts.left, -1000)\n cam.right = getLastValue(opts.right, 1000)\n cam.top = getLastValue(opts.top, 1000)\n cam.bottom = getLastValue(opts.bottom, -1000)\n\n return sunLight\n}\n\n/**\n * create sky system\n * @param date\n * @param latitude\n * @param longitude\n * @returns\n */\nconst createSkySystem = (date: Date, latitude: number, longitude: number, sunRadius = 300) => {\n const { renderer, scene } = use.useScene()\n\n sunRadius = 300\n if (!renderer && !scene)\n throw new Error('renderer or scene is not exist')\n\n const [sky, position, uniforms] = initsSkySystem()\n const sunLight = initSunLight()\n const skyGroup = new Group() as (Group & { sunPosition: Vector3 })\n\n scene!.add(sky)\n skyGroup.add(sunLight)\n scene!.add(skyGroup)\n\n const move = (altitude: number, azimuth: number) => {\n position.setFromSphericalCoords(sunRadius, MathUtils.degToRad(90 - MathUtils.radToDeg(altitude)), azimuth)\n uniforms.sunPosition.value.copy(position)\n\n const x = sunRadius * (Math.cos(altitude)) * (Math.cos(azimuth))\n const z = sunRadius * (Math.cos(altitude)) * (Math.sin(azimuth))\n const y = sunRadius * (Math.sin(altitude))\n\n const sunPosition = new Vector3(x, y, z)\n skyGroup.sunPosition = sunPosition\n skyGroup.position.copy(position)\n\n return sunPosition\n }\n\n const { altitude, azimuth } = getSunPosition(date, latitude, longitude)\n move(altitude, azimuth)\n\n /**\n * set date\n * @param currentDate\n * @returns\n */\n const setDate = (currentDate?: Date) => {\n const { altitude, azimuth } = getSunPosition(currentDate || date, latitude, longitude)\n return move(altitude, azimuth)\n }\n\n return [setDate, skyGroup, sky] as [typeof setDate, Group & { sunPosition: Vector3 }, any]\n}\n\nexport default createSkySystem\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Vector3 } from '@anov/3d-core';
|
|
2
|
+
declare type EnvironmentOptions = {
|
|
3
|
+
weather?: string;
|
|
4
|
+
time?: number;
|
|
5
|
+
};
|
|
6
|
+
declare class SkyBox {
|
|
7
|
+
private opts?;
|
|
8
|
+
private setDate;
|
|
9
|
+
private snow;
|
|
10
|
+
private rain;
|
|
11
|
+
private cloudReturn;
|
|
12
|
+
private sky;
|
|
13
|
+
private renderer;
|
|
14
|
+
sunPosition: Vector3;
|
|
15
|
+
constructor(opts?: EnvironmentOptions);
|
|
16
|
+
private initConfigSet;
|
|
17
|
+
private setWeatherStrategy;
|
|
18
|
+
/**
|
|
19
|
+
* setTime
|
|
20
|
+
* @param params
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
setTime(params: {
|
|
24
|
+
time: number;
|
|
25
|
+
duration?: number;
|
|
26
|
+
}): {
|
|
27
|
+
newTime: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* setWeather
|
|
31
|
+
* @param params
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
setWeather(params: {
|
|
35
|
+
weatherType: string;
|
|
36
|
+
duration?: number;
|
|
37
|
+
}): {
|
|
38
|
+
weatherType: string;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export default SkyBox;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
3
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
4
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
9
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
13
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
+
import { use } from '@anov/3d-core';
|
|
15
|
+
import { createRain, createSkyCloud, createSkySystem, createSnow } from "../../";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* create time sky system
|
|
19
|
+
* @param date
|
|
20
|
+
* @param latitude
|
|
21
|
+
* @param longitude
|
|
22
|
+
* @param sunRadius
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
var createTimeSkySystem = function createTimeSkySystem(date) {
|
|
26
|
+
var latitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 40;
|
|
27
|
+
var longitude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 116;
|
|
28
|
+
var sunRadius = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 100;
|
|
29
|
+
var _createSkySystem = createSkySystem(date, latitude, longitude, sunRadius),
|
|
30
|
+
_createSkySystem2 = _slicedToArray(_createSkySystem, 3),
|
|
31
|
+
setDate = _createSkySystem2[0],
|
|
32
|
+
sun = _createSkySystem2[1],
|
|
33
|
+
sky = _createSkySystem2[2];
|
|
34
|
+
return [setDate, sun, sky];
|
|
35
|
+
};
|
|
36
|
+
var SkyBox = /*#__PURE__*/function () {
|
|
37
|
+
function SkyBox(opts) {
|
|
38
|
+
var _this = this;
|
|
39
|
+
_classCallCheck(this, SkyBox);
|
|
40
|
+
_defineProperty(this, "opts", void 0);
|
|
41
|
+
_defineProperty(this, "setDate", void 0);
|
|
42
|
+
_defineProperty(this, "snow", null);
|
|
43
|
+
_defineProperty(this, "rain", null);
|
|
44
|
+
_defineProperty(this, "cloudReturn", null);
|
|
45
|
+
_defineProperty(this, "sky", void 0);
|
|
46
|
+
_defineProperty(this, "renderer", void 0);
|
|
47
|
+
_defineProperty(this, "sunPosition", void 0);
|
|
48
|
+
_defineProperty(this, "setWeatherStrategy", {
|
|
49
|
+
Snow: function Snow() {
|
|
50
|
+
!_this.snow && (_this.snow = createSnow(15, 10000, {
|
|
51
|
+
x: 0,
|
|
52
|
+
y: 3,
|
|
53
|
+
z: 0
|
|
54
|
+
}, 0.5, 50000));
|
|
55
|
+
_this.snow[0]();
|
|
56
|
+
_this.renderer.toneMappingExposure = 0.3;
|
|
57
|
+
},
|
|
58
|
+
Rain: function Rain() {
|
|
59
|
+
!_this.rain && (_this.rain = createRain(4, 10000, {
|
|
60
|
+
x: 0,
|
|
61
|
+
y: 10,
|
|
62
|
+
z: 0
|
|
63
|
+
}, 0.8, 100000));
|
|
64
|
+
_this.rain[0]();
|
|
65
|
+
_this.renderer.toneMappingExposure = 0.3;
|
|
66
|
+
},
|
|
67
|
+
Cloudy: function Cloudy() {
|
|
68
|
+
!_this.cloudReturn && (_this.cloudReturn = createSkyCloud());
|
|
69
|
+
},
|
|
70
|
+
Clear_Skies: function Clear_Skies() {
|
|
71
|
+
var _this$snow, _this$rain;
|
|
72
|
+
(_this$snow = _this.snow) === null || _this$snow === void 0 ? void 0 : _this$snow[1]();
|
|
73
|
+
(_this$rain = _this.rain) === null || _this$rain === void 0 ? void 0 : _this$rain[1]();
|
|
74
|
+
_this.renderer.toneMappingExposure = 0.6;
|
|
75
|
+
if (_this.cloudReturn) {
|
|
76
|
+
var _this$cloudReturn = _slicedToArray(_this.cloudReturn, 2),
|
|
77
|
+
_ = _this$cloudReturn[0],
|
|
78
|
+
clear = _this$cloudReturn[1];
|
|
79
|
+
clear();
|
|
80
|
+
_this.cloudReturn = null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
var _createTimeSkySystem = createTimeSkySystem(new Date(), 40, 116, 100),
|
|
85
|
+
_createTimeSkySystem2 = _slicedToArray(_createTimeSkySystem, 3),
|
|
86
|
+
setDate = _createTimeSkySystem2[0],
|
|
87
|
+
sun = _createTimeSkySystem2[1],
|
|
88
|
+
sky = _createTimeSkySystem2[2];
|
|
89
|
+
this.renderer = use.useScene().renderer;
|
|
90
|
+
this.sunPosition = sun.position;
|
|
91
|
+
this.setDate = setDate;
|
|
92
|
+
this.sky = sky;
|
|
93
|
+
this.opts = opts;
|
|
94
|
+
this.initConfigSet();
|
|
95
|
+
}
|
|
96
|
+
_createClass(SkyBox, [{
|
|
97
|
+
key: "initConfigSet",
|
|
98
|
+
value: function initConfigSet() {
|
|
99
|
+
var _ref = this.opts || {},
|
|
100
|
+
_ref$weather = _ref.weather,
|
|
101
|
+
weather = _ref$weather === void 0 ? 'Snow' : _ref$weather,
|
|
102
|
+
_ref$time = _ref.time,
|
|
103
|
+
time = _ref$time === void 0 ? 1700 : _ref$time;
|
|
104
|
+
this.setWeather({
|
|
105
|
+
weatherType: weather,
|
|
106
|
+
duration: 0
|
|
107
|
+
});
|
|
108
|
+
this.setTime({
|
|
109
|
+
time: time,
|
|
110
|
+
duration: 0
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}, {
|
|
114
|
+
key: "setTime",
|
|
115
|
+
value:
|
|
116
|
+
/**
|
|
117
|
+
* setTime
|
|
118
|
+
* @param params
|
|
119
|
+
* @returns
|
|
120
|
+
*/
|
|
121
|
+
function setTime(params) {
|
|
122
|
+
if (params.time === undefined || params.time > 2400 && params.time < 0) throw new Error('time must be between 0 and 2400');
|
|
123
|
+
var date = new Date();
|
|
124
|
+
date.setHours(0, 0, 0, 0);
|
|
125
|
+
date.setTime(date.getTime() + Math.floor(86400000 * params.time / 2400));
|
|
126
|
+
this.setDate(date);
|
|
127
|
+
return {
|
|
128
|
+
newTime: params.time
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* setWeather
|
|
134
|
+
* @param params
|
|
135
|
+
* @returns
|
|
136
|
+
*/
|
|
137
|
+
}, {
|
|
138
|
+
key: "setWeather",
|
|
139
|
+
value: function setWeather(params) {
|
|
140
|
+
// @ts-ignore
|
|
141
|
+
this.setWeatherStrategy[params.weatherType]();
|
|
142
|
+
return {
|
|
143
|
+
weatherType: params.weatherType
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}]);
|
|
147
|
+
return SkyBox;
|
|
148
|
+
}();
|
|
149
|
+
export default SkyBox;
|
|
150
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["use","createRain","createSkyCloud","createSkySystem","createSnow","createTimeSkySystem","date","latitude","longitude","sunRadius","setDate","sun","sky","SkyBox","opts","Snow","snow","x","y","z","renderer","toneMappingExposure","Rain","rain","Cloudy","cloudReturn","Clear_Skies","_","clear","Date","useScene","sunPosition","position","initConfigSet","weather","time","setWeather","weatherType","duration","setTime","params","undefined","Error","setHours","getTime","Math","floor","newTime","setWeatherStrategy"],"sources":["../../../src/environment/skyBox/index.ts"],"sourcesContent":["import type { Vector3, WebGLRenderer, lib } from '@anov/3d-core'\nimport { use } from '@anov/3d-core'\nimport { createRain, createSkyCloud, createSkySystem, createSnow } from '../../'\n\n/**\n * create time sky system\n * @param date\n * @param latitude\n * @param longitude\n * @param sunRadius\n * @returns\n */\nconst createTimeSkySystem = (date: Date, latitude = 40, longitude = 116, sunRadius = 100) => {\n const [setDate, sun, sky] = createSkySystem(date, latitude, longitude, sunRadius)\n\n return [setDate, sun, sky] as [typeof setDate, typeof sun, typeof sky]\n}\n\ntype EnvironmentOptions = {\n weather?: string\n time?: number\n}\n\nclass SkyBox {\n private opts?: EnvironmentOptions\n private setDate: (currentDate?: Date | undefined) => Vector3\n private snow: any = null\n private rain: any = null\n private cloudReturn: ReturnType<typeof createSkyCloud> | null = null\n private sky: lib.Sky\n private renderer: WebGLRenderer\n sunPosition: Vector3\n\n constructor(opts?: EnvironmentOptions) {\n const [setDate, sun, sky] = createTimeSkySystem(new Date(), 40, 116, 100)\n this.renderer = use.useScene().renderer!\n this.sunPosition = sun.position\n this.setDate = setDate as any\n this.sky = sky\n\n this.opts = opts\n this.initConfigSet()\n }\n\n private initConfigSet() {\n const { weather = 'Snow', time = 1700 } = this.opts || {}\n\n this.setWeather({ weatherType: weather, duration: 0 })\n this.setTime({ time, duration: 0 })\n }\n\n private setWeatherStrategy = {\n Snow: () => {\n !this.snow && (this.snow = createSnow(15, 10000, { x: 0, y: 3, z: 0 }, 0.5, 50000))\n this.snow[0]()\n this.renderer.toneMappingExposure = 0.3\n },\n Rain: () => {\n !this.rain && (this.rain = createRain(4, 10000, { x: 0, y: 10, z: 0 }, 0.8, 100000))\n this.rain[0]()\n this.renderer.toneMappingExposure = 0.3\n },\n Cloudy: () => {\n !this.cloudReturn && (this.cloudReturn = createSkyCloud())\n },\n Clear_Skies: () => {\n this.snow?.[1]()\n this.rain?.[1]()\n this.renderer.toneMappingExposure = 0.6\n\n if (this.cloudReturn) {\n const [_, clear] = this.cloudReturn\n clear()\n this.cloudReturn = null\n }\n },\n }\n\n /**\n * setTime\n * @param params\n * @returns\n */\n setTime(params: { time: number; duration?: number }) {\n if (params.time === undefined || (params.time > 2400 && params.time < 0))\n throw new Error('time must be between 0 and 2400')\n\n const date = new Date()\n date.setHours(0, 0, 0, 0)\n date.setTime(date.getTime() + Math.floor(86400000 * params.time / 2400))\n this.setDate(date)\n\n return {\n newTime: params.time,\n }\n }\n\n /**\n * setWeather\n * @param params\n * @returns\n */\n setWeather(params: { weatherType: string; duration?: number }) {\n // @ts-ignore\n this.setWeatherStrategy[params.weatherType]()\n\n return {\n weatherType: params.weatherType,\n }\n }\n}\n\nexport default SkyBox"],"mappings":"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"}
|
package/dist/environment/snow.js
CHANGED
|
@@ -31,6 +31,8 @@ export var createSnow = function createSnow() {
|
|
|
31
31
|
removeFrame = useframe(function () {
|
|
32
32
|
points.animation(function (position) {
|
|
33
33
|
position.y -= position.speedY;
|
|
34
|
+
position.x += position.speedX;
|
|
35
|
+
position.z += position.speedZ;
|
|
34
36
|
if (position.y <= 0 && isBoundaryJudgment) position.y = 1000 / 2;
|
|
35
37
|
});
|
|
36
38
|
});
|
|
@@ -42,4 +44,5 @@ export var createSnow = function createSnow() {
|
|
|
42
44
|
}
|
|
43
45
|
};
|
|
44
46
|
return [start, stop];
|
|
45
|
-
};
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=snow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["globalObjectManage","use","EnvironmentPoints","useframe","createSnow","size","range","speed","opacity","count","points","url","removeFrame","isBoundaryJudgment","start","scene","add","point","animation","position","y","speedY","x","speedX","z","speedZ","stop","remove"],"sources":["../../src/environment/snow.ts"],"sourcesContent":["import { globalObjectManage, use } from '@anov/3d-core'\nimport type { SpeedType } from './rain'\nimport type { AVector3 } from './utils/points'\nimport EnvironmentPoints from './utils/points'\n\nconst { useframe } = use\n\ntype CreateSnowReturn = [\n () => void,\n () => void,\n]\n\n/**\n * create snow\n * @param size 雪花大小\n * @param range 降雪范围\n * @param speed 降雪速度\n * @param opacity 雪花透明度\n * @param count 雪花密度\n * @returns\n */\nexport const createSnow = (size = 10, range = 100, speed?: SpeedType, opacity = 0.6, count = 100) => {\n const points = new EnvironmentPoints({\n size,\n opacity,\n speed,\n range,\n count,\n url: 'data:image/png;base64,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',\n })\n\n let removeFrame: (() => void) | null = null\n const isBoundaryJudgment = true\n\n const start = () => {\n globalObjectManage.scene!.add(points.point!)\n\n removeFrame = useframe(() => {\n points.animation(\n (position: AVector3) => {\n position.y -= position.speedY\n position.x += position.speedX\n position.z += position.speedZ\n\n if (position.y <= 0 && isBoundaryJudgment)\n position.y = 1000 / 2\n },\n )\n })\n }\n\n const stop = () => {\n if (removeFrame) {\n removeFrame()\n globalObjectManage.scene!.remove(points.point!)\n }\n }\n\n return [\n start,\n stop,\n ] as CreateSnowReturn\n}"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,GAAG,QAAQ,eAAe;AAGvD,OAAOC,iBAAiB;AAExB,IAAQC,QAAQ,GAAKF,GAAG,CAAhBE,QAAQ;AAOhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,UAAU,GAAG,SAAbA,UAAU,GAA8E;EAAA,IAA1EC,IAAI,uEAAG,EAAE;EAAA,IAAEC,KAAK,uEAAG,GAAG;EAAA,IAAEC,KAAiB;EAAA,IAAEC,OAAO,uEAAG,GAAG;EAAA,IAAEC,KAAK,uEAAG,GAAG;EAC9F,IAAMC,MAAM,GAAG,IAAIR,iBAAiB,CAAC;IACnCG,IAAI,EAAJA,IAAI;IACJG,OAAO,EAAPA,OAAO;IACPD,KAAK,EAALA,KAAK;IACLD,KAAK,EAALA,KAAK;IACLG,KAAK,EAALA,KAAK;IACLE,GAAG,EAAE;EACP,CAAC,CAAC;EAEF,IAAIC,WAAgC,GAAG,IAAI;EAC3C,IAAMC,kBAAkB,GAAG,IAAI;EAE/B,IAAMC,KAAK,GAAG,SAARA,KAAK,GAAS;IAClBd,kBAAkB,CAACe,KAAK,CAAEC,GAAG,CAACN,MAAM,CAACO,KAAK,CAAE;IAE5CL,WAAW,GAAGT,QAAQ,CAAC,YAAM;MAC3BO,MAAM,CAACQ,SAAS,CACd,UAACC,QAAkB,EAAK;QACtBA,QAAQ,CAACC,CAAC,IAAID,QAAQ,CAACE,MAAM;QAC7BF,QAAQ,CAACG,CAAC,IAAIH,QAAQ,CAACI,MAAM;QAC7BJ,QAAQ,CAACK,CAAC,IAAIL,QAAQ,CAACM,MAAM;QAE7B,IAAIN,QAAQ,CAACC,CAAC,IAAI,CAAC,IAAIP,kBAAkB,EACvCM,QAAQ,CAACC,CAAC,GAAG,IAAI,GAAG,CAAC;MACzB,CAAC,CACF;IACH,CAAC,CAAC;EACJ,CAAC;EAED,IAAMM,IAAI,GAAG,SAAPA,IAAI,GAAS;IACjB,IAAId,WAAW,EAAE;MACfA,WAAW,EAAE;MACbZ,kBAAkB,CAACe,KAAK,CAAEY,MAAM,CAACjB,MAAM,CAACO,KAAK,CAAE;IACjD;EACF,CAAC;EAED,OAAO,CACLH,KAAK,EACLY,IAAI,CACL;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DirectionalLight","Group","Mesh","MeshBasicMaterial","SphereGeometry","Vector3","getPosition","getThreePosition","date","latitude","longitude","distance","altitude","azimuth","x","Math","cos","z","sin","y","getSunPosition","createSunEntity","box","mater","color","mesh","createSunLight","sunLight","castShadow","shadow","bias","mapSize","set","createSun","autoUpdate","position","group","add","lookAt","updateSunPosition","currentPosition","currentDate"],"sources":["../../../src/environment/sun/index.ts"],"sourcesContent":["import { DirectionalLight, Group, Mesh, MeshBasicMaterial, SphereGeometry, Vector3 } from '@anov/3d-core'\nimport { getPosition } from 'suncalc'\n\n/**\n * 获取当前笛卡尔坐标\n * @param date\n * @param latitude\n * @param longitude\n */\nconst getThreePosition = (date: Date, latitude: number, longitude: number, distance: number) => {\n const { altitude, azimuth } = getPosition(date, latitude, longitude)\n\n const x = distance * (Math.cos(altitude)) * (Math.cos(azimuth))\n const z = distance * (Math.cos(altitude)) * (Math.sin(azimuth))\n const y = distance * (Math.sin(altitude))\n\n return new Vector3(x, y, z)\n}\n\nexport const getSunPosition = (date: Date, latitude: number, longitude: number) => {\n const { altitude, azimuth } = getPosition(date, latitude, longitude)\n\n return {\n altitude,\n azimuth,\n }\n}\n\n/**\n * entity\n * @returns\n */\nconst createSunEntity = () => {\n const box = new SphereGeometry(1)\n const mater = new MeshBasicMaterial({ color: 'yellow' })\n const mesh = new Mesh(box, mater)\n\n return mesh\n}\n\n/**\n * sun light\n * @returns\n */\nconst createSunLight = () => {\n const sunLight = new DirectionalLight('white', 8)\n sunLight.castShadow = true\n sunLight.shadow.bias = -0.005\n sunLight.shadow.mapSize.set(1024, 1024)\n\n return sunLight\n}\n\n/**\n * create init\n * @param date\n * @param latitude\n * @param longitude\n * @param distance\n */\nexport const createSun = (date: Date, latitude: number, longitude: number, distance = 1000, autoUpdate = true) => {\n const position = getThreePosition(date, latitude, longitude, distance)\n const group = new Group()\n\n group.add(\n createSunEntity(),\n createSunLight(),\n )\n\n group.position.set(position.x, position.y, position.z)\n group.lookAt(0, 0, 0)\n\n const updateSunPosition = (date: Date, latitude: number, longitude: number) => {\n const currentPosition = getThreePosition(date, latitude, longitude, distance)\n group.position.set(currentPosition.x, currentPosition.y, currentPosition.z)\n }\n\n return [group, updateSunPosition, (currentDate?: Date) => {\n return getSunPosition(currentDate || date, latitude, longitude)\n }]\n}\n"],"mappings":"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"}
|
|
@@ -34,8 +34,8 @@ var EnvironmentPoints = /*#__PURE__*/function () {
|
|
|
34
34
|
var _this$opts$speed, _this$opts$speed2, _this$opts$speed3;
|
|
35
35
|
var _position = new Vector3(Math.random() * range - range / 2, Math.random() * range, Math.random() * range - range / 2);
|
|
36
36
|
_position.speedX = ((_this$opts$speed = this.opts.speed) === null || _this$opts$speed === void 0 ? void 0 : _this$opts$speed.x) || 0;
|
|
37
|
-
_position.speedY = ((_this$opts$speed2 = this.opts.speed) === null || _this$opts$speed2 === void 0 ? void 0 : _this$opts$speed2.
|
|
38
|
-
_position.speedZ = ((_this$opts$speed3 = this.opts.speed) === null || _this$opts$speed3 === void 0 ? void 0 : _this$opts$speed3.
|
|
37
|
+
_position.speedY = ((_this$opts$speed2 = this.opts.speed) === null || _this$opts$speed2 === void 0 ? void 0 : _this$opts$speed2.y) || 10;
|
|
38
|
+
_position.speedZ = ((_this$opts$speed3 = this.opts.speed) === null || _this$opts$speed3 === void 0 ? void 0 : _this$opts$speed3.z) || 0;
|
|
39
39
|
this.points.push(_position);
|
|
40
40
|
}
|
|
41
41
|
this.geometry.setFromPoints(this.points);
|
|
@@ -52,4 +52,5 @@ var EnvironmentPoints = /*#__PURE__*/function () {
|
|
|
52
52
|
}]);
|
|
53
53
|
return EnvironmentPoints;
|
|
54
54
|
}();
|
|
55
|
-
export default EnvironmentPoints;
|
|
55
|
+
export default EnvironmentPoints;
|
|
56
|
+
//# sourceMappingURL=points.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BufferGeometry","Points","PointsMaterial","TextureLoader","Vector3","EnvironmentPoints","opts","createEnvPoints","material","size","map","load","url","transparent","opacity","depthTest","geometry","range","i","count","position","Math","random","speedX","speed","x","speedY","y","speedZ","z","points","push","setFromPoints","point","handlefn","forEach"],"sources":["../../../src/environment/utils/points.ts"],"sourcesContent":["import { BufferGeometry, Points, PointsMaterial, TextureLoader, Vector3 } from '@anov/3d-core'\nimport type { SpeedType } from '../rain'\n\ninterface EnvPointsOptions {\n range?: number\n count?: number\n opacity?: number\n url: string\n size?: number\n speed?: SpeedType\n}\n\nexport type AVector3 = Vector3 & {\n speedX: number\n speedY: number\n speedZ: number\n}\n\nclass EnvironmentPoints {\n private opts: EnvPointsOptions = {} as EnvPointsOptions\n public points: AVector3[] = []\n\n public material: PointsMaterial | null = null\n public geometry: BufferGeometry | null = null\n public point: Points | null = null\n\n constructor(opts: EnvPointsOptions) {\n this.opts = opts\n\n this.createEnvPoints()\n }\n\n private createEnvPoints() {\n this.material = new PointsMaterial({\n size: this.opts.size || 1,\n map: new TextureLoader().load(this.opts.url),\n transparent: true,\n opacity: this.opts.opacity,\n depthTest: false,\n })\n\n this.geometry = new BufferGeometry()\n\n const range = this.opts.range ?? 1000\n\n for (let i = 0; i < (this.opts.count || 500); i++) {\n const position = new Vector3(\n Math.random() * range - range / 2,\n Math.random() * range,\n Math.random() * range - range / 2,\n ) as AVector3\n\n position.speedX = this.opts.speed?.x || 0\n position.speedY = this.opts.speed?.y || 10\n position.speedZ = this.opts.speed?.z || 0\n\n this.points.push(position)\n }\n this.geometry.setFromPoints(this.points)\n\n this.point = new Points(this.geometry, this.material)\n }\n\n public animation(handlefn: (position: AVector3) => void) {\n this.points.forEach((position) => {\n handlefn(position)\n })\n\n this.point!.geometry.setFromPoints(this.points)\n }\n}\n\nexport default EnvironmentPoints"],"mappings":";;;;;;;AAAA,SAASA,cAAc,EAAEC,MAAM,EAAEC,cAAc,EAAEC,aAAa,EAAEC,OAAO,QAAQ,eAAe;AAAA,IAkBxFC,iBAAiB;EAQrB,2BAAYC,IAAsB,EAAE;IAAA;IAAA,8BAPH,CAAC,CAAC;IAAA,gCACP,EAAE;IAAA,kCAEW,IAAI;IAAA,kCACJ,IAAI;IAAA,+BACf,IAAI;IAGhC,IAAI,CAACA,IAAI,GAAGA,IAAI;IAEhB,IAAI,CAACC,eAAe,EAAE;EACxB;EAAC;IAAA;IAAA,OAED,2BAA0B;MAAA;MACxB,IAAI,CAACC,QAAQ,GAAG,IAAIN,cAAc,CAAC;QACjCO,IAAI,EAAE,IAAI,CAACH,IAAI,CAACG,IAAI,IAAI,CAAC;QACzBC,GAAG,EAAE,IAAIP,aAAa,EAAE,CAACQ,IAAI,CAAC,IAAI,CAACL,IAAI,CAACM,GAAG,CAAC;QAC5CC,WAAW,EAAE,IAAI;QACjBC,OAAO,EAAE,IAAI,CAACR,IAAI,CAACQ,OAAO;QAC1BC,SAAS,EAAE;MACb,CAAC,CAAC;MAEF,IAAI,CAACC,QAAQ,GAAG,IAAIhB,cAAc,EAAE;MAEpC,IAAMiB,KAAK,uBAAG,IAAI,CAACX,IAAI,CAACW,KAAK,+DAAI,IAAI;MAErC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAI,IAAI,CAACZ,IAAI,CAACa,KAAK,IAAI,GAAG,CAAC,EAAED,CAAC,EAAE,EAAE;QAAA;QACjD,IAAME,SAAQ,GAAG,IAAIhB,OAAO,CAC1BiB,IAAI,CAACC,MAAM,EAAE,GAAGL,KAAK,GAAGA,KAAK,GAAG,CAAC,EACjCI,IAAI,CAACC,MAAM,EAAE,GAAGL,KAAK,EACrBI,IAAI,CAACC,MAAM,EAAE,GAAGL,KAAK,GAAGA,KAAK,GAAG,CAAC,CACtB;QAEbG,SAAQ,CAACG,MAAM,GAAG,yBAAI,CAACjB,IAAI,CAACkB,KAAK,qDAAf,iBAAiBC,CAAC,KAAI,CAAC;QACzCL,SAAQ,CAACM,MAAM,GAAG,0BAAI,CAACpB,IAAI,CAACkB,KAAK,sDAAf,kBAAiBG,CAAC,KAAI,EAAE;QAC1CP,SAAQ,CAACQ,MAAM,GAAG,0BAAI,CAACtB,IAAI,CAACkB,KAAK,sDAAf,kBAAiBK,CAAC,KAAI,CAAC;QAEzC,IAAI,CAACC,MAAM,CAACC,IAAI,CAACX,SAAQ,CAAC;MAC5B;MACA,IAAI,CAACJ,QAAQ,CAACgB,aAAa,CAAC,IAAI,CAACF,MAAM,CAAC;MAExC,IAAI,CAACG,KAAK,GAAG,IAAIhC,MAAM,CAAC,IAAI,CAACe,QAAQ,EAAE,IAAI,CAACR,QAAQ,CAAC;IACvD;EAAC;IAAA;IAAA,OAED,mBAAiB0B,QAAsC,EAAE;MACvD,IAAI,CAACJ,MAAM,CAACK,OAAO,CAAC,UAACf,QAAQ,EAAK;QAChCc,QAAQ,CAACd,QAAQ,CAAC;MACpB,CAAC,CAAC;MAEF,IAAI,CAACa,KAAK,CAAEjB,QAAQ,CAACgB,aAAa,CAAC,IAAI,CAACF,MAAM,CAAC;IACjD;EAAC;EAAA;AAAA;AAGH,eAAezB,iBAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BackSide","Color","Data3DTexture","GLSL3","LinearFilter","RawShaderMaterial","RedFormat","Vector3","lib","size","data","Uint8Array","i","scale","perlin","ImprovedNoise","vector","z","y","x","d","set","subScalar","divideScalar","length","noise","texture","format","minFilter","magFilter","unpackAlignment","needsUpdate","vertexShader","fragmentShader","cloudMaterial","glslVersion","uniforms","base","value","map","cameraPos","threshold","opacity","range","steps","frame","side","transparent"],"sources":["../../../src/environment/volumetricCloud/cloudMaterial.ts"],"sourcesContent":["import { BackSide, Color, Data3DTexture, GLSL3, LinearFilter, RawShaderMaterial, RedFormat, Vector3, lib } from '@anov/3d-core'\n\nconst size = 128\nconst data = new Uint8Array(size * size * size)\n\nlet i = 0\nconst scale = 0.05\nconst perlin = new lib.ImprovedNoise()\nconst vector = new Vector3()\n\nfor (let z = 0; z < size; z++) {\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const d = 1.0 - vector.set(x, y, z).subScalar(size / 2).divideScalar(size).length()\n data[i] = (128 + 128 * perlin.noise(x * scale / 1.5, y * scale, z * scale / 1.5)) * d * d\n i++\n }\n }\n}\n\nconst texture = new Data3DTexture(data, size, size, size)\ntexture.format = RedFormat\ntexture.minFilter = LinearFilter\ntexture.magFilter = LinearFilter\ntexture.unpackAlignment = 1\ntexture.needsUpdate = true\n\n// Material\nconst vertexShader = /* glsl */`\nin vec3 position;\n\nuniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPos;\nout vec3 vOrigin;\nout vec3 vDirection;\nvoid main() {\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n vOrigin = vec3(inverse(modelMatrix) * vec4(cameraPos, 1.0)).xyz;\n vDirection = position - vOrigin;\n gl_Position = projectionMatrix * mvPosition;\n}\n`\n\nconst fragmentShader = /* glsl */`\n\n\nprecision highp float;\nprecision highp sampler3D;\n\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\n\nin vec3 vOrigin;\nin vec3 vDirection;\n\nout vec4 color;\n\nuniform vec3 base;\nuniform sampler3D map;\n\nuniform float threshold;\nuniform float range;\nuniform float opacity;\nuniform float steps;\nuniform float frame;\n\nuint wang_hash(uint seed) {\n seed = (seed ^ 61u) ^ (seed >> 16u);\n seed *= 9u;\n seed = seed ^ (seed >> 4u);\n seed *= 0x27d4eb2du;\n seed = seed ^ (seed >> 15u);\n return seed;\n}\n\nfloat randomFloat(inout uint seed) {\n return float(wang_hash(seed)) / 4294967296.;\n}\n\nvec2 hitBox(vec3 orig, vec3 dir) {\n const vec3 box_min = vec3(-0.5);\n const vec3 box_max = vec3(0.5);\n vec3 inv_dir = 1.0 / dir;\n vec3 tmin_tmp = (box_min - orig) * inv_dir;\n vec3 tmax_tmp = (box_max - orig) * inv_dir;\n vec3 tmin = min(tmin_tmp, tmax_tmp);\n vec3 tmax = max(tmin_tmp, tmax_tmp);\n float t0 = max(tmin.x, max(tmin.y, tmin.z));\n float t1 = min(tmax.x, min(tmax.y, tmax.z));\n return vec2(t0, t1);\n}\n\nfloat sample1(vec3 p) {\n return texture(map, p).r;\n}\n\nfloat shading(vec3 coord) {\n float step = 0.01;\n return sample1(coord + vec3(-step)) - sample1(coord + vec3(step));\n}\n\nvec4 linearToSRGB(in vec4 value) {\n return vec4(mix(pow(value.rgb, vec3(0.41666)) * 1.055 - vec3(0.055), value.rgb * 12.92, vec3(lessThanEqual(value.rgb, vec3(0.0031308)))), value.a);\n}\n\nvoid main() {\n vec3 rayDir = normalize(vDirection);\n vec2 bounds = hitBox(vOrigin, rayDir);\n\n if(bounds.x > bounds.y)\n discard;\n\n bounds.x = max(bounds.x, 0.0);\n\n vec3 p = vOrigin + bounds.x * rayDir;\n vec3 inc = 1.0 / abs(rayDir);\n float delta = min(inc.x, min(inc.y, inc.z));\n delta /= steps;\n\n// Jitter\n// Nice little seed from\n// https://blog.demofox.org/2020/05/25/casual-shadertoy-path-tracing-1-basic-camera-diffuse-emissive/\n uint seed = uint(gl_FragCoord.x) * uint(1973) + uint(gl_FragCoord.y) * uint(9277) + uint(frame) * uint(26699);\n vec3 size = vec3(textureSize(map, 0));\n float randNum = randomFloat(seed) * 2.0 - 1.0;\n p += rayDir * randNum * (1.0 / size);\n\n vec4 ac = vec4(base, 0.0);\n\n for(float t = bounds.x; t < bounds.y; t += delta) {\n\n float d = sample1(p + 0.5);\n\n d = smoothstep(threshold - range, threshold + range, d) * opacity;\n\n float col = shading(p + 0.5) * 3.0 + ((p.x + p.y) * 0.25) + 0.2;\n\n ac.rgb += (1.0 - ac.a) * d * col;\n\n ac.a += (1.0 - ac.a) * d;\n\n if(ac.a >= 0.95)\n break;\n\n p += rayDir * delta;\n\n }\n\n color = linearToSRGB(ac);\n\n if(color.a == 0.0)\n discard;\n\n}\n\n`\n\nconst cloudMaterial = new RawShaderMaterial({\n glslVersion: GLSL3,\n uniforms: {\n base: { value: new Color(0x798AA0) },\n map: { value: texture },\n cameraPos: { value: new Vector3() },\n threshold: { value: 0.25 },\n opacity: { value: 0.25 },\n range: { value: 0.1 },\n steps: { value: 100 },\n frame: { value: 0 },\n },\n vertexShader,\n fragmentShader,\n side: BackSide,\n transparent: true,\n})\n\nexport default cloudMaterial"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,KAAK,EAAEC,aAAa,EAAEC,KAAK,EAAEC,YAAY,EAAEC,iBAAiB,EAAEC,SAAS,EAAEC,OAAO,EAAEC,GAAG,QAAQ,eAAe;AAE/H,IAAMC,IAAI,GAAG,GAAG;AAChB,IAAMC,IAAI,GAAG,IAAIC,UAAU,CAACF,IAAI,GAAGA,IAAI,GAAGA,IAAI,CAAC;AAE/C,IAAIG,CAAC,GAAG,CAAC;AACT,IAAMC,KAAK,GAAG,IAAI;AAClB,IAAMC,MAAM,GAAG,IAAIN,GAAG,CAACO,aAAa,EAAE;AACtC,IAAMC,MAAM,GAAG,IAAIT,OAAO,EAAE;AAE5B,KAAK,IAAIU,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,IAAI,EAAEQ,CAAC,EAAE,EAAE;EAC7B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGT,IAAI,EAAES,CAAC,EAAE,EAAE;IAC7B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,IAAI,EAAEU,CAAC,EAAE,EAAE;MAC7B,IAAMC,CAAC,GAAG,GAAG,GAAGJ,MAAM,CAACK,GAAG,CAACF,CAAC,EAAED,CAAC,EAAED,CAAC,CAAC,CAACK,SAAS,CAACb,IAAI,GAAG,CAAC,CAAC,CAACc,YAAY,CAACd,IAAI,CAAC,CAACe,MAAM,EAAE;MACnFd,IAAI,CAACE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAGE,MAAM,CAACW,KAAK,CAACN,CAAC,GAAGN,KAAK,GAAG,GAAG,EAAEK,CAAC,GAAGL,KAAK,EAAEI,CAAC,GAAGJ,KAAK,GAAG,GAAG,CAAC,IAAIO,CAAC,GAAGA,CAAC;MACzFR,CAAC,EAAE;IACL;EACF;AACF;AAEA,IAAMc,OAAO,GAAG,IAAIxB,aAAa,CAACQ,IAAI,EAAED,IAAI,EAAEA,IAAI,EAAEA,IAAI,CAAC;AACzDiB,OAAO,CAACC,MAAM,GAAGrB,SAAS;AAC1BoB,OAAO,CAACE,SAAS,GAAGxB,YAAY;AAChCsB,OAAO,CAACG,SAAS,GAAGzB,YAAY;AAChCsB,OAAO,CAACI,eAAe,GAAG,CAAC;AAC3BJ,OAAO,CAACK,WAAW,GAAG,IAAI;;AAE1B;AACA,IAAMC,YAAY,GAAG,6aAepB;AAED,IAAMC,cAAc,GAAG,utFAgHtB;AAED,IAAMC,aAAa,GAAG,IAAI7B,iBAAiB,CAAC;EAC1C8B,WAAW,EAAEhC,KAAK;EAClBiC,QAAQ,EAAE;IACRC,IAAI,EAAE;MAAEC,KAAK,EAAE,IAAIrC,KAAK,CAAC,QAAQ;IAAE,CAAC;IACpCsC,GAAG,EAAE;MAAED,KAAK,EAAEZ;IAAQ,CAAC;IACvBc,SAAS,EAAE;MAAEF,KAAK,EAAE,IAAI/B,OAAO;IAAG,CAAC;IACnCkC,SAAS,EAAE;MAAEH,KAAK,EAAE;IAAK,CAAC;IAC1BI,OAAO,EAAE;MAAEJ,KAAK,EAAE;IAAK,CAAC;IACxBK,KAAK,EAAE;MAAEL,KAAK,EAAE;IAAI,CAAC;IACrBM,KAAK,EAAE;MAAEN,KAAK,EAAE;IAAI,CAAC;IACrBO,KAAK,EAAE;MAAEP,KAAK,EAAE;IAAE;EACpB,CAAC;EACDN,YAAY,EAAZA,YAAY;EACZC,cAAc,EAAdA,cAAc;EACda,IAAI,EAAE9C,QAAQ;EACd+C,WAAW,EAAE;AACf,CAAC,CAAC;AAEF,eAAeb,aAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BoxGeometry","Mesh","use","cloudMaterial","VolumetricCloud","box","cloudGroup","useScene","camera","useframe","createVolumetricCloud","scene","Error","add"],"sources":["../../../src/environment/volumetricCloud/inex.ts"],"sourcesContent":["import { BoxGeometry, BufferGeometryUtils, Mesh, use } from '@anov/3d-core'\nimport cloudMaterial from './cloudMaterial'\n\nexport class VolumetricCloud {\n private geometries: BoxGeometry[] = []\n public cloudGroup: Mesh\n\n constructor() {\n // cloud density\n // for (let i = 0; i < 100; i++) {\n // const cloud = new BoxGeometry(100, 100, 100)\n\n // cloud.translate(Math.random() * 1000 - 500, -Math.random() * Math.random() * 200 - 15, i)\n // // cloud.rotateZ(Math.random() * Math.PI / 2)\n // cloud.scale(Math.random() * Math.random() * 1.1 + 0.5, Math.random() * Math.random() * 1.1 + 0.5, 1)\n // this.geometries.push(cloud)\n // }\n\n const box = new BoxGeometry(100, 100, 100)\n // const mergedGeometry = BufferGeometryUtils.mergeGeometries(this.geometries, false)\n this.cloudGroup = new Mesh(box, cloudMaterial)\n\n const { camera } = use.useScene()\n\n use.useframe(() => {\n // @ts-ignore\n // this.cloudGroup.material.uniforms.cameraPos.value.copy(camera!.position)\n })\n }\n}\n\nconst createVolumetricCloud = () => {\n const { scene } = use.useScene()\n const cloudGroup = new VolumetricCloud().cloudGroup\n\n if (!scene)\n throw new Error('scene is not defined')\n\n scene.add(cloudGroup)\n\n return cloudGroup\n}\n\nexport default createVolumetricCloud"],"mappings":";;;;;;;AAAA,SAASA,WAAW,EAAuBC,IAAI,EAAEC,GAAG,QAAQ,eAAe;AAC3E,OAAOC,aAAa;AAEpB,WAAaC,eAAe,6BAI1B,2BAAc;EAAA;EAAA,oCAHsB,EAAE;EAAA;EAIpC;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;;EAEA,IAAMC,GAAG,GAAG,IAAIL,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EAC1C;EACA,IAAI,CAACM,UAAU,GAAG,IAAIL,IAAI,CAACI,GAAG,EAAEF,aAAa,CAAC;EAE9C,oBAAmBD,GAAG,CAACK,QAAQ,EAAE;IAAzBC,MAAM,iBAANA,MAAM;EAEdN,GAAG,CAACO,QAAQ,CAAC,YAAM;IACjB;IACA;EAAA,CACD,CAAC;AACJ,CAAC;AAGH,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqB,GAAS;EAClC,qBAAkBR,GAAG,CAACK,QAAQ,EAAE;IAAxBI,KAAK,kBAALA,KAAK;EACb,IAAML,UAAU,GAAG,IAAIF,eAAe,EAAE,CAACE,UAAU;EAEnD,IAAI,CAACK,KAAK,EACR,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;EAEzCD,KAAK,CAACE,GAAG,CAACP,UAAU,CAAC;EAErB,OAAOA,UAAU;AACnB,CAAC;AAED,eAAeI,qBAAqB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
3
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
4
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
5
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
+
import { Color, DoubleSide, Mesh, PlaneGeometry, ShaderMaterial, Texture, use } from '@anov/3d-core';
|
|
8
|
+
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
import heatMap from 'anov-heat-map';
|
|
11
|
+
var TemperatureColorStops = {
|
|
12
|
+
1.0: '#f00',
|
|
13
|
+
0.9: '#e2fa00',
|
|
14
|
+
0.6: '#33f900',
|
|
15
|
+
0.3: '#0349df',
|
|
16
|
+
0.0: '#0f00ff'
|
|
17
|
+
};
|
|
18
|
+
var HeatMap = /*#__PURE__*/function () {
|
|
19
|
+
function HeatMap() {
|
|
20
|
+
_classCallCheck(this, HeatMap);
|
|
21
|
+
}
|
|
22
|
+
_createClass(HeatMap, [{
|
|
23
|
+
key: "create",
|
|
24
|
+
value: function create() {
|
|
25
|
+
var mesh = this.addHeatMap();
|
|
26
|
+
var _use$useScene = use.useScene(),
|
|
27
|
+
scene = _use$useScene.scene,
|
|
28
|
+
camera = _use$useScene.camera;
|
|
29
|
+
console.log('camera:', camera === null || camera === void 0 ? void 0 : camera.position);
|
|
30
|
+
|
|
31
|
+
// 添加到场景
|
|
32
|
+
scene === null || scene === void 0 ? void 0 : scene.add(mesh);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 热力图
|
|
36
|
+
}, {
|
|
37
|
+
key: "addHeatMap",
|
|
38
|
+
value: function addHeatMap() {
|
|
39
|
+
var heatmap = heatMap.create({
|
|
40
|
+
container: this.createDom(),
|
|
41
|
+
gradient: TemperatureColorStops
|
|
42
|
+
});
|
|
43
|
+
var len = 150;
|
|
44
|
+
var width = window.innerWidth;
|
|
45
|
+
var height = window.innerHeight;
|
|
46
|
+
var points = [];
|
|
47
|
+
var max = 0;
|
|
48
|
+
while (len--) {
|
|
49
|
+
var val = Math.floor(Math.random() * 30);
|
|
50
|
+
max = Math.max(max, val);
|
|
51
|
+
var point = {
|
|
52
|
+
x: Math.floor(Math.random() * width),
|
|
53
|
+
y: Math.floor(Math.random() * height),
|
|
54
|
+
value: val
|
|
55
|
+
};
|
|
56
|
+
points.push(point);
|
|
57
|
+
}
|
|
58
|
+
heatmap.setData({
|
|
59
|
+
max: max,
|
|
60
|
+
data: points
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// 灰度图
|
|
64
|
+
var greymap = heatMap.create({
|
|
65
|
+
container: this.createDom(),
|
|
66
|
+
gradient: {
|
|
67
|
+
'0': 'black',
|
|
68
|
+
'1.0': 'white'
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
greymap.setData({
|
|
72
|
+
max: max,
|
|
73
|
+
data: points
|
|
74
|
+
});
|
|
75
|
+
var heatMapMaterial = new ShaderMaterial({
|
|
76
|
+
transparent: true,
|
|
77
|
+
vertexShader: "varying vec2 vUv;\n uniform float Zscale;\n uniform sampler2D greyMap;\n void main() {\n vUv = uv;\n vec4 frgColor = texture2D(greyMap, uv);//\u83B7\u53D6\u7070\u5EA6\u56FE\u70B9\u4F4D\u4FE1\u606F\n float height = Zscale * frgColor.a;//\u901A\u8FC7\u7070\u5EA6\u56FE\u7684rgb*\u9700\u8981\u8BBE\u7F6E\u7684\u9AD8\u5EA6\u8BA1\u7B97\u51FA\u70ED\u529B\u56FE\u6BCF\u4E2A\u70B9\u4F4D\u6700\u7EC8\u5728z\u8F74\u9AD8\u5EA6\n vec3 transformed = vec3( position.x, position.y, height);//\u91CD\u65B0\u7EC4\u88C5\u70B9\u5750\u6807\n gl_Position = projectionMatrix * modelViewMatrix * vec4(transformed, 1.0);//\u6E32\u67D3\u70B9\u4F4D\n \n }\n ",
|
|
78
|
+
fragmentShader: "varying vec2 vUv;\n uniform sampler2D heatMap;//\u70ED\u529B\u56FE\n uniform vec3 u_color;//\u57FA\u7840\u989C\u8272\n uniform float u_opacity; // \u900F\u660E\u5EA6\n void main() {\n //vec4 alphaColor = texture2D(heatMap, vUv);\n // gl_FragColor = alphaColor;\n gl_FragColor = vec4(u_color, u_opacity) * texture2D(heatMap, vUv);//\u628A\u70ED\u529B\u56FE\u989C\u8272\u548C\u900F\u660E\u5EA6\u8FDB\u884C\u6E32\u67D3\n }",
|
|
79
|
+
uniforms: {
|
|
80
|
+
heatMap: {
|
|
81
|
+
value: {
|
|
82
|
+
value: undefined
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
greyMap: {
|
|
86
|
+
value: {
|
|
87
|
+
value: undefined
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
Zscale: {
|
|
91
|
+
value: 1.2
|
|
92
|
+
},
|
|
93
|
+
// 高度参数
|
|
94
|
+
u_color: {
|
|
95
|
+
value: new Color('rgb(255, 255, 255)')
|
|
96
|
+
},
|
|
97
|
+
u_opacity: {
|
|
98
|
+
value: 1.0
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
heatMapMaterial.side = DoubleSide; // 双面渲染
|
|
103
|
+
|
|
104
|
+
var texture = new Texture(heatmap._renderer.canvas);
|
|
105
|
+
texture.needsUpdate = true;
|
|
106
|
+
var greyTexture = new Texture(greymap._renderer.canvas);
|
|
107
|
+
greyTexture.needsUpdate = true;
|
|
108
|
+
heatMapMaterial.uniforms.heatMap.value = texture;
|
|
109
|
+
heatMapMaterial.uniforms.greyMap.value = greyTexture;
|
|
110
|
+
var heatMapGeometry = new PlaneGeometry(15, 15, 100, 100); // 3d热力图大小,及分块数量
|
|
111
|
+
var heatMapPlane = new Mesh(heatMapGeometry, heatMapMaterial);
|
|
112
|
+
heatMapPlane.rotation.set(-Math.PI / 2, 0, 0);
|
|
113
|
+
heatMapPlane.position.set(0, 0, 0); // 3d热力图中心点位置
|
|
114
|
+
|
|
115
|
+
return heatMapPlane;
|
|
116
|
+
}
|
|
117
|
+
}, {
|
|
118
|
+
key: "createDom",
|
|
119
|
+
value: function createDom() {
|
|
120
|
+
// 创建一个新的 canvas 元素
|
|
121
|
+
var canvas = document.createElement('canvas');
|
|
122
|
+
// 设置 canvas 元素的宽度和高度
|
|
123
|
+
canvas.width = window.innerWidth;
|
|
124
|
+
canvas.height = window.innerHeight;
|
|
125
|
+
document.body.appendChild(canvas);
|
|
126
|
+
return canvas;
|
|
127
|
+
}
|
|
128
|
+
}, {
|
|
129
|
+
key: "delete",
|
|
130
|
+
value: function _delete() {}
|
|
131
|
+
}, {
|
|
132
|
+
key: "update",
|
|
133
|
+
value: function update() {}
|
|
134
|
+
}]);
|
|
135
|
+
return HeatMap;
|
|
136
|
+
}();
|
|
137
|
+
export default HeatMap;
|
|
138
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Color","DoubleSide","Mesh","PlaneGeometry","ShaderMaterial","Texture","use","heatMap","TemperatureColorStops","HeatMap","mesh","addHeatMap","useScene","scene","camera","console","log","position","add","heatmap","create","container","createDom","gradient","len","width","window","innerWidth","height","innerHeight","points","max","val","Math","floor","random","point","x","y","value","push","setData","data","greymap","heatMapMaterial","transparent","vertexShader","fragmentShader","uniforms","undefined","greyMap","Zscale","u_color","u_opacity","side","texture","_renderer","canvas","needsUpdate","greyTexture","heatMapGeometry","heatMapPlane","rotation","set","PI","document","createElement","body","appendChild"],"sources":["../../src/heatmap/index.ts"],"sourcesContent":["import {\n Color,\n DoubleSide,\n Mesh,\n PlaneGeometry,\n ShaderMaterial,\n Texture,\n use,\n} from '@anov/3d-core'\n\n// @ts-ignore\nimport heatMap from 'anov-heat-map'\n\nconst TemperatureColorStops = {\n 1.0: '#f00',\n 0.9: '#e2fa00',\n 0.6: '#33f900',\n 0.3: '#0349df',\n 0.0: '#0f00ff',\n}\n\nclass HeatMap {\n constructor() {\n\n }\n\n public create() {\n const mesh = this.addHeatMap()\n const { scene, camera } = use.useScene()\n console.log('camera:', camera?.position)\n\n // 添加到场景\n scene?.add(mesh)\n }\n\n // 热力图\n private addHeatMap() {\n const heatmap = heatMap.create({\n container: this.createDom(),\n gradient: TemperatureColorStops,\n })\n let len = 150\n const width = window.innerWidth\n const height = window.innerHeight\n const points = []\n let max = 0\n while (len--) {\n const val = Math.floor(Math.random() * 30)\n max = Math.max(max, val)\n const point = {\n x: Math.floor(Math.random() * width),\n y: Math.floor(Math.random() * height),\n value: val,\n }\n points.push(point)\n }\n\n heatmap.setData({\n max,\n data: points,\n })\n\n // 灰度图\n const greymap = heatMap.create({\n container: this.createDom(),\n gradient: {\n '0': 'black',\n '1.0': 'white',\n },\n })\n\n greymap.setData({\n max,\n data: points,\n })\n const heatMapMaterial = new ShaderMaterial({\n transparent: true,\n vertexShader: `varying vec2 vUv;\n uniform float Zscale;\n uniform sampler2D greyMap;\n void main() {\n vUv = uv;\n vec4 frgColor = texture2D(greyMap, uv);//获取灰度图点位信息\n float height = Zscale * frgColor.a;//通过灰度图的rgb*需要设置的高度计算出热力图每个点位最终在z轴高度\n vec3 transformed = vec3( position.x, position.y, height);//重新组装点坐标\n gl_Position = projectionMatrix * modelViewMatrix * vec4(transformed, 1.0);//渲染点位\n \n }\n `,\n fragmentShader: `varying vec2 vUv;\n uniform sampler2D heatMap;//热力图\n uniform vec3 u_color;//基础颜色\n uniform float u_opacity; // 透明度\n void main() {\n //vec4 alphaColor = texture2D(heatMap, vUv);\n // gl_FragColor = alphaColor;\n gl_FragColor = vec4(u_color, u_opacity) * texture2D(heatMap, vUv);//把热力图颜色和透明度进行渲染\n }`,\n uniforms: {\n heatMap: {\n value: { value: undefined },\n },\n greyMap: {\n value: { value: undefined },\n },\n Zscale: { value: 1.2 }, // 高度参数\n u_color: {\n value: new Color('rgb(255, 255, 255)'),\n },\n u_opacity: {\n value: 1.0,\n },\n },\n })\n heatMapMaterial.side = DoubleSide // 双面渲染\n\n const texture = new Texture(heatmap._renderer.canvas)\n texture.needsUpdate = true\n const greyTexture = new Texture(greymap._renderer.canvas)\n greyTexture.needsUpdate = true\n\n heatMapMaterial.uniforms.heatMap.value = texture\n heatMapMaterial.uniforms.greyMap.value = greyTexture\n\n const heatMapGeometry = new PlaneGeometry(15, 15, 100, 100) // 3d热力图大小,及分块数量\n const heatMapPlane = new Mesh(heatMapGeometry, heatMapMaterial)\n heatMapPlane.rotation.set(-Math.PI / 2, 0, 0)\n heatMapPlane.position.set(0, 0, 0) // 3d热力图中心点位置\n\n return heatMapPlane\n }\n\n private createDom() {\n // 创建一个新的 canvas 元素\n const canvas = document.createElement('canvas')\n // 设置 canvas 元素的宽度和高度\n canvas.width = window.innerWidth\n canvas.height = window.innerHeight\n document.body.appendChild(canvas)\n\n return canvas\n }\n\n public delete() {}\n\n public update() {\n\n }\n}\n\nexport default HeatMap\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BackSide","Clock","Euler","Mesh","MeshBasicMaterial","Object3D","OrthographicCamera","Quaternion","Raycaster","SphereGeometry","Vector2","Vector3","Vector4","getAxesLines","getAxesSpritePoints","getDomContainer","Array","fill","map","_","i","POS_X","POS_Y","POS_Z","NEG_X","NEG_Y","NEG_Z","clock","targetPosition","targetQuaternion","euler","q1","q2","point","dim","turnRate","Math","PI","raycaster","mouse","mouseStart","mouseAngle","dummy","radius","ViewHelper","camera","renderer","placement","size","domElement","orthoCamera","position","set","backgroundSphere","getBackgroundSphere","axesLines","spritePoints","domContainer","parentElement","appendChild","domRect","getBoundingClientRect","startListening","controlsChangeEvent","listener","updateOrientation","update","add","onpointerdown","e","onPointerDown","onpointermove","onPointerMove","onpointerleave","onPointerLeave","drag","dragging","isClick","resetSprites","clientX","clientY","sub","multiplyScalar","width","rotation","x","clamp","rotationStart","y","updateMatrixWorld","copy","quaternion","invert","applyQuaternion","target","setFromQuaternion","endDrag","document","removeEventListener","handleClick","animating","preventDefault","setRadius","addEventListener","material","opacity","handleHover","style","cursor","object","getIntersectionObject","setOrientation","userData","type","offset","scale","controls","delta","getDelta","animate","height","autoClear","setViewport","render","viewport","fromCamera","updateSpritesOpacity","offsetHeight","getViewport","step","rotateTowards","angleTo","orientation","prepareAnimationData","geometry","dispose","forEach","sprite","remove","sphere","color","side","transparent","depthTest","focusPoint","axis","setFromEuler","console","error","prepareQuaternions","distanceTo","lookAt","updatePointer","left","top","setFromCamera","startCoords","threshold","abs","event","intersectionObjects","intersects","intersectObjects","length","intersection","sprites","z","num","min","max"],"sources":["../../../src/helper/view/index.ts"],"sourcesContent":["import type {\n Camera,\n LineSegments,\n Material,\n OrbitControls,\n PerspectiveCamera,\n Sprite,\n WebGLRenderer,\n lib,\n} from '@anov/3d-core'\n\nimport {\n BackSide,\n Clock,\n Euler,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n OrthographicCamera,\n Quaternion,\n Raycaster,\n SphereGeometry,\n Vector2,\n Vector3,\n Vector4,\n use,\n} from '@anov/3d-core'\nimport { getAxesLines, getAxesSpritePoints, getDomContainer } from './utils'\n\nconst [POS_X, POS_Y, POS_Z, NEG_X, NEG_Y, NEG_Z] = Array(6)\n .fill(0)\n .map((_, i) => i)\n\nconst clock = new Clock()\nconst targetPosition = new Vector3()\nconst targetQuaternion = new Quaternion()\nconst euler = new Euler()\nconst q1 = new Quaternion()\nconst q2 = new Quaternion()\nconst point = new Vector3()\nconst dim = 128\nconst turnRate = 2 * Math.PI\nconst raycaster = new Raycaster()\nconst mouse = new Vector2()\nconst mouseStart = new Vector2()\nconst mouseAngle = new Vector2()\nconst dummy = new Object3D()\nlet radius = 0\n\ntype GizmoOrientation = '+x' | '-x' | '+y' | '-y' | '+z' | '-z'\n\nexport type DomPlacement =\n | 'top-left'\n | 'top-right'\n | 'top-center'\n | 'center-right'\n | 'center-left'\n | 'center-center'\n | 'bottom-left'\n | 'bottom-right'\n | 'bottom-center'\n\nclass ViewHelper extends Object3D {\n camera: OrthographicCamera | PerspectiveCamera\n orthoCamera = new OrthographicCamera(-1.8, 1.8, 1.8, -1.8, 0, 4)\n isViewHelper = true\n animating = false\n target = new Vector3()\n backgroundSphere: Mesh\n axesLines: LineSegments\n spritePoints: Sprite[]\n domElement: HTMLElement\n domContainer: HTMLElement\n domRect: DOMRect\n dragging = false\n renderer: WebGLRenderer\n controls?: OrbitControls | lib.TrackballControls\n controlsChangeEvent: { listener: () => void }\n viewport: Vector4 = new Vector4()\n offsetHeight = 0\n\n constructor(\n camera: PerspectiveCamera | OrthographicCamera,\n renderer: WebGLRenderer,\n placement: DomPlacement = 'bottom-right',\n size = 128,\n ) {\n super()\n\n this.renderer = renderer\n this.camera = camera\n this.domElement = renderer.domElement\n this.orthoCamera.position.set(0, 0, 2)\n\n this.backgroundSphere = getBackgroundSphere()\n this.axesLines = getAxesLines()\n this.spritePoints = getAxesSpritePoints()\n this.domContainer = getDomContainer(placement, size)\n\n // This may cause confusion if the parent isn't the body and doesn't have a `position:relative`\n this.domElement.parentElement!.appendChild(this.domContainer)\n this.domRect = this.domContainer.getBoundingClientRect()\n this.startListening()\n\n this.controlsChangeEvent = { listener: () => this.updateOrientation() }\n this.update()\n this.updateOrientation()\n\n this.add(this.backgroundSphere, this.axesLines, ...this.spritePoints)\n }\n\n startListening() {\n this.domContainer.onpointerdown = e => this.onPointerDown(e)\n this.domContainer.onpointermove = e => this.onPointerMove(e)\n this.domContainer.onpointerleave = () => this.onPointerLeave()\n }\n\n onPointerDown(e: PointerEvent) {\n const drag = (e: PointerEvent) => {\n if (!this.dragging && isClick(e, mouseStart))\n return\n if (!this.dragging) {\n resetSprites(this.spritePoints)\n this.dragging = true\n }\n\n mouseAngle\n .set(e.clientX, e.clientY)\n .sub(mouseStart)\n .multiplyScalar((1 / this.domRect.width) * Math.PI)\n\n this.rotation.x = clamp(\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n rotationStart.x + mouseAngle.y,\n Math.PI / -2 + 0.001,\n Math.PI / 2 - 0.001,\n )\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n this.rotation.y = rotationStart.y + mouseAngle.x\n this.updateMatrixWorld()\n\n q1.copy(this.quaternion).invert()\n\n this.camera.position\n .set(0, 0, 1)\n .applyQuaternion(q1)\n .multiplyScalar(radius)\n .add(this.target)\n\n this.camera.rotation.setFromQuaternion(q1)\n\n this.updateOrientation(false)\n }\n const endDrag = () => {\n document.removeEventListener('pointermove', drag, false)\n document.removeEventListener('pointerup', endDrag, false)\n\n if (!this.dragging) {\n this.handleClick(e)\n return\n }\n\n this.dragging = false\n }\n\n if (this.animating === true)\n return\n e.preventDefault()\n\n mouseStart.set(e.clientX, e.clientY)\n\n const rotationStart = euler.copy(this.rotation)\n\n setRadius(this.camera, this.target)\n\n document.addEventListener('pointermove', drag, false)\n document.addEventListener('pointerup', endDrag, false)\n }\n\n onPointerMove(e: PointerEvent) {\n if (this.dragging)\n return;\n (this.backgroundSphere.material as Material).opacity = 0.2\n this.handleHover(e)\n }\n\n onPointerLeave() {\n if (this.dragging)\n return;\n (this.backgroundSphere.material as Material).opacity = 0\n resetSprites(this.spritePoints)\n this.domContainer.style.cursor = ''\n }\n\n handleClick(e: PointerEvent) {\n const object = getIntersectionObject(\n e,\n this.domRect,\n this.orthoCamera,\n this.spritePoints,\n )\n\n if (!object)\n return\n\n this.setOrientation(object.userData.type)\n }\n\n handleHover(e: PointerEvent) {\n const object = getIntersectionObject(\n e,\n this.domRect,\n this.orthoCamera,\n this.spritePoints,\n )\n\n resetSprites(this.spritePoints)\n\n if (!object) {\n this.domContainer.style.cursor = ''\n }\n else {\n object.material.map!.offset.x = 0.5\n object.scale.multiplyScalar(1.2)\n this.domContainer.style.cursor = 'pointer'\n }\n }\n\n setControls(controls?: OrbitControls | lib.TrackballControls) {\n if (this.controls) {\n this.controls.removeEventListener(\n 'change',\n this.controlsChangeEvent.listener,\n )\n this.target = new Vector3()\n }\n\n if (!controls)\n return\n\n this.controls = controls\n controls.addEventListener('change', this.controlsChangeEvent.listener)\n this.target = controls.target\n }\n\n render() {\n const delta = clock.getDelta()\n if (this.animating)\n this.animate(delta)\n\n const { width, height } = this.domElement.getBoundingClientRect()\n const autoClear = this.renderer.autoClear\n\n this.renderer.autoClear = false\n this.renderer.setViewport(width - dim, height - dim, dim, dim)\n this.renderer.render(this, this.orthoCamera)\n this.renderer.setViewport(this.viewport)\n this.renderer.autoClear = autoClear\n }\n\n updateOrientation(fromCamera = true) {\n if (fromCamera) {\n this.quaternion.copy(this.camera.quaternion).invert()\n this.updateMatrixWorld()\n }\n\n updateSpritesOpacity(this.spritePoints, this.camera)\n }\n\n update() {\n this.domRect = this.domContainer.getBoundingClientRect()\n this.offsetHeight = this.domElement.offsetHeight\n setRadius(this.camera, this.target)\n this.renderer.getViewport(this.viewport)\n\n this.updateOrientation()\n }\n\n animate(delta: number) {\n const step = delta * turnRate\n\n // animate position by doing a slerp and then scaling the position on the unit sphere\n\n q1.rotateTowards(q2, step)\n this.camera.position\n .set(0, 0, 1)\n .applyQuaternion(q1)\n .multiplyScalar(radius)\n .add(this.target)\n\n // animate orientation\n\n this.camera.quaternion.rotateTowards(targetQuaternion, step)\n\n this.updateOrientation()\n\n if (q1.angleTo(q2) === 0)\n this.animating = false\n }\n\n setOrientation(orientation: GizmoOrientation) {\n prepareAnimationData(this.camera, this.target, orientation)\n this.animating = true\n }\n\n dispose() {\n this.axesLines.geometry.dispose();\n (this.axesLines.material as Material).dispose()\n\n this.backgroundSphere.geometry.dispose();\n (this.backgroundSphere.material as Material).dispose()\n\n this.spritePoints.forEach((sprite) => {\n sprite.material.map!.dispose()\n sprite.material.dispose()\n })\n\n this.domContainer.remove()\n\n if (this.controls) {\n this.controls.removeEventListener(\n 'change',\n this.controlsChangeEvent.listener,\n )\n }\n }\n}\n\nfunction getBackgroundSphere() {\n const geometry = new SphereGeometry(1.6)\n const sphere = new Mesh(\n geometry,\n new MeshBasicMaterial({\n color: 0xFFFFFF,\n side: BackSide,\n transparent: true,\n opacity: 0,\n depthTest: false,\n }),\n )\n\n return sphere\n}\n\nfunction prepareAnimationData(\n camera: OrthographicCamera | PerspectiveCamera,\n focusPoint: Vector3,\n axis: GizmoOrientation,\n) {\n switch (axis) {\n case '+x':\n targetPosition.set(1, 0, 0)\n targetQuaternion.setFromEuler(new Euler(0, Math.PI * 0.5, 0))\n break\n\n case '+y':\n targetPosition.set(0, 1, 0)\n targetQuaternion.setFromEuler(new Euler(-Math.PI * 0.5, 0, 0))\n break\n\n case '+z':\n targetPosition.set(0, 0, 1)\n targetQuaternion.setFromEuler(new Euler())\n break\n\n case '-x':\n targetPosition.set(-1, 0, 0)\n targetQuaternion.setFromEuler(new Euler(0, -Math.PI * 0.5, 0))\n break\n\n case '-y':\n targetPosition.set(0, -1, 0)\n targetQuaternion.setFromEuler(new Euler(Math.PI * 0.5, 0, 0))\n break\n\n case '-z':\n targetPosition.set(0, 0, -1)\n targetQuaternion.setFromEuler(new Euler(0, Math.PI, 0))\n break\n\n default:\n console.error('ViewHelper: Invalid axis.')\n }\n\n setRadius(camera, focusPoint)\n prepareQuaternions(camera, focusPoint)\n}\n\nfunction setRadius(camera: Camera, focusPoint: Vector3) {\n radius = camera.position.distanceTo(focusPoint)\n}\n\nfunction prepareQuaternions(camera: Camera, focusPoint: Vector3) {\n targetPosition.multiplyScalar(radius).add(focusPoint)\n\n dummy.position.copy(focusPoint)\n\n dummy.lookAt(camera.position)\n q1.copy(dummy.quaternion)\n\n dummy.lookAt(targetPosition)\n q2.copy(dummy.quaternion)\n}\n\nfunction updatePointer(\n e: PointerEvent,\n domRect: DOMRect,\n orthoCamera: OrthographicCamera,\n) {\n mouse.x = ((e.clientX - domRect.left) / domRect.width) * 2 - 1\n mouse.y = -((e.clientY - domRect.top) / domRect.height) * 2 + 1\n\n raycaster.setFromCamera(mouse, orthoCamera)\n}\n\nfunction isClick(\n e: PointerEvent,\n startCoords: Vector2,\n threshold = 10,\n) {\n return (\n Math.abs(e.clientX - startCoords.x) < threshold\n && Math.abs(e.clientY - startCoords.y) < threshold\n )\n}\n\nfunction getIntersectionObject(\n event: PointerEvent,\n domRect: DOMRect,\n orthoCamera: OrthographicCamera,\n intersectionObjects: Sprite[],\n) {\n updatePointer(event, domRect, orthoCamera)\n\n const intersects = raycaster.intersectObjects(intersectionObjects)\n\n if (!intersects.length)\n return null\n\n const intersection = intersects[0]\n return intersection.object as Sprite\n}\n\nfunction resetSprites(sprites: Sprite[]) {\n let i = sprites.length\n\n while (i--) {\n const scale = i < 3 ? 0.6 : 0.4\n sprites[i].scale.set(scale, scale, scale)\n sprites[i].material.map!.offset.x = 1\n }\n // sprites.forEach((sprite) => (sprite.material.map!.offset.x = 1));\n}\n\nfunction updateSpritesOpacity(sprites: Sprite[], camera: Camera) {\n point.set(0, 0, 1)\n point.applyQuaternion(camera.quaternion)\n\n if (point.x >= 0) {\n sprites[POS_X].material.opacity = 1\n sprites[NEG_X].material.opacity = 0.5\n }\n else {\n sprites[POS_X].material.opacity = 0.5\n sprites[NEG_X].material.opacity = 1\n }\n\n if (point.y >= 0) {\n sprites[POS_Y].material.opacity = 1\n sprites[NEG_Y].material.opacity = 0.5\n }\n else {\n sprites[POS_Y].material.opacity = 0.5\n sprites[NEG_Y].material.opacity = 1\n }\n\n if (point.z >= 0) {\n sprites[POS_Z].material.opacity = 1\n sprites[NEG_Z].material.opacity = 0.5\n }\n else {\n sprites[POS_Z].material.opacity = 0.5\n sprites[NEG_Z].material.opacity = 1\n }\n}\n\nfunction clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max)\n}\n\nexport default ViewHelper\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWA,SACEA,QAAQ,EACRC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,iBAAiB,EACjBC,QAAQ,EACRC,kBAAkB,EAClBC,UAAU,EACVC,SAAS,EACTC,cAAc,EACdC,OAAO,EACPC,OAAO,EACPC,OAAO,QAEF,eAAe;AACtB,SAASC,YAAY,EAAEC,mBAAmB,EAAEC,eAAe;AAE3D,sBAAmDC,KAAK,CAAC,CAAC,CAAC,CACxDC,IAAI,CAAC,CAAC,CAAC,CACPC,GAAG,CAAC,UAACC,CAAC,EAAEC,CAAC;IAAA,OAAKA,CAAC;EAAA,EAAC;EAAA;EAFZC,KAAK;EAAEC,KAAK;EAAEC,KAAK;EAAEC,KAAK;EAAEC,KAAK;EAAEC,KAAK;AAI/C,IAAMC,KAAK,GAAG,IAAI1B,KAAK,EAAE;AACzB,IAAM2B,cAAc,GAAG,IAAIjB,OAAO,EAAE;AACpC,IAAMkB,gBAAgB,GAAG,IAAItB,UAAU,EAAE;AACzC,IAAMuB,KAAK,GAAG,IAAI5B,KAAK,EAAE;AACzB,IAAM6B,EAAE,GAAG,IAAIxB,UAAU,EAAE;AAC3B,IAAMyB,EAAE,GAAG,IAAIzB,UAAU,EAAE;AAC3B,IAAM0B,KAAK,GAAG,IAAItB,OAAO,EAAE;AAC3B,IAAMuB,GAAG,GAAG,GAAG;AACf,IAAMC,QAAQ,GAAG,CAAC,GAAGC,IAAI,CAACC,EAAE;AAC5B,IAAMC,SAAS,GAAG,IAAI9B,SAAS,EAAE;AACjC,IAAM+B,KAAK,GAAG,IAAI7B,OAAO,EAAE;AAC3B,IAAM8B,UAAU,GAAG,IAAI9B,OAAO,EAAE;AAChC,IAAM+B,UAAU,GAAG,IAAI/B,OAAO,EAAE;AAChC,IAAMgC,KAAK,GAAG,IAAIrC,QAAQ,EAAE;AAC5B,IAAIsC,MAAM,GAAG,CAAC;AAAA,IAeRC,UAAU;EAAA;EAAA;EAmBd,oBACEC,MAA8C,EAC9CC,QAAuB,EAGvB;IAAA;IAAA;IAAA,IAFIC,SAAuB,uEAAG,cAAc;IAAA,IACxCC,IAAI,uEAAG,GAAG;IAAA;IAEd;IAAO;IAAA,8DAvBK,IAAI1C,kBAAkB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAAA,+DACjD,IAAI;IAAA,4DACP,KAAK;IAAA,yDACR,IAAIK,OAAO,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,2DAOX,KAAK;IAAA;IAAA;IAAA;IAAA,2DAII,IAAIC,OAAO,EAAE;IAAA,+DAClB,CAAC;IAUd,MAAKkC,QAAQ,GAAGA,QAAQ;IACxB,MAAKD,MAAM,GAAGA,MAAM;IACpB,MAAKI,UAAU,GAAGH,QAAQ,CAACG,UAAU;IACrC,MAAKC,WAAW,CAACC,QAAQ,CAACC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAKC,gBAAgB,GAAGC,mBAAmB,EAAE;IAC7C,MAAKC,SAAS,GAAG1C,YAAY,EAAE;IAC/B,MAAK2C,YAAY,GAAG1C,mBAAmB,EAAE;IACzC,MAAK2C,YAAY,GAAG1C,eAAe,CAACgC,SAAS,EAAEC,IAAI,CAAC;;IAEpD;IACA,MAAKC,UAAU,CAACS,aAAa,CAAEC,WAAW,CAAC,MAAKF,YAAY,CAAC;IAC7D,MAAKG,OAAO,GAAG,MAAKH,YAAY,CAACI,qBAAqB,EAAE;IACxD,MAAKC,cAAc,EAAE;IAErB,MAAKC,mBAAmB,GAAG;MAAEC,QAAQ,EAAE;QAAA,OAAM,MAAKC,iBAAiB,EAAE;MAAA;IAAC,CAAC;IACvE,MAAKC,MAAM,EAAE;IACb,MAAKD,iBAAiB,EAAE;IAExB,iBAAKE,GAAG,gBAAC,MAAKd,gBAAgB,EAAE,MAAKE,SAAS,4BAAK,MAAKC,YAAY,GAAC;IAAA;EACvE;EAAC;IAAA;IAAA,OAED,0BAAiB;MAAA;MACf,IAAI,CAACC,YAAY,CAACW,aAAa,GAAG,UAAAC,CAAC;QAAA,OAAI,MAAI,CAACC,aAAa,CAACD,CAAC,CAAC;MAAA;MAC5D,IAAI,CAACZ,YAAY,CAACc,aAAa,GAAG,UAAAF,CAAC;QAAA,OAAI,MAAI,CAACG,aAAa,CAACH,CAAC,CAAC;MAAA;MAC5D,IAAI,CAACZ,YAAY,CAACgB,cAAc,GAAG;QAAA,OAAM,MAAI,CAACC,cAAc,EAAE;MAAA;IAChE;EAAC;IAAA;IAAA,OAED,uBAAcL,CAAe,EAAE;MAAA;MAC7B,IAAMM,IAAI,GAAG,SAAPA,IAAI,CAAIN,CAAe,EAAK;QAChC,IAAI,CAAC,MAAI,CAACO,QAAQ,IAAIC,OAAO,CAACR,CAAC,EAAE7B,UAAU,CAAC,EAC1C;QACF,IAAI,CAAC,MAAI,CAACoC,QAAQ,EAAE;UAClBE,YAAY,CAAC,MAAI,CAACtB,YAAY,CAAC;UAC/B,MAAI,CAACoB,QAAQ,GAAG,IAAI;QACtB;QAEAnC,UAAU,CACPW,GAAG,CAACiB,CAAC,CAACU,OAAO,EAAEV,CAAC,CAACW,OAAO,CAAC,CACzBC,GAAG,CAACzC,UAAU,CAAC,CACf0C,cAAc,CAAE,CAAC,GAAG,MAAI,CAACtB,OAAO,CAACuB,KAAK,GAAI/C,IAAI,CAACC,EAAE,CAAC;QAErD,MAAI,CAAC+C,QAAQ,CAACC,CAAC,GAAGC,KAAK;QACrB;QACAC,aAAa,CAACF,CAAC,GAAG5C,UAAU,CAAC+C,CAAC,EAC9BpD,IAAI,CAACC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,EACpBD,IAAI,CAACC,EAAE,GAAG,CAAC,GAAG,KAAK,CACpB;QACD;QACA,MAAI,CAAC+C,QAAQ,CAACI,CAAC,GAAGD,aAAa,CAACC,CAAC,GAAG/C,UAAU,CAAC4C,CAAC;QAChD,MAAI,CAACI,iBAAiB,EAAE;QAExB1D,EAAE,CAAC2D,IAAI,CAAC,MAAI,CAACC,UAAU,CAAC,CAACC,MAAM,EAAE;QAEjC,MAAI,CAAC/C,MAAM,CAACM,QAAQ,CACjBC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACZyC,eAAe,CAAC9D,EAAE,CAAC,CACnBmD,cAAc,CAACvC,MAAM,CAAC,CACtBwB,GAAG,CAAC,MAAI,CAAC2B,MAAM,CAAC;QAEnB,MAAI,CAACjD,MAAM,CAACuC,QAAQ,CAACW,iBAAiB,CAAChE,EAAE,CAAC;QAE1C,MAAI,CAACkC,iBAAiB,CAAC,KAAK,CAAC;MAC/B,CAAC;MACD,IAAM+B,OAAO,GAAG,SAAVA,OAAO,GAAS;QACpBC,QAAQ,CAACC,mBAAmB,CAAC,aAAa,EAAEvB,IAAI,EAAE,KAAK,CAAC;QACxDsB,QAAQ,CAACC,mBAAmB,CAAC,WAAW,EAAEF,OAAO,EAAE,KAAK,CAAC;QAEzD,IAAI,CAAC,MAAI,CAACpB,QAAQ,EAAE;UAClB,MAAI,CAACuB,WAAW,CAAC9B,CAAC,CAAC;UACnB;QACF;QAEA,MAAI,CAACO,QAAQ,GAAG,KAAK;MACvB,CAAC;MAED,IAAI,IAAI,CAACwB,SAAS,KAAK,IAAI,EACzB;MACF/B,CAAC,CAACgC,cAAc,EAAE;MAElB7D,UAAU,CAACY,GAAG,CAACiB,CAAC,CAACU,OAAO,EAAEV,CAAC,CAACW,OAAO,CAAC;MAEpC,IAAMO,aAAa,GAAGzD,KAAK,CAAC4D,IAAI,CAAC,IAAI,CAACN,QAAQ,CAAC;MAE/CkB,SAAS,CAAC,IAAI,CAACzD,MAAM,EAAE,IAAI,CAACiD,MAAM,CAAC;MAEnCG,QAAQ,CAACM,gBAAgB,CAAC,aAAa,EAAE5B,IAAI,EAAE,KAAK,CAAC;MACrDsB,QAAQ,CAACM,gBAAgB,CAAC,WAAW,EAAEP,OAAO,EAAE,KAAK,CAAC;IACxD;EAAC;IAAA;IAAA,OAED,uBAAc3B,CAAe,EAAE;MAC7B,IAAI,IAAI,CAACO,QAAQ,EACf;MACD,IAAI,CAACvB,gBAAgB,CAACmD,QAAQ,CAAcC,OAAO,GAAG,GAAG;MAC1D,IAAI,CAACC,WAAW,CAACrC,CAAC,CAAC;IACrB;EAAC;IAAA;IAAA,OAED,0BAAiB;MACf,IAAI,IAAI,CAACO,QAAQ,EACf;MACD,IAAI,CAACvB,gBAAgB,CAACmD,QAAQ,CAAcC,OAAO,GAAG,CAAC;MACxD3B,YAAY,CAAC,IAAI,CAACtB,YAAY,CAAC;MAC/B,IAAI,CAACC,YAAY,CAACkD,KAAK,CAACC,MAAM,GAAG,EAAE;IACrC;EAAC;IAAA;IAAA,OAED,qBAAYvC,CAAe,EAAE;MAC3B,IAAMwC,MAAM,GAAGC,qBAAqB,CAClCzC,CAAC,EACD,IAAI,CAACT,OAAO,EACZ,IAAI,CAACV,WAAW,EAChB,IAAI,CAACM,YAAY,CAClB;MAED,IAAI,CAACqD,MAAM,EACT;MAEF,IAAI,CAACE,cAAc,CAACF,MAAM,CAACG,QAAQ,CAACC,IAAI,CAAC;IAC3C;EAAC;IAAA;IAAA,OAED,qBAAY5C,CAAe,EAAE;MAC3B,IAAMwC,MAAM,GAAGC,qBAAqB,CAClCzC,CAAC,EACD,IAAI,CAACT,OAAO,EACZ,IAAI,CAACV,WAAW,EAChB,IAAI,CAACM,YAAY,CAClB;MAEDsB,YAAY,CAAC,IAAI,CAACtB,YAAY,CAAC;MAE/B,IAAI,CAACqD,MAAM,EAAE;QACX,IAAI,CAACpD,YAAY,CAACkD,KAAK,CAACC,MAAM,GAAG,EAAE;MACrC,CAAC,MACI;QACHC,MAAM,CAACL,QAAQ,CAACtF,GAAG,CAAEgG,MAAM,CAAC7B,CAAC,GAAG,GAAG;QACnCwB,MAAM,CAACM,KAAK,CAACjC,cAAc,CAAC,GAAG,CAAC;QAChC,IAAI,CAACzB,YAAY,CAACkD,KAAK,CAACC,MAAM,GAAG,SAAS;MAC5C;IACF;EAAC;IAAA;IAAA,OAED,qBAAYQ,QAAgD,EAAE;MAC5D,IAAI,IAAI,CAACA,QAAQ,EAAE;QACjB,IAAI,CAACA,QAAQ,CAAClB,mBAAmB,CAC/B,QAAQ,EACR,IAAI,CAACnC,mBAAmB,CAACC,QAAQ,CAClC;QACD,IAAI,CAAC8B,MAAM,GAAG,IAAInF,OAAO,EAAE;MAC7B;MAEA,IAAI,CAACyG,QAAQ,EACX;MAEF,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MACxBA,QAAQ,CAACb,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACxC,mBAAmB,CAACC,QAAQ,CAAC;MACtE,IAAI,CAAC8B,MAAM,GAAGsB,QAAQ,CAACtB,MAAM;IAC/B;EAAC;IAAA;IAAA,OAED,kBAAS;MACP,IAAMuB,KAAK,GAAG1F,KAAK,CAAC2F,QAAQ,EAAE;MAC9B,IAAI,IAAI,CAAClB,SAAS,EAChB,IAAI,CAACmB,OAAO,CAACF,KAAK,CAAC;MAErB,4BAA0B,IAAI,CAACpE,UAAU,CAACY,qBAAqB,EAAE;QAAzDsB,KAAK,yBAALA,KAAK;QAAEqC,MAAM,yBAANA,MAAM;MACrB,IAAMC,SAAS,GAAG,IAAI,CAAC3E,QAAQ,CAAC2E,SAAS;MAEzC,IAAI,CAAC3E,QAAQ,CAAC2E,SAAS,GAAG,KAAK;MAC/B,IAAI,CAAC3E,QAAQ,CAAC4E,WAAW,CAACvC,KAAK,GAAGjD,GAAG,EAAEsF,MAAM,GAAGtF,GAAG,EAAEA,GAAG,EAAEA,GAAG,CAAC;MAC9D,IAAI,CAACY,QAAQ,CAAC6E,MAAM,CAAC,IAAI,EAAE,IAAI,CAACzE,WAAW,CAAC;MAC5C,IAAI,CAACJ,QAAQ,CAAC4E,WAAW,CAAC,IAAI,CAACE,QAAQ,CAAC;MACxC,IAAI,CAAC9E,QAAQ,CAAC2E,SAAS,GAAGA,SAAS;IACrC;EAAC;IAAA;IAAA,OAED,6BAAqC;MAAA,IAAnBI,UAAU,uEAAG,IAAI;MACjC,IAAIA,UAAU,EAAE;QACd,IAAI,CAAClC,UAAU,CAACD,IAAI,CAAC,IAAI,CAAC7C,MAAM,CAAC8C,UAAU,CAAC,CAACC,MAAM,EAAE;QACrD,IAAI,CAACH,iBAAiB,EAAE;MAC1B;MAEAqC,oBAAoB,CAAC,IAAI,CAACtE,YAAY,EAAE,IAAI,CAACX,MAAM,CAAC;IACtD;EAAC;IAAA;IAAA,OAED,kBAAS;MACP,IAAI,CAACe,OAAO,GAAG,IAAI,CAACH,YAAY,CAACI,qBAAqB,EAAE;MACxD,IAAI,CAACkE,YAAY,GAAG,IAAI,CAAC9E,UAAU,CAAC8E,YAAY;MAChDzB,SAAS,CAAC,IAAI,CAACzD,MAAM,EAAE,IAAI,CAACiD,MAAM,CAAC;MACnC,IAAI,CAAChD,QAAQ,CAACkF,WAAW,CAAC,IAAI,CAACJ,QAAQ,CAAC;MAExC,IAAI,CAAC3D,iBAAiB,EAAE;IAC1B;EAAC;IAAA;IAAA,OAED,iBAAQoD,KAAa,EAAE;MACrB,IAAMY,IAAI,GAAGZ,KAAK,GAAGlF,QAAQ;;MAE7B;;MAEAJ,EAAE,CAACmG,aAAa,CAAClG,EAAE,EAAEiG,IAAI,CAAC;MAC1B,IAAI,CAACpF,MAAM,CAACM,QAAQ,CACjBC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACZyC,eAAe,CAAC9D,EAAE,CAAC,CACnBmD,cAAc,CAACvC,MAAM,CAAC,CACtBwB,GAAG,CAAC,IAAI,CAAC2B,MAAM,CAAC;;MAEnB;;MAEA,IAAI,CAACjD,MAAM,CAAC8C,UAAU,CAACuC,aAAa,CAACrG,gBAAgB,EAAEoG,IAAI,CAAC;MAE5D,IAAI,CAAChE,iBAAiB,EAAE;MAExB,IAAIlC,EAAE,CAACoG,OAAO,CAACnG,EAAE,CAAC,KAAK,CAAC,EACtB,IAAI,CAACoE,SAAS,GAAG,KAAK;IAC1B;EAAC;IAAA;IAAA,OAED,wBAAegC,WAA6B,EAAE;MAC5CC,oBAAoB,CAAC,IAAI,CAACxF,MAAM,EAAE,IAAI,CAACiD,MAAM,EAAEsC,WAAW,CAAC;MAC3D,IAAI,CAAChC,SAAS,GAAG,IAAI;IACvB;EAAC;IAAA;IAAA,OAED,mBAAU;MACR,IAAI,CAAC7C,SAAS,CAAC+E,QAAQ,CAACC,OAAO,EAAE;MAChC,IAAI,CAAChF,SAAS,CAACiD,QAAQ,CAAc+B,OAAO,EAAE;MAE/C,IAAI,CAAClF,gBAAgB,CAACiF,QAAQ,CAACC,OAAO,EAAE;MACvC,IAAI,CAAClF,gBAAgB,CAACmD,QAAQ,CAAc+B,OAAO,EAAE;MAEtD,IAAI,CAAC/E,YAAY,CAACgF,OAAO,CAAC,UAACC,MAAM,EAAK;QACpCA,MAAM,CAACjC,QAAQ,CAACtF,GAAG,CAAEqH,OAAO,EAAE;QAC9BE,MAAM,CAACjC,QAAQ,CAAC+B,OAAO,EAAE;MAC3B,CAAC,CAAC;MAEF,IAAI,CAAC9E,YAAY,CAACiF,MAAM,EAAE;MAE1B,IAAI,IAAI,CAACtB,QAAQ,EAAE;QACjB,IAAI,CAACA,QAAQ,CAAClB,mBAAmB,CAC/B,QAAQ,EACR,IAAI,CAACnC,mBAAmB,CAACC,QAAQ,CAClC;MACH;IACF;EAAC;EAAA;AAAA,EAvQsB3D,QAAQ;AA0QjC,SAASiD,mBAAmB,GAAG;EAC7B,IAAMgF,QAAQ,GAAG,IAAI7H,cAAc,CAAC,GAAG,CAAC;EACxC,IAAMkI,MAAM,GAAG,IAAIxI,IAAI,CACrBmI,QAAQ,EACR,IAAIlI,iBAAiB,CAAC;IACpBwI,KAAK,EAAE,QAAQ;IACfC,IAAI,EAAE7I,QAAQ;IACd8I,WAAW,EAAE,IAAI;IACjBrC,OAAO,EAAE,CAAC;IACVsC,SAAS,EAAE;EACb,CAAC,CAAC,CACH;EAED,OAAOJ,MAAM;AACf;AAEA,SAASN,oBAAoB,CAC3BxF,MAA8C,EAC9CmG,UAAmB,EACnBC,IAAsB,EACtB;EACA,QAAQA,IAAI;IACV,KAAK,IAAI;MACPrH,cAAc,CAACwB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC3BvB,gBAAgB,CAACqH,YAAY,CAAC,IAAIhJ,KAAK,CAAC,CAAC,EAAEkC,IAAI,CAACC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;MAC7D;IAEF,KAAK,IAAI;MACPT,cAAc,CAACwB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC3BvB,gBAAgB,CAACqH,YAAY,CAAC,IAAIhJ,KAAK,CAAC,CAACkC,IAAI,CAACC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;MAC9D;IAEF,KAAK,IAAI;MACPT,cAAc,CAACwB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC3BvB,gBAAgB,CAACqH,YAAY,CAAC,IAAIhJ,KAAK,EAAE,CAAC;MAC1C;IAEF,KAAK,IAAI;MACP0B,cAAc,CAACwB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC5BvB,gBAAgB,CAACqH,YAAY,CAAC,IAAIhJ,KAAK,CAAC,CAAC,EAAE,CAACkC,IAAI,CAACC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;MAC9D;IAEF,KAAK,IAAI;MACPT,cAAc,CAACwB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;MAC5BvB,gBAAgB,CAACqH,YAAY,CAAC,IAAIhJ,KAAK,CAACkC,IAAI,CAACC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;MAC7D;IAEF,KAAK,IAAI;MACPT,cAAc,CAACwB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;MAC5BvB,gBAAgB,CAACqH,YAAY,CAAC,IAAIhJ,KAAK,CAAC,CAAC,EAAEkC,IAAI,CAACC,EAAE,EAAE,CAAC,CAAC,CAAC;MACvD;IAEF;MACE8G,OAAO,CAACC,KAAK,CAAC,2BAA2B,CAAC;EAAA;EAG9C9C,SAAS,CAACzD,MAAM,EAAEmG,UAAU,CAAC;EAC7BK,kBAAkB,CAACxG,MAAM,EAAEmG,UAAU,CAAC;AACxC;AAEA,SAAS1C,SAAS,CAACzD,MAAc,EAAEmG,UAAmB,EAAE;EACtDrG,MAAM,GAAGE,MAAM,CAACM,QAAQ,CAACmG,UAAU,CAACN,UAAU,CAAC;AACjD;AAEA,SAASK,kBAAkB,CAACxG,MAAc,EAAEmG,UAAmB,EAAE;EAC/DpH,cAAc,CAACsD,cAAc,CAACvC,MAAM,CAAC,CAACwB,GAAG,CAAC6E,UAAU,CAAC;EAErDtG,KAAK,CAACS,QAAQ,CAACuC,IAAI,CAACsD,UAAU,CAAC;EAE/BtG,KAAK,CAAC6G,MAAM,CAAC1G,MAAM,CAACM,QAAQ,CAAC;EAC7BpB,EAAE,CAAC2D,IAAI,CAAChD,KAAK,CAACiD,UAAU,CAAC;EAEzBjD,KAAK,CAAC6G,MAAM,CAAC3H,cAAc,CAAC;EAC5BI,EAAE,CAAC0D,IAAI,CAAChD,KAAK,CAACiD,UAAU,CAAC;AAC3B;AAEA,SAAS6D,aAAa,CACpBnF,CAAe,EACfT,OAAgB,EAChBV,WAA+B,EAC/B;EACAX,KAAK,CAAC8C,CAAC,GAAI,CAAChB,CAAC,CAACU,OAAO,GAAGnB,OAAO,CAAC6F,IAAI,IAAI7F,OAAO,CAACuB,KAAK,GAAI,CAAC,GAAG,CAAC;EAC9D5C,KAAK,CAACiD,CAAC,GAAG,EAAE,CAACnB,CAAC,CAACW,OAAO,GAAGpB,OAAO,CAAC8F,GAAG,IAAI9F,OAAO,CAAC4D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;EAE/DlF,SAAS,CAACqH,aAAa,CAACpH,KAAK,EAAEW,WAAW,CAAC;AAC7C;AAEA,SAAS2B,OAAO,CACdR,CAAe,EACfuF,WAAoB,EAEpB;EAAA,IADAC,SAAS,uEAAG,EAAE;EAEd,OACEzH,IAAI,CAAC0H,GAAG,CAACzF,CAAC,CAACU,OAAO,GAAG6E,WAAW,CAACvE,CAAC,CAAC,GAAGwE,SAAS,IACxCzH,IAAI,CAAC0H,GAAG,CAACzF,CAAC,CAACW,OAAO,GAAG4E,WAAW,CAACpE,CAAC,CAAC,GAAGqE,SAAS;AAE1D;AAEA,SAAS/C,qBAAqB,CAC5BiD,KAAmB,EACnBnG,OAAgB,EAChBV,WAA+B,EAC/B8G,mBAA6B,EAC7B;EACAR,aAAa,CAACO,KAAK,EAAEnG,OAAO,EAAEV,WAAW,CAAC;EAE1C,IAAM+G,UAAU,GAAG3H,SAAS,CAAC4H,gBAAgB,CAACF,mBAAmB,CAAC;EAElE,IAAI,CAACC,UAAU,CAACE,MAAM,EACpB,OAAO,IAAI;EAEb,IAAMC,YAAY,GAAGH,UAAU,CAAC,CAAC,CAAC;EAClC,OAAOG,YAAY,CAACvD,MAAM;AAC5B;AAEA,SAAS/B,YAAY,CAACuF,OAAiB,EAAE;EACvC,IAAIjJ,CAAC,GAAGiJ,OAAO,CAACF,MAAM;EAEtB,OAAO/I,CAAC,EAAE,EAAE;IACV,IAAM+F,KAAK,GAAG/F,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;IAC/BiJ,OAAO,CAACjJ,CAAC,CAAC,CAAC+F,KAAK,CAAC/D,GAAG,CAAC+D,KAAK,EAAEA,KAAK,EAAEA,KAAK,CAAC;IACzCkD,OAAO,CAACjJ,CAAC,CAAC,CAACoF,QAAQ,CAACtF,GAAG,CAAEgG,MAAM,CAAC7B,CAAC,GAAG,CAAC;EACvC;EACA;AACF;;AAEA,SAASyC,oBAAoB,CAACuC,OAAiB,EAAExH,MAAc,EAAE;EAC/DZ,KAAK,CAACmB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAClBnB,KAAK,CAAC4D,eAAe,CAAChD,MAAM,CAAC8C,UAAU,CAAC;EAExC,IAAI1D,KAAK,CAACoD,CAAC,IAAI,CAAC,EAAE;IAChBgF,OAAO,CAAChJ,KAAK,CAAC,CAACmF,QAAQ,CAACC,OAAO,GAAG,CAAC;IACnC4D,OAAO,CAAC7I,KAAK,CAAC,CAACgF,QAAQ,CAACC,OAAO,GAAG,GAAG;EACvC,CAAC,MACI;IACH4D,OAAO,CAAChJ,KAAK,CAAC,CAACmF,QAAQ,CAACC,OAAO,GAAG,GAAG;IACrC4D,OAAO,CAAC7I,KAAK,CAAC,CAACgF,QAAQ,CAACC,OAAO,GAAG,CAAC;EACrC;EAEA,IAAIxE,KAAK,CAACuD,CAAC,IAAI,CAAC,EAAE;IAChB6E,OAAO,CAAC/I,KAAK,CAAC,CAACkF,QAAQ,CAACC,OAAO,GAAG,CAAC;IACnC4D,OAAO,CAAC5I,KAAK,CAAC,CAAC+E,QAAQ,CAACC,OAAO,GAAG,GAAG;EACvC,CAAC,MACI;IACH4D,OAAO,CAAC/I,KAAK,CAAC,CAACkF,QAAQ,CAACC,OAAO,GAAG,GAAG;IACrC4D,OAAO,CAAC5I,KAAK,CAAC,CAAC+E,QAAQ,CAACC,OAAO,GAAG,CAAC;EACrC;EAEA,IAAIxE,KAAK,CAACqI,CAAC,IAAI,CAAC,EAAE;IAChBD,OAAO,CAAC9I,KAAK,CAAC,CAACiF,QAAQ,CAACC,OAAO,GAAG,CAAC;IACnC4D,OAAO,CAAC3I,KAAK,CAAC,CAAC8E,QAAQ,CAACC,OAAO,GAAG,GAAG;EACvC,CAAC,MACI;IACH4D,OAAO,CAAC9I,KAAK,CAAC,CAACiF,QAAQ,CAACC,OAAO,GAAG,GAAG;IACrC4D,OAAO,CAAC3I,KAAK,CAAC,CAAC8E,QAAQ,CAACC,OAAO,GAAG,CAAC;EACrC;AACF;AAEA,SAASnB,KAAK,CAACiF,GAAW,EAAEC,GAAW,EAAEC,GAAW,EAAE;EACpD,OAAOrI,IAAI,CAACoI,GAAG,CAACpI,IAAI,CAACqI,GAAG,CAACF,GAAG,EAAEC,GAAG,CAAC,EAAEC,GAAG,CAAC;AAC1C;AAEA,eAAe7H,UAAU"}
|