x_ite 9.2.5 → 9.2.6
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/assets/components/Annotation.js +13 -13
- package/dist/assets/components/Annotation.min.js +1 -1
- package/dist/assets/components/CADGeometry.js +14 -14
- package/dist/assets/components/CADGeometry.min.js +1 -1
- package/dist/assets/components/CubeMapTexturing.js +27 -27
- package/dist/assets/components/CubeMapTexturing.min.js +1 -1
- package/dist/assets/components/DIS.js +13 -13
- package/dist/assets/components/DIS.min.js +1 -1
- package/dist/assets/components/EventUtilities.js +9 -9
- package/dist/assets/components/EventUtilities.min.js +1 -1
- package/dist/assets/components/Geometry2D.js +19 -19
- package/dist/assets/components/Geometry2D.min.js +1 -1
- package/dist/assets/components/Geospatial.js +33 -33
- package/dist/assets/components/Geospatial.min.js +1 -1
- package/dist/assets/components/HAnim.js +23 -23
- package/dist/assets/components/HAnim.min.js +1 -1
- package/dist/assets/components/KeyDeviceSensor.js +8 -8
- package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
- package/dist/assets/components/Layout.js +29 -29
- package/dist/assets/components/Layout.min.js +1 -1
- package/dist/assets/components/NURBS.js +23 -23
- package/dist/assets/components/NURBS.min.js +1 -1
- package/dist/assets/components/ParticleSystems.js +25 -25
- package/dist/assets/components/ParticleSystems.min.js +1 -1
- package/dist/assets/components/Picking.js +18 -18
- package/dist/assets/components/Picking.min.js +1 -1
- package/dist/assets/components/RigidBodyPhysics.js +20 -20
- package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
- package/dist/assets/components/Scripting.js +40 -40
- package/dist/assets/components/Scripting.min.js +1 -1
- package/dist/assets/components/Text.js +30 -30
- package/dist/assets/components/Text.min.js +1 -1
- package/dist/assets/components/TextureProjection.js +15 -15
- package/dist/assets/components/TextureProjection.min.js +1 -1
- package/dist/assets/components/Texturing3D.js +41 -41
- package/dist/assets/components/Texturing3D.min.js +1 -1
- package/dist/assets/components/VolumeRendering.js +19 -19
- package/dist/assets/components/VolumeRendering.min.js +1 -1
- package/dist/assets/components/X_ITE.js +8 -8
- package/dist/assets/components/X_ITE.min.js +1 -1
- package/dist/x_ite.css +1 -1
- package/dist/x_ite.js +88 -147
- package/dist/x_ite.min.js +1 -1
- package/dist/x_ite.min.mjs +1 -1
- package/dist/x_ite.mjs +90 -149
- package/dist/x_ite.zip +0 -0
- package/package.json +3 -3
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/* X_ITE v9.2.
|
|
1
|
+
/* X_ITE v9.2.6 */(() => { // webpackBootstrap
|
|
2
2
|
/******/ "use strict";
|
|
3
3
|
/******/ var __webpack_modules__ = ({
|
|
4
4
|
|
|
5
|
-
/***/
|
|
5
|
+
/***/ 823:
|
|
6
6
|
/***/ ((module) => {
|
|
7
7
|
|
|
8
|
-
module.exports = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
8
|
+
module.exports = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("lib/jquery");
|
|
9
9
|
|
|
10
10
|
/***/ })
|
|
11
11
|
|
|
@@ -73,22 +73,22 @@ var __webpack_exports__ = {};
|
|
|
73
73
|
// UNUSED EXPORTS: default
|
|
74
74
|
|
|
75
75
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Components\")"
|
|
76
|
-
const Components_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
76
|
+
const Components_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Components");
|
|
77
77
|
var Components_default = /*#__PURE__*/__webpack_require__.n(Components_namespaceObject);
|
|
78
78
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Fields\")"
|
|
79
|
-
const Fields_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
79
|
+
const Fields_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Fields");
|
|
80
80
|
var Fields_default = /*#__PURE__*/__webpack_require__.n(Fields_namespaceObject);
|
|
81
81
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Base/X3DFieldDefinition\")"
|
|
82
|
-
const X3DFieldDefinition_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
82
|
+
const X3DFieldDefinition_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Base/X3DFieldDefinition");
|
|
83
83
|
var X3DFieldDefinition_default = /*#__PURE__*/__webpack_require__.n(X3DFieldDefinition_namespaceObject);
|
|
84
84
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Base/FieldDefinitionArray\")"
|
|
85
|
-
const FieldDefinitionArray_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
85
|
+
const FieldDefinitionArray_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Base/FieldDefinitionArray");
|
|
86
86
|
var FieldDefinitionArray_default = /*#__PURE__*/__webpack_require__.n(FieldDefinitionArray_namespaceObject);
|
|
87
87
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Components/Core/X3DNode\")"
|
|
88
|
-
const X3DNode_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
88
|
+
const X3DNode_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Components/Core/X3DNode");
|
|
89
89
|
var X3DNode_default = /*#__PURE__*/__webpack_require__.n(X3DNode_namespaceObject);
|
|
90
90
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Namespace\")"
|
|
91
|
-
const Namespace_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
91
|
+
const Namespace_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Namespace");
|
|
92
92
|
var Namespace_default = /*#__PURE__*/__webpack_require__.n(Namespace_namespaceObject);
|
|
93
93
|
;// CONCATENATED MODULE: ./src/x_ite/Browser/ParticleSystems/GeometryTypes.js
|
|
94
94
|
/*******************************************************************************
|
|
@@ -155,7 +155,7 @@ const __default__ = GeometryTypes;
|
|
|
155
155
|
Namespace_default().add ("GeometryTypes", "x_ite/Browser/ParticleSystems/GeometryTypes", __default__);
|
|
156
156
|
/* harmony default export */ const ParticleSystems_GeometryTypes = (__default__);
|
|
157
157
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Base/X3DConstants\")"
|
|
158
|
-
const X3DConstants_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
158
|
+
const X3DConstants_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Base/X3DConstants");
|
|
159
159
|
var X3DConstants_default = /*#__PURE__*/__webpack_require__.n(X3DConstants_namespaceObject);
|
|
160
160
|
;// CONCATENATED MODULE: ./src/x_ite/Browser/ParticleSystems/Line3.glsl.js
|
|
161
161
|
const Line3_glsl_default_ = /* glsl */ `struct Line3{vec3 point;vec3 direction;};bool intersects(const in Line3 line,const in vec3 a,const in vec3 b,const in vec3 c,out vec3 r){vec3 edge1=b-a;vec3 edge2=c-a;vec3 pvec=cross(line.direction,edge2);float det=dot(edge1,pvec);if(det==0.0)return false;float inv_det=1.0/det;vec3 tvec=line.point-a;float u=dot(tvec,pvec)*inv_det;if(u<0.0||u>1.0)return false;vec3 qvec=cross(tvec,edge1);float v=dot(line.direction,qvec)*inv_det;if(v<0.0||u+v>1.0)return false;r=vec3(u,v,1.0-u-v);return true;}`
|
|
@@ -618,7 +618,7 @@ const X3DParticleEmitterNode_default_ = X3DParticleEmitterNode;
|
|
|
618
618
|
Namespace_default().add ("X3DParticleEmitterNode", "x_ite/Components/ParticleSystems/X3DParticleEmitterNode", X3DParticleEmitterNode_default_);
|
|
619
619
|
/* harmony default export */ const ParticleSystems_X3DParticleEmitterNode = (X3DParticleEmitterNode_default_);
|
|
620
620
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"standard/Math/Numbers/Vector3\")"
|
|
621
|
-
const Vector3_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
621
|
+
const Vector3_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("standard/Math/Numbers/Vector3");
|
|
622
622
|
var Vector3_default = /*#__PURE__*/__webpack_require__.n(Vector3_namespaceObject);
|
|
623
623
|
;// CONCATENATED MODULE: ./src/x_ite/Components/ParticleSystems/PointEmitter.js
|
|
624
624
|
/*******************************************************************************
|
|
@@ -939,7 +939,7 @@ const X3DParticlePhysicsModelNode_default_ = X3DParticlePhysicsModelNode;
|
|
|
939
939
|
Namespace_default().add ("X3DParticlePhysicsModelNode", "x_ite/Components/ParticleSystems/X3DParticlePhysicsModelNode", X3DParticlePhysicsModelNode_default_);
|
|
940
940
|
/* harmony default export */ const ParticleSystems_X3DParticlePhysicsModelNode = (X3DParticlePhysicsModelNode_default_);
|
|
941
941
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Base/X3DCast\")"
|
|
942
|
-
const X3DCast_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
942
|
+
const X3DCast_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Base/X3DCast");
|
|
943
943
|
var X3DCast_default = /*#__PURE__*/__webpack_require__.n(X3DCast_namespaceObject);
|
|
944
944
|
;// CONCATENATED MODULE: ./src/x_ite/Components/ParticleSystems/BoundedPhysicsModel.js
|
|
945
945
|
/*******************************************************************************
|
|
@@ -1513,28 +1513,28 @@ const ForcePhysicsModel_default_ = ForcePhysicsModel;
|
|
|
1513
1513
|
Namespace_default().add ("ForcePhysicsModel", "x_ite/Components/ParticleSystems/ForcePhysicsModel", ForcePhysicsModel_default_);
|
|
1514
1514
|
/* harmony default export */ const ParticleSystems_ForcePhysicsModel = (ForcePhysicsModel_default_);
|
|
1515
1515
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Components/Shape/X3DShapeNode\")"
|
|
1516
|
-
const X3DShapeNode_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
1516
|
+
const X3DShapeNode_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Components/Shape/X3DShapeNode");
|
|
1517
1517
|
var X3DShapeNode_default = /*#__PURE__*/__webpack_require__.n(X3DShapeNode_namespaceObject);
|
|
1518
1518
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Browser/Rendering/GeometryContext\")"
|
|
1519
|
-
const GeometryContext_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
1519
|
+
const GeometryContext_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Browser/Rendering/GeometryContext");
|
|
1520
1520
|
var GeometryContext_default = /*#__PURE__*/__webpack_require__.n(GeometryContext_namespaceObject);
|
|
1521
1521
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Rendering/VertexArray\")"
|
|
1522
|
-
const VertexArray_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
1522
|
+
const VertexArray_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Rendering/VertexArray");
|
|
1523
1523
|
var VertexArray_default = /*#__PURE__*/__webpack_require__.n(VertexArray_namespaceObject);
|
|
1524
1524
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Rendering/TraverseType\")"
|
|
1525
|
-
const TraverseType_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
1525
|
+
const TraverseType_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Rendering/TraverseType");
|
|
1526
1526
|
var TraverseType_default = /*#__PURE__*/__webpack_require__.n(TraverseType_namespaceObject);
|
|
1527
1527
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Browser/Shape/AlphaMode\")"
|
|
1528
|
-
const AlphaMode_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
1528
|
+
const AlphaMode_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Browser/Shape/AlphaMode");
|
|
1529
1529
|
var AlphaMode_default = /*#__PURE__*/__webpack_require__.n(AlphaMode_namespaceObject);
|
|
1530
1530
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"standard/Math/Numbers/Matrix4\")"
|
|
1531
|
-
const Matrix4_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
1531
|
+
const Matrix4_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("standard/Math/Numbers/Matrix4");
|
|
1532
1532
|
var Matrix4_default = /*#__PURE__*/__webpack_require__.n(Matrix4_namespaceObject);
|
|
1533
1533
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"standard/Math/Numbers/Matrix3\")"
|
|
1534
|
-
const Matrix3_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
1534
|
+
const Matrix3_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("standard/Math/Numbers/Matrix3");
|
|
1535
1535
|
var Matrix3_default = /*#__PURE__*/__webpack_require__.n(Matrix3_namespaceObject);
|
|
1536
1536
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"standard/Math/Geometry/Plane3\")"
|
|
1537
|
-
const Plane3_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
1537
|
+
const Plane3_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("standard/Math/Geometry/Plane3");
|
|
1538
1538
|
var Plane3_default = /*#__PURE__*/__webpack_require__.n(Plane3_namespaceObject);
|
|
1539
1539
|
;// CONCATENATED MODULE: ./src/standard/Math/Algorithms/QuickSort.js
|
|
1540
1540
|
/*******************************************************************************
|
|
@@ -2031,7 +2031,7 @@ const BVH_default_ = BVH;
|
|
|
2031
2031
|
Namespace_default().add ("BVH", "standard/Math/Utility/BVH", BVH_default_);
|
|
2032
2032
|
/* harmony default export */ const Utility_BVH = (BVH_default_);
|
|
2033
2033
|
;// CONCATENATED MODULE: ./src/x_ite/Components/ParticleSystems/ParticleSystem.js
|
|
2034
|
-
/* provided dependency */ var $ = __webpack_require__(
|
|
2034
|
+
/* provided dependency */ var $ = __webpack_require__(823);
|
|
2035
2035
|
/*******************************************************************************
|
|
2036
2036
|
*
|
|
2037
2037
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
@@ -3122,7 +3122,7 @@ const ParticleSystem_default_ = ParticleSystem;
|
|
|
3122
3122
|
Namespace_default().add ("ParticleSystem", "x_ite/Components/ParticleSystems/ParticleSystem", ParticleSystem_default_);
|
|
3123
3123
|
/* harmony default export */ const ParticleSystems_ParticleSystem = (ParticleSystem_default_);
|
|
3124
3124
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Components/Rendering/IndexedLineSet\")"
|
|
3125
|
-
const IndexedLineSet_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
3125
|
+
const IndexedLineSet_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Components/Rendering/IndexedLineSet");
|
|
3126
3126
|
var IndexedLineSet_default = /*#__PURE__*/__webpack_require__.n(IndexedLineSet_namespaceObject);
|
|
3127
3127
|
;// CONCATENATED MODULE: ./src/x_ite/Components/ParticleSystems/PolylineEmitter.js
|
|
3128
3128
|
/*******************************************************************************
|
|
@@ -3376,7 +3376,7 @@ const PolylineEmitter_default_ = PolylineEmitter;
|
|
|
3376
3376
|
Namespace_default().add ("PolylineEmitter", "x_ite/Components/ParticleSystems/PolylineEmitter", PolylineEmitter_default_);
|
|
3377
3377
|
/* harmony default export */ const ParticleSystems_PolylineEmitter = (PolylineEmitter_default_);
|
|
3378
3378
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"standard/Math/Geometry/Triangle3\")"
|
|
3379
|
-
const Triangle3_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
3379
|
+
const Triangle3_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("standard/Math/Geometry/Triangle3");
|
|
3380
3380
|
var Triangle3_default = /*#__PURE__*/__webpack_require__.n(Triangle3_namespaceObject);
|
|
3381
3381
|
;// CONCATENATED MODULE: ./src/x_ite/Components/ParticleSystems/SurfaceEmitter.js
|
|
3382
3382
|
/*******************************************************************************
|
|
@@ -3636,7 +3636,7 @@ const SurfaceEmitter_default_ = SurfaceEmitter;
|
|
|
3636
3636
|
Namespace_default().add ("SurfaceEmitter", "x_ite/Components/ParticleSystems/SurfaceEmitter", SurfaceEmitter_default_);
|
|
3637
3637
|
/* harmony default export */ const ParticleSystems_SurfaceEmitter = (SurfaceEmitter_default_);
|
|
3638
3638
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"x_ite/Components/Geometry3D/IndexedFaceSet\")"
|
|
3639
|
-
const IndexedFaceSet_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
3639
|
+
const IndexedFaceSet_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("x_ite/Components/Geometry3D/IndexedFaceSet");
|
|
3640
3640
|
var IndexedFaceSet_default = /*#__PURE__*/__webpack_require__.n(IndexedFaceSet_namespaceObject);
|
|
3641
3641
|
;// CONCATENATED MODULE: ./src/x_ite/Components/ParticleSystems/VolumeEmitter.js
|
|
3642
3642
|
/*******************************************************************************
|
|
@@ -3933,7 +3933,7 @@ const VolumeEmitter_default_ = VolumeEmitter;
|
|
|
3933
3933
|
Namespace_default().add ("VolumeEmitter", "x_ite/Components/ParticleSystems/VolumeEmitter", VolumeEmitter_default_);
|
|
3934
3934
|
/* harmony default export */ const ParticleSystems_VolumeEmitter = (VolumeEmitter_default_);
|
|
3935
3935
|
;// CONCATENATED MODULE: external "window [Symbol .for (\"X_ITE.X3D\")] .require (\"standard/Math/Algorithm\")"
|
|
3936
|
-
const Algorithm_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.
|
|
3936
|
+
const Algorithm_namespaceObject = window [Symbol .for ("X_ITE.X3D-9.2.6")] .require ("standard/Math/Algorithm");
|
|
3937
3937
|
var Algorithm_default = /*#__PURE__*/__webpack_require__.n(Algorithm_namespaceObject);
|
|
3938
3938
|
;// CONCATENATED MODULE: ./src/x_ite/Components/ParticleSystems/WindPhysicsModel.js
|
|
3939
3939
|
/*******************************************************************************
|
|
@@ -1 +1 @@
|
|
|
1
|
-
/* X_ITE v9.2.5 */(()=>{"use strict";var e={72:e=>{e.exports=window[Symbol.for("X_ITE.X3D-9.2.5")].require("lib/jquery")}},t={};function i(n){var o=t[n];if(void 0!==o)return o.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,i),r.exports}i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Components");var t=i.n(e);const n=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Fields");var o=i.n(n);const r=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Base/X3DFieldDefinition");var s=i.n(r);const a=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Base/FieldDefinitionArray");var c=i.n(a);const l=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Components/Core/X3DNode");var d=i.n(l);const u=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Namespace");var m=i.n(u);let h=0;const p={POINT:h++,LINE:h++,TRIANGLE:h++,QUAD:h++,SPRITE:h++,GEOMETRY:h++};m().add("GeometryTypes","x_ite/Browser/ParticleSystems/GeometryTypes",p);const f=p,x=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Base/X3DConstants");var _=i.n(x);const y="struct Line3{vec3 point;vec3 direction;};bool intersects(const in Line3 line,const in vec3 a,const in vec3 b,const in vec3 c,out vec3 r){vec3 edge1=b-a;vec3 edge2=c-a;vec3 pvec=cross(line.direction,edge2);float det=dot(edge1,pvec);if(det==0.0)return false;float inv_det=1.0/det;vec3 tvec=line.point-a;float u=dot(tvec,pvec)*inv_det;if(u<0.0||u>1.0)return false;vec3 qvec=cross(tvec,edge1);float v=dot(line.direction,qvec)*inv_det;if(v<0.0||u+v>1.0)return false;r=vec3(u,v,1.0-u-v);return true;}";m().add("Line3.glsl","x_ite/Browser/ParticleSystems/Line3.glsl",y);const v=y,g="struct Plane3{vec3 normal;float distanceFromOrigin;};Plane3 plane3(const in vec3 point,const in vec3 normal){return Plane3(normal,dot(normal,point));}float plane_distance(const in Plane3 plane,const in vec3 point){return dot(point,plane.normal)-plane.distanceFromOrigin;}bool intersects(const in Plane3 plane,const in Line3 line,out vec3 point){float theta=dot(line.direction,plane.normal);if(theta==0.0)return false;float t=(plane.distanceFromOrigin-dot(plane.normal,line.point))/theta;point=line.point+line.direction*t;return true;}void sort(inout vec4 points[ARRAY_SIZE],const in int count,const in Plane3 plane){const float shrink=1.0/1.3;int gap=count;bool exchanged=true;while(exchanged){gap=int(float(gap)*shrink);if(gap<=1){exchanged=false;gap=1;}for(int i=0,l=count-gap;i<l;++i){int j=gap+i;if(plane_distance(plane,points[i].xyz)>plane_distance(plane,points[j].xyz)){vec4 tmp1=points[i];points[i]=points[j];points[j]=tmp1;exchanged=true;}}}}int min_index(const in vec4 points[ARRAY_SIZE],const in int count,const in float value,const in Plane3 plane){int index=-1;float dist=1000000.0;for(int i=0;i<count;++i){float d=plane_distance(plane,points[i].xyz);if(d>=value&&d<dist){dist=d;index=i;}}return index;}";m().add("Plane3.glsl","x_ite/Browser/ParticleSystems/Plane3.glsl",g);const b=g,T="bool intersects(const in vec3 min,const in vec3 max,const in Line3 line){vec3 intersection;if(intersects(plane3(max,vec3(0.0,0.0,1.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.xy,max.xy),vec4(min.xy,intersection.xy))))return true;}if(intersects(plane3(min,vec3(0.0,0.0,-1.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.xy,max.xy),vec4(min.xy,intersection.xy))))return true;}if(intersects(plane3(max,vec3(0.0,1.0,0.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.xz,max.xz),vec4(min.xz,intersection.xz))))return true;}if(intersects(plane3(min,vec3(0.0,-1.0,0.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.xz,max.xz),vec4(min.xz,intersection.xz))))return true;}if(intersects(plane3(max,vec3(1.0,0.0,0.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.yz,max.yz),vec4(min.yz,intersection.yz))))return true;}return false;}";m().add("Box3.glsl","x_ite/Browser/ParticleSystems/Box3.glsl",T);const w=T,R="#define BVH_NODE 0\n#define BVH_TRIANGLE 1\n#define BVH_STACK_SIZE 32\nint bvhNodeIndex=0;void setBVHIndex(const in int index){bvhNodeIndex=index;}int getBVHRoot(const in sampler2D volume,const in int hierarchyIndex,const in int rootIndex){return int(texelFetch(volume,rootIndex,0).x)+hierarchyIndex;}int getBVHType(const in sampler2D volume){return int(texelFetch(volume,bvhNodeIndex,0).x);}vec3 getBVHMin(const in sampler2D volume){return texelFetch(volume,bvhNodeIndex+1,0).xyz;}vec3 getBVHMax(const in sampler2D volume){return texelFetch(volume,bvhNodeIndex+2,0).xyz;}int getBVHLeft(const in sampler2D volume,const in int hierarchyIndex){return int(texelFetch(volume,bvhNodeIndex,0).y)+hierarchyIndex;}int getBVHRight(const in sampler2D volume,const in int hierarchyIndex){return int(texelFetch(volume,bvhNodeIndex,0).z)+hierarchyIndex;}int getBVHTriangle(const in sampler2D volume){return int(texelFetch(volume,bvhNodeIndex,0).y);}int getIntersections(const in sampler2D volume,const in int verticesIndex,const in int hierarchyIndex,const in int rootIndex,const in Line3 line,out vec4 points[ARRAY_SIZE]){int current=getBVHRoot(volume,hierarchyIndex,rootIndex);int count=0;int stackIndex=-1;int stack[BVH_STACK_SIZE];while(stackIndex>=0||current>=0){if(current>=0){setBVHIndex(current);if(getBVHType(volume)==BVH_NODE){if(intersects(getBVHMin(volume),getBVHMax(volume),line)){stack[++stackIndex]=current;current=getBVHLeft(volume,hierarchyIndex);}else{current=-1;}}else{int t=getBVHTriangle(volume);int v=verticesIndex+t;vec3 r=vec3(0.0);vec3 a=texelFetch(volume,v,0).xyz;vec3 b=texelFetch(volume,v+1,0).xyz;vec3 c=texelFetch(volume,v+2,0).xyz;if(intersects(line,a,b,c,r))points[count++]=vec4(r.z*a+r.x*b+r.y*c,1.0);current=-1;}}else{setBVHIndex(stack[stackIndex--]);current=getBVHRight(volume,hierarchyIndex);}}return count;}int getIntersections(const in sampler2D volume,const in int verticesIndex,const in int normalsIndex,const in int hierarchyIndex,const in int rootIndex,const in Line3 line,out vec4 points[ARRAY_SIZE],out vec3 normals[ARRAY_SIZE]){int current=getBVHRoot(volume,hierarchyIndex,rootIndex);int count=0;int stackIndex=-1;int stack[BVH_STACK_SIZE];while(stackIndex>=0||current>=0){if(current>=0){setBVHIndex(current);if(getBVHType(volume)==BVH_NODE){if(intersects(getBVHMin(volume),getBVHMax(volume),line)){stack[++stackIndex]=current;current=getBVHLeft(volume,hierarchyIndex);}else{current=-1;}}else{int t=getBVHTriangle(volume);int v=verticesIndex+t;vec3 r=vec3(0.0);vec3 a=texelFetch(volume,v,0).xyz;vec3 b=texelFetch(volume,v+1,0).xyz;vec3 c=texelFetch(volume,v+2,0).xyz;if(intersects(line,a,b,c,r)){points[count]=vec4(r.z*a+r.x*b+r.y*c,1.0);int n=normalsIndex+t;vec3 n0=texelFetch(volume,n,0).xyz;vec3 n1=texelFetch(volume,n+1,0).xyz;vec3 n2=texelFetch(volume,n+2,0).xyz;normals[count]=save_normalize(r.z*n0+r.x*n1+r.y*n2);++count;}current=-1;}}else{setBVHIndex(stack[stackIndex--]);current=getBVHRight(volume,hierarchyIndex);}}return count;}";m().add("BVH.glsl","x_ite/Browser/ParticleSystems/BVH.glsl",R);const I=R;function F(e){d().call(this,e),this.addType(_().X3DParticleEmitterNode),this._speed.setUnit("speed"),this._mass.setUnit("mass"),this._surfaceArea.setUnit("area"),this.samplers=[],this.uniforms={},this.functions=[],this.program=null,this.addSampler("forces"),this.addSampler("boundedVolume"),this.addSampler("colorRamp"),this.addSampler("texCoordRamp"),this.addUniform("speed","uniform float speed;"),this.addUniform("variation","uniform float variation;"),this.addFunction(v),this.addFunction(b),this.addFunction(w),this.addFunction(I)}Object.assign(Object.setPrototypeOf(F.prototype,d().prototype),{initialize(){d().prototype.initialize.call(this);const e=this.getBrowser().getContext();e.getVersion()<2||(this.program=this.createProgram(),this.transformFeedback=e.createTransformFeedback(),this._on.addInterest("set_on__",this),this._speed.addInterest("set_speed__",this),this._variation.addInterest("set_variation__",this),this._mass.addInterest("set_mass__",this),this.set_on__(),this.set_speed__(),this.set_variation__(),this.set_mass__())},isExplosive:()=>!1,getMass(){return this.mass},set_on__(){this.on=this._on.getValue()},set_speed__(){this.setUniform("uniform1f","speed",this._speed.getValue())},set_variation__(){this.setUniform("uniform1f","variation",this._variation.getValue())},set_mass__(){this.mass=this._mass.getValue()},getRandomValue:(e,t)=>Math.random()*(t-e)+e,getRandomNormal(e){const t=this.getRandomValue(-1,1)*Math.PI,i=this.getRandomValue(-1,1),n=Math.acos(i),o=Math.sin(n);return e.set(Math.sin(t)*o,Math.cos(t)*o,i)},animate(e,t){const i=this.getBrowser().getContext(),n=e.inputParticles,o=e.particleStride,r=e.particleOffsets,s=this.program;if(i.useProgram(s),i.uniform1i(s.randomSeed,4294967295*Math.random()),i.uniform1i(s.geometryType,e.geometryType),i.uniform1i(s.createParticles,e.createParticles&&this.on),i.uniform1f(s.particleLifetime,e.particleLifetime),i.uniform1f(s.lifetimeVariation,e.lifetimeVariation),i.uniform1f(s.deltaTime,t),i.uniform2f(s.particleSize,e._particleSize.x,e._particleSize.y),i.uniform1i(s.numForces,e.numForces),e.numForces&&(i.activeTexture(i.TEXTURE0+s.forcesTextureUnit),i.bindTexture(i.TEXTURE_2D,e.forcesTexture)),e.boundedHierarchyRoot<0?i.uniform1i(s.boundedHierarchyRoot,-1):(i.uniform1i(s.boundedVerticesIndex,e.boundedVerticesIndex),i.uniform1i(s.boundedNormalsIndex,e.boundedNormalsIndex),i.uniform1i(s.boundedHierarchyIndex,e.boundedHierarchyIndex),i.uniform1i(s.boundedHierarchyRoot,e.boundedHierarchyRoot),i.activeTexture(i.TEXTURE0+s.boundedVolumeTextureUnit),i.bindTexture(i.TEXTURE_2D,e.boundedTexture)),i.uniform1i(s.numColors,e.numColors),e.numColors&&(i.activeTexture(i.TEXTURE0+s.colorRampTextureUnit),i.bindTexture(i.TEXTURE_2D,e.colorRampTexture)),i.uniform1i(s.numTexCoords,e.numTexCoords),e.numTexCoords&&(i.uniform1i(s.texCoordCount,e.texCoordCount),i.activeTexture(i.TEXTURE0+s.texCoordRampTextureUnit),i.bindTexture(i.TEXTURE_2D,e.texCoordRampTexture)),this.activateTextures(i,s),n.vertexArrayObject.enable(s)){for(const[e,t]of s.inputs)i.bindBuffer(i.ARRAY_BUFFER,n),i.enableVertexAttribArray(t),i.vertexAttribPointer(t,4,i.FLOAT,!1,o,r[e]);i.bindBuffer(i.ARRAY_BUFFER,null)}i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindTransformFeedback(i.TRANSFORM_FEEDBACK,this.transformFeedback),i.bindBufferBase(i.TRANSFORM_FEEDBACK_BUFFER,0,e.outputParticles),i.enable(i.RASTERIZER_DISCARD),i.beginTransformFeedback(i.POINTS),i.drawArrays(i.POINTS,0,e.numParticles),i.endTransformFeedback(),i.disable(i.RASTERIZER_DISCARD),i.bindTransformFeedback(i.TRANSFORM_FEEDBACK,null)},addSampler(e){this.samplers.push(e)},addUniform(e,t){this.uniforms[e]=t},setUniform(e,t,i,n,o){const r=this.getBrowser().getContext(),s=this.program;r.useProgram(s),r[e](s[t],i,n,o)},addFunction(e){this.functions.push(e)},createProgram(){const e=this.getBrowser(),t=e.getContext(),i=`#version 300 es\nprecision highp float;precision highp int;precision highp sampler2D;uniform int randomSeed;uniform int geometryType;uniform bool createParticles;uniform float particleLifetime;uniform float lifetimeVariation;uniform float deltaTime;uniform vec2 particleSize;uniform int numForces;uniform sampler2D forces;uniform int boundedVerticesIndex;uniform int boundedNormalsIndex;uniform int boundedHierarchyIndex;uniform int boundedHierarchyRoot;uniform sampler2D boundedVolume;uniform int numColors;uniform sampler2D colorRamp;uniform int texCoordCount;uniform int numTexCoords;uniform sampler2D texCoordRamp;\n${Object.values(this.uniforms).join("\n")}\n in vec4 input0;in vec4 input2;in vec4 input6;out vec4 output0;out vec4 output1;out vec4 output2;out vec4 output3;out vec4 output4;out vec4 output5;out vec4 output6;\n${Object.entries(f).map((([e,t])=>`#define ${e} ${t}`)).join("\n")}\n const int ARRAY_SIZE=32;const float M_PI=3.14159265359;uniform float NaN;vec4 texelFetch(const in sampler2D sampler,const in int index,const in int lod){int x=textureSize(sampler,lod).x;ivec2 p=ivec2(index % x,index/x);vec4 t=texelFetch(sampler,p,lod);return t;}vec3 save_normalize(const in vec3 vector){float l=length(vector);if(l==0.0)return vec3(0.0);return vector/l;}vec4 Quaternion(const in vec3 fromVector,const in vec3 toVector){vec3 from=save_normalize(fromVector);vec3 to=save_normalize(toVector);float cos_angle=dot(from,to);vec3 cross_vec=cross(from,to);float cross_len=length(cross_vec);if(cross_len==0.0){if(cos_angle>0.0){return vec4(0.0,0.0,0.0,1.0);}else{vec3 t=cross(from,vec3(1.0,0.0,0.0));if(dot(t,t)==0.0)t=cross(from,vec3(0.0,1.0,0.0));t=save_normalize(t);return vec4(t,0.0);}}else{float s=sqrt(abs(1.0-cos_angle)*0.5);cross_vec=save_normalize(cross_vec);return vec4(cross_vec*s,sqrt(abs(1.0+cos_angle)*0.5));}}vec3 multVecQuat(const in vec3 v,const in vec4 q){float a=q.w*q.w-q.x*q.x-q.y*q.y-q.z*q.z;float b=2.0*(v.x*q.x+v.y*q.y+v.z*q.z);float c=2.0*q.w;vec3 r=a*v.xyz+b*q.xyz+c*(q.yzx*v.zxy-q.zxy*v.yzx);return r;}mat3 Matrix3(const in vec4 quaternion){float x=quaternion.x;float y=quaternion.y;float z=quaternion.z;float w=quaternion.w;float A=y*y;float B=z*z;float C=x*y;float D=z*w;float E=z*x;float F=y*w;float G=x*x;float H=y*z;float I=x*w;return mat3(1.0-2.0*(A+B),2.0*(C+D),2.0*(E-F),2.0*(C-D),1.0-2.0*(B+G),2.0*(H+I),2.0*(E+F),2.0*(H-I),1.0-2.0*(A+G));}uint seed=1u;void srand(const in int value){seed=uint(value);}float random(){seed=seed*1103515245u+12345u;return float(seed)/4294967295.0;}float getRandomValue(const in float min,const in float max){return min+random()*(max-min);}float getRandomLifetime(){float v=particleLifetime*lifetimeVariation;float min_=max(0.0,particleLifetime-v);float max_=particleLifetime+v;return getRandomValue(min_,max_);}float getRandomSpeed(){float v=speed*variation;float min_=max(0.0,speed-v);float max_=speed+v;return getRandomValue(min_,max_);}vec3 getRandomNormal(){float theta=getRandomValue(-M_PI,M_PI);float cphi=getRandomValue(-1.0,1.0);float r=sqrt(1.0-cphi*cphi);return vec3(sin(theta)*r,cos(theta)*r,cphi);}vec3 getRandomNormalWithAngle(const in float angle){float theta=getRandomValue(-M_PI,M_PI);float cphi=getRandomValue(cos(angle),1.0);float r=sqrt(1.0-cphi*cphi);return vec3(sin(theta)*r,cos(theta)*r,cphi);}vec3 getRandomNormalWithDirectionAndAngle(const in vec3 direction,const in float angle){vec4 rotation=Quaternion(vec3(0.0,0.0,1.0),direction);vec3 normal=getRandomNormalWithAngle(angle);return multVecQuat(normal,rotation);}vec3 getRandomSurfaceNormal(const in vec3 direction){float theta=getRandomValue(-M_PI,M_PI);float cphi=pow(random(),1.0/3.0);float r=sqrt(1.0-cphi*cphi);vec3 normal=vec3(sin(theta)*r,cos(theta)*r,cphi);vec4 rotation=Quaternion(vec3(0.0,0.0,1.0),direction);return multVecQuat(normal,rotation);}vec3 getRandomSphericalVelocity(){vec3 normal=getRandomNormal();float speed=getRandomSpeed();return normal*speed;}int upperBound(const in sampler2D sampler,in int count,const in float value){int first=0;int step=0;while(count>0){int index=first;step=count>>1;index+=step;if(value<texelFetch(sampler,index,0).x){count=step;}else{first=++index;count-=step+1;}}return first;}void interpolate(const in sampler2D sampler,const in int count,const in float fraction,out int index0,out int index1,out float weight){if(count==1||fraction<=texelFetch(sampler,0,0).x){index0=0;index1=0;weight=0.0;}else if(fraction>=texelFetch(sampler,count-1,0).x){index0=count-2;index1=count-1;weight=1.0;}else{int index=upperBound(sampler,count,fraction);if(index<count){index1=index;index0=index-1;float key0=texelFetch(sampler,index0,0).x;float key1=texelFetch(sampler,index1,0).x;weight=clamp((fraction-key0)/(key1-key0),0.0,1.0);}else{index0=0;index1=0;weight=0.0;}}}void interpolate(const in sampler2D sampler,const in int count,const in float fraction,out int index0){if(count==1||fraction<=texelFetch(sampler,0,0).x){index0=0;}else if(fraction>=texelFetch(sampler,count-1,0).x){index0=count-2;}else{int index=upperBound(sampler,count,fraction);if(index<count)index0=index-1;else index0=0;}}vec3 getRandomBarycentricCoord(){float u=random();float v=random();if(u+v>1.0){u=1.0-u;v=1.0-v;}float t=1.0-u-v;return vec3(t,u,v);}void getRandomPointOnSurface(const in sampler2D surface,const in int verticesIndex,const in int normalsIndex,out vec4 position,out vec3 normal){float lastAreaSoFar=texelFetch(surface,verticesIndex-1,0).x;float fraction=random()*lastAreaSoFar;int index0;int index1;int index2;float weight;interpolate(surface,verticesIndex,fraction,index0,index1,weight);index0*=3;index1=index0+1;index2=index0+2;vec4 vertex0=texelFetch(surface,verticesIndex+index0,0);vec4 vertex1=texelFetch(surface,verticesIndex+index1,0);vec4 vertex2=texelFetch(surface,verticesIndex+index2,0);vec3 normal0=texelFetch(surface,normalsIndex+index0,0).xyz;vec3 normal1=texelFetch(surface,normalsIndex+index1,0).xyz;vec3 normal2=texelFetch(surface,normalsIndex+index2,0).xyz;vec3 r=getRandomBarycentricCoord();position=r.z*vertex0+r.x*vertex1+r.y*vertex2;normal=save_normalize(r.z*normal0+r.x*normal1+r.y*normal2);}\n${this.functions.join("\n")}\n vec4 getColor(const in float lifetime,const in float elapsedTime){if(numColors>0){float fraction=elapsedTime/lifetime;int index0;int index1;float weight;interpolate(colorRamp,numColors,fraction,index0,index1,weight);vec4 color0=texelFetch(colorRamp,numColors+index0,0);vec4 color1=texelFetch(colorRamp,numColors+index1,0);return mix(color0,color1,weight);}else{return vec4(1.0);}}void bounce(const in vec4 fromPosition,inout vec4 toPosition,inout vec3 velocity){if(boundedHierarchyRoot<0)return;Line3 line=Line3(fromPosition.xyz,save_normalize(velocity));vec4 points[ARRAY_SIZE];vec3 normals[ARRAY_SIZE];int numIntersections=getIntersections(boundedVolume,boundedVerticesIndex,boundedNormalsIndex,boundedHierarchyIndex,boundedHierarchyRoot,line,points,normals);if(numIntersections==0)return;Plane3 plane1=plane3(line.point,line.direction);int index=min_index(points,numIntersections,0.0,plane1);if(index==-1)return;Plane3 plane2=plane3(points[index].xyz,normals[index]);if(sign(plane_distance(plane2,fromPosition.xyz))==sign(plane_distance(plane2,toPosition.xyz)))return;velocity=reflect(velocity,normals[index]);toPosition=vec4(points[index].xyz+reflect(points[index].xyz-fromPosition.xyz,normals[index]),1.0);}int getTexCoordIndex0(const in float lifetime,const in float elapsedTime){if(numTexCoords==0){return-1;}else{float fraction=elapsedTime/lifetime;int index0=0;interpolate(texCoordRamp,numTexCoords,fraction,index0);return numTexCoords+index0*texCoordCount;}}void main(){int life=int(input0[0]);float lifetime=input0[1];float elapsedTime=input0[2]+deltaTime;srand((gl_VertexID+randomSeed)*randomSeed);if(elapsedTime>lifetime){lifetime=getRandomLifetime();elapsedTime=0.0;output0=vec4(max(life+1,1),lifetime,elapsedTime,getTexCoordIndex0(lifetime,elapsedTime));if(createParticles){output1=getColor(lifetime,elapsedTime);output2=vec4(getRandomVelocity(),0.0);output6=getRandomPosition();}else{output1=vec4(0.0);output2=vec4(0.0);output6=vec4(NaN);}}else{vec3 velocity=input2.xyz;vec4 position=input6;for(int i=0;i<numForces;++i){vec4 force=texelFetch(forces,i,0);float turbulence=force.w;vec3 normal=getRandomNormalWithDirectionAndAngle(force.xyz,turbulence);float speed=length(force.xyz);velocity+=normal*speed;}position.xyz+=velocity*deltaTime;bounce(input6,position,velocity);output0=vec4(life,lifetime,elapsedTime,getTexCoordIndex0(lifetime,elapsedTime));output1=getColor(lifetime,elapsedTime);output2=vec4(velocity,0.0);output6=position;}switch(geometryType){case POINT:case SPRITE:case GEOMETRY:{output3=vec4(1.0,0.0,0.0,0.0);output4=vec4(0.0,1.0,0.0,0.0);output5=vec4(0.0,0.0,1.0,0.0);break;}case LINE:{mat3 r=Matrix3(Quaternion(vec3(0.0,0.0,1.0),output2.xyz));mat3 s=mat3(1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,particleSize.y);mat3 m=r*s;output3=vec4(m[0],0.0);output4=vec4(m[1],0.0);output5=vec4(m[2],0.0);break;}default:{output3=vec4(particleSize.x,0.0,0.0,0.0);output4=vec4(0.0,particleSize.y,0.0,0.0);output5=vec4(0.0,0.0,1.0,0.0);break;}}}`,n=t.createShader(t.VERTEX_SHADER);t.shaderSource(n,i),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS)||console.error(t.getShaderInfoLog(n));const o=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(o,"#version 300 es\nprecision highp float;void main(){}"),t.compileShader(o),t.getShaderParameter(o,t.COMPILE_STATUS)||console.error(t.getShaderInfoLog(o));const r=t.createProgram();t.attachShader(r,n),t.attachShader(r,o),t.transformFeedbackVaryings(r,Array.from({length:7},((e,t)=>"output"+t)),t.INTERLEAVED_ATTRIBS),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||console.error("Couldn't initialize particle shader: "+t.getProgramInfoLog(r)),r.inputs=[[0,t.getAttribLocation(r,"input0")],[2,t.getAttribLocation(r,"input2")],[6,t.getAttribLocation(r,"input6")]],r.randomSeed=t.getUniformLocation(r,"randomSeed"),r.geometryType=t.getUniformLocation(r,"geometryType"),r.createParticles=t.getUniformLocation(r,"createParticles"),r.particleLifetime=t.getUniformLocation(r,"particleLifetime"),r.lifetimeVariation=t.getUniformLocation(r,"lifetimeVariation"),r.deltaTime=t.getUniformLocation(r,"deltaTime"),r.particleSize=t.getUniformLocation(r,"particleSize"),r.numForces=t.getUniformLocation(r,"numForces"),r.forces=t.getUniformLocation(r,"forces"),r.boundedVerticesIndex=t.getUniformLocation(r,"boundedVerticesIndex"),r.boundedNormalsIndex=t.getUniformLocation(r,"boundedNormalsIndex"),r.boundedHierarchyIndex=t.getUniformLocation(r,"boundedHierarchyIndex"),r.boundedHierarchyRoot=t.getUniformLocation(r,"boundedHierarchyRoot"),r.boundedVolume=t.getUniformLocation(r,"boundedVolume"),r.numColors=t.getUniformLocation(r,"numColors"),r.colorRamp=t.getUniformLocation(r,"colorRamp"),r.texCoordCount=t.getUniformLocation(r,"texCoordCount"),r.numTexCoords=t.getUniformLocation(r,"numTexCoords"),r.texCoordRamp=t.getUniformLocation(r,"texCoordRamp");for(const e of Object.keys(this.uniforms))r[e]=t.getUniformLocation(r,e);r.NaN=t.getUniformLocation(r,"NaN"),t.useProgram(r);for(const i of this.samplers){const n=t.getUniformLocation(r,i);t.uniform1i(n,r[i+"TextureUnit"]=e.getTexture2DUnit())}return t.uniform1f(r.NaN,NaN),e.resetTextureUnits(),r},activateTextures(){},createTexture(){const e=this.getBrowser().getContext(),t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,1,1,0,e.RGBA,e.FLOAT,new Float32Array(4)),t},getTexture2DUnit(e,t,i){const n=t[i];return void 0===n?t[i]=e.getTexture2DUnit():n}}),Object.defineProperties(F,{typeName:{value:"X3DParticleEmitterNode",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0}});const E=F;m().add("X3DParticleEmitterNode","x_ite/Components/ParticleSystems/X3DParticleEmitterNode",E);const S=E,P=window[Symbol.for("X_ITE.X3D-9.2.5")].require("standard/Math/Numbers/Vector3");var A=i.n(P);function O(e){S.call(this,e),this.addType(_().PointEmitter),this._position.setUnit("length"),this.addUniform("position","uniform vec3 position;"),this.addUniform("direction","uniform vec3 direction;"),this.addFunction("vec3 getRandomVelocity ()\n {\n if (direction == vec3 (0.0))\n return getRandomSphericalVelocity ();\n\n else\n return direction * getRandomSpeed ();\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n return vec4 (position, 1.0);\n }")}Object.assign(Object.setPrototypeOf(O.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this),this.getBrowser().getContext().getVersion()<2||(this._position.addInterest("set_position__",this),this._direction.addInterest("set_direction__",this),this.set_position__(),this.set_direction__())},set_position__(){const e=this._position.getValue();this.setUniform("uniform3f","position",e.x,e.y,e.z)},set_direction__:(()=>{const e=new(A())(0,0,0);return function(){e.assign(this._direction.getValue()).normalize(),this.setUniform("uniform3f","direction",e.x,e.y,e.z)}})()}),Object.defineProperties(O,{typeName:{value:"PointEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"position",new(o().SFVec3f)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(0,1,0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat))]),enumerable:!0}});const N=O;m().add("PointEmitter","x_ite/Components/ParticleSystems/PointEmitter",N);const C=N,B=Symbol();Symbol();function V(){}Object.assign(V.prototype,{getDefaultEmitter(){return this[B]=new C(this.getPrivateScene()),this[B].setPrivate(!0),this[B].setup(),this.getDefaultEmitter=function(){return this[B]},Object.defineProperty(this,"getDefaultEmitter",{enumerable:!1}),this[B]}});const D=V;m().add("X3DParticleSystemsContext","x_ite/Browser/ParticleSystems/X3DParticleSystemsContext",D);const z=D;function U(e){d().call(this,e),this.addType(_().X3DParticlePhysicsModelNode)}Object.assign(Object.setPrototypeOf(U.prototype,d().prototype),{addForce(){}}),Object.defineProperties(U,{typeName:{value:"X3DParticlePhysicsModelNode",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0}});const M=U;m().add("X3DParticlePhysicsModelNode","x_ite/Components/ParticleSystems/X3DParticlePhysicsModelNode",M);const L=M,X=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Base/X3DCast");var j=i.n(X);function q(e){L.call(this,e),this.addType(_().BoundedPhysicsModel)}Object.assign(Object.setPrototypeOf(q.prototype,L.prototype),{initialize(){L.prototype.initialize.call(this),this._geometry.addInterest("set_geometry__",this),this.set_geometry__()},set_geometry__(){this.geometryNode&&this.geometryNode._rebuild.removeInterest("addNodeEvent",this),this.geometryNode=j()(_().X3DGeometryNode,this._geometry),this.geometryNode&&this.geometryNode._rebuild.addInterest("addNodeEvent",this)},addGeometry(e,t){if(this.geometryNode&&this._enabled.getValue()){const i=this.geometryNode.getNormals().getValue(),n=this.geometryNode.getVertices().getValue();for(const t of i)e.push(t);for(const e of n)t.push(e)}}}),Object.defineProperties(q,{typeName:{value:"BoundedPhysicsModel",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:2}),enumerable:!0},containerField:{value:"physics",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"enabled",new(o().SFBool)(!0)),new(s())(_().inputOutput,"geometry",new(o().SFNode))]),enumerable:!0}});const H=q;m().add("BoundedPhysicsModel","x_ite/Components/ParticleSystems/BoundedPhysicsModel",H);const G=H;function k(e){S.call(this,e),this.addType(_().ConeEmitter),this._position.setUnit("length"),this._angle.setUnit("angle"),this.addUniform("position","uniform vec3 position;"),this.addUniform("direction","uniform vec3 direction;"),this.addUniform("angle","uniform float angle;"),this.addFunction("vec3 getRandomVelocity ()\n {\n if (direction == vec3 (0.0))\n {\n return getRandomSphericalVelocity ();\n }\n else\n {\n vec3 normal = getRandomNormalWithDirectionAndAngle (direction, angle);\n float speed = getRandomSpeed ();\n\n return normal * speed;\n }\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n return vec4 (position, 1.0);\n }")}Object.assign(Object.setPrototypeOf(k.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this),this.getBrowser().getContext().getVersion()<2||(this._position.addInterest("set_position__",this),this._direction.addInterest("set_direction__",this),this._angle.addInterest("set_angle__",this),this.set_position__(),this.set_direction__(),this.set_angle__())},set_position__(){const e=this._position.getValue();this.setUniform("uniform3f","position",e.x,e.y,e.z)},set_direction__(){const e=this._direction.getValue();this.setUniform("uniform3f","direction",e.x,e.y,e.z)},set_angle__(){this.setUniform("uniform1f","angle",this._angle.getValue())}}),Object.defineProperties(k,{typeName:{value:"ConeEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"position",new(o().SFVec3f)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(0,1,0)),new(s())(_().inputOutput,"angle",new(o().SFFloat)(.785398)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat))]),enumerable:!0}});const Y=k;m().add("ConeEmitter","x_ite/Components/ParticleSystems/ConeEmitter",Y);const W=Y;function K(e){S.call(this,e),this.addType(_().ExplosionEmitter),this._position.setUnit("length"),this.addUniform("position","uniform vec3 position;"),this.addFunction("vec3 getRandomVelocity ()\n {\n return getRandomSphericalVelocity ();\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n return vec4 (position, 1.0);\n }")}Object.assign(Object.setPrototypeOf(K.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this),this.getBrowser().getContext().getVersion()<2||(this._position.addInterest("set_position__",this),this.set_position__())},isExplosive:()=>!0,set_position__(){const e=this._position.getValue();this.setUniform("uniform3f","position",e.x,e.y,e.z)}}),Object.defineProperties(K,{typeName:{value:"ExplosionEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"position",new(o().SFVec3f)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat))]),enumerable:!0}});const Q=K;m().add("ExplosionEmitter","x_ite/Components/ParticleSystems/ExplosionEmitter",Q);const Z=Q;function $(e){L.call(this,e),this.addType(_().ForcePhysicsModel),this._force.setUnit("force")}Object.assign(Object.setPrototypeOf($.prototype,L.prototype),{addForce:(()=>{const e=new(A())(0,0,0);return function(t,i,n,o){return!!this._enabled.getValue()&&(o.set(e.assign(this._force.getValue()).multiply(n),4*t),o[4*t+3]=0,!0)}})()}),Object.defineProperties($,{typeName:{value:"ForcePhysicsModel",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"physics",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"enabled",new(o().SFBool)(!0)),new(s())(_().inputOutput,"force",new(o().SFVec3f)(0,-9.8,0))]),enumerable:!0}});const J=$;m().add("ForcePhysicsModel","x_ite/Components/ParticleSystems/ForcePhysicsModel",J);const ee=J,te=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Components/Shape/X3DShapeNode");var ie=i.n(te);const ne=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Browser/Rendering/GeometryContext");var oe=i.n(ne);const re=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Rendering/VertexArray");var se=i.n(re);const ae=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Rendering/TraverseType");var ce=i.n(ae);const le=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Browser/Shape/AlphaMode");var de=i.n(le);const ue=window[Symbol.for("X_ITE.X3D-9.2.5")].require("standard/Math/Numbers/Matrix4");var me=i.n(ue);const he=window[Symbol.for("X_ITE.X3D-9.2.5")].require("standard/Math/Numbers/Matrix3");var pe=i.n(he);const fe=window[Symbol.for("X_ITE.X3D-9.2.5")].require("standard/Math/Geometry/Plane3");var xe=i.n(fe);function _e(e,t){this.array=e,t&&(this.compare=t)}Object.assign(_e.prototype,{compare:(e,t)=>e<t,sort(e,t){t-e>1&&this.quicksort(e,t-1)},quicksort(e,t){let i=e,n=t;const{array:o,compare:r}=this,s=o[e+t>>>1];for(;;){for(;r(o[i],s);)++i;for(;r(s,o[n]);)--n;if(!(i<n)){i===n&&(++i,--n);break}{const e=o[i];o[i]=o[n],o[n]=e,i++,n--}}e<n&&this.quicksort(e,n),i<t&&this.quicksort(i,t)}});const ye=_e;m().add("QuickSort","standard/Math/Algorithms/QuickSort",ye);const ve=ye,ge=new(A())(0,0,0),be=new(A())(0,0,0),Te=new(A())(0,0,0),we={u:0,v:0,t:0},Re=[new(A())(0,0,1),new(A())(0,0,-1),new(A())(0,1,0),new(A())(0,-1,0),new(A())(1,0,0)];function Ie(e,t){this.vertices=e.vertices,this.normals=e.normals,this.triangle=t,this.i4=12*t,this.i3=9*t}function Fe(e,t,i,n){this.min=new(A())(0,0,0),this.max=new(A())(0,0,0),this.planes=[],this.intersection=new(A())(0,0,0);const o=e.vertices,r=this.min,s=this.max,a=i+n;let c=12*t[i];r.set(o[c],o[c+1],o[c+2]),s.assign(r);for(let e=i;e<a;++e)c=12*t[e],ge.set(o[c],o[c+1],o[c+2]),be.set(o[c+4],o[c+5],o[c+6]),Te.set(o[c+8],o[c+9],o[c+10]),r.min(ge,be,Te),s.max(ge,be,Te);for(let e=0;e<5;++e)this.planes[e]=new(xe())(e%2?r:s,Re[e]);if(n>2){e.sorter.compare.axis=this.getLongestAxis(r,s),e.sorter.sort(i,a);var l=n>>>1}else l=1;const d=n-l;this.left=l>1?new Fe(e,t,i,l):new Ie(e,t[i]),this.right=d>1?new Fe(e,t,i+l,d):new Ie(e,t[i+l])}function Ee(e,t){const i=e.length/12;switch(this.vertices=e,this.normals=t,i){case 0:this.root=null;break;case 1:this.root=new Ie(this,0);break;default:{const t=[];for(let e=0;e<i;++e)t.push(e);this.sorter=new ve(t,function(e,t){return function(i,n){return Math.min(e[i+t],e[i+4+t],e[i+8+t])<Math.min(e[n+t],e[n+4+t],e[n+8+t])}}(e,0)),this.root=new Fe(this,t,0,i);break}}}Object.assign(Ie.prototype,{intersectsLine(e,t,i){const n=this.vertices,o=this.normals,r=this.i4,s=this.i3;if(ge.x=n[r],ge.y=n[r+1],ge.z=n[r+2],be.x=n[r+4],be.y=n[r+5],be.z=n[r+6],Te.x=n[r+8],Te.y=n[r+9],Te.z=n[r+10],e.intersectsTriangle(ge,be,Te,we)){const e=we.u,a=we.v,c=1-e-a,l=t.size++;l>=t.length&&t.push(new(A())(0,0,0)),t[l].set(c*n[r]+e*n[r+4]+a*n[r+8],c*n[r+1]+e*n[r+5]+a*n[r+9],c*n[r+2]+e*n[r+6]+a*n[r+10]),i&&(l>=i.length&&i.push(new(A())(0,0,0)),i[l].set(c*o[s]+e*o[s+3]+a*o[s+6],c*o[s+1]+e*o[s+4]+a*o[s+7],c*o[s+2]+e*o[s+5]+a*o[s+8]))}},toArray(e){const t=e.length/4;return e.push(1,3*this.triangle,0,0),t}}),Object.assign(Fe.prototype,{intersectsLine(e,t,i){this.intersectsBBox(e)&&(this.left.intersectsLine(e,t,i),this.right.intersectsLine(e,t,i))},intersectsBBox(e){const t=this.planes,i=this.min,n=this.max,o=i.x,r=n.x,s=i.y,a=n.y,c=i.z,l=n.z,d=this.intersection;return!!(t[0].intersectsLine(e,d)&&d.x>=o&&d.x<=r&&d.y>=s&&d.y<=a)||(!!(t[1].intersectsLine(e,d)&&d.x>=o&&d.x<=r&&d.y>=s&&d.y<=a)||(!!(t[2].intersectsLine(e,d)&&d.x>=o&&d.x<=r&&d.z>=c&&d.z<=l)||(!!(t[3].intersectsLine(e,d)&&d.x>=o&&d.x<=r&&d.z>=c&&d.z<=l)||!!(t[4].intersectsLine(e,d)&&d.y>=s&&d.y<=a&&d.z>=c&&d.z<=l))))},getLongestAxis(e,t){const i=t.x-e.x,n=t.y-e.y,o=t.z-e.z;return i<n?n<o?2:1:i<o?2:0},toArray(e){const t=this.left.toArray(e),i=this.right.toArray(e),n=this.min,o=this.max,r=e.length/4;return e.push(0,t,i,0,n.x,n.y,n.z,0,o.x,o.y,o.z,0),r}}),Object.assign(Ee.prototype,{intersectsLine(e,t,i){return t.size=0,this.root?(this.root.intersectsLine(e,t,i),t.size):0},toArray(e){if(this.root){const t=this.root.toArray(e);e.push(t,0,0,0)}return e}});const Se=Ee;m().add("BVH","standard/Math/Utility/BVH",Se);const Pe=Se;var Ae=i(72);const Oe=new Float32Array([0,0,0,1]),Ne=new Float32Array([0,0,0,1,1,0,0,1,0,0,-.5,1,0,0,.5,1]),Ce=new Float32Array([0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,-.5,-.5,0,1,.5,-.5,0,1,.5,.5,0,1,-.5,-.5,0,1,.5,.5,0,1,-.5,.5,0,1]);function Be(e){ie().call(this,e),this.addType(_().ParticleSystem),this._particleSize.setUnit("length"),e.getSpecificationVersion()<=3.3&&(this.addAlias("colorRamp",this._color),this.addAlias("texCoordRamp",this._texCoord));const t=this.getBrowser();this.maxParticles=0,this.numParticles=0,this.forcePhysicsModelNodes=[],this.forces=new Float32Array(4),this.boundedPhysicsModelNodes=[],this.boundedNormals=[],this.boundedVertices=[],this.colorRamp=new Float32Array,this.texCoordRamp=new Float32Array,this.geometryContext=new(oe())({textureCoordinateNode:t.getDefaultTextureCoordinate()}),this.creationTime=0,this.pauseTime=0,this.deltaTime=0,this.particleStride=7*Float32Array.BYTES_PER_ELEMENT*4,this.particleOffsets=Array.from({length:7},((e,t)=>4*Float32Array.BYTES_PER_ELEMENT*t)),this.particleOffset=this.particleOffsets[0],this.colorOffset=this.particleOffsets[1],this.matrixOffset=this.particleOffsets[3],this.texCoordOffset=0}Object.assign(Object.setPrototypeOf(Be.prototype,ie().prototype),{initialize(){ie().prototype.initialize.call(this);const e=this.getBrowser(),t=e.getContext();e.getContext().getVersion()<2||(this.getLive().addInterest("set_live__",this),this._enabled.addInterest("set_enabled__",this),this._createParticles.addInterest("set_createParticles__",this),this._geometryType.addInterest("set_geometryType__",this),this._geometryType.addInterest("set_texCoord__",this),this._maxParticles.addInterest("set_enabled__",this),this._particleLifetime.addInterest("set_particleLifetime__",this),this._lifetimeVariation.addInterest("set_lifetimeVariation__",this),this._emitter.addInterest("set_emitter__",this),this._physics.addInterest("set_physics__",this),this._colorKey.addInterest("set_color__",this),this._color.addInterest("set_colorRamp__",this),this._texCoordKey.addInterest("set_texCoord__",this),this._texCoord.addInterest("set_texCoordRamp__",this),this.inputParticles=this.createBuffer(),this.outputParticles=this.createBuffer(),this.inputParticles.vertexArrayObject=new(se())(t),this.outputParticles.vertexArrayObject=new(se())(t),this.forcesTexture=this.createTexture(),this.boundedTexture=this.createTexture(),this.colorRampTexture=this.createTexture(),this.texCoordRampTexture=this.createTexture(),this.geometryBuffer=this.createBuffer(),this.texCoordBuffers=new Array(e.getMaxTexCoords()).fill(this.geometryBuffer),this.set_emitter__(),this.set_enabled__(),this.set_geometryType__(),this.set_createParticles__(),this.set_particleLifetime__(),this.set_lifetimeVariation__(),this.set_physics__(),this.set_colorRamp__(),this.set_texCoordRamp__())},getShapeKey(){return this.numTexCoords?2:1},getGeometryContext(){return this.geometryType===f.GEOMETRY?this.getGeometry():this.geometryContext},set_bbox__(){this._bboxSize.getValue().equals(this.getDefaultBBoxSize())?this.bbox.set():this.bbox.set(this._bboxSize.getValue(),this._bboxCenter.getValue()),this.bboxSize.assign(this.bbox.size),this.bboxCenter.assign(this.bbox.center)},set_transparent__(){const e=this.appearanceNode.getAlphaMode();if(e===de().AUTO){if(this.geometryType===f.POINT)this.setTransparent(!0);else this.setTransparent(!!(this.getAppearance().isTransparent()||this.colorRampNode?.isTransparent()||this.geometryType===f.GEOMETRY&&this.geometryNode?.isTransparent()));this.setAlphaMode(this.isTransparent()?de().BLEND:de().OPAQUE)}else this.setTransparent(e===de().BLEND),this.setAlphaMode(e)},set_live__(){this.getLive().getValue()?this._isActive.getValue()&&this._maxParticles.getValue()&&(this.getBrowser().sensorEvents().addInterest("animateParticles",this),this.pauseTime&&(this.creationTime+=Date.now()/1e3-this.pauseTime,this.pauseTime=0)):this._isActive.getValue()&&this._maxParticles.getValue()&&(this.getBrowser().sensorEvents().removeInterest("animateParticles",this),0===this.pauseTime&&(this.pauseTime=Date.now()/1e3))},set_enabled__(){this._enabled.getValue()&&this._maxParticles.getValue()?this._isActive.getValue()||(this.getLive().getValue()?(this.getBrowser().sensorEvents().addInterest("animateParticles",this),this.pauseTime=0):this.pauseTime=Date.now()/1e3,this._isActive=!0,delete this.traverse):this._isActive.getValue()&&(this.getLive().getValue()&&this.getBrowser().sensorEvents().removeInterest("animateParticles",this),this._isActive=!1,this.numParticles=0,this.traverse=Function.prototype),this.set_maxParticles__()},set_createParticles__(){this.createParticles=this._createParticles.getValue()},set_geometryType__(){const e=this.getBrowser().getContext();switch(this.geometryType=Ae.enum(f,this._geometryType.getValue(),f.QUAD),this.geometryType){case f.POINT:this.geometryContext.geometryType=0,this.geometryContext.hasNormals=!1,this.texCoordCount=0,this.vertexCount=1,this.hasNormals=!1,this.verticesOffset=0,this.primitiveMode=e.POINTS,e.bindBuffer(e.ARRAY_BUFFER,this.geometryBuffer),e.bufferData(e.ARRAY_BUFFER,Oe,e.DYNAMIC_DRAW);break;case f.LINE:this.geometryContext.geometryType=1,this.geometryContext.hasNormals=!1,this.texCoordCount=2,this.vertexCount=2,this.hasNormals=!1,this.texCoordsOffset=0,this.verticesOffset=8*Float32Array.BYTES_PER_ELEMENT,this.primitiveMode=e.LINES,e.bindBuffer(e.ARRAY_BUFFER,this.geometryBuffer),e.bufferData(e.ARRAY_BUFFER,Ne,e.DYNAMIC_DRAW);break;case f.TRIANGLE:case f.QUAD:case f.SPRITE:this.geometryContext.geometryType=2,this.geometryContext.hasNormals=!0,this.texCoordCount=4,this.vertexCount=6,this.hasNormals=!0,this.texCoordsOffset=0,this.normalOffset=24*Float32Array.BYTES_PER_ELEMENT,this.verticesOffset=27*Float32Array.BYTES_PER_ELEMENT,this.primitiveMode=e.TRIANGLES,e.bindBuffer(e.ARRAY_BUFFER,this.geometryBuffer),e.bufferData(e.ARRAY_BUFFER,Ce,e.DYNAMIC_DRAW);break;case f.GEOMETRY:this.texCoordCount=0}this.geometryContext.updateGeometryKey(),this.updateVertexArrays(),this.set_transparent__()},set_maxParticles__(){const e=this.numParticles,t=Math.max(0,this._maxParticles.getValue());this.maxParticles=t,this.numParticles=Math.min(e,t),this.emitterNode.isExplosive()||(this.creationTime=Date.now()/1e3),this.resizeBuffers(e),this.updateVertexArrays()},set_particleLifetime__(){this.particleLifetime=this._particleLifetime.getValue()},set_lifetimeVariation__(){this.lifetimeVariation=this._lifetimeVariation.getValue()},set_emitter__(){this.emitterNode=j()(_().X3DParticleEmitterNode,this._emitter),this.emitterNode||(this.emitterNode=this.getBrowser().getDefaultEmitter()),this.createParticles=this._createParticles.getValue()},set_physics__(){const e=this._physics.getValue(),t=this.forcePhysicsModelNodes,i=this.boundedPhysicsModelNodes;for(let e=0,t=i.length;e<t;++e)i[e].removeInterest("set_boundedPhysics__",this);t.length=0,i.length=0;for(let n=0,o=e.length;n<o;++n)try{const o=e[n].getValue().getInnerNode(),r=o.getType();for(let e=r.length-1;e>=0;--e){switch(r[e]){case _().ForcePhysicsModel:case _().WindPhysicsModel:t.push(o);break;case _().BoundedPhysicsModel:o.addInterest("set_boundedPhysics__",this),i.push(o);break;default:continue}break}}catch{}this.set_boundedPhysics__()},set_boundedPhysics__(){const e=this.getBrowser().getContext(),t=this.boundedPhysicsModelNodes,i=this.boundedNormals,n=this.boundedVertices;i.length=0,n.length=0;for(let e=0,o=t.length;e<o;++e)t[e].addGeometry(i,n);const o=new Pe(n,i).toArray([]),r=n.length/4,s=i.length/3,a=o.length/4,c=Math.ceil(Math.sqrt(r+s+a)),l=new Float32Array(c*c*4);this.boundedVerticesIndex=0,this.boundedNormalsIndex=r,this.boundedHierarchyIndex=this.boundedNormalsIndex+s,this.boundedHierarchyRoot=this.boundedHierarchyIndex+a-1,l.set(n);for(let e=4*this.boundedNormalsIndex,t=0,n=i.length;t<n;e+=4,t+=3)l[e+0]=i[t+0],l[e+1]=i[t+1],l[e+2]=i[t+2];l.set(o,4*this.boundedHierarchyIndex),c&&(e.bindTexture(e.TEXTURE_2D,this.boundedTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,c,c,0,e.RGBA,e.FLOAT,l))},set_colorRamp__(){this.colorRampNode&&this.colorRampNode.removeInterest("set_color__",this),this.colorRampNode=j()(_().X3DColorNode,this._color),this.colorRampNode&&this.colorRampNode.addInterest("set_color__",this),this.set_color__(),this.set_transparent__()},set_color__(){const e=this.getBrowser().getContext(),t=this._colorKey,i=t.length,n=Math.ceil(Math.sqrt(2*i));let o=this.colorRamp;n*n*4>o.length&&(o=this.colorRamp=new Float32Array(n*n*4));for(let e=0;e<i;++e)o[4*e]=t[e];this.colorRampNode?o.set(this.colorRampNode.addColors([],i).slice(0,4*i),4*i):o.fill(1,4*i),n&&(e.bindTexture(e.TEXTURE_2D,this.colorRampTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,n,0,e.RGBA,e.FLOAT,o)),this.numColors=i,this.geometryContext.colorMaterial=!(!i||!this.colorRampNode),this.geometryContext.updateGeometryKey(),this.updateVertexArrays()},set_texCoordRamp__(){this.texCoordRampNode&&this.texCoordRampNode.removeInterest("set_texCoord__",this),this.texCoordRampNode=j()(_().X3DTextureCoordinateNode,this._texCoord),this.texCoordRampNode&&this.texCoordRampNode.addInterest("set_texCoord__",this),this.set_texCoord__()},set_texCoord__(){const e=this.getBrowser().getContext(),t=this._texCoordKey,i=t.length,n=Math.ceil(Math.sqrt(i+i*this.texCoordCount));let o=this.texCoordRamp;n*n*4>o.length?o=this.texCoordRamp=new Float32Array(n*n*4):o.fill(0);for(let e=0;e<i;++e)o[4*e]=t[e];this.texCoordRampNode&&o.set(this.texCoordRampNode.addPoints([]).slice(0,i*this.texCoordCount*4),4*i),n&&(e.bindTexture(e.TEXTURE_2D,this.texCoordRampTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,n,0,e.RGBA,e.FLOAT,o)),this.numTexCoords=this.texCoordRampNode?i:0,this.updateVertexArrays()},updateVertexArrays(){this.inputParticles.vertexArrayObject.update(),this.outputParticles.vertexArrayObject.update()},createTexture(){const e=this.getBrowser().getContext(),t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,1,1,0,e.RGBA,e.FLOAT,new Float32Array(4)),t},createBuffer(){const e=this.getBrowser().getContext(),t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Uint32Array,e.DYNAMIC_DRAW),t},resizeBuffers(e){const t=this.getBrowser().getContext(),i=this.maxParticles,n=this.particleStride,o=Object.assign(t.createBuffer(),this.outputParticles),r=new Uint8Array(i*n);t.bindBuffer(t.ARRAY_BUFFER,this.inputParticles),t.bufferData(t.ARRAY_BUFFER,r,t.DYNAMIC_DRAW),t.bindBuffer(t.COPY_READ_BUFFER,this.outputParticles),t.bindBuffer(t.ARRAY_BUFFER,o),t.bufferData(t.ARRAY_BUFFER,r,t.DYNAMIC_DRAW),t.copyBufferSubData(t.COPY_READ_BUFFER,t.ARRAY_BUFFER,0,0,Math.min(i*n,e*n)),t.deleteBuffer(this.outputParticles),this.outputParticles=o},animateParticles(){const e=this.getBrowser(),t=e.getContext(),i=this.emitterNode,n=1/Math.max(10,this.getBrowser().getCurrentFrameRate());let o=this.deltaTime=(14*this.deltaTime+n)/15;if(i.isExplosive()){const e=Date.now()/1e3,t=this.particleLifetime+this.particleLifetime*this.lifetimeVariation;e-this.creationTime>t?(this.creationTime=e,this.numParticles=this.maxParticles,this.createParticles=this._createParticles.getValue(),o=Number.POSITIVE_INFINITY):this.createParticles=!1}else if(this.numParticles<this.maxParticles){const e=Date.now()/1e3,t=Math.max(0,Math.floor((e-this.creationTime)*this.maxParticles/this.particleLifetime));t&&(this.creationTime=e),this.numParticles=Math.min(this.maxParticles,this.numParticles+t)}if(i.getMass()){const e=this.forcePhysicsModelNodes;let n=e.length,r=this.forces,s=o/i.getMass();4*n>r.length&&(r=this.forces=new Float32Array(4*n));let a=0;for(let t=0;t<n;++t)a+=!e[t].addForce(t-a,i,s,r);this.numForces=n-=a,n&&(t.bindTexture(t.TEXTURE_2D,this.forcesTexture),t.texImage2D(t.TEXTURE_2D,0,t.RGBA32F,n,1,0,t.RGBA,t.FLOAT,r))}else this.numForces=0;const r=this.outputParticles;this.outputParticles=this.inputParticles,this.inputParticles=r,i.animate(this,o),e.addBrowserEvent()},updateSprite:(()=>{const e=new Float32Array(Ce),t=[new(A())(-.5,-.5,0),new(A())(.5,-.5,0),new(A())(.5,.5,0),new(A())(-.5,-.5,0),new(A())(.5,.5,0),new(A())(-.5,.5,0)],i=new(A())(0,0,0),n=new(A())(0,0,0);return function(o,r){for(let t=0;t<3;++t)e[24+t]=r[6+t];n.set(this._particleSize.x,this._particleSize.y,1);for(let o=0;o<6;++o){const s=27+4*o;r.multVecMatrix(i.assign(t[o]).multVec(n)),e[s+0]=i.x,e[s+1]=i.y,e[s+2]=i.z}o.bindBuffer(o.ARRAY_BUFFER,this.geometryBuffer),o.bufferData(o.ARRAY_BUFFER,e,o.DYNAMIC_DRAW)}})(),intersectsBox(e,t){},traverse(e,t){switch(e){case ce().POINTER:t.addPointingShape(this);break;case ce().PICKING:case ce().COLLISION:break;case ce().SHADOW:this._castShadow.getValue()&&t.addShadowShape(this);break;case ce().DISPLAY:t.addDisplayShape(this)&&this.getAppearance().traverse(e,t)}this.geometryType===f.GEOMETRY&&this.getGeometry()&&this.getGeometry().traverse(e,t)},displaySimple(e,t,i){if(this.numParticles)switch(this.geometryType){case f.GEOMETRY:this.getGeometry()?.displaySimpleParticles(e,i,this);break;case f.SPRITE:this.updateSprite(e,this.getScreenAlignedRotation(t.modelViewMatrix));default:{const t=this.outputParticles;if(t.vertexArrayObject.enable(i.getProgram())){const n=this.particleStride;i.enableParticleAttribute(e,t,n,this.particleOffset,1),i.enableParticleMatrixAttribute(e,t,n,this.matrixOffset,1),i.enableVertexAttribute(e,this.geometryBuffer,0,this.verticesOffset)}e.drawArraysInstanced(this.primitiveMode,0,this.vertexCount,this.numParticles);break}}},display(e,t){if(this.numParticles)switch(this.geometryType){case f.GEOMETRY:this.getGeometry()?.displayParticles(e,t,this);break;case f.SPRITE:this.updateSprite(e,this.getScreenAlignedRotation(t.modelViewMatrix));case f.QUAD:case f.TRIANGLE:{const i=me().prototype.determinant3.call(t.modelViewMatrix)>0;e.frontFace(i?e.CCW:e.CW),e.enable(e.CULL_FACE)}default:{const i=this.getBrowser(),n=this.getAppearance(),o=n.getRenderModes(),r=n.getShader(this.geometryContext,t),s=i.getPrimitiveMode(this.primitiveMode);for(const t of o)t.enable(e);if(r.enable(e),r.setUniforms(e,this.geometryContext,t),this.numTexCoords){const t=i.getTexture2DUnit();e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texCoordRampTexture),e.uniform1i(r.x3d_TexCoordRamp,t)}const a=this.outputParticles;if(a.vertexArrayObject.enable(r.getProgram())){const t=this.particleStride;r.enableParticleAttribute(e,a,t,this.particleOffset,1),r.enableParticleMatrixAttribute(e,a,t,this.matrixOffset,1),this.geometryContext.colorMaterial&&(r.enableColorAttribute(e,a,t,this.colorOffset),r.colorAttributeDivisor(e,1)),this.texCoordCount&&r.enableTexCoordAttribute(e,this.texCoordBuffers,0,this.texCoordOffset),this.hasNormals&&(r.enableNormalAttribute(e,this.geometryBuffer,0,this.normalOffset),r.normalAttributeDivisor(e,this.maxParticles)),r.enableVertexAttribute(e,this.geometryBuffer,0,this.verticesOffset)}e.drawArraysInstanced(s,0,this.vertexCount,this.numParticles);for(const t of o)t.disable(e);break}}},getScreenAlignedRotation:(()=>{const e=new(me()),t=new(A())(0,0,0),i=new(A())(0,0,0),n=new(A())(0,0,0),o=new(pe())(9);return function(r){e.assign(r).inverse(),e.multDirMatrix(t.assign(A().zAxis)),e.multDirMatrix(i.assign(A().yAxis));const s=i.cross(t);n.assign(t).cross(s);const a=t;return s.normalize(),n.normalize(),a.normalize(),o.set(s.x,s.y,s.z,n.x,n.y,n.z,a.x,a.y,a.z),o}})()}),Object.defineProperties(Be,{typeName:{value:"ParticleSystem",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:2}),enumerable:!0},containerField:{value:"children",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"enabled",new(o().SFBool)(!0)),new(s())(_().inputOutput,"createParticles",new(o().SFBool)(!0)),new(s())(_().initializeOnly,"geometryType",new(o().SFString)("QUAD")),new(s())(_().inputOutput,"maxParticles",new(o().SFInt32)(200)),new(s())(_().inputOutput,"particleLifetime",new(o().SFFloat)(5)),new(s())(_().inputOutput,"lifetimeVariation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"particleSize",new(o().SFVec2f)(.02,.02)),new(s())(_().initializeOnly,"emitter",new(o().SFNode)),new(s())(_().initializeOnly,"physics",new(o().MFNode)),new(s())(_().initializeOnly,"colorKey",new(o().MFFloat)),new(s())(_().initializeOnly,"color",new(o().SFNode)),new(s())(_().initializeOnly,"texCoordKey",new(o().MFFloat)),new(s())(_().initializeOnly,"texCoord",new(o().SFNode)),new(s())(_().outputOnly,"isActive",new(o().SFBool)),new(s())(_().inputOutput,"castShadow",new(o().SFBool)(!0)),new(s())(_().inputOutput,"visible",new(o().SFBool)(!0)),new(s())(_().inputOutput,"bboxDisplay",new(o().SFBool)),new(s())(_().initializeOnly,"bboxSize",new(o().SFVec3f)(-1,-1,-1)),new(s())(_().initializeOnly,"bboxCenter",new(o().SFVec3f)),new(s())(_().inputOutput,"appearance",new(o().SFNode)),new(s())(_().inputOutput,"geometry",new(o().SFNode))]),enumerable:!0}});const Ve=Be;m().add("ParticleSystem","x_ite/Components/ParticleSystems/ParticleSystem",Ve);const De=Ve,ze=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Components/Rendering/IndexedLineSet");var Ue=i.n(ze);function Me(e){S.call(this,e),this.addType(_().PolylineEmitter),this.polylinesNode=new(Ue())(e),this.polylinesArray=new Float32Array,this.addSampler("polylines"),this.addUniform("direction","uniform vec3 direction;"),this.addUniform("verticesIndex","uniform int verticesIndex;"),this.addUniform("polylines","uniform sampler2D polylines;"),this.addFunction("vec3 getRandomVelocity ()\n {\n if (direction == vec3 (0.0))\n return getRandomSphericalVelocity ();\n\n else\n return direction * getRandomSpeed ();\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n if (verticesIndex < 0)\n {\n return vec4 (NaN);\n }\n else\n {\n // Determine index0, index1 and weight.\n\n float lastLengthSoFar = texelFetch (polylines, verticesIndex - 1, 0) .x;\n float fraction = random () * lastLengthSoFar;\n\n int index0 = 0;\n int index1 = 0;\n float weight = 0.0;\n\n interpolate (polylines, verticesIndex, fraction, index0, index1, weight);\n\n // Interpolate and return position.\n\n index0 *= 2;\n index1 = index0 + 1;\n\n vec4 vertex0 = texelFetch (polylines, verticesIndex + index0, 0);\n vec4 vertex1 = texelFetch (polylines, verticesIndex + index1, 0);\n\n return mix (vertex0, vertex1, weight);\n }\n }")}Object.assign(Object.setPrototypeOf(Me.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this);this.getBrowser().getContext().getVersion()<2||(this.polylinesTexture=this.createTexture(),this._direction.addInterest("set_direction__",this),this._set_coordIndex.addFieldInterest(this._coordIndex),this._coordIndex.addFieldInterest(this.polylinesNode._coordIndex),this._coord.addFieldInterest(this.polylinesNode._coord),this.polylinesNode._coordIndex=this._coordIndex,this.polylinesNode._coord=this._coord,this.polylinesNode._rebuild.addInterest("set_polyline",this),this.polylinesNode.setPrivate(!0),this.polylinesNode.setup(),this.set_direction__(),this.set_polyline())},set_direction__:(()=>{const e=new(A())(0,0,0);return function(){e.assign(this._direction.getValue()).normalize(),this.setUniform("uniform3f","direction",e.x,e.y,e.z)}})(),set_polyline:(()=>{const e=new(A())(0,0,0),t=new(A())(0,0,0);return function(){const i=this.getBrowser().getContext(),n=this.polylinesNode.getVertices().getValue(),o=n.length/4,r=o/2+1,s=Math.ceil(Math.sqrt(r+o)),a=r;let c=this.polylinesArray;c.length<s*s*4&&(c=this.polylinesArray=new Float32Array(s*s*4));let l=0;for(let i=0,o=n.length;i<o;i+=8)e.set(n[i],n[i+1],n[i+2]),t.set(n[i+4],n[i+5],n[i+6]),c[i/2+4]=l+=t.subtract(e).magnitude();c.set(n,4*a),this.setUniform("uniform1i","verticesIndex",o?a:-1),s&&(i.bindTexture(i.TEXTURE_2D,this.polylinesTexture),i.texImage2D(i.TEXTURE_2D,0,i.RGBA32F,s,s,0,i.RGBA,i.FLOAT,c))}})(),activateTextures(e,t){e.activeTexture(e.TEXTURE0+t.polylinesTextureUnit),e.bindTexture(e.TEXTURE_2D,this.polylinesTexture)}}),Object.defineProperties(Me,{typeName:{value:"PolylineEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOnly,"set_coordIndex",new(o().MFInt32)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(0,1,0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat)),new(s())(_().initializeOnly,"coordIndex",new(o().MFInt32)(-1)),new(s())(_().inputOutput,"coord",new(o().SFNode))]),enumerable:!0}});const Le=Me;m().add("PolylineEmitter","x_ite/Components/ParticleSystems/PolylineEmitter",Le);const Xe=Le,je=window[Symbol.for("X_ITE.X3D-9.2.5")].require("standard/Math/Geometry/Triangle3");var qe=i.n(je);function He(e){S.call(this,e),this.addType(_().SurfaceEmitter),this.surfaceNode=null,this.surfaceArray=new Float32Array,this.addSampler("surface"),this.addUniform("solid","uniform bool solid;"),this.addUniform("verticesIndex","uniform int verticesIndex;"),this.addUniform("normalsIndex","uniform int normalsIndex;"),this.addUniform("surface","uniform sampler2D surface;"),this.addFunction("vec4 position; vec3 getRandomVelocity ()\n {\n if (verticesIndex < 0)\n {\n return vec3 (0.0);\n }\n else\n {\n vec3 normal;\n\n getRandomPointOnSurface (surface, verticesIndex, normalsIndex, position, normal);\n\n if (solid == false && random () > 0.5)\n normal = -normal;\n\n return normal * getRandomSpeed ();\n }\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n return verticesIndex < 0 ? vec4 (NaN) : position;\n }")}Object.assign(Object.setPrototypeOf(He.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this);this.getBrowser().getContext().getVersion()<2||(this.surfaceTexture=this.createTexture(),this._surface.addInterest("set_surface__",this),this.set_surface__())},set_surface__(){this.surfaceNode&&(this.surfaceNode._solid.removeInterest("set_solid__",this),this.surfaceNode._rebuild.removeInterest("set_geometry__",this)),this.surfaceNode=j()(_().X3DGeometryNode,this._surface),this.surfaceNode&&(this.surfaceNode._solid.addInterest("set_solid__",this),this.surfaceNode._rebuild.addInterest("set_geometry__",this)),this.set_solid__(),this.set_geometry__()},set_solid__(){this.surfaceNode&&this.setUniform("uniform1i","solid",this.surfaceNode._solid.getValue())},set_geometry__:(()=>{const e=new(A())(0,0,0),t=new(A())(0,0,0),i=new(A())(0,0,0);return function(){const n=this.getBrowser().getContext();if(this.surfaceNode){const o=this.surfaceNode.getVertices().getValue(),r=this.surfaceNode.getNormals().getValue(),s=o.length/4,a=s/3+1,c=Math.ceil(Math.sqrt(a+s+s)),l=a,d=l+s;let u=this.surfaceArray;u.length<c*c*4&&(u=this.surfaceArray=new Float32Array(c*c*4));let m=0;for(let n=0,r=o.length;n<r;n+=12)e.set(o[n],o[n+1],o[n+2]),t.set(o[n+4],o[n+5],o[n+6]),i.set(o[n+8],o[n+9],o[n+10]),u[n/3+4]=m+=qe().area(e,t,i);u.set(o,4*l);for(let e=4*d,t=0,i=r.length;t<i;e+=4,t+=3)u[e+0]=r[t+0],u[e+1]=r[t+1],u[e+2]=r[t+2];this.setUniform("uniform1i","verticesIndex",s?l:-1),this.setUniform("uniform1i","normalsIndex",s?d:-1),c&&(n.bindTexture(n.TEXTURE_2D,this.surfaceTexture),n.texImage2D(n.TEXTURE_2D,0,n.RGBA32F,c,c,0,n.RGBA,n.FLOAT,u))}else this.setUniform("uniform1i","verticesIndex",-1),this.setUniform("uniform1i","normalsIndex",-1)}})(),activateTextures(e,t){e.activeTexture(e.TEXTURE0+t.surfaceTextureUnit),e.bindTexture(e.TEXTURE_2D,this.surfaceTexture)}}),Object.defineProperties(He,{typeName:{value:"SurfaceEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:2}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat)),new(s())(_().initializeOnly,"surface",new(o().SFNode))]),enumerable:!0}});const Ge=He;m().add("SurfaceEmitter","x_ite/Components/ParticleSystems/SurfaceEmitter",Ge);const ke=Ge,Ye=window[Symbol.for("X_ITE.X3D-9.2.5")].require("x_ite/Components/Geometry3D/IndexedFaceSet");var We=i.n(Ye);function Ke(e){S.call(this,e),this.addType(_().VolumeEmitter),this.volumeNode=new(We())(e),this.volumeArray=new Float32Array,this.addSampler("volume"),this.addUniform("direction","uniform vec3 direction;"),this.addUniform("verticesIndex","uniform int verticesIndex;"),this.addUniform("normalsIndex","uniform int normalsIndex;"),this.addUniform("hierarchyIndex","uniform int hierarchyIndex;"),this.addUniform("hierarchyRoot","uniform int hierarchyRoot;"),this.addUniform("volume","uniform sampler2D volume;"),this.addFunction("vec3 getRandomVelocity ()\n {\n if (hierarchyRoot < 0)\n {\n return vec3 (0.0);\n }\n else\n {\n if (direction == vec3 (0.0))\n return getRandomSphericalVelocity ();\n\n else\n return direction * getRandomSpeed ();\n }\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n if (hierarchyRoot < 0)\n {\n return vec4 (NaN);\n }\n else\n {\n vec4 point;\n vec3 normal;\n\n getRandomPointOnSurface (volume, verticesIndex, normalsIndex, point, normal);\n\n Line3 line = Line3 (point .xyz, getRandomSurfaceNormal (normal));\n\n vec4 points [ARRAY_SIZE];\n\n int numIntersections = getIntersections (volume, verticesIndex, hierarchyIndex, hierarchyRoot, line, points);\n\n numIntersections -= numIntersections % 2; // We need an even count of intersections.\n\n switch (numIntersections)\n {\n case 0:\n return vec4 (0.0);\n case 2:\n break;\n default:\n sort (points, numIntersections, plane3 (line .point, line .direction));\n break;\n }\n\n int index = int (fract (random ()) * float (numIntersections / 2)) * 2; // Select random intersection.\n\n return mix (points [index], points [index + 1], random ());\n }\n }")}Object.assign(Object.setPrototypeOf(Ke.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this);this.getBrowser().getContext().getVersion()<2||(this.volumeTexture=this.createTexture(),this._set_coordIndex.addFieldInterest(this._coordIndex),this._direction.addInterest("set_direction__",this),this._coordIndex.addFieldInterest(this.volumeNode._coordIndex),this._coord.addFieldInterest(this.volumeNode._coord),this.volumeNode._creaseAngle=Math.PI,this.volumeNode._convex=!1,this.volumeNode._coordIndex=this._coordIndex,this.volumeNode._coord=this._coord,this.volumeNode._rebuild.addInterest("set_geometry__",this),this.volumeNode.setPrivate(!0),this.volumeNode.setup(),this.set_direction__(),this.set_geometry__())},set_direction__:(()=>{const e=new(A())(0,0,0);return function(){e.assign(this._direction.getValue()).normalize(),this.setUniform("uniform3f","direction",e.x,e.y,e.z)}})(),set_geometry__:(()=>{const e=new(A())(0,0,0),t=new(A())(0,0,0),i=new(A())(0,0,0);return function(){const n=this.getBrowser().getContext(),o=this.volumeNode.getVertices().getValue(),r=this.volumeNode.getNormals().getValue(),s=new Pe(o,r).toArray([]),a=o.length/4,c=r.length/3,l=a/3+1,d=s.length/4,u=Math.ceil(Math.sqrt(l+a+a+d)),m=l,h=m+a,p=h+c;let f=this.volumeArray;f.length<u*u*4&&(f=this.volumeArray=new Float32Array(u*u*4));let x=0;for(let n=0,r=o.length;n<r;n+=12)e.set(o[n],o[n+1],o[n+2]),t.set(o[n+4],o[n+5],o[n+6]),i.set(o[n+8],o[n+9],o[n+10]),f[n/3+4]=x+=qe().area(e,t,i);f.set(o,4*m);for(let e=4*h,t=0,i=r.length;t<i;e+=4,t+=3)f[e+0]=r[t+0],f[e+1]=r[t+1],f[e+2]=r[t+2];f.set(s,4*p),this.setUniform("uniform1i","verticesIndex",m),this.setUniform("uniform1i","normalsIndex",h),this.setUniform("uniform1i","hierarchyIndex",p),this.setUniform("uniform1i","hierarchyRoot",p+d-1),u&&(n.bindTexture(n.TEXTURE_2D,this.volumeTexture),n.texImage2D(n.TEXTURE_2D,0,n.RGBA32F,u,u,0,n.RGBA,n.FLOAT,f))}})(),activateTextures(e,t){e.activeTexture(e.TEXTURE0+t.volumeTextureUnit),e.bindTexture(e.TEXTURE_2D,this.volumeTexture)}}),Object.defineProperties(Ke,{typeName:{value:"VolumeEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:2}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOnly,"set_coordIndex",new(o().MFInt32)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().initializeOnly,"internal",new(o().SFBool)(!0)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(0,1,0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat)),new(s())(_().initializeOnly,"coordIndex",new(o().MFInt32)(-1)),new(s())(_().inputOutput,"coord",new(o().SFNode))]),enumerable:!0}});const Qe=Ke;m().add("VolumeEmitter","x_ite/Components/ParticleSystems/VolumeEmitter",Qe);const Ze=Qe,$e=window[Symbol.for("X_ITE.X3D-9.2.5")].require("standard/Math/Algorithm");var Je=i.n($e);function et(e){L.call(this,e),this.addType(_().WindPhysicsModel),this._speed.setUnit("speed"),e.getSpecificationVersion()<=3.3&&(this._direction=new(A())(0,0,0))}Object.assign(Object.setPrototypeOf(et.prototype,L.prototype),{getRandomSpeed(e){const t=Math.max(0,this._speed.getValue()),i=t*Math.max(0,this._gustiness.getValue());return e.getRandomValue(Math.max(0,t-i),t+i)},addForce:(()=>{const e=new(A())(0,0,0);return function(t,i,n,o){if(this._enabled.getValue()){const r=i._surfaceArea.getValue(),s=this.getRandomSpeed(i),a=10**(2*Math.log(s))*.64615;return this._direction.getValue().equals(A().Zero)?i.getRandomNormal(e):e.assign(this._direction.getValue()).normalize(),o.set(e.multiply(r*a*n),4*t),o[4*t+3]=Math.PI*Je().clamp(this._turbulence.getValue(),0,1),!0}return!1}})()}),Object.defineProperties(et,{typeName:{value:"WindPhysicsModel",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"physics",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"enabled",new(o().SFBool)(!0)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(1,0,0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)(.1)),new(s())(_().inputOutput,"gustiness",new(o().SFFloat)(.1)),new(s())(_().inputOutput,"turbulence",new(o().SFFloat))]),enumerable:!0}});const tt=et;m().add("WindPhysicsModel","x_ite/Components/ParticleSystems/WindPhysicsModel",tt);const it=tt;t().add({name:"ParticleSystems",concreteNodes:[G,W,Z,ee,De,C,Xe,ke,Ze,it],abstractNodes:[S,L],browserContext:z});const nt=void 0;m().add("ParticleSystems","assets/components/ParticleSystems",nt)})()})();
|
|
1
|
+
/* X_ITE v9.2.6 */(()=>{"use strict";var e={823:e=>{e.exports=window[Symbol.for("X_ITE.X3D-9.2.6")].require("lib/jquery")}},t={};function i(n){var o=t[n];if(void 0!==o)return o.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,i),r.exports}i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Components");var t=i.n(e);const n=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Fields");var o=i.n(n);const r=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Base/X3DFieldDefinition");var s=i.n(r);const a=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Base/FieldDefinitionArray");var c=i.n(a);const l=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Components/Core/X3DNode");var d=i.n(l);const u=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Namespace");var m=i.n(u);let h=0;const p={POINT:h++,LINE:h++,TRIANGLE:h++,QUAD:h++,SPRITE:h++,GEOMETRY:h++};m().add("GeometryTypes","x_ite/Browser/ParticleSystems/GeometryTypes",p);const f=p,x=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Base/X3DConstants");var _=i.n(x);const y="struct Line3{vec3 point;vec3 direction;};bool intersects(const in Line3 line,const in vec3 a,const in vec3 b,const in vec3 c,out vec3 r){vec3 edge1=b-a;vec3 edge2=c-a;vec3 pvec=cross(line.direction,edge2);float det=dot(edge1,pvec);if(det==0.0)return false;float inv_det=1.0/det;vec3 tvec=line.point-a;float u=dot(tvec,pvec)*inv_det;if(u<0.0||u>1.0)return false;vec3 qvec=cross(tvec,edge1);float v=dot(line.direction,qvec)*inv_det;if(v<0.0||u+v>1.0)return false;r=vec3(u,v,1.0-u-v);return true;}";m().add("Line3.glsl","x_ite/Browser/ParticleSystems/Line3.glsl",y);const v=y,g="struct Plane3{vec3 normal;float distanceFromOrigin;};Plane3 plane3(const in vec3 point,const in vec3 normal){return Plane3(normal,dot(normal,point));}float plane_distance(const in Plane3 plane,const in vec3 point){return dot(point,plane.normal)-plane.distanceFromOrigin;}bool intersects(const in Plane3 plane,const in Line3 line,out vec3 point){float theta=dot(line.direction,plane.normal);if(theta==0.0)return false;float t=(plane.distanceFromOrigin-dot(plane.normal,line.point))/theta;point=line.point+line.direction*t;return true;}void sort(inout vec4 points[ARRAY_SIZE],const in int count,const in Plane3 plane){const float shrink=1.0/1.3;int gap=count;bool exchanged=true;while(exchanged){gap=int(float(gap)*shrink);if(gap<=1){exchanged=false;gap=1;}for(int i=0,l=count-gap;i<l;++i){int j=gap+i;if(plane_distance(plane,points[i].xyz)>plane_distance(plane,points[j].xyz)){vec4 tmp1=points[i];points[i]=points[j];points[j]=tmp1;exchanged=true;}}}}int min_index(const in vec4 points[ARRAY_SIZE],const in int count,const in float value,const in Plane3 plane){int index=-1;float dist=1000000.0;for(int i=0;i<count;++i){float d=plane_distance(plane,points[i].xyz);if(d>=value&&d<dist){dist=d;index=i;}}return index;}";m().add("Plane3.glsl","x_ite/Browser/ParticleSystems/Plane3.glsl",g);const b=g,T="bool intersects(const in vec3 min,const in vec3 max,const in Line3 line){vec3 intersection;if(intersects(plane3(max,vec3(0.0,0.0,1.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.xy,max.xy),vec4(min.xy,intersection.xy))))return true;}if(intersects(plane3(min,vec3(0.0,0.0,-1.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.xy,max.xy),vec4(min.xy,intersection.xy))))return true;}if(intersects(plane3(max,vec3(0.0,1.0,0.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.xz,max.xz),vec4(min.xz,intersection.xz))))return true;}if(intersects(plane3(min,vec3(0.0,-1.0,0.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.xz,max.xz),vec4(min.xz,intersection.xz))))return true;}if(intersects(plane3(max,vec3(1.0,0.0,0.0)),line,intersection)){if(all(greaterThanEqual(vec4(intersection.yz,max.yz),vec4(min.yz,intersection.yz))))return true;}return false;}";m().add("Box3.glsl","x_ite/Browser/ParticleSystems/Box3.glsl",T);const w=T,R="#define BVH_NODE 0\n#define BVH_TRIANGLE 1\n#define BVH_STACK_SIZE 32\nint bvhNodeIndex=0;void setBVHIndex(const in int index){bvhNodeIndex=index;}int getBVHRoot(const in sampler2D volume,const in int hierarchyIndex,const in int rootIndex){return int(texelFetch(volume,rootIndex,0).x)+hierarchyIndex;}int getBVHType(const in sampler2D volume){return int(texelFetch(volume,bvhNodeIndex,0).x);}vec3 getBVHMin(const in sampler2D volume){return texelFetch(volume,bvhNodeIndex+1,0).xyz;}vec3 getBVHMax(const in sampler2D volume){return texelFetch(volume,bvhNodeIndex+2,0).xyz;}int getBVHLeft(const in sampler2D volume,const in int hierarchyIndex){return int(texelFetch(volume,bvhNodeIndex,0).y)+hierarchyIndex;}int getBVHRight(const in sampler2D volume,const in int hierarchyIndex){return int(texelFetch(volume,bvhNodeIndex,0).z)+hierarchyIndex;}int getBVHTriangle(const in sampler2D volume){return int(texelFetch(volume,bvhNodeIndex,0).y);}int getIntersections(const in sampler2D volume,const in int verticesIndex,const in int hierarchyIndex,const in int rootIndex,const in Line3 line,out vec4 points[ARRAY_SIZE]){int current=getBVHRoot(volume,hierarchyIndex,rootIndex);int count=0;int stackIndex=-1;int stack[BVH_STACK_SIZE];while(stackIndex>=0||current>=0){if(current>=0){setBVHIndex(current);if(getBVHType(volume)==BVH_NODE){if(intersects(getBVHMin(volume),getBVHMax(volume),line)){stack[++stackIndex]=current;current=getBVHLeft(volume,hierarchyIndex);}else{current=-1;}}else{int t=getBVHTriangle(volume);int v=verticesIndex+t;vec3 r=vec3(0.0);vec3 a=texelFetch(volume,v,0).xyz;vec3 b=texelFetch(volume,v+1,0).xyz;vec3 c=texelFetch(volume,v+2,0).xyz;if(intersects(line,a,b,c,r))points[count++]=vec4(r.z*a+r.x*b+r.y*c,1.0);current=-1;}}else{setBVHIndex(stack[stackIndex--]);current=getBVHRight(volume,hierarchyIndex);}}return count;}int getIntersections(const in sampler2D volume,const in int verticesIndex,const in int normalsIndex,const in int hierarchyIndex,const in int rootIndex,const in Line3 line,out vec4 points[ARRAY_SIZE],out vec3 normals[ARRAY_SIZE]){int current=getBVHRoot(volume,hierarchyIndex,rootIndex);int count=0;int stackIndex=-1;int stack[BVH_STACK_SIZE];while(stackIndex>=0||current>=0){if(current>=0){setBVHIndex(current);if(getBVHType(volume)==BVH_NODE){if(intersects(getBVHMin(volume),getBVHMax(volume),line)){stack[++stackIndex]=current;current=getBVHLeft(volume,hierarchyIndex);}else{current=-1;}}else{int t=getBVHTriangle(volume);int v=verticesIndex+t;vec3 r=vec3(0.0);vec3 a=texelFetch(volume,v,0).xyz;vec3 b=texelFetch(volume,v+1,0).xyz;vec3 c=texelFetch(volume,v+2,0).xyz;if(intersects(line,a,b,c,r)){points[count]=vec4(r.z*a+r.x*b+r.y*c,1.0);int n=normalsIndex+t;vec3 n0=texelFetch(volume,n,0).xyz;vec3 n1=texelFetch(volume,n+1,0).xyz;vec3 n2=texelFetch(volume,n+2,0).xyz;normals[count]=save_normalize(r.z*n0+r.x*n1+r.y*n2);++count;}current=-1;}}else{setBVHIndex(stack[stackIndex--]);current=getBVHRight(volume,hierarchyIndex);}}return count;}";m().add("BVH.glsl","x_ite/Browser/ParticleSystems/BVH.glsl",R);const I=R;function F(e){d().call(this,e),this.addType(_().X3DParticleEmitterNode),this._speed.setUnit("speed"),this._mass.setUnit("mass"),this._surfaceArea.setUnit("area"),this.samplers=[],this.uniforms={},this.functions=[],this.program=null,this.addSampler("forces"),this.addSampler("boundedVolume"),this.addSampler("colorRamp"),this.addSampler("texCoordRamp"),this.addUniform("speed","uniform float speed;"),this.addUniform("variation","uniform float variation;"),this.addFunction(v),this.addFunction(b),this.addFunction(w),this.addFunction(I)}Object.assign(Object.setPrototypeOf(F.prototype,d().prototype),{initialize(){d().prototype.initialize.call(this);const e=this.getBrowser().getContext();e.getVersion()<2||(this.program=this.createProgram(),this.transformFeedback=e.createTransformFeedback(),this._on.addInterest("set_on__",this),this._speed.addInterest("set_speed__",this),this._variation.addInterest("set_variation__",this),this._mass.addInterest("set_mass__",this),this.set_on__(),this.set_speed__(),this.set_variation__(),this.set_mass__())},isExplosive:()=>!1,getMass(){return this.mass},set_on__(){this.on=this._on.getValue()},set_speed__(){this.setUniform("uniform1f","speed",this._speed.getValue())},set_variation__(){this.setUniform("uniform1f","variation",this._variation.getValue())},set_mass__(){this.mass=this._mass.getValue()},getRandomValue:(e,t)=>Math.random()*(t-e)+e,getRandomNormal(e){const t=this.getRandomValue(-1,1)*Math.PI,i=this.getRandomValue(-1,1),n=Math.acos(i),o=Math.sin(n);return e.set(Math.sin(t)*o,Math.cos(t)*o,i)},animate(e,t){const i=this.getBrowser().getContext(),n=e.inputParticles,o=e.particleStride,r=e.particleOffsets,s=this.program;if(i.useProgram(s),i.uniform1i(s.randomSeed,4294967295*Math.random()),i.uniform1i(s.geometryType,e.geometryType),i.uniform1i(s.createParticles,e.createParticles&&this.on),i.uniform1f(s.particleLifetime,e.particleLifetime),i.uniform1f(s.lifetimeVariation,e.lifetimeVariation),i.uniform1f(s.deltaTime,t),i.uniform2f(s.particleSize,e._particleSize.x,e._particleSize.y),i.uniform1i(s.numForces,e.numForces),e.numForces&&(i.activeTexture(i.TEXTURE0+s.forcesTextureUnit),i.bindTexture(i.TEXTURE_2D,e.forcesTexture)),e.boundedHierarchyRoot<0?i.uniform1i(s.boundedHierarchyRoot,-1):(i.uniform1i(s.boundedVerticesIndex,e.boundedVerticesIndex),i.uniform1i(s.boundedNormalsIndex,e.boundedNormalsIndex),i.uniform1i(s.boundedHierarchyIndex,e.boundedHierarchyIndex),i.uniform1i(s.boundedHierarchyRoot,e.boundedHierarchyRoot),i.activeTexture(i.TEXTURE0+s.boundedVolumeTextureUnit),i.bindTexture(i.TEXTURE_2D,e.boundedTexture)),i.uniform1i(s.numColors,e.numColors),e.numColors&&(i.activeTexture(i.TEXTURE0+s.colorRampTextureUnit),i.bindTexture(i.TEXTURE_2D,e.colorRampTexture)),i.uniform1i(s.numTexCoords,e.numTexCoords),e.numTexCoords&&(i.uniform1i(s.texCoordCount,e.texCoordCount),i.activeTexture(i.TEXTURE0+s.texCoordRampTextureUnit),i.bindTexture(i.TEXTURE_2D,e.texCoordRampTexture)),this.activateTextures(i,s),n.vertexArrayObject.enable(s)){for(const[e,t]of s.inputs)i.bindBuffer(i.ARRAY_BUFFER,n),i.enableVertexAttribArray(t),i.vertexAttribPointer(t,4,i.FLOAT,!1,o,r[e]);i.bindBuffer(i.ARRAY_BUFFER,null)}i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindTransformFeedback(i.TRANSFORM_FEEDBACK,this.transformFeedback),i.bindBufferBase(i.TRANSFORM_FEEDBACK_BUFFER,0,e.outputParticles),i.enable(i.RASTERIZER_DISCARD),i.beginTransformFeedback(i.POINTS),i.drawArrays(i.POINTS,0,e.numParticles),i.endTransformFeedback(),i.disable(i.RASTERIZER_DISCARD),i.bindTransformFeedback(i.TRANSFORM_FEEDBACK,null)},addSampler(e){this.samplers.push(e)},addUniform(e,t){this.uniforms[e]=t},setUniform(e,t,i,n,o){const r=this.getBrowser().getContext(),s=this.program;r.useProgram(s),r[e](s[t],i,n,o)},addFunction(e){this.functions.push(e)},createProgram(){const e=this.getBrowser(),t=e.getContext(),i=`#version 300 es\nprecision highp float;precision highp int;precision highp sampler2D;uniform int randomSeed;uniform int geometryType;uniform bool createParticles;uniform float particleLifetime;uniform float lifetimeVariation;uniform float deltaTime;uniform vec2 particleSize;uniform int numForces;uniform sampler2D forces;uniform int boundedVerticesIndex;uniform int boundedNormalsIndex;uniform int boundedHierarchyIndex;uniform int boundedHierarchyRoot;uniform sampler2D boundedVolume;uniform int numColors;uniform sampler2D colorRamp;uniform int texCoordCount;uniform int numTexCoords;uniform sampler2D texCoordRamp;\n${Object.values(this.uniforms).join("\n")}\n in vec4 input0;in vec4 input2;in vec4 input6;out vec4 output0;out vec4 output1;out vec4 output2;out vec4 output3;out vec4 output4;out vec4 output5;out vec4 output6;\n${Object.entries(f).map((([e,t])=>`#define ${e} ${t}`)).join("\n")}\n const int ARRAY_SIZE=32;const float M_PI=3.14159265359;uniform float NaN;vec4 texelFetch(const in sampler2D sampler,const in int index,const in int lod){int x=textureSize(sampler,lod).x;ivec2 p=ivec2(index % x,index/x);vec4 t=texelFetch(sampler,p,lod);return t;}vec3 save_normalize(const in vec3 vector){float l=length(vector);if(l==0.0)return vec3(0.0);return vector/l;}vec4 Quaternion(const in vec3 fromVector,const in vec3 toVector){vec3 from=save_normalize(fromVector);vec3 to=save_normalize(toVector);float cos_angle=dot(from,to);vec3 cross_vec=cross(from,to);float cross_len=length(cross_vec);if(cross_len==0.0){if(cos_angle>0.0){return vec4(0.0,0.0,0.0,1.0);}else{vec3 t=cross(from,vec3(1.0,0.0,0.0));if(dot(t,t)==0.0)t=cross(from,vec3(0.0,1.0,0.0));t=save_normalize(t);return vec4(t,0.0);}}else{float s=sqrt(abs(1.0-cos_angle)*0.5);cross_vec=save_normalize(cross_vec);return vec4(cross_vec*s,sqrt(abs(1.0+cos_angle)*0.5));}}vec3 multVecQuat(const in vec3 v,const in vec4 q){float a=q.w*q.w-q.x*q.x-q.y*q.y-q.z*q.z;float b=2.0*(v.x*q.x+v.y*q.y+v.z*q.z);float c=2.0*q.w;vec3 r=a*v.xyz+b*q.xyz+c*(q.yzx*v.zxy-q.zxy*v.yzx);return r;}mat3 Matrix3(const in vec4 quaternion){float x=quaternion.x;float y=quaternion.y;float z=quaternion.z;float w=quaternion.w;float A=y*y;float B=z*z;float C=x*y;float D=z*w;float E=z*x;float F=y*w;float G=x*x;float H=y*z;float I=x*w;return mat3(1.0-2.0*(A+B),2.0*(C+D),2.0*(E-F),2.0*(C-D),1.0-2.0*(B+G),2.0*(H+I),2.0*(E+F),2.0*(H-I),1.0-2.0*(A+G));}uint seed=1u;void srand(const in int value){seed=uint(value);}float random(){seed=seed*1103515245u+12345u;return float(seed)/4294967295.0;}float getRandomValue(const in float min,const in float max){return min+random()*(max-min);}float getRandomLifetime(){float v=particleLifetime*lifetimeVariation;float min_=max(0.0,particleLifetime-v);float max_=particleLifetime+v;return getRandomValue(min_,max_);}float getRandomSpeed(){float v=speed*variation;float min_=max(0.0,speed-v);float max_=speed+v;return getRandomValue(min_,max_);}vec3 getRandomNormal(){float theta=getRandomValue(-M_PI,M_PI);float cphi=getRandomValue(-1.0,1.0);float r=sqrt(1.0-cphi*cphi);return vec3(sin(theta)*r,cos(theta)*r,cphi);}vec3 getRandomNormalWithAngle(const in float angle){float theta=getRandomValue(-M_PI,M_PI);float cphi=getRandomValue(cos(angle),1.0);float r=sqrt(1.0-cphi*cphi);return vec3(sin(theta)*r,cos(theta)*r,cphi);}vec3 getRandomNormalWithDirectionAndAngle(const in vec3 direction,const in float angle){vec4 rotation=Quaternion(vec3(0.0,0.0,1.0),direction);vec3 normal=getRandomNormalWithAngle(angle);return multVecQuat(normal,rotation);}vec3 getRandomSurfaceNormal(const in vec3 direction){float theta=getRandomValue(-M_PI,M_PI);float cphi=pow(random(),1.0/3.0);float r=sqrt(1.0-cphi*cphi);vec3 normal=vec3(sin(theta)*r,cos(theta)*r,cphi);vec4 rotation=Quaternion(vec3(0.0,0.0,1.0),direction);return multVecQuat(normal,rotation);}vec3 getRandomSphericalVelocity(){vec3 normal=getRandomNormal();float speed=getRandomSpeed();return normal*speed;}int upperBound(const in sampler2D sampler,in int count,const in float value){int first=0;int step=0;while(count>0){int index=first;step=count>>1;index+=step;if(value<texelFetch(sampler,index,0).x){count=step;}else{first=++index;count-=step+1;}}return first;}void interpolate(const in sampler2D sampler,const in int count,const in float fraction,out int index0,out int index1,out float weight){if(count==1||fraction<=texelFetch(sampler,0,0).x){index0=0;index1=0;weight=0.0;}else if(fraction>=texelFetch(sampler,count-1,0).x){index0=count-2;index1=count-1;weight=1.0;}else{int index=upperBound(sampler,count,fraction);if(index<count){index1=index;index0=index-1;float key0=texelFetch(sampler,index0,0).x;float key1=texelFetch(sampler,index1,0).x;weight=clamp((fraction-key0)/(key1-key0),0.0,1.0);}else{index0=0;index1=0;weight=0.0;}}}void interpolate(const in sampler2D sampler,const in int count,const in float fraction,out int index0){if(count==1||fraction<=texelFetch(sampler,0,0).x){index0=0;}else if(fraction>=texelFetch(sampler,count-1,0).x){index0=count-2;}else{int index=upperBound(sampler,count,fraction);if(index<count)index0=index-1;else index0=0;}}vec3 getRandomBarycentricCoord(){float u=random();float v=random();if(u+v>1.0){u=1.0-u;v=1.0-v;}float t=1.0-u-v;return vec3(t,u,v);}void getRandomPointOnSurface(const in sampler2D surface,const in int verticesIndex,const in int normalsIndex,out vec4 position,out vec3 normal){float lastAreaSoFar=texelFetch(surface,verticesIndex-1,0).x;float fraction=random()*lastAreaSoFar;int index0;int index1;int index2;float weight;interpolate(surface,verticesIndex,fraction,index0,index1,weight);index0*=3;index1=index0+1;index2=index0+2;vec4 vertex0=texelFetch(surface,verticesIndex+index0,0);vec4 vertex1=texelFetch(surface,verticesIndex+index1,0);vec4 vertex2=texelFetch(surface,verticesIndex+index2,0);vec3 normal0=texelFetch(surface,normalsIndex+index0,0).xyz;vec3 normal1=texelFetch(surface,normalsIndex+index1,0).xyz;vec3 normal2=texelFetch(surface,normalsIndex+index2,0).xyz;vec3 r=getRandomBarycentricCoord();position=r.z*vertex0+r.x*vertex1+r.y*vertex2;normal=save_normalize(r.z*normal0+r.x*normal1+r.y*normal2);}\n${this.functions.join("\n")}\n vec4 getColor(const in float lifetime,const in float elapsedTime){if(numColors>0){float fraction=elapsedTime/lifetime;int index0;int index1;float weight;interpolate(colorRamp,numColors,fraction,index0,index1,weight);vec4 color0=texelFetch(colorRamp,numColors+index0,0);vec4 color1=texelFetch(colorRamp,numColors+index1,0);return mix(color0,color1,weight);}else{return vec4(1.0);}}void bounce(const in vec4 fromPosition,inout vec4 toPosition,inout vec3 velocity){if(boundedHierarchyRoot<0)return;Line3 line=Line3(fromPosition.xyz,save_normalize(velocity));vec4 points[ARRAY_SIZE];vec3 normals[ARRAY_SIZE];int numIntersections=getIntersections(boundedVolume,boundedVerticesIndex,boundedNormalsIndex,boundedHierarchyIndex,boundedHierarchyRoot,line,points,normals);if(numIntersections==0)return;Plane3 plane1=plane3(line.point,line.direction);int index=min_index(points,numIntersections,0.0,plane1);if(index==-1)return;Plane3 plane2=plane3(points[index].xyz,normals[index]);if(sign(plane_distance(plane2,fromPosition.xyz))==sign(plane_distance(plane2,toPosition.xyz)))return;velocity=reflect(velocity,normals[index]);toPosition=vec4(points[index].xyz+reflect(points[index].xyz-fromPosition.xyz,normals[index]),1.0);}int getTexCoordIndex0(const in float lifetime,const in float elapsedTime){if(numTexCoords==0){return-1;}else{float fraction=elapsedTime/lifetime;int index0=0;interpolate(texCoordRamp,numTexCoords,fraction,index0);return numTexCoords+index0*texCoordCount;}}void main(){int life=int(input0[0]);float lifetime=input0[1];float elapsedTime=input0[2]+deltaTime;srand((gl_VertexID+randomSeed)*randomSeed);if(elapsedTime>lifetime){lifetime=getRandomLifetime();elapsedTime=0.0;output0=vec4(max(life+1,1),lifetime,elapsedTime,getTexCoordIndex0(lifetime,elapsedTime));if(createParticles){output1=getColor(lifetime,elapsedTime);output2=vec4(getRandomVelocity(),0.0);output6=getRandomPosition();}else{output1=vec4(0.0);output2=vec4(0.0);output6=vec4(NaN);}}else{vec3 velocity=input2.xyz;vec4 position=input6;for(int i=0;i<numForces;++i){vec4 force=texelFetch(forces,i,0);float turbulence=force.w;vec3 normal=getRandomNormalWithDirectionAndAngle(force.xyz,turbulence);float speed=length(force.xyz);velocity+=normal*speed;}position.xyz+=velocity*deltaTime;bounce(input6,position,velocity);output0=vec4(life,lifetime,elapsedTime,getTexCoordIndex0(lifetime,elapsedTime));output1=getColor(lifetime,elapsedTime);output2=vec4(velocity,0.0);output6=position;}switch(geometryType){case POINT:case SPRITE:case GEOMETRY:{output3=vec4(1.0,0.0,0.0,0.0);output4=vec4(0.0,1.0,0.0,0.0);output5=vec4(0.0,0.0,1.0,0.0);break;}case LINE:{mat3 r=Matrix3(Quaternion(vec3(0.0,0.0,1.0),output2.xyz));mat3 s=mat3(1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,particleSize.y);mat3 m=r*s;output3=vec4(m[0],0.0);output4=vec4(m[1],0.0);output5=vec4(m[2],0.0);break;}default:{output3=vec4(particleSize.x,0.0,0.0,0.0);output4=vec4(0.0,particleSize.y,0.0,0.0);output5=vec4(0.0,0.0,1.0,0.0);break;}}}`,n=t.createShader(t.VERTEX_SHADER);t.shaderSource(n,i),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS)||console.error(t.getShaderInfoLog(n));const o=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(o,"#version 300 es\nprecision highp float;void main(){}"),t.compileShader(o),t.getShaderParameter(o,t.COMPILE_STATUS)||console.error(t.getShaderInfoLog(o));const r=t.createProgram();t.attachShader(r,n),t.attachShader(r,o),t.transformFeedbackVaryings(r,Array.from({length:7},((e,t)=>"output"+t)),t.INTERLEAVED_ATTRIBS),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||console.error("Couldn't initialize particle shader: "+t.getProgramInfoLog(r)),r.inputs=[[0,t.getAttribLocation(r,"input0")],[2,t.getAttribLocation(r,"input2")],[6,t.getAttribLocation(r,"input6")]],r.randomSeed=t.getUniformLocation(r,"randomSeed"),r.geometryType=t.getUniformLocation(r,"geometryType"),r.createParticles=t.getUniformLocation(r,"createParticles"),r.particleLifetime=t.getUniformLocation(r,"particleLifetime"),r.lifetimeVariation=t.getUniformLocation(r,"lifetimeVariation"),r.deltaTime=t.getUniformLocation(r,"deltaTime"),r.particleSize=t.getUniformLocation(r,"particleSize"),r.numForces=t.getUniformLocation(r,"numForces"),r.forces=t.getUniformLocation(r,"forces"),r.boundedVerticesIndex=t.getUniformLocation(r,"boundedVerticesIndex"),r.boundedNormalsIndex=t.getUniformLocation(r,"boundedNormalsIndex"),r.boundedHierarchyIndex=t.getUniformLocation(r,"boundedHierarchyIndex"),r.boundedHierarchyRoot=t.getUniformLocation(r,"boundedHierarchyRoot"),r.boundedVolume=t.getUniformLocation(r,"boundedVolume"),r.numColors=t.getUniformLocation(r,"numColors"),r.colorRamp=t.getUniformLocation(r,"colorRamp"),r.texCoordCount=t.getUniformLocation(r,"texCoordCount"),r.numTexCoords=t.getUniformLocation(r,"numTexCoords"),r.texCoordRamp=t.getUniformLocation(r,"texCoordRamp");for(const e of Object.keys(this.uniforms))r[e]=t.getUniformLocation(r,e);r.NaN=t.getUniformLocation(r,"NaN"),t.useProgram(r);for(const i of this.samplers){const n=t.getUniformLocation(r,i);t.uniform1i(n,r[i+"TextureUnit"]=e.getTexture2DUnit())}return t.uniform1f(r.NaN,NaN),e.resetTextureUnits(),r},activateTextures(){},createTexture(){const e=this.getBrowser().getContext(),t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,1,1,0,e.RGBA,e.FLOAT,new Float32Array(4)),t},getTexture2DUnit(e,t,i){const n=t[i];return void 0===n?t[i]=e.getTexture2DUnit():n}}),Object.defineProperties(F,{typeName:{value:"X3DParticleEmitterNode",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0}});const E=F;m().add("X3DParticleEmitterNode","x_ite/Components/ParticleSystems/X3DParticleEmitterNode",E);const S=E,P=window[Symbol.for("X_ITE.X3D-9.2.6")].require("standard/Math/Numbers/Vector3");var A=i.n(P);function O(e){S.call(this,e),this.addType(_().PointEmitter),this._position.setUnit("length"),this.addUniform("position","uniform vec3 position;"),this.addUniform("direction","uniform vec3 direction;"),this.addFunction("vec3 getRandomVelocity ()\n {\n if (direction == vec3 (0.0))\n return getRandomSphericalVelocity ();\n\n else\n return direction * getRandomSpeed ();\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n return vec4 (position, 1.0);\n }")}Object.assign(Object.setPrototypeOf(O.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this),this.getBrowser().getContext().getVersion()<2||(this._position.addInterest("set_position__",this),this._direction.addInterest("set_direction__",this),this.set_position__(),this.set_direction__())},set_position__(){const e=this._position.getValue();this.setUniform("uniform3f","position",e.x,e.y,e.z)},set_direction__:(()=>{const e=new(A())(0,0,0);return function(){e.assign(this._direction.getValue()).normalize(),this.setUniform("uniform3f","direction",e.x,e.y,e.z)}})()}),Object.defineProperties(O,{typeName:{value:"PointEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"position",new(o().SFVec3f)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(0,1,0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat))]),enumerable:!0}});const N=O;m().add("PointEmitter","x_ite/Components/ParticleSystems/PointEmitter",N);const C=N,B=Symbol();Symbol();function V(){}Object.assign(V.prototype,{getDefaultEmitter(){return this[B]=new C(this.getPrivateScene()),this[B].setPrivate(!0),this[B].setup(),this.getDefaultEmitter=function(){return this[B]},Object.defineProperty(this,"getDefaultEmitter",{enumerable:!1}),this[B]}});const D=V;m().add("X3DParticleSystemsContext","x_ite/Browser/ParticleSystems/X3DParticleSystemsContext",D);const z=D;function U(e){d().call(this,e),this.addType(_().X3DParticlePhysicsModelNode)}Object.assign(Object.setPrototypeOf(U.prototype,d().prototype),{addForce(){}}),Object.defineProperties(U,{typeName:{value:"X3DParticlePhysicsModelNode",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0}});const M=U;m().add("X3DParticlePhysicsModelNode","x_ite/Components/ParticleSystems/X3DParticlePhysicsModelNode",M);const L=M,X=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Base/X3DCast");var j=i.n(X);function q(e){L.call(this,e),this.addType(_().BoundedPhysicsModel)}Object.assign(Object.setPrototypeOf(q.prototype,L.prototype),{initialize(){L.prototype.initialize.call(this),this._geometry.addInterest("set_geometry__",this),this.set_geometry__()},set_geometry__(){this.geometryNode&&this.geometryNode._rebuild.removeInterest("addNodeEvent",this),this.geometryNode=j()(_().X3DGeometryNode,this._geometry),this.geometryNode&&this.geometryNode._rebuild.addInterest("addNodeEvent",this)},addGeometry(e,t){if(this.geometryNode&&this._enabled.getValue()){const i=this.geometryNode.getNormals().getValue(),n=this.geometryNode.getVertices().getValue();for(const t of i)e.push(t);for(const e of n)t.push(e)}}}),Object.defineProperties(q,{typeName:{value:"BoundedPhysicsModel",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:2}),enumerable:!0},containerField:{value:"physics",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"enabled",new(o().SFBool)(!0)),new(s())(_().inputOutput,"geometry",new(o().SFNode))]),enumerable:!0}});const H=q;m().add("BoundedPhysicsModel","x_ite/Components/ParticleSystems/BoundedPhysicsModel",H);const G=H;function k(e){S.call(this,e),this.addType(_().ConeEmitter),this._position.setUnit("length"),this._angle.setUnit("angle"),this.addUniform("position","uniform vec3 position;"),this.addUniform("direction","uniform vec3 direction;"),this.addUniform("angle","uniform float angle;"),this.addFunction("vec3 getRandomVelocity ()\n {\n if (direction == vec3 (0.0))\n {\n return getRandomSphericalVelocity ();\n }\n else\n {\n vec3 normal = getRandomNormalWithDirectionAndAngle (direction, angle);\n float speed = getRandomSpeed ();\n\n return normal * speed;\n }\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n return vec4 (position, 1.0);\n }")}Object.assign(Object.setPrototypeOf(k.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this),this.getBrowser().getContext().getVersion()<2||(this._position.addInterest("set_position__",this),this._direction.addInterest("set_direction__",this),this._angle.addInterest("set_angle__",this),this.set_position__(),this.set_direction__(),this.set_angle__())},set_position__(){const e=this._position.getValue();this.setUniform("uniform3f","position",e.x,e.y,e.z)},set_direction__(){const e=this._direction.getValue();this.setUniform("uniform3f","direction",e.x,e.y,e.z)},set_angle__(){this.setUniform("uniform1f","angle",this._angle.getValue())}}),Object.defineProperties(k,{typeName:{value:"ConeEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"position",new(o().SFVec3f)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(0,1,0)),new(s())(_().inputOutput,"angle",new(o().SFFloat)(.785398)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat))]),enumerable:!0}});const Y=k;m().add("ConeEmitter","x_ite/Components/ParticleSystems/ConeEmitter",Y);const W=Y;function K(e){S.call(this,e),this.addType(_().ExplosionEmitter),this._position.setUnit("length"),this.addUniform("position","uniform vec3 position;"),this.addFunction("vec3 getRandomVelocity ()\n {\n return getRandomSphericalVelocity ();\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n return vec4 (position, 1.0);\n }")}Object.assign(Object.setPrototypeOf(K.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this),this.getBrowser().getContext().getVersion()<2||(this._position.addInterest("set_position__",this),this.set_position__())},isExplosive:()=>!0,set_position__(){const e=this._position.getValue();this.setUniform("uniform3f","position",e.x,e.y,e.z)}}),Object.defineProperties(K,{typeName:{value:"ExplosionEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"position",new(o().SFVec3f)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat))]),enumerable:!0}});const Q=K;m().add("ExplosionEmitter","x_ite/Components/ParticleSystems/ExplosionEmitter",Q);const Z=Q;function $(e){L.call(this,e),this.addType(_().ForcePhysicsModel),this._force.setUnit("force")}Object.assign(Object.setPrototypeOf($.prototype,L.prototype),{addForce:(()=>{const e=new(A())(0,0,0);return function(t,i,n,o){return!!this._enabled.getValue()&&(o.set(e.assign(this._force.getValue()).multiply(n),4*t),o[4*t+3]=0,!0)}})()}),Object.defineProperties($,{typeName:{value:"ForcePhysicsModel",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"physics",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"enabled",new(o().SFBool)(!0)),new(s())(_().inputOutput,"force",new(o().SFVec3f)(0,-9.8,0))]),enumerable:!0}});const J=$;m().add("ForcePhysicsModel","x_ite/Components/ParticleSystems/ForcePhysicsModel",J);const ee=J,te=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Components/Shape/X3DShapeNode");var ie=i.n(te);const ne=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Browser/Rendering/GeometryContext");var oe=i.n(ne);const re=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Rendering/VertexArray");var se=i.n(re);const ae=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Rendering/TraverseType");var ce=i.n(ae);const le=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Browser/Shape/AlphaMode");var de=i.n(le);const ue=window[Symbol.for("X_ITE.X3D-9.2.6")].require("standard/Math/Numbers/Matrix4");var me=i.n(ue);const he=window[Symbol.for("X_ITE.X3D-9.2.6")].require("standard/Math/Numbers/Matrix3");var pe=i.n(he);const fe=window[Symbol.for("X_ITE.X3D-9.2.6")].require("standard/Math/Geometry/Plane3");var xe=i.n(fe);function _e(e,t){this.array=e,t&&(this.compare=t)}Object.assign(_e.prototype,{compare:(e,t)=>e<t,sort(e,t){t-e>1&&this.quicksort(e,t-1)},quicksort(e,t){let i=e,n=t;const{array:o,compare:r}=this,s=o[e+t>>>1];for(;;){for(;r(o[i],s);)++i;for(;r(s,o[n]);)--n;if(!(i<n)){i===n&&(++i,--n);break}{const e=o[i];o[i]=o[n],o[n]=e,i++,n--}}e<n&&this.quicksort(e,n),i<t&&this.quicksort(i,t)}});const ye=_e;m().add("QuickSort","standard/Math/Algorithms/QuickSort",ye);const ve=ye,ge=new(A())(0,0,0),be=new(A())(0,0,0),Te=new(A())(0,0,0),we={u:0,v:0,t:0},Re=[new(A())(0,0,1),new(A())(0,0,-1),new(A())(0,1,0),new(A())(0,-1,0),new(A())(1,0,0)];function Ie(e,t){this.vertices=e.vertices,this.normals=e.normals,this.triangle=t,this.i4=12*t,this.i3=9*t}function Fe(e,t,i,n){this.min=new(A())(0,0,0),this.max=new(A())(0,0,0),this.planes=[],this.intersection=new(A())(0,0,0);const o=e.vertices,r=this.min,s=this.max,a=i+n;let c=12*t[i];r.set(o[c],o[c+1],o[c+2]),s.assign(r);for(let e=i;e<a;++e)c=12*t[e],ge.set(o[c],o[c+1],o[c+2]),be.set(o[c+4],o[c+5],o[c+6]),Te.set(o[c+8],o[c+9],o[c+10]),r.min(ge,be,Te),s.max(ge,be,Te);for(let e=0;e<5;++e)this.planes[e]=new(xe())(e%2?r:s,Re[e]);if(n>2){e.sorter.compare.axis=this.getLongestAxis(r,s),e.sorter.sort(i,a);var l=n>>>1}else l=1;const d=n-l;this.left=l>1?new Fe(e,t,i,l):new Ie(e,t[i]),this.right=d>1?new Fe(e,t,i+l,d):new Ie(e,t[i+l])}function Ee(e,t){const i=e.length/12;switch(this.vertices=e,this.normals=t,i){case 0:this.root=null;break;case 1:this.root=new Ie(this,0);break;default:{const t=[];for(let e=0;e<i;++e)t.push(e);this.sorter=new ve(t,function(e,t){return function(i,n){return Math.min(e[i+t],e[i+4+t],e[i+8+t])<Math.min(e[n+t],e[n+4+t],e[n+8+t])}}(e,0)),this.root=new Fe(this,t,0,i);break}}}Object.assign(Ie.prototype,{intersectsLine(e,t,i){const n=this.vertices,o=this.normals,r=this.i4,s=this.i3;if(ge.x=n[r],ge.y=n[r+1],ge.z=n[r+2],be.x=n[r+4],be.y=n[r+5],be.z=n[r+6],Te.x=n[r+8],Te.y=n[r+9],Te.z=n[r+10],e.intersectsTriangle(ge,be,Te,we)){const e=we.u,a=we.v,c=1-e-a,l=t.size++;l>=t.length&&t.push(new(A())(0,0,0)),t[l].set(c*n[r]+e*n[r+4]+a*n[r+8],c*n[r+1]+e*n[r+5]+a*n[r+9],c*n[r+2]+e*n[r+6]+a*n[r+10]),i&&(l>=i.length&&i.push(new(A())(0,0,0)),i[l].set(c*o[s]+e*o[s+3]+a*o[s+6],c*o[s+1]+e*o[s+4]+a*o[s+7],c*o[s+2]+e*o[s+5]+a*o[s+8]))}},toArray(e){const t=e.length/4;return e.push(1,3*this.triangle,0,0),t}}),Object.assign(Fe.prototype,{intersectsLine(e,t,i){this.intersectsBBox(e)&&(this.left.intersectsLine(e,t,i),this.right.intersectsLine(e,t,i))},intersectsBBox(e){const t=this.planes,i=this.min,n=this.max,o=i.x,r=n.x,s=i.y,a=n.y,c=i.z,l=n.z,d=this.intersection;return!!(t[0].intersectsLine(e,d)&&d.x>=o&&d.x<=r&&d.y>=s&&d.y<=a)||(!!(t[1].intersectsLine(e,d)&&d.x>=o&&d.x<=r&&d.y>=s&&d.y<=a)||(!!(t[2].intersectsLine(e,d)&&d.x>=o&&d.x<=r&&d.z>=c&&d.z<=l)||(!!(t[3].intersectsLine(e,d)&&d.x>=o&&d.x<=r&&d.z>=c&&d.z<=l)||!!(t[4].intersectsLine(e,d)&&d.y>=s&&d.y<=a&&d.z>=c&&d.z<=l))))},getLongestAxis(e,t){const i=t.x-e.x,n=t.y-e.y,o=t.z-e.z;return i<n?n<o?2:1:i<o?2:0},toArray(e){const t=this.left.toArray(e),i=this.right.toArray(e),n=this.min,o=this.max,r=e.length/4;return e.push(0,t,i,0,n.x,n.y,n.z,0,o.x,o.y,o.z,0),r}}),Object.assign(Ee.prototype,{intersectsLine(e,t,i){return t.size=0,this.root?(this.root.intersectsLine(e,t,i),t.size):0},toArray(e){if(this.root){const t=this.root.toArray(e);e.push(t,0,0,0)}return e}});const Se=Ee;m().add("BVH","standard/Math/Utility/BVH",Se);const Pe=Se;var Ae=i(823);const Oe=new Float32Array([0,0,0,1]),Ne=new Float32Array([0,0,0,1,1,0,0,1,0,0,-.5,1,0,0,.5,1]),Ce=new Float32Array([0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,-.5,-.5,0,1,.5,-.5,0,1,.5,.5,0,1,-.5,-.5,0,1,.5,.5,0,1,-.5,.5,0,1]);function Be(e){ie().call(this,e),this.addType(_().ParticleSystem),this._particleSize.setUnit("length"),e.getSpecificationVersion()<=3.3&&(this.addAlias("colorRamp",this._color),this.addAlias("texCoordRamp",this._texCoord));const t=this.getBrowser();this.maxParticles=0,this.numParticles=0,this.forcePhysicsModelNodes=[],this.forces=new Float32Array(4),this.boundedPhysicsModelNodes=[],this.boundedNormals=[],this.boundedVertices=[],this.colorRamp=new Float32Array,this.texCoordRamp=new Float32Array,this.geometryContext=new(oe())({textureCoordinateNode:t.getDefaultTextureCoordinate()}),this.creationTime=0,this.pauseTime=0,this.deltaTime=0,this.particleStride=7*Float32Array.BYTES_PER_ELEMENT*4,this.particleOffsets=Array.from({length:7},((e,t)=>4*Float32Array.BYTES_PER_ELEMENT*t)),this.particleOffset=this.particleOffsets[0],this.colorOffset=this.particleOffsets[1],this.matrixOffset=this.particleOffsets[3],this.texCoordOffset=0}Object.assign(Object.setPrototypeOf(Be.prototype,ie().prototype),{initialize(){ie().prototype.initialize.call(this);const e=this.getBrowser(),t=e.getContext();e.getContext().getVersion()<2||(this.getLive().addInterest("set_live__",this),this._enabled.addInterest("set_enabled__",this),this._createParticles.addInterest("set_createParticles__",this),this._geometryType.addInterest("set_geometryType__",this),this._geometryType.addInterest("set_texCoord__",this),this._maxParticles.addInterest("set_enabled__",this),this._particleLifetime.addInterest("set_particleLifetime__",this),this._lifetimeVariation.addInterest("set_lifetimeVariation__",this),this._emitter.addInterest("set_emitter__",this),this._physics.addInterest("set_physics__",this),this._colorKey.addInterest("set_color__",this),this._color.addInterest("set_colorRamp__",this),this._texCoordKey.addInterest("set_texCoord__",this),this._texCoord.addInterest("set_texCoordRamp__",this),this.inputParticles=this.createBuffer(),this.outputParticles=this.createBuffer(),this.inputParticles.vertexArrayObject=new(se())(t),this.outputParticles.vertexArrayObject=new(se())(t),this.forcesTexture=this.createTexture(),this.boundedTexture=this.createTexture(),this.colorRampTexture=this.createTexture(),this.texCoordRampTexture=this.createTexture(),this.geometryBuffer=this.createBuffer(),this.texCoordBuffers=new Array(e.getMaxTexCoords()).fill(this.geometryBuffer),this.set_emitter__(),this.set_enabled__(),this.set_geometryType__(),this.set_createParticles__(),this.set_particleLifetime__(),this.set_lifetimeVariation__(),this.set_physics__(),this.set_colorRamp__(),this.set_texCoordRamp__())},getShapeKey(){return this.numTexCoords?2:1},getGeometryContext(){return this.geometryType===f.GEOMETRY?this.getGeometry():this.geometryContext},set_bbox__(){this._bboxSize.getValue().equals(this.getDefaultBBoxSize())?this.bbox.set():this.bbox.set(this._bboxSize.getValue(),this._bboxCenter.getValue()),this.bboxSize.assign(this.bbox.size),this.bboxCenter.assign(this.bbox.center)},set_transparent__(){const e=this.appearanceNode.getAlphaMode();if(e===de().AUTO){if(this.geometryType===f.POINT)this.setTransparent(!0);else this.setTransparent(!!(this.getAppearance().isTransparent()||this.colorRampNode?.isTransparent()||this.geometryType===f.GEOMETRY&&this.geometryNode?.isTransparent()));this.setAlphaMode(this.isTransparent()?de().BLEND:de().OPAQUE)}else this.setTransparent(e===de().BLEND),this.setAlphaMode(e)},set_live__(){this.getLive().getValue()?this._isActive.getValue()&&this._maxParticles.getValue()&&(this.getBrowser().sensorEvents().addInterest("animateParticles",this),this.pauseTime&&(this.creationTime+=Date.now()/1e3-this.pauseTime,this.pauseTime=0)):this._isActive.getValue()&&this._maxParticles.getValue()&&(this.getBrowser().sensorEvents().removeInterest("animateParticles",this),0===this.pauseTime&&(this.pauseTime=Date.now()/1e3))},set_enabled__(){this._enabled.getValue()&&this._maxParticles.getValue()?this._isActive.getValue()||(this.getLive().getValue()?(this.getBrowser().sensorEvents().addInterest("animateParticles",this),this.pauseTime=0):this.pauseTime=Date.now()/1e3,this._isActive=!0,delete this.traverse):this._isActive.getValue()&&(this.getLive().getValue()&&this.getBrowser().sensorEvents().removeInterest("animateParticles",this),this._isActive=!1,this.numParticles=0,this.traverse=Function.prototype),this.set_maxParticles__()},set_createParticles__(){this.createParticles=this._createParticles.getValue()},set_geometryType__(){const e=this.getBrowser().getContext();switch(this.geometryType=Ae.enum(f,this._geometryType.getValue(),f.QUAD),this.geometryType){case f.POINT:this.geometryContext.geometryType=0,this.geometryContext.hasNormals=!1,this.texCoordCount=0,this.vertexCount=1,this.hasNormals=!1,this.verticesOffset=0,this.primitiveMode=e.POINTS,e.bindBuffer(e.ARRAY_BUFFER,this.geometryBuffer),e.bufferData(e.ARRAY_BUFFER,Oe,e.DYNAMIC_DRAW);break;case f.LINE:this.geometryContext.geometryType=1,this.geometryContext.hasNormals=!1,this.texCoordCount=2,this.vertexCount=2,this.hasNormals=!1,this.texCoordsOffset=0,this.verticesOffset=8*Float32Array.BYTES_PER_ELEMENT,this.primitiveMode=e.LINES,e.bindBuffer(e.ARRAY_BUFFER,this.geometryBuffer),e.bufferData(e.ARRAY_BUFFER,Ne,e.DYNAMIC_DRAW);break;case f.TRIANGLE:case f.QUAD:case f.SPRITE:this.geometryContext.geometryType=2,this.geometryContext.hasNormals=!0,this.texCoordCount=4,this.vertexCount=6,this.hasNormals=!0,this.texCoordsOffset=0,this.normalOffset=24*Float32Array.BYTES_PER_ELEMENT,this.verticesOffset=27*Float32Array.BYTES_PER_ELEMENT,this.primitiveMode=e.TRIANGLES,e.bindBuffer(e.ARRAY_BUFFER,this.geometryBuffer),e.bufferData(e.ARRAY_BUFFER,Ce,e.DYNAMIC_DRAW);break;case f.GEOMETRY:this.texCoordCount=0}this.geometryContext.updateGeometryKey(),this.updateVertexArrays(),this.set_transparent__()},set_maxParticles__(){const e=this.numParticles,t=Math.max(0,this._maxParticles.getValue());this.maxParticles=t,this.numParticles=Math.min(e,t),this.emitterNode.isExplosive()||(this.creationTime=Date.now()/1e3),this.resizeBuffers(e),this.updateVertexArrays()},set_particleLifetime__(){this.particleLifetime=this._particleLifetime.getValue()},set_lifetimeVariation__(){this.lifetimeVariation=this._lifetimeVariation.getValue()},set_emitter__(){this.emitterNode=j()(_().X3DParticleEmitterNode,this._emitter),this.emitterNode||(this.emitterNode=this.getBrowser().getDefaultEmitter()),this.createParticles=this._createParticles.getValue()},set_physics__(){const e=this._physics.getValue(),t=this.forcePhysicsModelNodes,i=this.boundedPhysicsModelNodes;for(let e=0,t=i.length;e<t;++e)i[e].removeInterest("set_boundedPhysics__",this);t.length=0,i.length=0;for(let n=0,o=e.length;n<o;++n)try{const o=e[n].getValue().getInnerNode(),r=o.getType();for(let e=r.length-1;e>=0;--e){switch(r[e]){case _().ForcePhysicsModel:case _().WindPhysicsModel:t.push(o);break;case _().BoundedPhysicsModel:o.addInterest("set_boundedPhysics__",this),i.push(o);break;default:continue}break}}catch{}this.set_boundedPhysics__()},set_boundedPhysics__(){const e=this.getBrowser().getContext(),t=this.boundedPhysicsModelNodes,i=this.boundedNormals,n=this.boundedVertices;i.length=0,n.length=0;for(let e=0,o=t.length;e<o;++e)t[e].addGeometry(i,n);const o=new Pe(n,i).toArray([]),r=n.length/4,s=i.length/3,a=o.length/4,c=Math.ceil(Math.sqrt(r+s+a)),l=new Float32Array(c*c*4);this.boundedVerticesIndex=0,this.boundedNormalsIndex=r,this.boundedHierarchyIndex=this.boundedNormalsIndex+s,this.boundedHierarchyRoot=this.boundedHierarchyIndex+a-1,l.set(n);for(let e=4*this.boundedNormalsIndex,t=0,n=i.length;t<n;e+=4,t+=3)l[e+0]=i[t+0],l[e+1]=i[t+1],l[e+2]=i[t+2];l.set(o,4*this.boundedHierarchyIndex),c&&(e.bindTexture(e.TEXTURE_2D,this.boundedTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,c,c,0,e.RGBA,e.FLOAT,l))},set_colorRamp__(){this.colorRampNode&&this.colorRampNode.removeInterest("set_color__",this),this.colorRampNode=j()(_().X3DColorNode,this._color),this.colorRampNode&&this.colorRampNode.addInterest("set_color__",this),this.set_color__(),this.set_transparent__()},set_color__(){const e=this.getBrowser().getContext(),t=this._colorKey,i=t.length,n=Math.ceil(Math.sqrt(2*i));let o=this.colorRamp;n*n*4>o.length&&(o=this.colorRamp=new Float32Array(n*n*4));for(let e=0;e<i;++e)o[4*e]=t[e];this.colorRampNode?o.set(this.colorRampNode.addColors([],i).slice(0,4*i),4*i):o.fill(1,4*i),n&&(e.bindTexture(e.TEXTURE_2D,this.colorRampTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,n,0,e.RGBA,e.FLOAT,o)),this.numColors=i,this.geometryContext.colorMaterial=!(!i||!this.colorRampNode),this.geometryContext.updateGeometryKey(),this.updateVertexArrays()},set_texCoordRamp__(){this.texCoordRampNode&&this.texCoordRampNode.removeInterest("set_texCoord__",this),this.texCoordRampNode=j()(_().X3DTextureCoordinateNode,this._texCoord),this.texCoordRampNode&&this.texCoordRampNode.addInterest("set_texCoord__",this),this.set_texCoord__()},set_texCoord__(){const e=this.getBrowser().getContext(),t=this._texCoordKey,i=t.length,n=Math.ceil(Math.sqrt(i+i*this.texCoordCount));let o=this.texCoordRamp;n*n*4>o.length?o=this.texCoordRamp=new Float32Array(n*n*4):o.fill(0);for(let e=0;e<i;++e)o[4*e]=t[e];this.texCoordRampNode&&o.set(this.texCoordRampNode.addPoints([]).slice(0,i*this.texCoordCount*4),4*i),n&&(e.bindTexture(e.TEXTURE_2D,this.texCoordRampTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,n,0,e.RGBA,e.FLOAT,o)),this.numTexCoords=this.texCoordRampNode?i:0,this.updateVertexArrays()},updateVertexArrays(){this.inputParticles.vertexArrayObject.update(),this.outputParticles.vertexArrayObject.update()},createTexture(){const e=this.getBrowser().getContext(),t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,1,1,0,e.RGBA,e.FLOAT,new Float32Array(4)),t},createBuffer(){const e=this.getBrowser().getContext(),t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Uint32Array,e.DYNAMIC_DRAW),t},resizeBuffers(e){const t=this.getBrowser().getContext(),i=this.maxParticles,n=this.particleStride,o=Object.assign(t.createBuffer(),this.outputParticles),r=new Uint8Array(i*n);t.bindBuffer(t.ARRAY_BUFFER,this.inputParticles),t.bufferData(t.ARRAY_BUFFER,r,t.DYNAMIC_DRAW),t.bindBuffer(t.COPY_READ_BUFFER,this.outputParticles),t.bindBuffer(t.ARRAY_BUFFER,o),t.bufferData(t.ARRAY_BUFFER,r,t.DYNAMIC_DRAW),t.copyBufferSubData(t.COPY_READ_BUFFER,t.ARRAY_BUFFER,0,0,Math.min(i*n,e*n)),t.deleteBuffer(this.outputParticles),this.outputParticles=o},animateParticles(){const e=this.getBrowser(),t=e.getContext(),i=this.emitterNode,n=1/Math.max(10,this.getBrowser().getCurrentFrameRate());let o=this.deltaTime=(14*this.deltaTime+n)/15;if(i.isExplosive()){const e=Date.now()/1e3,t=this.particleLifetime+this.particleLifetime*this.lifetimeVariation;e-this.creationTime>t?(this.creationTime=e,this.numParticles=this.maxParticles,this.createParticles=this._createParticles.getValue(),o=Number.POSITIVE_INFINITY):this.createParticles=!1}else if(this.numParticles<this.maxParticles){const e=Date.now()/1e3,t=Math.max(0,Math.floor((e-this.creationTime)*this.maxParticles/this.particleLifetime));t&&(this.creationTime=e),this.numParticles=Math.min(this.maxParticles,this.numParticles+t)}if(i.getMass()){const e=this.forcePhysicsModelNodes;let n=e.length,r=this.forces,s=o/i.getMass();4*n>r.length&&(r=this.forces=new Float32Array(4*n));let a=0;for(let t=0;t<n;++t)a+=!e[t].addForce(t-a,i,s,r);this.numForces=n-=a,n&&(t.bindTexture(t.TEXTURE_2D,this.forcesTexture),t.texImage2D(t.TEXTURE_2D,0,t.RGBA32F,n,1,0,t.RGBA,t.FLOAT,r))}else this.numForces=0;const r=this.outputParticles;this.outputParticles=this.inputParticles,this.inputParticles=r,i.animate(this,o),e.addBrowserEvent()},updateSprite:(()=>{const e=new Float32Array(Ce),t=[new(A())(-.5,-.5,0),new(A())(.5,-.5,0),new(A())(.5,.5,0),new(A())(-.5,-.5,0),new(A())(.5,.5,0),new(A())(-.5,.5,0)],i=new(A())(0,0,0),n=new(A())(0,0,0);return function(o,r){for(let t=0;t<3;++t)e[24+t]=r[6+t];n.set(this._particleSize.x,this._particleSize.y,1);for(let o=0;o<6;++o){const s=27+4*o;r.multVecMatrix(i.assign(t[o]).multVec(n)),e[s+0]=i.x,e[s+1]=i.y,e[s+2]=i.z}o.bindBuffer(o.ARRAY_BUFFER,this.geometryBuffer),o.bufferData(o.ARRAY_BUFFER,e,o.DYNAMIC_DRAW)}})(),intersectsBox(e,t){},traverse(e,t){switch(e){case ce().POINTER:t.addPointingShape(this);break;case ce().PICKING:case ce().COLLISION:break;case ce().SHADOW:this._castShadow.getValue()&&t.addShadowShape(this);break;case ce().DISPLAY:t.addDisplayShape(this)&&this.getAppearance().traverse(e,t)}this.geometryType===f.GEOMETRY&&this.getGeometry()&&this.getGeometry().traverse(e,t)},displaySimple(e,t,i){if(this.numParticles)switch(this.geometryType){case f.GEOMETRY:this.getGeometry()?.displaySimpleParticles(e,i,this);break;case f.SPRITE:this.updateSprite(e,this.getScreenAlignedRotation(t.modelViewMatrix));default:{const t=this.outputParticles;if(t.vertexArrayObject.enable(i.getProgram())){const n=this.particleStride;i.enableParticleAttribute(e,t,n,this.particleOffset,1),i.enableParticleMatrixAttribute(e,t,n,this.matrixOffset,1),i.enableVertexAttribute(e,this.geometryBuffer,0,this.verticesOffset)}e.drawArraysInstanced(this.primitiveMode,0,this.vertexCount,this.numParticles);break}}},display(e,t){if(this.numParticles)switch(this.geometryType){case f.GEOMETRY:this.getGeometry()?.displayParticles(e,t,this);break;case f.SPRITE:this.updateSprite(e,this.getScreenAlignedRotation(t.modelViewMatrix));case f.QUAD:case f.TRIANGLE:{const i=me().prototype.determinant3.call(t.modelViewMatrix)>0;e.frontFace(i?e.CCW:e.CW),e.enable(e.CULL_FACE)}default:{const i=this.getBrowser(),n=this.getAppearance(),o=n.getRenderModes(),r=n.getShader(this.geometryContext,t),s=i.getPrimitiveMode(this.primitiveMode);for(const t of o)t.enable(e);if(r.enable(e),r.setUniforms(e,this.geometryContext,t),this.numTexCoords){const t=i.getTexture2DUnit();e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texCoordRampTexture),e.uniform1i(r.x3d_TexCoordRamp,t)}const a=this.outputParticles;if(a.vertexArrayObject.enable(r.getProgram())){const t=this.particleStride;r.enableParticleAttribute(e,a,t,this.particleOffset,1),r.enableParticleMatrixAttribute(e,a,t,this.matrixOffset,1),this.geometryContext.colorMaterial&&(r.enableColorAttribute(e,a,t,this.colorOffset),r.colorAttributeDivisor(e,1)),this.texCoordCount&&r.enableTexCoordAttribute(e,this.texCoordBuffers,0,this.texCoordOffset),this.hasNormals&&(r.enableNormalAttribute(e,this.geometryBuffer,0,this.normalOffset),r.normalAttributeDivisor(e,this.maxParticles)),r.enableVertexAttribute(e,this.geometryBuffer,0,this.verticesOffset)}e.drawArraysInstanced(s,0,this.vertexCount,this.numParticles);for(const t of o)t.disable(e);break}}},getScreenAlignedRotation:(()=>{const e=new(me()),t=new(A())(0,0,0),i=new(A())(0,0,0),n=new(A())(0,0,0),o=new(pe())(9);return function(r){e.assign(r).inverse(),e.multDirMatrix(t.assign(A().zAxis)),e.multDirMatrix(i.assign(A().yAxis));const s=i.cross(t);n.assign(t).cross(s);const a=t;return s.normalize(),n.normalize(),a.normalize(),o.set(s.x,s.y,s.z,n.x,n.y,n.z,a.x,a.y,a.z),o}})()}),Object.defineProperties(Be,{typeName:{value:"ParticleSystem",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:2}),enumerable:!0},containerField:{value:"children",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"enabled",new(o().SFBool)(!0)),new(s())(_().inputOutput,"createParticles",new(o().SFBool)(!0)),new(s())(_().initializeOnly,"geometryType",new(o().SFString)("QUAD")),new(s())(_().inputOutput,"maxParticles",new(o().SFInt32)(200)),new(s())(_().inputOutput,"particleLifetime",new(o().SFFloat)(5)),new(s())(_().inputOutput,"lifetimeVariation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"particleSize",new(o().SFVec2f)(.02,.02)),new(s())(_().initializeOnly,"emitter",new(o().SFNode)),new(s())(_().initializeOnly,"physics",new(o().MFNode)),new(s())(_().initializeOnly,"colorKey",new(o().MFFloat)),new(s())(_().initializeOnly,"color",new(o().SFNode)),new(s())(_().initializeOnly,"texCoordKey",new(o().MFFloat)),new(s())(_().initializeOnly,"texCoord",new(o().SFNode)),new(s())(_().outputOnly,"isActive",new(o().SFBool)),new(s())(_().inputOutput,"castShadow",new(o().SFBool)(!0)),new(s())(_().inputOutput,"visible",new(o().SFBool)(!0)),new(s())(_().inputOutput,"bboxDisplay",new(o().SFBool)),new(s())(_().initializeOnly,"bboxSize",new(o().SFVec3f)(-1,-1,-1)),new(s())(_().initializeOnly,"bboxCenter",new(o().SFVec3f)),new(s())(_().inputOutput,"appearance",new(o().SFNode)),new(s())(_().inputOutput,"geometry",new(o().SFNode))]),enumerable:!0}});const Ve=Be;m().add("ParticleSystem","x_ite/Components/ParticleSystems/ParticleSystem",Ve);const De=Ve,ze=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Components/Rendering/IndexedLineSet");var Ue=i.n(ze);function Me(e){S.call(this,e),this.addType(_().PolylineEmitter),this.polylinesNode=new(Ue())(e),this.polylinesArray=new Float32Array,this.addSampler("polylines"),this.addUniform("direction","uniform vec3 direction;"),this.addUniform("verticesIndex","uniform int verticesIndex;"),this.addUniform("polylines","uniform sampler2D polylines;"),this.addFunction("vec3 getRandomVelocity ()\n {\n if (direction == vec3 (0.0))\n return getRandomSphericalVelocity ();\n\n else\n return direction * getRandomSpeed ();\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n if (verticesIndex < 0)\n {\n return vec4 (NaN);\n }\n else\n {\n // Determine index0, index1 and weight.\n\n float lastLengthSoFar = texelFetch (polylines, verticesIndex - 1, 0) .x;\n float fraction = random () * lastLengthSoFar;\n\n int index0 = 0;\n int index1 = 0;\n float weight = 0.0;\n\n interpolate (polylines, verticesIndex, fraction, index0, index1, weight);\n\n // Interpolate and return position.\n\n index0 *= 2;\n index1 = index0 + 1;\n\n vec4 vertex0 = texelFetch (polylines, verticesIndex + index0, 0);\n vec4 vertex1 = texelFetch (polylines, verticesIndex + index1, 0);\n\n return mix (vertex0, vertex1, weight);\n }\n }")}Object.assign(Object.setPrototypeOf(Me.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this);this.getBrowser().getContext().getVersion()<2||(this.polylinesTexture=this.createTexture(),this._direction.addInterest("set_direction__",this),this._set_coordIndex.addFieldInterest(this._coordIndex),this._coordIndex.addFieldInterest(this.polylinesNode._coordIndex),this._coord.addFieldInterest(this.polylinesNode._coord),this.polylinesNode._coordIndex=this._coordIndex,this.polylinesNode._coord=this._coord,this.polylinesNode._rebuild.addInterest("set_polyline",this),this.polylinesNode.setPrivate(!0),this.polylinesNode.setup(),this.set_direction__(),this.set_polyline())},set_direction__:(()=>{const e=new(A())(0,0,0);return function(){e.assign(this._direction.getValue()).normalize(),this.setUniform("uniform3f","direction",e.x,e.y,e.z)}})(),set_polyline:(()=>{const e=new(A())(0,0,0),t=new(A())(0,0,0);return function(){const i=this.getBrowser().getContext(),n=this.polylinesNode.getVertices().getValue(),o=n.length/4,r=o/2+1,s=Math.ceil(Math.sqrt(r+o)),a=r;let c=this.polylinesArray;c.length<s*s*4&&(c=this.polylinesArray=new Float32Array(s*s*4));let l=0;for(let i=0,o=n.length;i<o;i+=8)e.set(n[i],n[i+1],n[i+2]),t.set(n[i+4],n[i+5],n[i+6]),c[i/2+4]=l+=t.subtract(e).magnitude();c.set(n,4*a),this.setUniform("uniform1i","verticesIndex",o?a:-1),s&&(i.bindTexture(i.TEXTURE_2D,this.polylinesTexture),i.texImage2D(i.TEXTURE_2D,0,i.RGBA32F,s,s,0,i.RGBA,i.FLOAT,c))}})(),activateTextures(e,t){e.activeTexture(e.TEXTURE0+t.polylinesTextureUnit),e.bindTexture(e.TEXTURE_2D,this.polylinesTexture)}}),Object.defineProperties(Me,{typeName:{value:"PolylineEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOnly,"set_coordIndex",new(o().MFInt32)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(0,1,0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat)),new(s())(_().initializeOnly,"coordIndex",new(o().MFInt32)(-1)),new(s())(_().inputOutput,"coord",new(o().SFNode))]),enumerable:!0}});const Le=Me;m().add("PolylineEmitter","x_ite/Components/ParticleSystems/PolylineEmitter",Le);const Xe=Le,je=window[Symbol.for("X_ITE.X3D-9.2.6")].require("standard/Math/Geometry/Triangle3");var qe=i.n(je);function He(e){S.call(this,e),this.addType(_().SurfaceEmitter),this.surfaceNode=null,this.surfaceArray=new Float32Array,this.addSampler("surface"),this.addUniform("solid","uniform bool solid;"),this.addUniform("verticesIndex","uniform int verticesIndex;"),this.addUniform("normalsIndex","uniform int normalsIndex;"),this.addUniform("surface","uniform sampler2D surface;"),this.addFunction("vec4 position; vec3 getRandomVelocity ()\n {\n if (verticesIndex < 0)\n {\n return vec3 (0.0);\n }\n else\n {\n vec3 normal;\n\n getRandomPointOnSurface (surface, verticesIndex, normalsIndex, position, normal);\n\n if (solid == false && random () > 0.5)\n normal = -normal;\n\n return normal * getRandomSpeed ();\n }\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n return verticesIndex < 0 ? vec4 (NaN) : position;\n }")}Object.assign(Object.setPrototypeOf(He.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this);this.getBrowser().getContext().getVersion()<2||(this.surfaceTexture=this.createTexture(),this._surface.addInterest("set_surface__",this),this.set_surface__())},set_surface__(){this.surfaceNode&&(this.surfaceNode._solid.removeInterest("set_solid__",this),this.surfaceNode._rebuild.removeInterest("set_geometry__",this)),this.surfaceNode=j()(_().X3DGeometryNode,this._surface),this.surfaceNode&&(this.surfaceNode._solid.addInterest("set_solid__",this),this.surfaceNode._rebuild.addInterest("set_geometry__",this)),this.set_solid__(),this.set_geometry__()},set_solid__(){this.surfaceNode&&this.setUniform("uniform1i","solid",this.surfaceNode._solid.getValue())},set_geometry__:(()=>{const e=new(A())(0,0,0),t=new(A())(0,0,0),i=new(A())(0,0,0);return function(){const n=this.getBrowser().getContext();if(this.surfaceNode){const o=this.surfaceNode.getVertices().getValue(),r=this.surfaceNode.getNormals().getValue(),s=o.length/4,a=s/3+1,c=Math.ceil(Math.sqrt(a+s+s)),l=a,d=l+s;let u=this.surfaceArray;u.length<c*c*4&&(u=this.surfaceArray=new Float32Array(c*c*4));let m=0;for(let n=0,r=o.length;n<r;n+=12)e.set(o[n],o[n+1],o[n+2]),t.set(o[n+4],o[n+5],o[n+6]),i.set(o[n+8],o[n+9],o[n+10]),u[n/3+4]=m+=qe().area(e,t,i);u.set(o,4*l);for(let e=4*d,t=0,i=r.length;t<i;e+=4,t+=3)u[e+0]=r[t+0],u[e+1]=r[t+1],u[e+2]=r[t+2];this.setUniform("uniform1i","verticesIndex",s?l:-1),this.setUniform("uniform1i","normalsIndex",s?d:-1),c&&(n.bindTexture(n.TEXTURE_2D,this.surfaceTexture),n.texImage2D(n.TEXTURE_2D,0,n.RGBA32F,c,c,0,n.RGBA,n.FLOAT,u))}else this.setUniform("uniform1i","verticesIndex",-1),this.setUniform("uniform1i","normalsIndex",-1)}})(),activateTextures(e,t){e.activeTexture(e.TEXTURE0+t.surfaceTextureUnit),e.bindTexture(e.TEXTURE_2D,this.surfaceTexture)}}),Object.defineProperties(He,{typeName:{value:"SurfaceEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:2}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat)),new(s())(_().initializeOnly,"surface",new(o().SFNode))]),enumerable:!0}});const Ge=He;m().add("SurfaceEmitter","x_ite/Components/ParticleSystems/SurfaceEmitter",Ge);const ke=Ge,Ye=window[Symbol.for("X_ITE.X3D-9.2.6")].require("x_ite/Components/Geometry3D/IndexedFaceSet");var We=i.n(Ye);function Ke(e){S.call(this,e),this.addType(_().VolumeEmitter),this.volumeNode=new(We())(e),this.volumeArray=new Float32Array,this.addSampler("volume"),this.addUniform("direction","uniform vec3 direction;"),this.addUniform("verticesIndex","uniform int verticesIndex;"),this.addUniform("normalsIndex","uniform int normalsIndex;"),this.addUniform("hierarchyIndex","uniform int hierarchyIndex;"),this.addUniform("hierarchyRoot","uniform int hierarchyRoot;"),this.addUniform("volume","uniform sampler2D volume;"),this.addFunction("vec3 getRandomVelocity ()\n {\n if (hierarchyRoot < 0)\n {\n return vec3 (0.0);\n }\n else\n {\n if (direction == vec3 (0.0))\n return getRandomSphericalVelocity ();\n\n else\n return direction * getRandomSpeed ();\n }\n }"),this.addFunction("vec4 getRandomPosition ()\n {\n if (hierarchyRoot < 0)\n {\n return vec4 (NaN);\n }\n else\n {\n vec4 point;\n vec3 normal;\n\n getRandomPointOnSurface (volume, verticesIndex, normalsIndex, point, normal);\n\n Line3 line = Line3 (point .xyz, getRandomSurfaceNormal (normal));\n\n vec4 points [ARRAY_SIZE];\n\n int numIntersections = getIntersections (volume, verticesIndex, hierarchyIndex, hierarchyRoot, line, points);\n\n numIntersections -= numIntersections % 2; // We need an even count of intersections.\n\n switch (numIntersections)\n {\n case 0:\n return vec4 (0.0);\n case 2:\n break;\n default:\n sort (points, numIntersections, plane3 (line .point, line .direction));\n break;\n }\n\n int index = int (fract (random ()) * float (numIntersections / 2)) * 2; // Select random intersection.\n\n return mix (points [index], points [index + 1], random ());\n }\n }")}Object.assign(Object.setPrototypeOf(Ke.prototype,S.prototype),{initialize(){S.prototype.initialize.call(this);this.getBrowser().getContext().getVersion()<2||(this.volumeTexture=this.createTexture(),this._set_coordIndex.addFieldInterest(this._coordIndex),this._direction.addInterest("set_direction__",this),this._coordIndex.addFieldInterest(this.volumeNode._coordIndex),this._coord.addFieldInterest(this.volumeNode._coord),this.volumeNode._creaseAngle=Math.PI,this.volumeNode._convex=!1,this.volumeNode._coordIndex=this._coordIndex,this.volumeNode._coord=this._coord,this.volumeNode._rebuild.addInterest("set_geometry__",this),this.volumeNode.setPrivate(!0),this.volumeNode.setup(),this.set_direction__(),this.set_geometry__())},set_direction__:(()=>{const e=new(A())(0,0,0);return function(){e.assign(this._direction.getValue()).normalize(),this.setUniform("uniform3f","direction",e.x,e.y,e.z)}})(),set_geometry__:(()=>{const e=new(A())(0,0,0),t=new(A())(0,0,0),i=new(A())(0,0,0);return function(){const n=this.getBrowser().getContext(),o=this.volumeNode.getVertices().getValue(),r=this.volumeNode.getNormals().getValue(),s=new Pe(o,r).toArray([]),a=o.length/4,c=r.length/3,l=a/3+1,d=s.length/4,u=Math.ceil(Math.sqrt(l+a+a+d)),m=l,h=m+a,p=h+c;let f=this.volumeArray;f.length<u*u*4&&(f=this.volumeArray=new Float32Array(u*u*4));let x=0;for(let n=0,r=o.length;n<r;n+=12)e.set(o[n],o[n+1],o[n+2]),t.set(o[n+4],o[n+5],o[n+6]),i.set(o[n+8],o[n+9],o[n+10]),f[n/3+4]=x+=qe().area(e,t,i);f.set(o,4*m);for(let e=4*h,t=0,i=r.length;t<i;e+=4,t+=3)f[e+0]=r[t+0],f[e+1]=r[t+1],f[e+2]=r[t+2];f.set(s,4*p),this.setUniform("uniform1i","verticesIndex",m),this.setUniform("uniform1i","normalsIndex",h),this.setUniform("uniform1i","hierarchyIndex",p),this.setUniform("uniform1i","hierarchyRoot",p+d-1),u&&(n.bindTexture(n.TEXTURE_2D,this.volumeTexture),n.texImage2D(n.TEXTURE_2D,0,n.RGBA32F,u,u,0,n.RGBA,n.FLOAT,f))}})(),activateTextures(e,t){e.activeTexture(e.TEXTURE0+t.volumeTextureUnit),e.bindTexture(e.TEXTURE_2D,this.volumeTexture)}}),Object.defineProperties(Ke,{typeName:{value:"VolumeEmitter",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:2}),enumerable:!0},containerField:{value:"emitter",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOnly,"set_coordIndex",new(o().MFInt32)),new(s())(_().inputOutput,"on",new(o().SFBool)(!0)),new(s())(_().initializeOnly,"internal",new(o().SFBool)(!0)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(0,1,0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)),new(s())(_().inputOutput,"variation",new(o().SFFloat)(.25)),new(s())(_().inputOutput,"mass",new(o().SFFloat)),new(s())(_().inputOutput,"surfaceArea",new(o().SFFloat)),new(s())(_().initializeOnly,"coordIndex",new(o().MFInt32)(-1)),new(s())(_().inputOutput,"coord",new(o().SFNode))]),enumerable:!0}});const Qe=Ke;m().add("VolumeEmitter","x_ite/Components/ParticleSystems/VolumeEmitter",Qe);const Ze=Qe,$e=window[Symbol.for("X_ITE.X3D-9.2.6")].require("standard/Math/Algorithm");var Je=i.n($e);function et(e){L.call(this,e),this.addType(_().WindPhysicsModel),this._speed.setUnit("speed"),e.getSpecificationVersion()<=3.3&&(this._direction=new(A())(0,0,0))}Object.assign(Object.setPrototypeOf(et.prototype,L.prototype),{getRandomSpeed(e){const t=Math.max(0,this._speed.getValue()),i=t*Math.max(0,this._gustiness.getValue());return e.getRandomValue(Math.max(0,t-i),t+i)},addForce:(()=>{const e=new(A())(0,0,0);return function(t,i,n,o){if(this._enabled.getValue()){const r=i._surfaceArea.getValue(),s=this.getRandomSpeed(i),a=10**(2*Math.log(s))*.64615;return this._direction.getValue().equals(A().Zero)?i.getRandomNormal(e):e.assign(this._direction.getValue()).normalize(),o.set(e.multiply(r*a*n),4*t),o[4*t+3]=Math.PI*Je().clamp(this._turbulence.getValue(),0,1),!0}return!1}})()}),Object.defineProperties(et,{typeName:{value:"WindPhysicsModel",enumerable:!0},componentInfo:{value:Object.freeze({name:"ParticleSystems",level:1}),enumerable:!0},containerField:{value:"physics",enumerable:!0},specificationRange:{value:Object.freeze({from:"3.2",to:"Infinity"}),enumerable:!0},fieldDefinitions:{value:new(c())([new(s())(_().inputOutput,"metadata",new(o().SFNode)),new(s())(_().inputOutput,"enabled",new(o().SFBool)(!0)),new(s())(_().inputOutput,"direction",new(o().SFVec3f)(1,0,0)),new(s())(_().inputOutput,"speed",new(o().SFFloat)(.1)),new(s())(_().inputOutput,"gustiness",new(o().SFFloat)(.1)),new(s())(_().inputOutput,"turbulence",new(o().SFFloat))]),enumerable:!0}});const tt=et;m().add("WindPhysicsModel","x_ite/Components/ParticleSystems/WindPhysicsModel",tt);const it=tt;t().add({name:"ParticleSystems",concreteNodes:[G,W,Z,ee,De,C,Xe,ke,Ze,it],abstractNodes:[S,L],browserContext:z});const nt=void 0;m().add("ParticleSystems","assets/components/ParticleSystems",nt)})()})();
|