babylon.quarks 0.17.7 → 0.17.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.quarks.cjs","sources":["../../quarks.core/dist/quarks.core.esm.js","../src/MeshSurfaceEmitter.ts","../src/shaders/chunks/register-shader-chunks.ts","../src/shaders/chunks/tile_pars_vertex.glsl.ts","../src/shaders/chunks/tile_vertex.glsl.ts","../src/shaders/chunks/tile_pars_fragment.glsl.ts","../src/shaders/chunks/tile_fragment.glsl.ts","../src/shaders/chunks/soft_pars_vertex.glsl.ts","../src/shaders/chunks/soft_vertex.glsl.ts","../src/shaders/chunks/soft_pars_fragment.glsl.ts","../src/shaders/chunks/soft_fragment.glsl.ts","../src/shaders/particle_vert.glsl.ts","../src/VFXBatch.ts","../src/shaders/particle_frag.glsl.ts","../src/shaders/local_particle_physics_vert.glsl.ts","../src/shaders/particle_physics_frag.glsl.ts","../src/shaders/stretched_bb_particle_vert.glsl.ts","../src/shaders/trail_vert.glsl.ts","../src/shaders/trail_frag.glsl.ts","../src/SpriteBatch.ts","../src/TrailBatch.ts","../src/BatchedRenderer.ts","../src/BatchedParticleRenderer.ts","../src/ParticleEmitter.ts","../src/geometryUtil.ts","../src/ParticleSystem.ts","../src/QuarksUtil.ts","../src/QuarksPrefab.ts","../src/materials/ParticleMaterials.ts","../src/index.ts","../src/QuarksLoader.ts","../src/shaders/local_particle_vert.glsl.ts"],"sourcesContent":["/**\n * quarks.core v0.17.7 build Thu Jul 09 2026\n * https://quarks.art\n * Copyright 2026 Alchemist0823 <the.forrest.sun@gmail.com>, MIT\n */\nconst _lut = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff'];\nlet _seed = 1234567;\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n const d0 = Math.random() * 0xffffffff | 0;\n const d1 = Math.random() * 0xffffffff | 0;\n const d2 = Math.random() * 0xffffffff | 0;\n const d3 = Math.random() * 0xffffffff | 0;\n const uuid = _lut[d0 & 0xff] + _lut[d0 >> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' +\n _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' +\n _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] +\n _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff];\n // .toLowerCase() here flattens concatenated strings to save heap memory space.\n return uuid.toLowerCase();\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n// Linear mapping from range <a1, a2> to range <b1, b2>\nfunction mapLinear(x, a1, a2, b1, b2) {\n return b1 + (x - a1) * (b2 - b1) / (a2 - a1);\n}\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp(x, y, value) {\n if (x !== y) {\n return (value - x) / (y - x);\n }\n else {\n return 0;\n }\n}\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp(x, y, t) {\n return (1 - t) * x + t * y;\n}\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp(x, y, lambda, dt) {\n return lerp(x, y, 1 - Math.exp(-lambda * dt));\n}\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong(x, length = 1) {\n return length - Math.abs(euclideanModulo(x, length * 2) - length);\n}\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep(x, min, max) {\n if (x <= min)\n return 0;\n if (x >= max)\n return 1;\n x = (x - min) / (max - min);\n return x * x * (3 - 2 * x);\n}\nfunction smootherstep(x, min, max) {\n if (x <= min)\n return 0;\n if (x >= max)\n return 1;\n x = (x - min) / (max - min);\n return x * x * x * (x * (x * 6 - 15) + 10);\n}\n// Random integer from <low, high> interval\nfunction randInt(low, high) {\n return low + Math.floor(Math.random() * (high - low + 1));\n}\n// Random float from <low, high> interval\nfunction randFloat(low, high) {\n return low + Math.random() * (high - low);\n}\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread(range) {\n return range * (0.5 - Math.random());\n}\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom(s) {\n if (s !== undefined)\n _seed = s;\n // Mulberry32 generator\n let t = _seed += 0x6D2B79F5;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n}\nfunction degToRad(degrees) {\n return degrees * DEG2RAD;\n}\nfunction radToDeg(radians) {\n return radians * RAD2DEG;\n}\nfunction isPowerOfTwo(value) {\n return (value & (value - 1)) === 0 && value !== 0;\n}\nfunction ceilPowerOfTwo(value) {\n return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));\n}\nfunction floorPowerOfTwo(value) {\n return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));\n}\nfunction setQuaternionFromProperEuler(q, a, b, c, order) {\n // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n // rotations are applied to the axes in the order specified by 'order'\n // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n // angles are in radians\n const cos = Math.cos;\n const sin = Math.sin;\n const c2 = cos(b / 2);\n const s2 = sin(b / 2);\n const c13 = cos((a + c) / 2);\n const s13 = sin((a + c) / 2);\n const c1_3 = cos((a - c) / 2);\n const s1_3 = sin((a - c) / 2);\n const c3_1 = cos((c - a) / 2);\n const s3_1 = sin((c - a) / 2);\n switch (order) {\n case 'XYX':\n q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);\n break;\n case 'YZY':\n q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);\n break;\n case 'ZXZ':\n q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);\n break;\n case 'XZX':\n q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);\n break;\n case 'YXY':\n q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);\n break;\n case 'ZYZ':\n q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);\n break;\n default:\n console.warn('../math.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order);\n }\n}\nfunction denormalize(value, array) {\n switch (array.constructor) {\n case Float32Array:\n return value;\n case Uint32Array:\n return value / 4294967295.0;\n case Uint16Array:\n return value / 65535.0;\n case Uint8Array:\n return value / 255.0;\n case Int32Array:\n return Math.max(value / 2147483647.0, -1);\n case Int16Array:\n return Math.max(value / 32767.0, -1);\n case Int8Array:\n return Math.max(value / 127.0, -1);\n default:\n throw new Error('Invalid component type.');\n }\n}\nfunction normalize(value, array) {\n switch (array.constructor) {\n case Float32Array:\n return value;\n case Uint32Array:\n return Math.round(value * 4294967295.0);\n case Uint16Array:\n return Math.round(value * 65535.0);\n case Uint8Array:\n return Math.round(value * 255.0);\n case Int32Array:\n return Math.round(value * 2147483647.0);\n case Int16Array:\n return Math.round(value * 32767.0);\n case Int8Array:\n return Math.round(value * 127.0);\n default:\n throw new Error('Invalid component type.');\n }\n}\nconst MathUtils = {\n DEG2RAD: DEG2RAD,\n RAD2DEG: RAD2DEG,\n generateUUID: generateUUID,\n clamp: clamp,\n euclideanModulo: euclideanModulo,\n mapLinear: mapLinear,\n inverseLerp: inverseLerp,\n lerp: lerp,\n damp: damp,\n pingpong: pingpong,\n smoothstep: smoothstep,\n smootherstep: smootherstep,\n randInt: randInt,\n randFloat: randFloat,\n randFloatSpread: randFloatSpread,\n seededRandom: seededRandom,\n degToRad: degToRad,\n radToDeg: radToDeg,\n isPowerOfTwo: isPowerOfTwo,\n ceilPowerOfTwo: ceilPowerOfTwo,\n floorPowerOfTwo: floorPowerOfTwo,\n setQuaternionFromProperEuler: setQuaternionFromProperEuler,\n normalize: normalize,\n denormalize: denormalize\n};\n\nclass Quaternion {\n constructor(x = 0, y = 0, z = 0, w = 1) {\n this.isQuaternion = true;\n this._x = x;\n this._y = y;\n this._z = z;\n this._w = w;\n }\n static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\n // fuzz-free, array-based Quaternion SLERP operation\n let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3];\n const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3];\n if (t === 0) {\n dst[dstOffset + 0] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n return;\n }\n if (t === 1) {\n dst[dstOffset + 0] = x1;\n dst[dstOffset + 1] = y1;\n dst[dstOffset + 2] = z1;\n dst[dstOffset + 3] = w1;\n return;\n }\n if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n let s = 1 - t;\n const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = (cos >= 0 ? 1 : -1), sqrSin = 1 - cos * cos;\n // Skip the Slerp for tiny steps to avoid numeric problems:\n if (sqrSin > Number.EPSILON) {\n const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir);\n s = Math.sin(s * len) / sin;\n t = Math.sin(t * len) / sin;\n }\n const tDir = t * dir;\n x0 = x0 * s + x1 * tDir;\n y0 = y0 * s + y1 * tDir;\n z0 = z0 * s + z1 * tDir;\n w0 = w0 * s + w1 * tDir;\n // Normalize in case we just did a lerp:\n if (s === 1 - t) {\n const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n x0 *= f;\n y0 *= f;\n z0 *= f;\n w0 *= f;\n }\n }\n dst[dstOffset] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n }\n static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) {\n const x0 = src0[srcOffset0];\n const y0 = src0[srcOffset0 + 1];\n const z0 = src0[srcOffset0 + 2];\n const w0 = src0[srcOffset0 + 3];\n const x1 = src1[srcOffset1];\n const y1 = src1[srcOffset1 + 1];\n const z1 = src1[srcOffset1 + 2];\n const w1 = src1[srcOffset1 + 3];\n dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n return dst;\n }\n get x() {\n return this._x;\n }\n set x(value) {\n this._x = value;\n this._onChangeCallback();\n }\n get y() {\n return this._y;\n }\n set y(value) {\n this._y = value;\n this._onChangeCallback();\n }\n get z() {\n return this._z;\n }\n set z(value) {\n this._z = value;\n this._onChangeCallback();\n }\n get w() {\n return this._w;\n }\n set w(value) {\n this._w = value;\n this._onChangeCallback();\n }\n set(x, y, z, w) {\n this._x = x;\n this._y = y;\n this._z = z;\n this._w = w;\n this._onChangeCallback();\n return this;\n }\n clone() {\n return new Quaternion(this._x, this._y, this._z, this._w);\n }\n copy(quaternion) {\n this._x = quaternion.x;\n this._y = quaternion.y;\n this._z = quaternion.z;\n this._w = quaternion.w;\n this._onChangeCallback();\n return this;\n }\n setFromEuler(euler, update = true) {\n const x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n // http://www.mathworks.com/matlabcentral/fileexchange/\n // \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n //\tcontent/SpinCalc.m\n const cos = Math.cos;\n const sin = Math.sin;\n const c1 = cos(x / 2);\n const c2 = cos(y / 2);\n const c3 = cos(z / 2);\n const s1 = sin(x / 2);\n const s2 = sin(y / 2);\n const s3 = sin(z / 2);\n switch (order) {\n case 'XYZ':\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'YXZ':\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case 'ZXY':\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'ZYX':\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case 'YZX':\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'XZY':\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n default:\n console.warn('../math.Quaternion: .setFromEuler() encountered an unknown order: ' + order);\n }\n if (update === true)\n this._onChangeCallback();\n return this;\n }\n setFromAxisAngle(axis, angle) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n // assumes axis is normalized\n const halfAngle = angle / 2, s = Math.sin(halfAngle);\n this._x = axis.x * s;\n this._y = axis.y * s;\n this._z = axis.z * s;\n this._w = Math.cos(halfAngle);\n this._onChangeCallback();\n return this;\n }\n setFromRotationMatrix(m) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n const te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10], trace = m11 + m22 + m33;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1.0);\n this._w = 0.25 / s;\n this._x = (m32 - m23) * s;\n this._y = (m13 - m31) * s;\n this._z = (m21 - m12) * s;\n }\n else if (m11 > m22 && m11 > m33) {\n const s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n this._w = (m32 - m23) / s;\n this._x = 0.25 * s;\n this._y = (m12 + m21) / s;\n this._z = (m13 + m31) / s;\n }\n else if (m22 > m33) {\n const s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n this._w = (m13 - m31) / s;\n this._x = (m12 + m21) / s;\n this._y = 0.25 * s;\n this._z = (m23 + m32) / s;\n }\n else {\n const s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n this._w = (m21 - m12) / s;\n this._x = (m13 + m31) / s;\n this._y = (m23 + m32) / s;\n this._z = 0.25 * s;\n }\n this._onChangeCallback();\n return this;\n }\n setFromUnitVectors(vFrom, vTo) {\n // assumes direction vectors vFrom and vTo are normalized\n let r = vFrom.dot(vTo) + 1;\n if (r < Number.EPSILON) {\n // vFrom and vTo point in opposite directions\n r = 0;\n if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n this._x = -vFrom.y;\n this._y = vFrom.x;\n this._z = 0;\n this._w = r;\n }\n else {\n this._x = 0;\n this._y = -vFrom.z;\n this._z = vFrom.y;\n this._w = r;\n }\n }\n else {\n // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n this._w = r;\n }\n return this.normalize();\n }\n angleTo(q) {\n return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));\n }\n rotateTowards(q, step) {\n const angle = this.angleTo(q);\n if (angle === 0)\n return this;\n const t = Math.min(1, step / angle);\n this.slerp(q, t);\n return this;\n }\n identity() {\n return this.set(0, 0, 0, 1);\n }\n invert() {\n // quaternion is assumed to have unit length\n return this.conjugate();\n }\n conjugate() {\n this._x *= -1;\n this._y *= -1;\n this._z *= -1;\n this._onChangeCallback();\n return this;\n }\n dot(v) {\n return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n }\n lengthSq() {\n return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n }\n length() {\n return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);\n }\n normalize() {\n let l = this.length();\n if (l === 0) {\n this._x = 0;\n this._y = 0;\n this._z = 0;\n this._w = 1;\n }\n else {\n l = 1 / l;\n this._x = this._x * l;\n this._y = this._y * l;\n this._z = this._z * l;\n this._w = this._w * l;\n }\n this._onChangeCallback();\n return this;\n }\n multiply(q) {\n return this.multiplyQuaternions(this, q);\n }\n premultiply(q) {\n return this.multiplyQuaternions(q, this);\n }\n multiplyQuaternions(a, b) {\n // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n this._onChangeCallback();\n return this;\n }\n slerp(qb, t) {\n if (t === 0)\n return this;\n if (t === 1)\n return this.copy(qb);\n const x = this._x, y = this._y, z = this._z, w = this._w;\n // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n if (cosHalfTheta < 0) {\n this._w = -qb._w;\n this._x = -qb._x;\n this._y = -qb._y;\n this._z = -qb._z;\n cosHalfTheta = -cosHalfTheta;\n }\n else {\n this.copy(qb);\n }\n if (cosHalfTheta >= 1.0) {\n this._w = w;\n this._x = x;\n this._y = y;\n this._z = z;\n return this;\n }\n const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n if (sqrSinHalfTheta <= Number.EPSILON) {\n const s = 1 - t;\n this._w = s * w + t * this._w;\n this._x = s * x + t * this._x;\n this._y = s * y + t * this._y;\n this._z = s * z + t * this._z;\n this.normalize(); // normalize calls _onChangeCallback()\n return this;\n }\n const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n this._w = (w * ratioA + this._w * ratioB);\n this._x = (x * ratioA + this._x * ratioB);\n this._y = (y * ratioA + this._y * ratioB);\n this._z = (z * ratioA + this._z * ratioB);\n this._onChangeCallback();\n return this;\n }\n slerpQuaternions(qa, qb, t) {\n return this.copy(qa).slerp(qb, t);\n }\n random() {\n // sets this quaternion to a uniform random unit quaternnion\n // Ken Shoemake\n // Uniform random rotations\n // D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n const theta1 = 2 * Math.PI * Math.random();\n const theta2 = 2 * Math.PI * Math.random();\n const x0 = Math.random();\n const r1 = Math.sqrt(1 - x0);\n const r2 = Math.sqrt(x0);\n return this.set(r1 * Math.sin(theta1), r1 * Math.cos(theta1), r2 * Math.sin(theta2), r2 * Math.cos(theta2));\n }\n equals(quaternion) {\n return (quaternion._x === this._x) && (quaternion._y === this._y) && (quaternion._z === this._z) && (quaternion._w === this._w);\n }\n fromArray(array, offset = 0) {\n this._x = array[offset];\n this._y = array[offset + 1];\n this._z = array[offset + 2];\n this._w = array[offset + 3];\n this._onChangeCallback();\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this._x;\n array[offset + 1] = this._y;\n array[offset + 2] = this._z;\n array[offset + 3] = this._w;\n return array;\n }\n /*\n fromBufferAttribute( attribute, index ) {\n\n this._x = attribute.getX( index );\n this._y = attribute.getY( index );\n this._z = attribute.getZ( index );\n this._w = attribute.getW( index );\n\n this._onChangeCallback();\n\n return this;\n\n }*/\n toJSON() {\n return this.toArray();\n }\n _onChange(callback) {\n this._onChangeCallback = callback;\n return this;\n }\n _onChangeCallback() { }\n *[Symbol.iterator]() {\n yield this._x;\n yield this._y;\n yield this._z;\n yield this._w;\n }\n}\n\nclass Vector3 {\n constructor(x = 0, y = 0, z = 0) {\n this.isVector3 = true;\n Vector3.prototype.isVector3 = true;\n this.x = x;\n this.y = y;\n this.z = z;\n }\n set(x, y, z) {\n if (z === undefined)\n z = this.z; // sprite.scale.set(x,y)\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n setScalar(scalar) {\n this.x = scalar;\n this.y = scalar;\n this.z = scalar;\n return this;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n setZ(z) {\n this.z = z;\n return this;\n }\n setComponent(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n default:\n throw new Error('index is out of range: ' + index);\n }\n return this;\n }\n getComponent(index) {\n switch (index) {\n case 0:\n return this.x;\n case 1:\n return this.y;\n case 2:\n return this.z;\n default:\n throw new Error('index is out of range: ' + index);\n }\n }\n clone() {\n return new Vector3(this.x, this.y, this.z);\n }\n copy(v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n return this;\n }\n add(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n return this;\n }\n addScalar(s) {\n this.x += s;\n this.y += s;\n this.z += s;\n return this;\n }\n addVectors(a, b) {\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n return this;\n }\n addScaledVector(v, s) {\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n return this;\n }\n sub(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n return this;\n }\n subScalar(s) {\n this.x -= s;\n this.y -= s;\n this.z -= s;\n return this;\n }\n subVectors(a, b) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n return this;\n }\n multiply(v) {\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n return this;\n }\n multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n }\n multiplyVectors(a, b) {\n this.x = a.x * b.x;\n this.y = a.y * b.y;\n this.z = a.z * b.z;\n return this;\n }\n applyEuler(euler) {\n return this.applyQuaternion(_quaternion$1.setFromEuler(euler));\n }\n applyAxisAngle(axis, angle) {\n return this.applyQuaternion(_quaternion$1.setFromAxisAngle(axis, angle));\n }\n applyMatrix3(m) {\n const x = this.x, y = this.y, z = this.z;\n const e = m.elements;\n this.x = e[0] * x + e[3] * y + e[6] * z;\n this.y = e[1] * x + e[4] * y + e[7] * z;\n this.z = e[2] * x + e[5] * y + e[8] * z;\n return this;\n }\n applyNormalMatrix(m) {\n return this.applyMatrix3(m).normalize();\n }\n applyMatrix4(m) {\n const x = this.x, y = this.y, z = this.z;\n const e = m.elements;\n const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\n this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\n this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\n this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\n return this;\n }\n applyQuaternion(q) {\n // quaternion q is assumed to have unit length\n const vx = this.x, vy = this.y, vz = this.z;\n const qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n // t = 2 * cross( q.xyz, v );\n const tx = 2 * (qy * vz - qz * vy);\n const ty = 2 * (qz * vx - qx * vz);\n const tz = 2 * (qx * vy - qy * vx);\n // v + q.w * t + cross( q.xyz, t );\n this.x = vx + qw * tx + qy * tz - qz * ty;\n this.y = vy + qw * ty + qz * tx - qx * tz;\n this.z = vz + qw * tz + qx * ty - qy * tx;\n return this;\n }\n /*project(camera: Camera) {\n return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);\n }\n\n unproject(camera: Camera) {\n return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);\n }*/\n transformDirection(m) {\n // input: ../math.Matrix4 affine matrix\n // vector interpreted as a direction\n const x = this.x, y = this.y, z = this.z;\n const e = m.elements;\n this.x = e[0] * x + e[4] * y + e[8] * z;\n this.y = e[1] * x + e[5] * y + e[9] * z;\n this.z = e[2] * x + e[6] * y + e[10] * z;\n return this.normalize();\n }\n divide(v) {\n this.x /= v.x;\n this.y /= v.y;\n this.z /= v.z;\n return this;\n }\n divideScalar(scalar) {\n return this.multiplyScalar(1 / scalar);\n }\n min(v) {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n return this;\n }\n max(v) {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n return this;\n }\n clamp(min, max) {\n // assumes min < max, componentwise\n this.x = Math.max(min.x, Math.min(max.x, this.x));\n this.y = Math.max(min.y, Math.min(max.y, this.y));\n this.z = Math.max(min.z, Math.min(max.z, this.z));\n return this;\n }\n clampScalar(minVal, maxVal) {\n this.x = Math.max(minVal, Math.min(maxVal, this.x));\n this.y = Math.max(minVal, Math.min(maxVal, this.y));\n this.z = Math.max(minVal, Math.min(maxVal, this.z));\n return this;\n }\n clampLength(min, max) {\n const length = this.length();\n return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n }\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n return this;\n }\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n return this;\n }\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n return this;\n }\n roundToZero() {\n this.x = Math.trunc(this.x);\n this.y = Math.trunc(this.y);\n this.z = Math.trunc(this.z);\n return this;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n dot(v) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n }\n // TODO lengthSquared?\n lengthSq() {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n manhattanLength() {\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n }\n normalize() {\n return this.divideScalar(this.length() || 1);\n }\n setLength(length) {\n return this.normalize().multiplyScalar(length);\n }\n lerp(v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n return this;\n }\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n return this;\n }\n cross(v) {\n return this.crossVectors(this, v);\n }\n crossVectors(a, b) {\n const ax = a.x, ay = a.y, az = a.z;\n const bx = b.x, by = b.y, bz = b.z;\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n return this;\n }\n projectOnVector(v) {\n const denominator = v.lengthSq();\n if (denominator === 0)\n return this.set(0, 0, 0);\n const scalar = v.dot(this) / denominator;\n return this.copy(v).multiplyScalar(scalar);\n }\n projectOnPlane(planeNormal) {\n _vector.copy(this).projectOnVector(planeNormal);\n return this.sub(_vector);\n }\n reflect(normal) {\n // reflect incident vector off plane orthogonal to normal\n // normal is assumed to have unit length\n return this.sub(_vector.copy(normal).multiplyScalar(2 * this.dot(normal)));\n }\n angleTo(v) {\n const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n if (denominator === 0)\n return Math.PI / 2;\n const theta = this.dot(v) / denominator;\n // clamp, to handle numerical problems\n return Math.acos(clamp(theta, -1, 1));\n }\n distanceTo(v) {\n return Math.sqrt(this.distanceToSquared(v));\n }\n distanceToSquared(v) {\n const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n return dx * dx + dy * dy + dz * dz;\n }\n manhattanDistanceTo(v) {\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\n }\n /*setFromSpherical(s) {\n return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\n }*/\n setFromSphericalCoords(radius, phi, theta) {\n const sinPhiRadius = Math.sin(phi) * radius;\n this.x = sinPhiRadius * Math.sin(theta);\n this.y = Math.cos(phi) * radius;\n this.z = sinPhiRadius * Math.cos(theta);\n return this;\n }\n /*setFromCylindrical(c) {\n return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\n }*/\n setFromCylindricalCoords(radius, theta, y) {\n this.x = radius * Math.sin(theta);\n this.y = y;\n this.z = radius * Math.cos(theta);\n return this;\n }\n setFromMatrixPosition(m) {\n const e = m.elements;\n this.x = e[12];\n this.y = e[13];\n this.z = e[14];\n return this;\n }\n setFromMatrixScale(m) {\n const sx = this.setFromMatrixColumn(m, 0).length();\n const sy = this.setFromMatrixColumn(m, 1).length();\n const sz = this.setFromMatrixColumn(m, 2).length();\n this.x = sx;\n this.y = sy;\n this.z = sz;\n return this;\n }\n setFromMatrixColumn(m, index) {\n return this.fromArray(m.elements, index * 4);\n }\n setFromMatrix3Column(m, index) {\n return this.fromArray(m.elements, index * 3);\n }\n setFromEuler(e) {\n this.x = e._x;\n this.y = e._y;\n this.z = e._z;\n return this;\n }\n /*setFromColor(c) {\n this.x = c.r;\n this.y = c.g;\n this.z = c.b;\n\n return this;\n }*/\n equals(v) {\n return v.x === this.x && v.y === this.y && v.z === this.z;\n }\n fromArray(array, offset = 0) {\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n return array;\n }\n /*fromBufferAttribute(attribute, index) {\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n this.z = attribute.getZ(index);\n\n return this;\n }*/\n random() {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n return this;\n }\n randomDirection() {\n // https://mathworld.wolfram.com/SpherePointPicking.html\n const theta = Math.random() * Math.PI * 2;\n const u = Math.random() * 2 - 1;\n const c = Math.sqrt(1 - u * u);\n this.x = c * Math.cos(theta);\n this.y = u;\n this.z = c * Math.sin(theta);\n return this;\n }\n abs() {\n this.x = Math.abs(this.x);\n this.y = Math.abs(this.y);\n this.z = Math.abs(this.z);\n return this;\n }\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n}\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\n\n//import {WebGLCoordinateSystem, WebGPUCoordinateSystem} from 'constants.js';\nconst WebGLCoordinateSystem = 2000;\nconst WebGPUCoordinateSystem = 2001;\nclass Matrix4 {\n constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\n this.isMatrix4 = true;\n Matrix4.prototype.isMatrix4 = true;\n this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n if (n11 !== undefined) {\n this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44);\n }\n }\n /**\n * @deprecated Use {@link Matrix4#copyPosition .copyPosition()} instead.\n */\n extractPosition(m) {\n console.warn('THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().');\n return this.copyPosition(m);\n }\n /**\n * Sets this matrix to a x b and stores the result into the flat array r.\n * r can be either a regular Array or a TypedArray.\n *\n * @deprecated This method has been removed completely.\n */\n multiplyToArray(a, b, r) {\n console.error('THREE.Matrix4: .multiplyToArray() has been removed.');\n return this;\n }\n /**\n * @deprecated Use {@link Matrix4#makeRotationFromQuaternion .makeRotationFromQuaternion()} instead.\n */\n setRotationFromQuaternion(q) {\n return this.makeRotationFromQuaternion(q);\n }\n set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\n const te = this.elements;\n te[0] = n11;\n te[4] = n12;\n te[8] = n13;\n te[12] = n14;\n te[1] = n21;\n te[5] = n22;\n te[9] = n23;\n te[13] = n24;\n te[2] = n31;\n te[6] = n32;\n te[10] = n33;\n te[14] = n34;\n te[3] = n41;\n te[7] = n42;\n te[11] = n43;\n te[15] = n44;\n return this;\n }\n identity() {\n this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n return this;\n }\n clone() {\n return new Matrix4().fromArray(this.elements);\n }\n copy(m) {\n const te = this.elements;\n const me = m.elements;\n te[0] = me[0];\n te[1] = me[1];\n te[2] = me[2];\n te[3] = me[3];\n te[4] = me[4];\n te[5] = me[5];\n te[6] = me[6];\n te[7] = me[7];\n te[8] = me[8];\n te[9] = me[9];\n te[10] = me[10];\n te[11] = me[11];\n te[12] = me[12];\n te[13] = me[13];\n te[14] = me[14];\n te[15] = me[15];\n return this;\n }\n copyPosition(m) {\n const te = this.elements, me = m.elements;\n te[12] = me[12];\n te[13] = me[13];\n te[14] = me[14];\n return this;\n }\n setFromMatrix3(m) {\n const me = m.elements;\n this.set(me[0], me[3], me[6], 0, me[1], me[4], me[7], 0, me[2], me[5], me[8], 0, 0, 0, 0, 1);\n return this;\n }\n extractBasis(xAxis, yAxis, zAxis) {\n xAxis.setFromMatrixColumn(this, 0);\n yAxis.setFromMatrixColumn(this, 1);\n zAxis.setFromMatrixColumn(this, 2);\n return this;\n }\n makeBasis(xAxis, yAxis, zAxis) {\n this.set(xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1);\n return this;\n }\n extractRotation(m) {\n // this method does not support reflection matrices\n const te = this.elements;\n const me = m.elements;\n const scaleX = 1 / _v1.setFromMatrixColumn(m, 0).length();\n const scaleY = 1 / _v1.setFromMatrixColumn(m, 1).length();\n const scaleZ = 1 / _v1.setFromMatrixColumn(m, 2).length();\n te[0] = me[0] * scaleX;\n te[1] = me[1] * scaleX;\n te[2] = me[2] * scaleX;\n te[3] = 0;\n te[4] = me[4] * scaleY;\n te[5] = me[5] * scaleY;\n te[6] = me[6] * scaleY;\n te[7] = 0;\n te[8] = me[8] * scaleZ;\n te[9] = me[9] * scaleZ;\n te[10] = me[10] * scaleZ;\n te[11] = 0;\n te[12] = 0;\n te[13] = 0;\n te[14] = 0;\n te[15] = 1;\n return this;\n }\n makeRotationFromEuler(euler) {\n const te = this.elements;\n const x = euler.x, y = euler.y, z = euler.z;\n const a = Math.cos(x), b = Math.sin(x);\n const c = Math.cos(y), d = Math.sin(y);\n const e = Math.cos(z), f = Math.sin(z);\n if (euler.order === 'XYZ') {\n const ae = a * e, af = a * f, be = b * e, bf = b * f;\n te[0] = c * e;\n te[4] = -c * f;\n te[8] = d;\n te[1] = af + be * d;\n te[5] = ae - bf * d;\n te[9] = -b * c;\n te[2] = bf - ae * d;\n te[6] = be + af * d;\n te[10] = a * c;\n }\n else if (euler.order === 'YXZ') {\n const ce = c * e, cf = c * f, de = d * e, df = d * f;\n te[0] = ce + df * b;\n te[4] = de * b - cf;\n te[8] = a * d;\n te[1] = a * f;\n te[5] = a * e;\n te[9] = -b;\n te[2] = cf * b - de;\n te[6] = df + ce * b;\n te[10] = a * c;\n }\n else if (euler.order === 'ZXY') {\n const ce = c * e, cf = c * f, de = d * e, df = d * f;\n te[0] = ce - df * b;\n te[4] = -a * f;\n te[8] = de + cf * b;\n te[1] = cf + de * b;\n te[5] = a * e;\n te[9] = df - ce * b;\n te[2] = -a * d;\n te[6] = b;\n te[10] = a * c;\n }\n else if (euler.order === 'ZYX') {\n const ae = a * e, af = a * f, be = b * e, bf = b * f;\n te[0] = c * e;\n te[4] = be * d - af;\n te[8] = ae * d + bf;\n te[1] = c * f;\n te[5] = bf * d + ae;\n te[9] = af * d - be;\n te[2] = -d;\n te[6] = b * c;\n te[10] = a * c;\n }\n else if (euler.order === 'YZX') {\n const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n te[0] = c * e;\n te[4] = bd - ac * f;\n te[8] = bc * f + ad;\n te[1] = f;\n te[5] = a * e;\n te[9] = -b * e;\n te[2] = -d * e;\n te[6] = ad * f + bc;\n te[10] = ac - bd * f;\n }\n else if (euler.order === 'XZY') {\n const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n te[0] = c * e;\n te[4] = -f;\n te[8] = d * e;\n te[1] = ac * f + bd;\n te[5] = a * e;\n te[9] = ad * f - bc;\n te[2] = bc * f - ad;\n te[6] = b * e;\n te[10] = bd * f + ac;\n }\n // bottom row\n te[3] = 0;\n te[7] = 0;\n te[11] = 0;\n // last column\n te[12] = 0;\n te[13] = 0;\n te[14] = 0;\n te[15] = 1;\n return this;\n }\n makeRotationFromQuaternion(q) {\n return this.compose(_zero, q, _one);\n }\n lookAt(eye, target, up) {\n const te = this.elements;\n _z.subVectors(eye, target);\n if (_z.lengthSq() === 0) {\n // eye and target are in the same position\n _z.z = 1;\n }\n _z.normalize();\n _x.crossVectors(up, _z);\n if (_x.lengthSq() === 0) {\n // up and z are parallel\n if (Math.abs(up.z) === 1) {\n _z.x += 0.0001;\n }\n else {\n _z.z += 0.0001;\n }\n _z.normalize();\n _x.crossVectors(up, _z);\n }\n _x.normalize();\n _y.crossVectors(_z, _x);\n te[0] = _x.x;\n te[4] = _y.x;\n te[8] = _z.x;\n te[1] = _x.y;\n te[5] = _y.y;\n te[9] = _z.y;\n te[2] = _x.z;\n te[6] = _y.z;\n te[10] = _z.z;\n return this;\n }\n multiply(m) {\n return this.multiplyMatrices(this, m);\n }\n premultiply(m) {\n return this.multiplyMatrices(m, this);\n }\n multiplyMatrices(a, b) {\n const ae = a.elements;\n const be = b.elements;\n const te = this.elements;\n const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12];\n const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13];\n const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14];\n const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15];\n const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12];\n const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13];\n const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14];\n const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n return this;\n }\n multiplyScalar(s) {\n const te = this.elements;\n te[0] *= s;\n te[4] *= s;\n te[8] *= s;\n te[12] *= s;\n te[1] *= s;\n te[5] *= s;\n te[9] *= s;\n te[13] *= s;\n te[2] *= s;\n te[6] *= s;\n te[10] *= s;\n te[14] *= s;\n te[3] *= s;\n te[7] *= s;\n te[11] *= s;\n te[15] *= s;\n return this;\n }\n determinant() {\n const te = this.elements;\n const n11 = te[0], n12 = te[4], n13 = te[8], n14 = te[12];\n const n21 = te[1], n22 = te[5], n23 = te[9], n24 = te[13];\n const n31 = te[2], n32 = te[6], n33 = te[10], n34 = te[14];\n const n41 = te[3], n42 = te[7], n43 = te[11], n44 = te[15];\n //TODO: make this more efficient\n //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n return (n41 *\n (+n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34) +\n n42 *\n (+n11 * n23 * n34 -\n n11 * n24 * n33 +\n n14 * n21 * n33 -\n n13 * n21 * n34 +\n n13 * n24 * n31 -\n n14 * n23 * n31) +\n n43 *\n (+n11 * n24 * n32 -\n n11 * n22 * n34 -\n n14 * n21 * n32 +\n n12 * n21 * n34 +\n n14 * n22 * n31 -\n n12 * n24 * n31) +\n n44 *\n (-n13 * n22 * n31 -\n n11 * n23 * n32 +\n n11 * n22 * n33 +\n n13 * n21 * n32 -\n n12 * n21 * n33 +\n n12 * n23 * n31));\n }\n transpose() {\n const te = this.elements;\n let tmp;\n tmp = te[1];\n te[1] = te[4];\n te[4] = tmp;\n tmp = te[2];\n te[2] = te[8];\n te[8] = tmp;\n tmp = te[6];\n te[6] = te[9];\n te[9] = tmp;\n tmp = te[3];\n te[3] = te[12];\n te[12] = tmp;\n tmp = te[7];\n te[7] = te[13];\n te[13] = tmp;\n tmp = te[11];\n te[11] = te[14];\n te[14] = tmp;\n return this;\n }\n setPosition(x, y, z) {\n const te = this.elements;\n if (x.isVector3) {\n te[12] = x.x;\n te[13] = x.y;\n te[14] = x.z;\n }\n else {\n te[12] = x;\n te[13] = y;\n te[14] = z;\n }\n return this;\n }\n invert() {\n // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n41 = te[3], n12 = te[4], n22 = te[5], n32 = te[6], n42 = te[7], n13 = te[8], n23 = te[9], n33 = te[10], n43 = te[11], n14 = te[12], n24 = te[13], n34 = te[14], n44 = te[15], t11 = n23 * n34 * n42 -\n n24 * n33 * n42 +\n n24 * n32 * n43 -\n n22 * n34 * n43 -\n n23 * n32 * n44 +\n n22 * n33 * n44, t12 = n14 * n33 * n42 -\n n13 * n34 * n42 -\n n14 * n32 * n43 +\n n12 * n34 * n43 +\n n13 * n32 * n44 -\n n12 * n33 * n44, t13 = n13 * n24 * n42 -\n n14 * n23 * n42 +\n n14 * n22 * n43 -\n n12 * n24 * n43 -\n n13 * n22 * n44 +\n n12 * n23 * n44, t14 = n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34;\n const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n if (det === 0)\n return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n const detInv = 1 / det;\n te[0] = t11 * detInv;\n te[1] =\n (n24 * n33 * n41 -\n n23 * n34 * n41 -\n n24 * n31 * n43 +\n n21 * n34 * n43 +\n n23 * n31 * n44 -\n n21 * n33 * n44) *\n detInv;\n te[2] =\n (n22 * n34 * n41 -\n n24 * n32 * n41 +\n n24 * n31 * n42 -\n n21 * n34 * n42 -\n n22 * n31 * n44 +\n n21 * n32 * n44) *\n detInv;\n te[3] =\n (n23 * n32 * n41 -\n n22 * n33 * n41 -\n n23 * n31 * n42 +\n n21 * n33 * n42 +\n n22 * n31 * n43 -\n n21 * n32 * n43) *\n detInv;\n te[4] = t12 * detInv;\n te[5] =\n (n13 * n34 * n41 -\n n14 * n33 * n41 +\n n14 * n31 * n43 -\n n11 * n34 * n43 -\n n13 * n31 * n44 +\n n11 * n33 * n44) *\n detInv;\n te[6] =\n (n14 * n32 * n41 -\n n12 * n34 * n41 -\n n14 * n31 * n42 +\n n11 * n34 * n42 +\n n12 * n31 * n44 -\n n11 * n32 * n44) *\n detInv;\n te[7] =\n (n12 * n33 * n41 -\n n13 * n32 * n41 +\n n13 * n31 * n42 -\n n11 * n33 * n42 -\n n12 * n31 * n43 +\n n11 * n32 * n43) *\n detInv;\n te[8] = t13 * detInv;\n te[9] =\n (n14 * n23 * n41 -\n n13 * n24 * n41 -\n n14 * n21 * n43 +\n n11 * n24 * n43 +\n n13 * n21 * n44 -\n n11 * n23 * n44) *\n detInv;\n te[10] =\n (n12 * n24 * n41 -\n n14 * n22 * n41 +\n n14 * n21 * n42 -\n n11 * n24 * n42 -\n n12 * n21 * n44 +\n n11 * n22 * n44) *\n detInv;\n te[11] =\n (n13 * n22 * n41 -\n n12 * n23 * n41 -\n n13 * n21 * n42 +\n n11 * n23 * n42 +\n n12 * n21 * n43 -\n n11 * n22 * n43) *\n detInv;\n te[12] = t14 * detInv;\n te[13] =\n (n13 * n24 * n31 -\n n14 * n23 * n31 +\n n14 * n21 * n33 -\n n11 * n24 * n33 -\n n13 * n21 * n34 +\n n11 * n23 * n34) *\n detInv;\n te[14] =\n (n14 * n22 * n31 -\n n12 * n24 * n31 -\n n14 * n21 * n32 +\n n11 * n24 * n32 +\n n12 * n21 * n34 -\n n11 * n22 * n34) *\n detInv;\n te[15] =\n (n12 * n23 * n31 -\n n13 * n22 * n31 +\n n13 * n21 * n32 -\n n11 * n23 * n32 -\n n12 * n21 * n33 +\n n11 * n22 * n33) *\n detInv;\n return this;\n }\n scale(v) {\n const te = this.elements;\n const x = v.x, y = v.y, z = v.z;\n te[0] *= x;\n te[4] *= y;\n te[8] *= z;\n te[1] *= x;\n te[5] *= y;\n te[9] *= z;\n te[2] *= x;\n te[6] *= y;\n te[10] *= z;\n te[3] *= x;\n te[7] *= y;\n te[11] *= z;\n return this;\n }\n getMaxScaleOnAxis() {\n const te = this.elements;\n const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\n const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\n const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\n return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\n }\n makeTranslation(x, y, z) {\n if (x.isVector3) {\n this.set(1, 0, 0, x.x, 0, 1, 0, x.y, 0, 0, 1, x.z, 0, 0, 0, 1);\n }\n else {\n this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);\n }\n return this;\n }\n makeRotationX(theta) {\n const c = Math.cos(theta), s = Math.sin(theta);\n this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);\n return this;\n }\n makeRotationY(theta) {\n const c = Math.cos(theta), s = Math.sin(theta);\n this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);\n return this;\n }\n makeRotationZ(theta) {\n const c = Math.cos(theta), s = Math.sin(theta);\n this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n return this;\n }\n makeRotationAxis(axis, angle) {\n // Based on http://www.gamedev.net/reference/articles/article1199.asp\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const t = 1 - c;\n const x = axis.x, y = axis.y, z = axis.z;\n const tx = t * x, ty = t * y;\n this.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1);\n return this;\n }\n makeScale(x, y, z) {\n this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);\n return this;\n }\n makeShear(xy, xz, yx, yz, zx, zy) {\n this.set(1, yx, zx, 0, xy, 1, zy, 0, xz, yz, 1, 0, 0, 0, 0, 1);\n return this;\n }\n compose(position, quaternion, scale) {\n const te = this.elements;\n const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n const x2 = x + x, y2 = y + y, z2 = z + z;\n const xx = x * x2, xy = x * y2, xz = x * z2;\n const yy = y * y2, yz = y * z2, zz = z * z2;\n const wx = w * x2, wy = w * y2, wz = w * z2;\n const sx = scale.x, sy = scale.y, sz = scale.z;\n te[0] = (1 - (yy + zz)) * sx;\n te[1] = (xy + wz) * sx;\n te[2] = (xz - wy) * sx;\n te[3] = 0;\n te[4] = (xy - wz) * sy;\n te[5] = (1 - (xx + zz)) * sy;\n te[6] = (yz + wx) * sy;\n te[7] = 0;\n te[8] = (xz + wy) * sz;\n te[9] = (yz - wx) * sz;\n te[10] = (1 - (xx + yy)) * sz;\n te[11] = 0;\n te[12] = position.x;\n te[13] = position.y;\n te[14] = position.z;\n te[15] = 1;\n return this;\n }\n decompose(position, quaternion, scale) {\n const te = this.elements;\n let sx = _v1.set(te[0], te[1], te[2]).length();\n const sy = _v1.set(te[4], te[5], te[6]).length();\n const sz = _v1.set(te[8], te[9], te[10]).length();\n // if determine is negative, we need to invert one scale\n const det = this.determinant();\n if (det < 0)\n sx = -sx;\n position.x = te[12];\n position.y = te[13];\n position.z = te[14];\n // scale the rotation part\n _m1.copy(this);\n const invSX = 1 / sx;\n const invSY = 1 / sy;\n const invSZ = 1 / sz;\n _m1.elements[0] *= invSX;\n _m1.elements[1] *= invSX;\n _m1.elements[2] *= invSX;\n _m1.elements[4] *= invSY;\n _m1.elements[5] *= invSY;\n _m1.elements[6] *= invSY;\n _m1.elements[8] *= invSZ;\n _m1.elements[9] *= invSZ;\n _m1.elements[10] *= invSZ;\n quaternion.setFromRotationMatrix(_m1);\n scale.x = sx;\n scale.y = sy;\n scale.z = sz;\n return this;\n }\n makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {\n const te = this.elements;\n const x = (2 * near) / (right - left);\n const y = (2 * near) / (top - bottom);\n const a = (right + left) / (right - left);\n const b = (top + bottom) / (top - bottom);\n let c, d;\n if (coordinateSystem === WebGLCoordinateSystem) {\n c = -(far + near) / (far - near);\n d = (-2 * far * near) / (far - near);\n }\n else if (coordinateSystem === WebGPUCoordinateSystem) {\n c = -far / (far - near);\n d = (-far * near) / (far - near);\n }\n else {\n throw new Error('Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem);\n }\n te[0] = x;\n te[4] = 0;\n te[8] = a;\n te[12] = 0;\n te[1] = 0;\n te[5] = y;\n te[9] = b;\n te[13] = 0;\n te[2] = 0;\n te[6] = 0;\n te[10] = c;\n te[14] = d;\n te[3] = 0;\n te[7] = 0;\n te[11] = -1;\n te[15] = 0;\n return this;\n }\n makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {\n const te = this.elements;\n const w = 1.0 / (right - left);\n const h = 1.0 / (top - bottom);\n const p = 1.0 / (far - near);\n const x = (right + left) * w;\n const y = (top + bottom) * h;\n let z, zInv;\n if (coordinateSystem === WebGLCoordinateSystem) {\n z = (far + near) * p;\n zInv = -2 * p;\n }\n else if (coordinateSystem === WebGPUCoordinateSystem) {\n z = near * p;\n zInv = -1 * p;\n }\n else {\n throw new Error('../math.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem);\n }\n te[0] = 2 * w;\n te[4] = 0;\n te[8] = 0;\n te[12] = -x;\n te[1] = 0;\n te[5] = 2 * h;\n te[9] = 0;\n te[13] = -y;\n te[2] = 0;\n te[6] = 0;\n te[10] = zInv;\n te[14] = -z;\n te[3] = 0;\n te[7] = 0;\n te[11] = 0;\n te[15] = 1;\n return this;\n }\n equals(matrix) {\n const te = this.elements;\n const me = matrix.elements;\n for (let i = 0; i < 16; i++) {\n if (te[i] !== me[i])\n return false;\n }\n return true;\n }\n fromArray(array, offset = 0) {\n for (let i = 0; i < 16; i++) {\n this.elements[i] = array[i + offset];\n }\n return this;\n }\n toArray(array = [], offset = 0) {\n const te = this.elements;\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n array[offset + 8] = te[8];\n array[offset + 9] = te[9];\n array[offset + 10] = te[10];\n array[offset + 11] = te[11];\n array[offset + 12] = te[12];\n array[offset + 13] = te[13];\n array[offset + 14] = te[14];\n array[offset + 15] = te[15];\n return array;\n }\n}\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3(0, 0, 0);\nconst _one = /*@__PURE__*/ new Vector3(1, 1, 1);\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nclass Euler {\n constructor(x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER) {\n this.isEuler = true;\n this._x = x;\n this._y = y;\n this._z = z;\n this._order = order;\n }\n get x() {\n return this._x;\n }\n set x(value) {\n this._x = value;\n this._onChangeCallback();\n }\n get y() {\n return this._y;\n }\n set y(value) {\n this._y = value;\n this._onChangeCallback();\n }\n get z() {\n return this._z;\n }\n set z(value) {\n this._z = value;\n this._onChangeCallback();\n }\n get order() {\n return this._order;\n }\n set order(value) {\n this._order = value;\n this._onChangeCallback();\n }\n set(x, y, z, order = this._order) {\n this._x = x;\n this._y = y;\n this._z = z;\n this._order = order;\n this._onChangeCallback();\n return this;\n }\n clone() {\n return new Euler(this._x, this._y, this._z, this._order);\n }\n copy(euler) {\n this._x = euler._x;\n this._y = euler._y;\n this._z = euler._z;\n this._order = euler._order;\n this._onChangeCallback();\n return this;\n }\n setFromRotationMatrix(m, order = this._order, update = true) {\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n const te = m.elements;\n const m11 = te[0], m12 = te[4], m13 = te[8];\n const m21 = te[1], m22 = te[5], m23 = te[9];\n const m31 = te[2], m32 = te[6], m33 = te[10];\n switch (order) {\n case 'XYZ':\n this._y = Math.asin(clamp(m13, -1, 1));\n if (Math.abs(m13) < 0.9999999) {\n this._x = Math.atan2(-m23, m33);\n this._z = Math.atan2(-m12, m11);\n }\n else {\n this._x = Math.atan2(m32, m22);\n this._z = 0;\n }\n break;\n case 'YXZ':\n this._x = Math.asin(-clamp(m23, -1, 1));\n if (Math.abs(m23) < 0.9999999) {\n this._y = Math.atan2(m13, m33);\n this._z = Math.atan2(m21, m22);\n }\n else {\n this._y = Math.atan2(-m31, m11);\n this._z = 0;\n }\n break;\n case 'ZXY':\n this._x = Math.asin(clamp(m32, -1, 1));\n if (Math.abs(m32) < 0.9999999) {\n this._y = Math.atan2(-m31, m33);\n this._z = Math.atan2(-m12, m22);\n }\n else {\n this._y = 0;\n this._z = Math.atan2(m21, m11);\n }\n break;\n case 'ZYX':\n this._y = Math.asin(-clamp(m31, -1, 1));\n if (Math.abs(m31) < 0.9999999) {\n this._x = Math.atan2(m32, m33);\n this._z = Math.atan2(m21, m11);\n }\n else {\n this._x = 0;\n this._z = Math.atan2(-m12, m22);\n }\n break;\n case 'YZX':\n this._z = Math.asin(clamp(m21, -1, 1));\n if (Math.abs(m21) < 0.9999999) {\n this._x = Math.atan2(-m23, m22);\n this._y = Math.atan2(-m31, m11);\n }\n else {\n this._x = 0;\n this._y = Math.atan2(m13, m33);\n }\n break;\n case 'XZY':\n this._z = Math.asin(-clamp(m12, -1, 1));\n if (Math.abs(m12) < 0.9999999) {\n this._x = Math.atan2(m32, m22);\n this._y = Math.atan2(m13, m11);\n }\n else {\n this._x = Math.atan2(-m23, m33);\n this._y = 0;\n }\n break;\n default:\n console.warn('../math.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order);\n }\n this._order = order;\n if (update === true)\n this._onChangeCallback();\n return this;\n }\n setFromQuaternion(q, order, update) {\n _matrix.makeRotationFromQuaternion(q);\n return this.setFromRotationMatrix(_matrix, order, update);\n }\n setFromVector3(v, order = this._order) {\n return this.set(v.x, v.y, v.z, order);\n }\n reorder(newOrder) {\n // WARNING: this discards revolution information -bhouston\n _quaternion.setFromEuler(this);\n return this.setFromQuaternion(_quaternion, newOrder);\n }\n equals(euler) {\n return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order;\n }\n fromArray(array) {\n this._x = array[0];\n this._y = array[1];\n this._z = array[2];\n if (array[3] !== undefined)\n this._order = array[3];\n this._onChangeCallback();\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this._x;\n array[offset + 1] = this._y;\n array[offset + 2] = this._z;\n array[offset + 3] = this._order;\n return array;\n }\n _onChange(callback) {\n this._onChangeCallback = callback;\n return this;\n }\n _onChangeCallback(euler) { }\n *[Symbol.iterator]() {\n yield this._x;\n yield this._y;\n yield this._z;\n yield this._order;\n }\n}\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Vector2 {\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n get width() {\n return this.x;\n }\n set width(value) {\n this.x = value;\n }\n get height() {\n return this.y;\n }\n set height(value) {\n this.y = value;\n }\n set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n setScalar(scalar) {\n this.x = scalar;\n this.y = scalar;\n return this;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n setComponent(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n default:\n throw new Error('index is out of range: ' + index);\n }\n return this;\n }\n getComponent(index) {\n switch (index) {\n case 0:\n return this.x;\n case 1:\n return this.y;\n default:\n throw new Error('index is out of range: ' + index);\n }\n }\n clone() {\n return new Vector2(this.x, this.y);\n }\n copy(v) {\n this.x = v.x;\n this.y = v.y;\n return this;\n }\n add(v) {\n this.x += v.x;\n this.y += v.y;\n return this;\n }\n addScalar(s) {\n this.x += s;\n this.y += s;\n return this;\n }\n addVectors(a, b) {\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n return this;\n }\n addScaledVector(v, s) {\n this.x += v.x * s;\n this.y += v.y * s;\n return this;\n }\n sub(v) {\n this.x -= v.x;\n this.y -= v.y;\n return this;\n }\n subScalar(s) {\n this.x -= s;\n this.y -= s;\n return this;\n }\n subVectors(a, b) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n return this;\n }\n multiply(v) {\n this.x *= v.x;\n this.y *= v.y;\n return this;\n }\n multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n }\n divide(v) {\n this.x /= v.x;\n this.y /= v.y;\n return this;\n }\n divideScalar(scalar) {\n return this.multiplyScalar(1 / scalar);\n }\n applyMatrix3(m) {\n const x = this.x, y = this.y;\n const e = m.elements;\n this.x = e[0] * x + e[3] * y + e[6];\n this.y = e[1] * x + e[4] * y + e[7];\n return this;\n }\n min(v) {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n return this;\n }\n max(v) {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n return this;\n }\n clamp(min, max) {\n // assumes min < max, componentwise\n this.x = Math.max(min.x, Math.min(max.x, this.x));\n this.y = Math.max(min.y, Math.min(max.y, this.y));\n return this;\n }\n clampScalar(minVal, maxVal) {\n this.x = Math.max(minVal, Math.min(maxVal, this.x));\n this.y = Math.max(minVal, Math.min(maxVal, this.y));\n return this;\n }\n clampLength(min, max) {\n const length = this.length();\n return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n }\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n return this;\n }\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n return this;\n }\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n roundToZero() {\n this.x = Math.trunc(this.x);\n this.y = Math.trunc(this.y);\n return this;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n dot(v) {\n return this.x * v.x + this.y * v.y;\n }\n cross(v) {\n return this.x * v.y - this.y * v.x;\n }\n lengthSq() {\n return this.x * this.x + this.y * this.y;\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n manhattanLength() {\n return Math.abs(this.x) + Math.abs(this.y);\n }\n normalize() {\n return this.divideScalar(this.length() || 1);\n }\n angle() {\n // computes the angle in radians with respect to the positive x-axis\n const angle = Math.atan2(-this.y, -this.x) + Math.PI;\n return angle;\n }\n angleTo(v) {\n const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n if (denominator === 0)\n return Math.PI / 2;\n const theta = this.dot(v) / denominator;\n // clamp, to handle numerical problems\n return Math.acos(clamp(theta, -1, 1));\n }\n distanceTo(v) {\n return Math.sqrt(this.distanceToSquared(v));\n }\n distanceToSquared(v) {\n const dx = this.x - v.x, dy = this.y - v.y;\n return dx * dx + dy * dy;\n }\n manhattanDistanceTo(v) {\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\n }\n setLength(length) {\n return this.normalize().multiplyScalar(length);\n }\n lerp(v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n return this;\n }\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n return this;\n }\n equals(v) {\n return v.x === this.x && v.y === this.y;\n }\n fromArray(array, offset = 0) {\n this.x = array[offset];\n this.y = array[offset + 1];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n return array;\n }\n /*fromBufferAttribute(attribute, index: number) {\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n\n return this;\n }*/\n rotateAround(center, angle) {\n const c = Math.cos(angle), s = Math.sin(angle);\n const x = this.x - center.x;\n const y = this.y - center.y;\n this.x = x * c - y * s + center.x;\n this.y = x * s + y * c + center.y;\n return this;\n }\n random() {\n this.x = Math.random();\n this.y = Math.random();\n return this;\n }\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n }\n}\nVector2.isVector2 = true;\n\nclass Vector4 {\n constructor(x = 0, y = 0, z = 0, w = 1) {\n Vector4.prototype.isVector4 = true;\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n get width() {\n return this.z;\n }\n set width(value) {\n this.z = value;\n }\n get height() {\n return this.w;\n }\n set height(value) {\n this.w = value;\n }\n set(x, y, z, w) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n return this;\n }\n setScalar(scalar) {\n this.x = scalar;\n this.y = scalar;\n this.z = scalar;\n this.w = scalar;\n return this;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n setZ(z) {\n this.z = z;\n return this;\n }\n setW(w) {\n this.w = w;\n return this;\n }\n setComponent(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n case 3:\n this.w = value;\n break;\n default:\n throw new Error('index is out of range: ' + index);\n }\n return this;\n }\n getComponent(index) {\n switch (index) {\n case 0:\n return this.x;\n case 1:\n return this.y;\n case 2:\n return this.z;\n case 3:\n return this.w;\n default:\n throw new Error('index is out of range: ' + index);\n }\n }\n clone() {\n return new Vector4(this.x, this.y, this.z, this.w);\n }\n copy(v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n this.w = v.w;\n return this;\n }\n add(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n this.w += v.w;\n return this;\n }\n addScalar(scalar) {\n this.x += scalar;\n this.y += scalar;\n this.z += scalar;\n this.w += scalar;\n return this;\n }\n addVectors(a, b) {\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n this.w = a.w + b.w;\n return this;\n }\n addScaledVector(v, s) {\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n this.w += v.w * s;\n return this;\n }\n sub(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n this.w -= v.w;\n return this;\n }\n subScalar(scalar) {\n this.x -= scalar;\n this.y -= scalar;\n this.z -= scalar;\n this.w -= scalar;\n return this;\n }\n subVectors(a, b) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n this.w = a.w - b.w;\n return this;\n }\n multiply(v) {\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n this.w *= v.w;\n return this;\n }\n multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n this.w *= scalar;\n return this;\n }\n applyMatrix4(m) {\n const x = this.x, y = this.y, z = this.z, w = this.w;\n const e = m.elements;\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;\n this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;\n return this;\n }\n divideScalar(scalar) {\n return this.multiplyScalar(1 / scalar);\n }\n setAxisAngleFromQuaternion(q) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n // q is assumed to be normalized\n this.w = 2 * Math.acos(q.w);\n const s = Math.sqrt(1 - q.w * q.w);\n if (s < 0.0001) {\n this.x = 1;\n this.y = 0;\n this.z = 0;\n }\n else {\n this.x = q.x / s;\n this.y = q.y / s;\n this.z = q.z / s;\n }\n return this;\n }\n setAxisAngleFromRotationMatrix(m) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n let angle, x, y, z; // variables for result\n const epsilon = 0.01, // margin to allow for rounding errors\n epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees\n te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10];\n if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) {\n // singularity found\n // first check for identity matrix which must have +1 for all terms\n // in leading diagonal and zero in other terms\n if (Math.abs(m12 + m21) < epsilon2 &&\n Math.abs(m13 + m31) < epsilon2 &&\n Math.abs(m23 + m32) < epsilon2 &&\n Math.abs(m11 + m22 + m33 - 3) < epsilon2) {\n // this singularity is identity matrix so angle = 0\n this.set(1, 0, 0, 0);\n return this; // zero angle, arbitrary axis\n }\n // otherwise this singularity is angle = 180\n angle = Math.PI;\n const xx = (m11 + 1) / 2;\n const yy = (m22 + 1) / 2;\n const zz = (m33 + 1) / 2;\n const xy = (m12 + m21) / 4;\n const xz = (m13 + m31) / 4;\n const yz = (m23 + m32) / 4;\n if (xx > yy && xx > zz) {\n // m11 is the largest diagonal term\n if (xx < epsilon) {\n x = 0;\n y = 0.707106781;\n z = 0.707106781;\n }\n else {\n x = Math.sqrt(xx);\n y = xy / x;\n z = xz / x;\n }\n }\n else if (yy > zz) {\n // m22 is the largest diagonal term\n if (yy < epsilon) {\n x = 0.707106781;\n y = 0;\n z = 0.707106781;\n }\n else {\n y = Math.sqrt(yy);\n x = xy / y;\n z = yz / y;\n }\n }\n else {\n // m33 is the largest diagonal term so base result on this\n if (zz < epsilon) {\n x = 0.707106781;\n y = 0.707106781;\n z = 0;\n }\n else {\n z = Math.sqrt(zz);\n x = xz / z;\n y = yz / z;\n }\n }\n this.set(x, y, z, angle);\n return this; // return 180 deg rotation\n }\n // as we have reached here there are no singularities so we can handle normally\n let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); // used to normalize\n if (Math.abs(s) < 0.001)\n s = 1;\n // prevent divide by zero, should not happen if matrix is orthogonal and should be\n // caught by singularity test above, but I've left it in just in case\n this.x = (m32 - m23) / s;\n this.y = (m13 - m31) / s;\n this.z = (m21 - m12) / s;\n this.w = Math.acos((m11 + m22 + m33 - 1) / 2);\n return this;\n }\n min(v) {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n this.w = Math.min(this.w, v.w);\n return this;\n }\n max(v) {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n this.w = Math.max(this.w, v.w);\n return this;\n }\n clamp(min, max) {\n // assumes min < max, componentwise\n this.x = Math.max(min.x, Math.min(max.x, this.x));\n this.y = Math.max(min.y, Math.min(max.y, this.y));\n this.z = Math.max(min.z, Math.min(max.z, this.z));\n this.w = Math.max(min.w, Math.min(max.w, this.w));\n return this;\n }\n clampScalar(minVal, maxVal) {\n this.x = Math.max(minVal, Math.min(maxVal, this.x));\n this.y = Math.max(minVal, Math.min(maxVal, this.y));\n this.z = Math.max(minVal, Math.min(maxVal, this.z));\n this.w = Math.max(minVal, Math.min(maxVal, this.w));\n return this;\n }\n clampLength(min, max) {\n const length = this.length();\n return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n }\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n this.w = Math.floor(this.w);\n return this;\n }\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n this.w = Math.ceil(this.w);\n return this;\n }\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n this.w = Math.round(this.w);\n return this;\n }\n roundToZero() {\n this.x = Math.trunc(this.x);\n this.y = Math.trunc(this.y);\n this.z = Math.trunc(this.z);\n this.w = Math.trunc(this.w);\n return this;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n this.w = -this.w;\n return this;\n }\n dot(v) {\n return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n }\n lengthSq() {\n return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n }\n manhattanLength() {\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w);\n }\n normalize() {\n return this.divideScalar(this.length() || 1);\n }\n setLength(length) {\n return this.normalize().multiplyScalar(length);\n }\n lerp(v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n this.w += (v.w - this.w) * alpha;\n return this;\n }\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n this.w = v1.w + (v2.w - v1.w) * alpha;\n return this;\n }\n equals(v) {\n return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w;\n }\n fromArray(array, offset = 0) {\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n this.w = array[offset + 3];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n array[offset + 3] = this.w;\n return array;\n }\n /*\n fromBufferAttribute(attribute, index) {\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n this.z = attribute.getZ(index);\n this.w = attribute.getW(index);\n\n return this;\n }*/\n random() {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n this.w = Math.random();\n return this;\n }\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n yield this.w;\n }\n}\n\nclass Matrix3 {\n constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n Matrix3.prototype.isMatrix3 = true;\n this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n if (n11 !== undefined) {\n this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33);\n }\n }\n set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n const te = this.elements;\n te[0] = n11;\n te[1] = n21;\n te[2] = n31;\n te[3] = n12;\n te[4] = n22;\n te[5] = n32;\n te[6] = n13;\n te[7] = n23;\n te[8] = n33;\n return this;\n }\n identity() {\n this.set(1, 0, 0, 0, 1, 0, 0, 0, 1);\n return this;\n }\n copy(m) {\n const te = this.elements;\n const me = m.elements;\n te[0] = me[0];\n te[1] = me[1];\n te[2] = me[2];\n te[3] = me[3];\n te[4] = me[4];\n te[5] = me[5];\n te[6] = me[6];\n te[7] = me[7];\n te[8] = me[8];\n return this;\n }\n extractBasis(xAxis, yAxis, zAxis) {\n xAxis.setFromMatrix3Column(this, 0);\n yAxis.setFromMatrix3Column(this, 1);\n zAxis.setFromMatrix3Column(this, 2);\n return this;\n }\n setFromMatrix4(m) {\n const me = m.elements;\n this.set(me[0], me[4], me[8], me[1], me[5], me[9], me[2], me[6], me[10]);\n return this;\n }\n multiply(m) {\n return this.multiplyMatrices(this, m);\n }\n premultiply(m) {\n return this.multiplyMatrices(m, this);\n }\n multiplyMatrices(a, b) {\n const ae = a.elements;\n const be = b.elements;\n const te = this.elements;\n const a11 = ae[0], a12 = ae[3], a13 = ae[6];\n const a21 = ae[1], a22 = ae[4], a23 = ae[7];\n const a31 = ae[2], a32 = ae[5], a33 = ae[8];\n const b11 = be[0], b12 = be[3], b13 = be[6];\n const b21 = be[1], b22 = be[4], b23 = be[7];\n const b31 = be[2], b32 = be[5], b33 = be[8];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31;\n te[3] = a11 * b12 + a12 * b22 + a13 * b32;\n te[6] = a11 * b13 + a12 * b23 + a13 * b33;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31;\n te[4] = a21 * b12 + a22 * b22 + a23 * b32;\n te[7] = a21 * b13 + a22 * b23 + a23 * b33;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31;\n te[5] = a31 * b12 + a32 * b22 + a33 * b32;\n te[8] = a31 * b13 + a32 * b23 + a33 * b33;\n return this;\n }\n multiplyScalar(s) {\n const te = this.elements;\n te[0] *= s;\n te[3] *= s;\n te[6] *= s;\n te[1] *= s;\n te[4] *= s;\n te[7] *= s;\n te[2] *= s;\n te[5] *= s;\n te[8] *= s;\n return this;\n }\n determinant() {\n const te = this.elements;\n const a = te[0], b = te[1], c = te[2], d = te[3], e = te[4], f = te[5], g = te[6], h = te[7], i = te[8];\n return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n }\n invert() {\n const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n12 = te[3], n22 = te[4], n32 = te[5], n13 = te[6], n23 = te[7], n33 = te[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13;\n if (det === 0)\n return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n const detInv = 1 / det;\n te[0] = t11 * detInv;\n te[1] = (n31 * n23 - n33 * n21) * detInv;\n te[2] = (n32 * n21 - n31 * n22) * detInv;\n te[3] = t12 * detInv;\n te[4] = (n33 * n11 - n31 * n13) * detInv;\n te[5] = (n31 * n12 - n32 * n11) * detInv;\n te[6] = t13 * detInv;\n te[7] = (n21 * n13 - n23 * n11) * detInv;\n te[8] = (n22 * n11 - n21 * n12) * detInv;\n return this;\n }\n transpose() {\n let tmp;\n const m = this.elements;\n tmp = m[1];\n m[1] = m[3];\n m[3] = tmp;\n tmp = m[2];\n m[2] = m[6];\n m[6] = tmp;\n tmp = m[5];\n m[5] = m[7];\n m[7] = tmp;\n return this;\n }\n getNormalMatrix(matrix4) {\n return this.setFromMatrix4(matrix4).invert().transpose();\n }\n transposeIntoArray(r) {\n const m = this.elements;\n r[0] = m[0];\n r[1] = m[3];\n r[2] = m[6];\n r[3] = m[1];\n r[4] = m[4];\n r[5] = m[7];\n r[6] = m[2];\n r[7] = m[5];\n r[8] = m[8];\n return this;\n }\n setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {\n const c = Math.cos(rotation);\n const s = Math.sin(rotation);\n this.set(sx * c, sx * s, -sx * (c * cx + s * cy) + cx + tx, -sy * s, sy * c, -sy * (-s * cx + c * cy) + cy + ty, 0, 0, 1);\n return this;\n }\n //\n scale(sx, sy) {\n this.premultiply(_m3.makeScale(sx, sy));\n return this;\n }\n rotate(theta) {\n this.premultiply(_m3.makeRotation(-theta));\n return this;\n }\n translate(tx, ty) {\n this.premultiply(_m3.makeTranslation(tx, ty));\n return this;\n }\n // for 2D Transforms\n makeTranslation(x, y) {\n if (x.isVector2) {\n this.set(1, 0, x.x, 0, 1, x.y, 0, 0, 1);\n }\n else {\n this.set(1, 0, x, 0, 1, y, 0, 0, 1);\n }\n return this;\n }\n makeRotation(theta) {\n // counterclockwise\n const c = Math.cos(theta);\n const s = Math.sin(theta);\n this.set(c, -s, 0, s, c, 0, 0, 0, 1);\n return this;\n }\n makeScale(x, y) {\n this.set(x, 0, 0, 0, y, 0, 0, 0, 1);\n return this;\n }\n //\n equals(matrix) {\n const te = this.elements;\n const me = matrix.elements;\n for (let i = 0; i < 9; i++) {\n if (te[i] !== me[i])\n return false;\n }\n return true;\n }\n fromArray(array, offset = 0) {\n for (let i = 0; i < 9; i++) {\n this.elements[i] = array[i + offset];\n }\n return this;\n }\n toArray(array = [], offset = 0) {\n const te = this.elements;\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n array[offset + 8] = te[8];\n return array;\n }\n clone() {\n return new Matrix3().fromArray(this.elements);\n }\n}\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\n/**\n * Enum representing the emitter modes for particles.\n */\nvar EmitterMode;\n(function (EmitterMode) {\n /**\n * Emit particles randomly over the specified duration.\n */\n EmitterMode[EmitterMode[\"Random\"] = 0] = \"Random\";\n /**\n * Emit particles in a continuous loop.\n */\n EmitterMode[EmitterMode[\"Loop\"] = 1] = \"Loop\";\n /**\n * Emit particles back and forth in a ping-pong manner.\n */\n EmitterMode[EmitterMode[\"PingPong\"] = 2] = \"PingPong\";\n /**\n * Emit particles in bursts.\n */\n EmitterMode[EmitterMode[\"Burst\"] = 3] = \"Burst\";\n})(EmitterMode || (EmitterMode = {}));\nfunction getValueFromEmitterMode(mode, currentValue, spread, emissionState) {\n let u;\n if (EmitterMode.Random === mode) {\n currentValue = Math.random();\n }\n else if (EmitterMode.Burst === mode && emissionState.isBursting) {\n currentValue = emissionState.burstParticleIndex / emissionState.burstParticleCount;\n }\n if (spread > 0) {\n u = Math.floor(currentValue / spread) * spread;\n }\n else {\n u = currentValue;\n }\n switch (mode) {\n case EmitterMode.Loop:\n u = u % 1;\n break;\n case EmitterMode.PingPong:\n u = Math.abs((u % 2) - 1);\n break;\n }\n return u;\n}\n\nclass Bezier {\n constructor(p1, p2, p3, p4) {\n this.p = [p1, p2, p3, p4];\n }\n genValue(t) {\n const t2 = t * t;\n const t3 = t * t * t;\n const mt = 1 - t;\n const mt2 = mt * mt;\n const mt3 = mt2 * mt;\n return this.p[0] * mt3 + this.p[1] * mt2 * t * 3 + this.p[2] * mt * t2 * 3 + this.p[3] * t3;\n }\n // get the coefficients of the polynomial's derivatives\n derivativeCoefficients(points) {\n const dpoints = [];\n for (let p = points, c = p.length - 1; c > 0; c--) {\n const list = [];\n for (let j = 0; j < c; j++) {\n const dpt = c * (p[j + 1] - p[j]);\n list.push(dpt);\n }\n dpoints.push(list);\n p = list;\n }\n return dpoints;\n }\n // calculate the slope\n getSlope(t) {\n const p = this.derivativeCoefficients(this.p)[0];\n const mt = 1 - t;\n const a = mt * mt;\n const b = mt * t * 2;\n const c = t * t;\n return a * p[0] + b * p[1] + c * p[2];\n //return a * (p[1] - p[0]) * 3 + b * (p[2] - p[1]) * 3 + c * (p[3] - p[2]) * 3;\n }\n // derivative(0) = (p[1] - p[0]) * 3\n // derivative(1) = (p[3] - p[2]) * 3\n controlCurve(d0, d1) {\n this.p[1] = d0 / 3 + this.p[0];\n this.p[2] = this.p[3] - d1 / 3;\n }\n hull(t) {\n let p = this.p;\n let _p = [], pt, idx = 0, i = 0, l = 0;\n const q = [];\n q[idx++] = p[0];\n q[idx++] = p[1];\n q[idx++] = p[2];\n q[idx++] = p[3];\n // we lerp between all points at each iteration, until we have 1 point left.\n while (p.length > 1) {\n _p = [];\n for (i = 0, l = p.length - 1; i < l; i++) {\n pt = t * p[i] + (1 - t) * p[i + 1];\n q[idx++] = pt;\n _p.push(pt);\n }\n p = _p;\n }\n return q;\n }\n split(t) {\n // no shortcut: use \"de Casteljau\" iteration.\n const q = this.hull(t);\n const result = {\n left: new Bezier(q[0], q[4], q[7], q[9]),\n right: new Bezier(q[9], q[8], q[6], q[3]),\n span: q\n };\n return result;\n }\n clone() {\n return new Bezier(this.p[0], this.p[1], this.p[2], this.p[3]);\n }\n toJSON() {\n return {\n p0: this.p[0],\n p1: this.p[1],\n p2: this.p[2],\n p3: this.p[3],\n };\n }\n static fromJSON(json) {\n return new Bezier(json.p0, json.p1, json.p2, json.p3);\n }\n}\n\nconst ColorToJSON = (color) => {\n return { r: color.x, g: color.y, b: color.z, a: color.w };\n};\nconst JSONToColor = (json) => {\n return new Vector4(json.r, json.g, json.b, json.a);\n};\nconst JSONToValue = (json, type) => {\n switch (type) {\n case 'Vector3':\n return new Vector3(json.x, json.y, json.z);\n case 'Vector4':\n return new Vector4(json.x, json.y, json.z, json.w);\n case 'Color':\n return new Vector3(json.r, json.g, json.b);\n case 'Number':\n return json;\n default:\n return json;\n }\n};\nconst ValueToJSON = (value, type) => {\n switch (type) {\n case 'Vector3':\n return { x: value.x, y: value.y, z: value.z };\n case 'Vector4':\n return { x: value.x, y: value.y, z: value.z, w: value.w };\n case 'Color':\n return { r: value.x, g: value.y, b: value.z };\n case 'Number':\n return value;\n default:\n return value;\n }\n};\n\nclass RandomColor {\n constructor(a, b) {\n this.a = a;\n this.b = b;\n this.type = 'value';\n }\n startGen(memory) { }\n genColor(memory, color) {\n const rand = Math.random();\n return color.copy(this.a).lerp(this.b, rand);\n }\n toJSON() {\n return {\n type: 'RandomColor',\n a: ColorToJSON(this.a),\n b: ColorToJSON(this.b),\n };\n }\n static fromJSON(json) {\n return new RandomColor(JSONToColor(json.a), JSONToColor(json.b));\n }\n clone() {\n return new RandomColor(this.a.clone(), this.b.clone());\n }\n}\n\nclass ColorRange {\n constructor(a, b) {\n this.a = a;\n this.b = b;\n this.indexCount = -1;\n this.type = 'value';\n }\n startGen(memory) {\n this.indexCount = memory.length;\n memory.push(Math.random());\n }\n genColor(memory, color) {\n if (this.indexCount === -1) {\n this.startGen(memory);\n }\n return color.copy(this.a).lerp(this.b, memory[this.indexCount]);\n }\n toJSON() {\n return {\n type: 'ColorRange',\n a: ColorToJSON(this.a),\n b: ColorToJSON(this.b),\n };\n }\n static fromJSON(json) {\n return new ColorRange(JSONToColor(json.a), JSONToColor(json.b));\n }\n clone() {\n return new ColorRange(this.a.clone(), this.b.clone());\n }\n}\n\nclass ContinuousLinearFunction {\n // default linear bezier\n constructor(keys, subType) {\n this.subType = subType;\n this.type = 'function';\n this.keys = keys;\n }\n findKey(t) {\n let mid = 0;\n let left = 0, right = this.keys.length - 1;\n while (left + 1 < right) {\n mid = Math.floor((left + right) / 2);\n if (t < this.getStartX(mid))\n right = mid - 1;\n else if (t > this.getEndX(mid))\n left = mid + 1;\n else\n return mid;\n }\n for (let i = left; i <= right; i++) {\n if (t >= this.getStartX(i) && t <= this.getEndX(i))\n return i;\n }\n return -1;\n }\n getStartX(index) {\n return this.keys[index][1];\n }\n getEndX(index) {\n if (index + 1 < this.keys.length)\n return this.keys[index + 1][1];\n return 1;\n }\n genValue(value, t) {\n const index = this.findKey(t);\n if (this.subType === 'Number') {\n if (index === -1) {\n return this.keys[0][0];\n }\n else if (index + 1 >= this.keys.length) {\n return this.keys[this.keys.length - 1][0];\n }\n return ((this.keys[index + 1][0] - this.keys[index][0]) *\n ((t - this.getStartX(index)) / (this.getEndX(index) - this.getStartX(index))) +\n this.keys[index][0]);\n }\n else {\n if (index === -1) {\n return value.copy(this.keys[0][0]);\n }\n if (index + 1 >= this.keys.length) {\n return value.copy(this.keys[this.keys.length - 1][0]);\n }\n return value\n .copy(this.keys[index][0])\n .lerp(this.keys[index + 1][0], (t - this.getStartX(index)) / (this.getEndX(index) - this.getStartX(index)));\n }\n }\n toJSON() {\n this.keys[0][0].constructor.name;\n return {\n type: 'CLinearFunction',\n subType: this.subType,\n keys: this.keys.map(([color, pos]) => ({ value: ValueToJSON(color, this.subType), pos: pos })),\n };\n }\n static fromJSON(json) {\n return new ContinuousLinearFunction(json.keys.map((pair) => [JSONToValue(pair.value, json.subType), pair.pos]), json.subType);\n }\n clone() {\n if (this.subType === 'Number') {\n return new ContinuousLinearFunction(this.keys.map(([value, pos]) => [value, pos]), this.subType);\n }\n else {\n return new ContinuousLinearFunction(this.keys.map(([value, pos]) => [value.clone(), pos]), this.subType);\n }\n }\n}\n\nconst tempVec3 = new Vector3();\nclass Gradient {\n // default linear bezier\n constructor(color = [\n [new Vector3(0, 0, 0), 0],\n [new Vector3(1, 1, 1), 0],\n ], alpha = [\n [1, 0],\n [1, 1],\n ]) {\n this.type = 'function';\n this.color = new ContinuousLinearFunction(color, 'Color');\n this.alpha = new ContinuousLinearFunction(alpha, 'Number');\n }\n genColor(memory, color, t) {\n this.color.genValue(tempVec3, t);\n return color.set(tempVec3.x, tempVec3.y, tempVec3.z, this.alpha.genValue(1, t));\n }\n toJSON() {\n return {\n type: 'Gradient',\n color: this.color.toJSON(),\n alpha: this.alpha.toJSON(),\n };\n }\n static fromJSON(json) {\n // compatibility\n if (json.functions) {\n const keys = json.functions.map((func) => [ColorRange.fromJSON(func.function).a, func.start]);\n if (json.functions.length > 0) {\n keys.push([ColorRange.fromJSON(json.functions[json.functions.length - 1].function).b, 1]);\n }\n return new Gradient(keys.map((key) => [new Vector3(key[0].x, key[0].y, key[0].z), key[1]]), keys.map((key) => [key[0].w, key[1]]));\n }\n else {\n const gradient = new Gradient();\n gradient.alpha = ContinuousLinearFunction.fromJSON(json.alpha);\n gradient.color = ContinuousLinearFunction.fromJSON(json.color);\n return gradient;\n }\n }\n clone() {\n const gradient = new Gradient();\n gradient.alpha = this.alpha.clone();\n gradient.color = this.color.clone();\n return gradient;\n }\n startGen(memory) { }\n}\n\nconst tempColor = new Vector4();\n// generate a random color from the start two gradients\nclass RandomColorBetweenGradient {\n constructor(gradient1, gradient2) {\n this.indexCount = 0;\n this.type = 'function';\n this.gradient1 = gradient1;\n this.gradient2 = gradient2;\n }\n startGen(memory) {\n this.indexCount = memory.length;\n memory.push(Math.random());\n }\n genColor(memory, color, t) {\n this.gradient1.genColor(memory, color, t);\n this.gradient2.genColor(memory, tempColor, t);\n if (memory && memory[this.indexCount] !== undefined) {\n color.lerp(tempColor, memory[this.indexCount]);\n }\n else {\n color.lerp(tempColor, Math.random());\n }\n return color;\n }\n toJSON() {\n return {\n type: 'RandomColorBetweenGradient',\n gradient1: this.gradient1.toJSON(),\n gradient2: this.gradient2.toJSON(),\n };\n }\n static fromJSON(json) {\n return new RandomColorBetweenGradient(Gradient.fromJSON(json.gradient1), Gradient.fromJSON(json.gradient2));\n }\n clone() {\n return new RandomColorBetweenGradient(this.gradient1.clone(), this.gradient2.clone());\n }\n}\n\nclass ConstantColor {\n constructor(color) {\n this.color = color;\n this.type = 'value';\n }\n startGen(memory) { }\n genColor(memoryGenerator, color) {\n return color.copy(this.color);\n }\n toJSON() {\n return {\n type: 'ConstantColor',\n color: ColorToJSON(this.color),\n };\n }\n static fromJSON(json) {\n return new ConstantColor(JSONToColor(json.color));\n }\n clone() {\n return new ConstantColor(this.color.clone());\n }\n}\nfunction ColorGeneratorFromJSON(json) {\n switch (json.type) {\n case 'ConstantColor':\n return ConstantColor.fromJSON(json);\n case 'ColorRange':\n return ColorRange.fromJSON(json);\n case 'RandomColor':\n return RandomColor.fromJSON(json);\n case 'Gradient':\n return Gradient.fromJSON(json);\n case 'RandomColorBetweenGradient':\n return RandomColorBetweenGradient.fromJSON(json);\n default:\n return new ConstantColor(new Vector4(1, 1, 1, 1));\n }\n}\n\nclass ConstantValue {\n constructor(value) {\n this.value = value;\n this.type = 'value';\n }\n startGen(memory) { }\n genValue(memory) {\n return this.value;\n }\n toJSON() {\n return {\n type: 'ConstantValue',\n value: this.value,\n };\n }\n static fromJSON(json) {\n return new ConstantValue(json.value);\n }\n clone() {\n return new ConstantValue(this.value);\n }\n}\n\nclass IntervalValue {\n constructor(a, b) {\n this.a = a;\n this.b = b;\n this.indexCount = -1;\n this.type = 'value';\n }\n // Roll a random sample once at spawn and remember the slot, so the\n // particle keeps the same lerp factor for its whole life. See\n // GeneratorMemory.ts for the slot-allocation pattern.\n startGen(memory) {\n this.indexCount = memory.length;\n memory.push(Math.random());\n }\n genValue(memory) {\n if (this.indexCount === -1) {\n this.startGen(memory);\n }\n return MathUtils.lerp(this.a, this.b, memory[this.indexCount]);\n }\n toJSON() {\n return {\n type: 'IntervalValue',\n a: this.a,\n b: this.b,\n };\n }\n static fromJSON(json) {\n return new IntervalValue(json.a, json.b);\n }\n clone() {\n return new IntervalValue(this.a, this.b);\n }\n}\n\nclass PiecewiseFunction {\n constructor() {\n this.functions = new Array();\n }\n findFunction(t) {\n let mid = 0;\n let left = 0, right = this.functions.length - 1;\n while (left + 1 < right) {\n mid = Math.floor((left + right) / 2);\n if (t < this.getStartX(mid))\n right = mid - 1;\n else if (t > this.getEndX(mid))\n left = mid + 1;\n else\n return mid;\n }\n for (let i = left; i <= right; i++) {\n if (t >= this.functions[i][1] && t <= this.getEndX(i))\n return i;\n }\n return -1;\n }\n getStartX(index) {\n return this.functions[index][1];\n }\n setStartX(index, x) {\n if (index > 0)\n this.functions[index][1] = x;\n }\n getEndX(index) {\n if (index + 1 < this.functions.length)\n return this.functions[index + 1][1];\n return 1;\n }\n setEndX(index, x) {\n if (index + 1 < this.functions.length)\n this.functions[index + 1][1] = x;\n }\n insertFunction(t, func) {\n const index = this.findFunction(t);\n this.functions.splice(index + 1, 0, [func, t]);\n }\n removeFunction(index) {\n return this.functions.splice(index, 1)[0][0];\n }\n getFunction(index) {\n return this.functions[index][0];\n }\n setFunction(index, func) {\n this.functions[index][0] = func;\n }\n get numOfFunctions() {\n return this.functions.length;\n }\n}\n\nclass PiecewiseBezier extends PiecewiseFunction {\n // default linear bezier\n constructor(curves = [[new Bezier(0, 1.0 / 3, (1.0 / 3) * 2, 1), 0]]) {\n super();\n this.type = 'function';\n this.functions = curves;\n }\n genValue(memory, t = 0) {\n const index = this.findFunction(t);\n if (index === -1) {\n return 0;\n }\n return this.functions[index][0].genValue((t - this.getStartX(index)) / (this.getEndX(index) - this.getStartX(index)));\n }\n toSVG(length, segments) {\n if (segments < 1)\n return '';\n let result = ['M', 0, this.functions[0][0].p[0]].join(' ');\n for (let i = 1.0 / segments; i <= 1; i += 1.0 / segments) {\n result = [result, 'L', i * length, this.genValue(undefined, i)].join(' ');\n }\n return result;\n }\n toJSON() {\n return {\n type: 'PiecewiseBezier',\n functions: this.functions.map(([bezier, start]) => ({ function: bezier.toJSON(), start: start })),\n };\n }\n static fromJSON(json) {\n return new PiecewiseBezier(json.functions.map((piecewiseFunction) => [\n Bezier.fromJSON(piecewiseFunction.function),\n piecewiseFunction.start,\n ]));\n }\n clone() {\n return new PiecewiseBezier(this.functions.map(([bezier, start]) => [bezier.clone(), start]));\n }\n startGen(memory) { }\n}\n\nfunction ValueGeneratorFromJSON(json) {\n switch (json.type) {\n case 'ConstantValue':\n return ConstantValue.fromJSON(json);\n case 'IntervalValue':\n return IntervalValue.fromJSON(json);\n case 'PiecewiseBezier':\n return PiecewiseBezier.fromJSON(json);\n default:\n return new ConstantValue(0);\n }\n}\n\nclass RandomQuatGenerator {\n constructor() {\n this.indexCount = 0;\n this.type = 'rotation';\n }\n startGen(memory) {\n this.indexCount = memory.length;\n memory.push(new Quaternion());\n let x, y, z, u, v, w;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n z = x * x + y * y;\n } while (z > 1);\n do {\n u = Math.random() * 2 - 1;\n v = Math.random() * 2 - 1;\n w = u * u + v * v;\n } while (w > 1);\n const s = Math.sqrt((1 - z) / w);\n memory[this.indexCount].set(x, y, s * u, s * v);\n }\n genValue(memory, quat, delta, t) {\n if (this.indexCount === -1) {\n this.startGen(memory);\n }\n quat.copy(memory[this.indexCount]);\n return quat;\n }\n toJSON() {\n return {\n type: 'RandomQuat',\n };\n }\n static fromJSON(json) {\n return new RandomQuatGenerator();\n }\n clone() {\n return new RandomQuatGenerator();\n }\n}\n\nclass AxisAngleGenerator {\n constructor(axis, angle) {\n this.axis = axis;\n this.angle = angle;\n this.type = 'rotation';\n }\n startGen(memory) {\n this.angle.startGen(memory);\n }\n genValue(memory, quat, delta, t) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return quat.setFromAxisAngle(this.axis, this.angle.genValue(memory, t) * delta);\n }\n toJSON() {\n return {\n type: 'AxisAngle',\n axis: { x: this.axis.x, y: this.axis.y, z: this.axis.z },\n angle: this.angle.toJSON(),\n };\n }\n static fromJSON(json) {\n return new AxisAngleGenerator(new Vector3(json.axis.x, json.axis.y, json.axis.z), ValueGeneratorFromJSON(json.angle));\n }\n clone() {\n return new AxisAngleGenerator(this.axis.clone(), this.angle.clone());\n }\n}\n\nclass EulerGenerator {\n constructor(angleX, angleY, angleZ, eulerOrder) {\n this.angleX = angleX;\n this.angleY = angleY;\n this.angleZ = angleZ;\n this.type = 'rotation';\n this.eular = new Euler(0, 0, 0, eulerOrder);\n }\n startGen(memory) {\n this.angleX.startGen(memory);\n this.angleY.startGen(memory);\n this.angleZ.startGen(memory);\n }\n genValue(memory, quat, delta, t) {\n this.eular.set(this.angleX.genValue(memory, t) * delta, this.angleY.genValue(memory, t) * delta, this.angleZ.genValue(memory, t) * delta);\n return quat.setFromEuler(this.eular);\n }\n toJSON() {\n return {\n type: 'Euler',\n angleX: this.angleX.toJSON(),\n angleY: this.angleY.toJSON(),\n angleZ: this.angleZ.toJSON(),\n eulerOrder: this.eular.order,\n };\n }\n static fromJSON(json) {\n return new EulerGenerator(ValueGeneratorFromJSON(json.angleX), ValueGeneratorFromJSON(json.angleY), ValueGeneratorFromJSON(json.angleZ), json.eulerOrder);\n }\n clone() {\n return new EulerGenerator(this.angleX, this.angleY, this.angleZ, this.eular.order);\n }\n}\n\nfunction RotationGeneratorFromJSON(json) {\n switch (json.type) {\n case 'AxisAngle':\n return AxisAngleGenerator.fromJSON(json);\n case 'Euler':\n return EulerGenerator.fromJSON(json);\n case 'RandomQuat':\n return RandomQuatGenerator.fromJSON(json);\n default:\n return new RandomQuatGenerator();\n }\n}\n\nclass Vector3Function {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.type = 'vec3function';\n }\n startGen(memory) {\n this.x.startGen(memory);\n this.y.startGen(memory);\n this.z.startGen(memory);\n }\n genValue(memory, vec, t) {\n return vec.set(this.x.genValue(memory, t), this.y.genValue(memory, t), this.z.genValue(memory, t));\n }\n toJSON() {\n return {\n type: 'Vector3Function',\n x: this.x.toJSON(),\n y: this.y.toJSON(),\n z: this.z.toJSON(),\n };\n }\n static fromJSON(json) {\n return new Vector3Function(ValueGeneratorFromJSON(json.x), ValueGeneratorFromJSON(json.y), ValueGeneratorFromJSON(json.z));\n }\n clone() {\n return new Vector3Function(this.x, this.y, this.z);\n }\n}\n\nfunction Vector3GeneratorFromJSON(json) {\n switch (json.type) {\n case 'Vector3Function':\n return Vector3Function.fromJSON(json);\n default:\n return new Vector3Function(new ConstantValue(0), new ConstantValue(0), new ConstantValue(0));\n }\n}\n\nfunction GeneratorFromJSON(json) {\n switch (json.type) {\n case 'ConstantValue':\n case 'IntervalValue':\n case 'PiecewiseBezier':\n return ValueGeneratorFromJSON(json);\n case 'AxisAngle':\n case 'RandomQuat':\n case 'Euler':\n return RotationGeneratorFromJSON(json);\n case 'Vector3Function':\n return Vector3GeneratorFromJSON(json);\n default:\n return new ConstantValue(0);\n }\n}\n\nclass ConeEmitter {\n constructor(parameters = {}) {\n this.type = 'cone';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.angle = parameters.angle ?? Math.PI / 6;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n }\n update(system, delta) {\n if (EmitterMode.Random != this.mode) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const rand = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n const r = Math.sqrt(rand);\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n p.position.x = r * cosTheta;\n p.position.y = r * sinTheta;\n p.position.z = 0;\n const angle = this.angle * r;\n p.velocity.set(0, 0, Math.cos(angle)).addScaledVector(p.position, Math.sin(angle)).multiplyScalar(p.startSpeed);\n //const v = Math.random();\n p.position.multiplyScalar(this.radius);\n }\n toJSON() {\n return {\n type: 'cone',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n angle: this.angle,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ConeEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n angle: json.angle,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new ConeEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n angle: this.angle,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\n/**\n * a particle emitter that emits particles from a circle.\n */\nclass CircleEmitter {\n constructor(parameters = {}) {\n this.type = 'circle';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n }\n update(system, delta) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const r = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n p.position.x = Math.cos(theta);\n p.position.y = Math.sin(theta);\n p.position.z = 0;\n p.velocity.copy(p.position).multiplyScalar(p.startSpeed);\n //const v = Math.random();\n p.position.multiplyScalar(this.radius * r);\n }\n toJSON() {\n return {\n type: 'circle',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new CircleEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new CircleEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\nfunction randomInt(a, b) {\n return Math.floor(Math.random() * (b - a)) + a;\n}\nconst UP_VEC3 = new Vector3(0, 1, 0);\nconst ZERO_VEC3 = new Vector3(0, 0, 0);\nconst ONE_VEC3 = new Vector3(1, 1, 1);\nconst Z_VEC3 = new Vector3(0, 0, 1);\n\nclass DonutEmitter {\n constructor(parameters = {}) {\n this.type = 'donut';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.donutRadius = parameters.donutRadius ?? this.radius * 0.2;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n this._m1 = new Matrix4();\n }\n update(system, delta) {\n if (EmitterMode.Random != this.mode) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const v = Math.random();\n const rand = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n const phi = v * Math.PI * 2;\n //const r = Math.sqrt(rand);\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n p.position.x = this.radius * cosTheta;\n p.position.y = this.radius * sinTheta;\n p.position.z = 0;\n p.velocity.z = this.donutRadius * rand * Math.sin(phi);\n p.velocity.x = this.donutRadius * rand * Math.cos(phi) * cosTheta;\n p.velocity.y = this.donutRadius * rand * Math.cos(phi) * sinTheta;\n p.position.add(p.velocity);\n p.velocity.normalize().multiplyScalar(p.startSpeed);\n //const angle = this.angle * r;\n //p.velocity.set(0, 0, Math.cos(angle)).addScaledVector(p.position, Math.sin(angle)).multiplyScalar(p.startSpeed);\n //const v = Math.random();\n //.multiplyScalar(this.radius);\n // Default facing-velocity orientation, but defer to startRotation if set.\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.velocity, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'donut',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n donutRadius: this.donutRadius,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new DonutEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n donutRadius: json.donutRadius,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new DonutEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n donutRadius: this.donutRadius,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\n/**\n * A point emitter emits particles from a single point.\n */\nclass PointEmitter {\n constructor() {\n this.type = 'point';\n this._m1 = new Matrix4();\n }\n update(system, delta) { }\n initialize(p) {\n const u = Math.random();\n const v = Math.random();\n const theta = u * Math.PI * 2;\n const phi = Math.acos(2.0 * v - 1.0);\n const r = Math.cbrt(Math.random());\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n p.velocity.x = r * sinPhi * cosTheta;\n p.velocity.y = r * sinPhi * sinTheta;\n p.velocity.z = r * cosPhi;\n p.velocity.multiplyScalar(p.startSpeed);\n p.position.setScalar(0);\n // Only set a default facing-along-velocity orientation if the user's\n // startRotation didn't already write a non-identity rotation.\n // (lookAt(ZERO, p.position, UP) would be degenerate here since\n // p.position is zero — use velocity instead.)\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.velocity, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'point',\n };\n }\n static fromJSON(json) {\n return new PointEmitter();\n }\n clone() {\n return new PointEmitter();\n }\n}\n\nclass SphereEmitter {\n constructor(parameters = {}) {\n this.type = 'sphere';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n this._m1 = new Matrix4();\n }\n update(system, delta) {\n if (EmitterMode.Random != this.mode) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const v = Math.random();\n const rand = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n const phi = Math.acos(2.0 * v - 1.0);\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n p.position.x = sinPhi * cosTheta;\n p.position.y = sinPhi * sinTheta;\n p.position.z = cosPhi;\n p.velocity.copy(p.position).multiplyScalar(p.startSpeed);\n p.position.multiplyScalar(this.radius * rand);\n // Default facing-outward orientation, but defer to startRotation if set.\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.position, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'sphere',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new SphereEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new SphereEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\nclass HemisphereEmitter {\n constructor(parameters = {}) {\n this.type = 'hemisphere';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n this._m1 = new Matrix4();\n }\n update(system, delta) {\n if (EmitterMode.Random != this.mode) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const v = Math.random();\n const rand = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n const phi = Math.acos(v);\n //const r = Math.cbrt(rand);\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n p.position.x = sinPhi * cosTheta;\n p.position.y = sinPhi * sinTheta;\n p.position.z = cosPhi;\n p.velocity.copy(p.position).multiplyScalar(p.startSpeed);\n p.position.multiplyScalar(this.radius * rand);\n // Default facing-outward orientation, but defer to startRotation if set.\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.position, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'hemisphere',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new HemisphereEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new HemisphereEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\nclass GridEmitter {\n constructor(parameters = {}) {\n this.type = 'grid';\n this.width = parameters.width ?? 1;\n this.height = parameters.height ?? 1;\n this.column = parameters.column ?? 10;\n this.row = parameters.row ?? 10;\n }\n initialize(p) {\n const r = Math.floor(Math.random() * this.row);\n const c = Math.floor(Math.random() * this.column);\n p.position.x = (c * this.width) / this.column - this.width / 2;\n p.position.y = (r * this.height) / this.row - this.height / 2;\n p.position.z = 0;\n p.velocity.set(0, 0, p.startSpeed);\n }\n toJSON() {\n return {\n type: 'grid',\n width: this.width,\n height: this.height,\n column: this.column,\n row: this.row,\n };\n }\n static fromJSON(json) {\n return new GridEmitter(json);\n }\n clone() {\n return new GridEmitter({\n width: this.width,\n height: this.height,\n column: this.column,\n row: this.row,\n });\n }\n update(system, delta) { }\n}\n\n/**\n * a particle emitter that emits particles from a rectangle.\n */\nclass RectangleEmitter {\n constructor(parameters = {}) {\n this.type = 'rectangle';\n this.currentValue = 0;\n this.width = parameters.width ?? 10;\n this.height = parameters.height ?? 10;\n this.thickness = parameters.thickness ?? 1;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n this._m1 = new Matrix4();\n }\n update(system, delta) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n // Calculate perimeter points\n const totalPerimeter = 2 * (this.width + this.height);\n const point = u * totalPerimeter;\n // Map perimeter position to x,y coordinates\n let x, y;\n if (point < this.width) {\n // Bottom edge\n x = point - this.width / 2;\n y = -this.height / 2;\n }\n else if (point < this.width + this.height) {\n // Right edge\n x = this.width / 2;\n y = point - this.width - this.height / 2;\n }\n else if (point < 2 * this.width + this.height) {\n // Top edge\n x = this.width / 2 - (point - this.width - this.height);\n y = this.height / 2;\n }\n else {\n // Left edge\n x = -this.width / 2;\n y = this.height / 2 - (point - 2 * this.width - this.height);\n }\n // Apply thickness - lerp from edge point toward center\n const rand = Math.random();\n const thicknessScale = 1 - this.thickness * rand;\n p.position.x = x * thicknessScale;\n p.position.y = y * thicknessScale;\n p.position.z = 0;\n // Set velocity outward from center\n p.velocity.x = x;\n p.velocity.y = y;\n p.velocity.z = 0;\n p.velocity.normalize().multiplyScalar(p.startSpeed);\n // Default facing-velocity orientation, but defer to startRotation if set.\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.velocity, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'rectangle',\n width: this.width,\n height: this.height,\n thickness: this.thickness,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new RectangleEmitter({\n width: json.width,\n height: json.height,\n thickness: json.thickness,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new RectangleEmitter({\n width: this.width,\n height: this.height,\n thickness: this.thickness,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\nconst EmitterShapes = {\n circle: {\n type: 'circle',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: CircleEmitter,\n loadJSON: CircleEmitter.fromJSON,\n },\n cone: {\n type: 'cone',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['angle', ['radian']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: ConeEmitter,\n loadJSON: ConeEmitter.fromJSON,\n },\n donut: {\n type: 'donut',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['donutRadius', ['number']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: DonutEmitter,\n loadJSON: DonutEmitter.fromJSON,\n },\n point: { type: 'point', params: [], constructor: PointEmitter, loadJSON: PointEmitter.fromJSON },\n sphere: {\n type: 'sphere',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['angle', ['radian']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: SphereEmitter,\n loadJSON: SphereEmitter.fromJSON,\n },\n hemisphere: {\n type: 'hemisphere',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['angle', ['radian']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: HemisphereEmitter,\n loadJSON: HemisphereEmitter.fromJSON,\n },\n grid: {\n type: 'grid',\n params: [\n ['width', ['number']],\n ['height', ['number']],\n ['rows', ['number']],\n ['column', ['number']],\n ],\n constructor: GridEmitter,\n loadJSON: GridEmitter.fromJSON,\n },\n rectangle: {\n type: 'rectangle',\n params: [\n ['width', ['number']],\n ['height', ['number']],\n ['thickness', ['number']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: RectangleEmitter,\n loadJSON: RectangleEmitter.fromJSON,\n },\n};\nfunction EmitterFromJSON(json, meta) {\n return EmitterShapes[json.type].loadJSON(json, meta);\n}\n\n/**\n * Color particles by their life.\n */\nclass ColorOverLife {\n constructor(color) {\n this.color = color;\n this.type = 'ColorOverLife';\n }\n initialize(particle) {\n this.color.startGen(particle.memory);\n }\n update(particle, delta) {\n this.color.genColor(particle.memory, particle.color, particle.age / particle.life);\n particle.color.x *= particle.startColor.x;\n particle.color.y *= particle.startColor.y;\n particle.color.z *= particle.startColor.z;\n particle.color.w *= particle.startColor.w;\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n color: this.color.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ColorOverLife(ColorGeneratorFromJSON(json.color));\n }\n clone() {\n return new ColorOverLife(this.color.clone());\n }\n reset() { }\n}\n\n/**\n * Apply rotation to particles over their life.\n */\nclass RotationOverLife {\n constructor(angularVelocity) {\n this.angularVelocity = angularVelocity;\n this.type = 'RotationOverLife';\n }\n initialize(particle) {\n if (typeof particle.rotation === 'number') {\n this.angularVelocity.startGen(particle.memory);\n }\n }\n update(particle, delta) {\n if (typeof particle.rotation === 'number') {\n particle.rotation +=\n delta *\n this.angularVelocity.genValue(particle.memory, particle.age / particle.life);\n }\n }\n toJSON() {\n return {\n type: this.type,\n angularVelocity: this.angularVelocity.toJSON(),\n };\n }\n static fromJSON(json) {\n return new RotationOverLife(ValueGeneratorFromJSON(json.angularVelocity));\n }\n frameUpdate(delta) { }\n clone() {\n return new RotationOverLife(this.angularVelocity.clone());\n }\n reset() { }\n}\n\n/**\n * Apply rotation to particles over their life.\n */\nclass Rotation3DOverLife {\n constructor(angularVelocity) {\n this.angularVelocity = angularVelocity;\n this.type = 'Rotation3DOverLife';\n this.tempQuat = new Quaternion();\n this.tempQuat2 = new Quaternion();\n }\n initialize(particle) {\n if (particle.rotation instanceof Quaternion) {\n particle.angularVelocity = new Quaternion();\n this.angularVelocity.startGen(particle.memory);\n }\n }\n update(particle, delta) {\n if (particle.rotation instanceof Quaternion) {\n this.angularVelocity.genValue(particle.memory, this.tempQuat, delta, particle.age / particle.life);\n particle.rotation.multiply(this.tempQuat);\n }\n }\n toJSON() {\n return {\n type: this.type,\n angularVelocity: this.angularVelocity.toJSON(),\n };\n }\n static fromJSON(json) {\n return new Rotation3DOverLife(RotationGeneratorFromJSON(json.angularVelocity));\n }\n frameUpdate(delta) { }\n clone() {\n return new Rotation3DOverLife(this.angularVelocity.clone());\n }\n reset() { }\n}\n\n/**\n * Apply a force to particles over their life.\n */\nclass ForceOverLife {\n initialize(particle, particleSystem) {\n this.ps = particleSystem;\n this.x.startGen(particle.memory);\n this.y.startGen(particle.memory);\n this.z.startGen(particle.memory);\n }\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.type = 'ForceOverLife';\n this._temp = new Vector3();\n this._tempScale = new Vector3();\n this._tempQ = new Quaternion();\n }\n update(particle, delta) {\n this._temp.set(this.x.genValue(particle.memory, particle.age / particle.life), this.y.genValue(particle.memory, particle.age / particle.life), this.z.genValue(particle.memory, particle.age / particle.life));\n if (this.ps.worldSpace) {\n particle.velocity.addScaledVector(this._temp, delta);\n }\n else {\n this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ);\n particle.velocity.addScaledVector(this._temp, delta);\n }\n }\n toJSON() {\n return {\n type: this.type,\n x: this.x.toJSON(),\n y: this.y.toJSON(),\n z: this.z.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ForceOverLife(ValueGeneratorFromJSON(json.x), ValueGeneratorFromJSON(json.y), ValueGeneratorFromJSON(json.z));\n }\n frameUpdate(delta) {\n if (this.ps && !this.ps.worldSpace) {\n const translation = this._temp;\n const quaternion = this._tempQ;\n const scale = this._tempScale;\n this.ps.emitter.matrixWorld.decompose(translation, quaternion, scale);\n quaternion.invert();\n scale.set(1 / scale.x, 1 / scale.y, 1 / scale.z);\n }\n }\n clone() {\n return new ForceOverLife(this.x.clone(), this.y.clone(), this.z.clone());\n }\n reset() { }\n}\n\nconst UNIT_X = new Vector3(1, 0, 0);\nconst UNIT_Y = new Vector3(0, 1, 0);\nconst UNIT_Z = new Vector3(0, 0, 1);\n/**\n * Move particles with a direct velocity over their life (Unity's \"Velocity over Lifetime\").\n * Applied as a positional displacement, so it is not affected by speed modifiers,\n * forces, or speed limits. Orbital speeds rotate particles around the emitter axes.\n */\nclass VelocityOverLife {\n constructor(linearX = new ConstantValue(0), linearY = new ConstantValue(0), linearZ = new ConstantValue(0), orbitalX = new ConstantValue(0), orbitalY = new ConstantValue(0), orbitalZ = new ConstantValue(0), space = 'local') {\n this.linearX = linearX;\n this.linearY = linearY;\n this.linearZ = linearZ;\n this.orbitalX = orbitalX;\n this.orbitalY = orbitalY;\n this.orbitalZ = orbitalZ;\n this.space = space;\n this.type = 'VelocityOverLife';\n this._temp = new Vector3();\n this._tempEmitterPos = new Vector3();\n this._tempQ = new Quaternion();\n this._tempQInv = new Quaternion();\n this._tempScale = new Vector3(1, 1, 1);\n this._tempScaleInv = new Vector3(1, 1, 1);\n this._tempRot = new Quaternion();\n this._tempAxis = new Vector3();\n }\n initialize(particle, particleSystem) {\n this.ps = particleSystem;\n this.linearX.startGen(particle.memory);\n this.linearY.startGen(particle.memory);\n this.linearZ.startGen(particle.memory);\n this.orbitalX.startGen(particle.memory);\n this.orbitalY.startGen(particle.memory);\n this.orbitalZ.startGen(particle.memory);\n }\n frameUpdate(delta) {\n if (this.ps) {\n this.ps.emitter.matrixWorld.decompose(this._tempEmitterPos, this._tempQ, this._tempScale);\n this._tempQInv.copy(this._tempQ).invert();\n this._tempScaleInv.set(1 / this._tempScale.x, 1 / this._tempScale.y, 1 / this._tempScale.z);\n }\n }\n update(particle, delta) {\n const t = particle.age / particle.life;\n this._temp.set(this.linearX.genValue(particle.memory, t), this.linearY.genValue(particle.memory, t), this.linearZ.genValue(particle.memory, t));\n // Convert the authored space into the particle simulation space.\n if (this.ps.worldSpace && this.space === 'local') {\n this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ);\n }\n else if (!this.ps.worldSpace && this.space === 'world') {\n this._temp.multiply(this._tempScaleInv).applyQuaternion(this._tempQInv);\n }\n particle.position.addScaledVector(this._temp, delta);\n const angleX = this.orbitalX.genValue(particle.memory, t) * delta;\n const angleY = this.orbitalY.genValue(particle.memory, t) * delta;\n const angleZ = this.orbitalZ.genValue(particle.memory, t) * delta;\n if (angleX !== 0 || angleY !== 0 || angleZ !== 0) {\n const worldPivot = this.ps.worldSpace;\n if (worldPivot) {\n particle.position.sub(this._tempEmitterPos);\n }\n this.orbit(particle.position, UNIT_X, angleX, worldPivot);\n this.orbit(particle.position, UNIT_Y, angleY, worldPivot);\n this.orbit(particle.position, UNIT_Z, angleZ, worldPivot);\n if (worldPivot) {\n particle.position.add(this._tempEmitterPos);\n }\n }\n }\n orbit(position, axis, angle, worldAxes) {\n if (angle === 0) {\n return;\n }\n this._tempAxis.copy(axis);\n if (worldAxes) {\n this._tempAxis.applyQuaternion(this._tempQ);\n }\n this._tempRot.setFromAxisAngle(this._tempAxis, angle);\n position.applyQuaternion(this._tempRot);\n }\n toJSON() {\n return {\n type: this.type,\n linearX: this.linearX.toJSON(),\n linearY: this.linearY.toJSON(),\n linearZ: this.linearZ.toJSON(),\n orbitalX: this.orbitalX.toJSON(),\n orbitalY: this.orbitalY.toJSON(),\n orbitalZ: this.orbitalZ.toJSON(),\n space: this.space,\n };\n }\n static fromJSON(json) {\n const readValue = (field) => field ? ValueGeneratorFromJSON(field) : new ConstantValue(0);\n return new VelocityOverLife(readValue(json.linearX), readValue(json.linearY), readValue(json.linearZ), readValue(json.orbitalX), readValue(json.orbitalY), readValue(json.orbitalZ), json.space === 'world' ? 'world' : 'local');\n }\n clone() {\n return new VelocityOverLife(this.linearX.clone(), this.linearY.clone(), this.linearZ.clone(), this.orbitalX.clone(), this.orbitalY.clone(), this.orbitalZ.clone(), this.space);\n }\n reset() { }\n}\n\n/**\n * Make particles inherit the emitter's movement velocity (Unity's \"Inherit Velocity\").\n * 'initial' adds the emitter velocity to the particle velocity once at spawn;\n * 'current' displaces particles by the current emitter velocity every frame.\n */\nclass InheritVelocity {\n constructor(multiplier = new ConstantValue(1), mode = 'initial') {\n this.multiplier = multiplier;\n this.mode = mode;\n this.type = 'InheritVelocity';\n this._temp = new Vector3();\n this._tempPos = new Vector3();\n this._tempQInv = new Quaternion();\n this._tempScaleInv = new Vector3(1, 1, 1);\n }\n initialize(particle, particleSystem) {\n this.ps = particleSystem;\n this.multiplier.startGen(particle.memory);\n if (this.mode === 'initial' && particleSystem.emitterVelocity) {\n this._temp.copy(particleSystem.emitterVelocity);\n if (!particleSystem.worldSpace) {\n // initialize runs during emit(), before this frame's frameUpdate cache\n // exists, so decompose the emitter matrix on demand.\n this.decomposeInverse(particleSystem);\n this._temp.multiply(this._tempScaleInv).applyQuaternion(this._tempQInv);\n }\n particle.velocity.addScaledVector(this._temp, this.multiplier.genValue(particle.memory, 0));\n }\n }\n frameUpdate(delta) {\n if (this.ps && !this.ps.worldSpace) {\n this.decomposeInverse(this.ps);\n }\n }\n update(particle, delta) {\n if (this.mode !== 'current' || !this.ps.emitterVelocity) {\n return;\n }\n this._temp.copy(this.ps.emitterVelocity);\n if (!this.ps.worldSpace) {\n this._temp.multiply(this._tempScaleInv).applyQuaternion(this._tempQInv);\n }\n particle.position.addScaledVector(this._temp, this.multiplier.genValue(particle.memory, particle.age / particle.life) * delta);\n }\n decomposeInverse(particleSystem) {\n particleSystem.emitter.matrixWorld.decompose(this._tempPos, this._tempQInv, this._tempScaleInv);\n this._tempQInv.invert();\n this._tempScaleInv.set(1 / this._tempScaleInv.x, 1 / this._tempScaleInv.y, 1 / this._tempScaleInv.z);\n }\n toJSON() {\n return {\n type: this.type,\n multiplier: this.multiplier.toJSON(),\n mode: this.mode,\n };\n }\n static fromJSON(json) {\n return new InheritVelocity(json.multiplier ? ValueGeneratorFromJSON(json.multiplier) : new ConstantValue(1), json.mode === 'current' ? 'current' : 'initial');\n }\n clone() {\n return new InheritVelocity(this.multiplier.clone(), this.mode);\n }\n reset() { }\n}\n\n/**\n * Apply size to particles based on their life.\n */\nclass SizeOverLife {\n initialize(particle) {\n this.size.startGen(particle.memory);\n }\n constructor(size) {\n this.size = size;\n this.type = 'SizeOverLife';\n }\n update(particle) {\n if (this.size instanceof Vector3Function) {\n this.size.genValue(particle.memory, particle.size, particle.age / particle.life).multiply(particle.startSize);\n }\n else {\n particle.size.copy(particle.startSize).multiplyScalar(this.size.genValue(particle.memory, particle.age / particle.life));\n }\n }\n toJSON() {\n return {\n type: this.type,\n size: this.size.toJSON(),\n };\n }\n static fromJSON(json) {\n return new SizeOverLife(GeneratorFromJSON(json.size));\n }\n frameUpdate(delta) { }\n clone() {\n return new SizeOverLife(this.size.clone());\n }\n reset() { }\n}\n\n/**\n * Apply speed to particles based on their life.\n */\nclass SpeedOverLife {\n initialize(particle) {\n this.speed.startGen(particle.memory);\n }\n constructor(speed) {\n this.speed = speed;\n this.type = 'SpeedOverLife';\n }\n update(particle) {\n particle.speedModifier = this.speed.genValue(particle.memory, particle.age / particle.life);\n }\n toJSON() {\n return {\n type: this.type,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new SpeedOverLife(ValueGeneratorFromJSON(json.speed));\n }\n frameUpdate(delta) { }\n clone() {\n return new SpeedOverLife(this.speed.clone());\n }\n reset() { }\n}\n\n/**\n * apply tile number of particle texture by particles' life.\n */\nclass FrameOverLife {\n constructor(frame) {\n this.frame = frame;\n this.type = 'FrameOverLife';\n }\n initialize(particle) {\n this.frame.startGen(particle.memory);\n }\n update(particle, delta) {\n if (this.frame instanceof PiecewiseBezier) {\n particle.uvTile = this.frame.genValue(particle.memory, particle.age / particle.life);\n }\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n frame: this.frame.toJSON(),\n };\n }\n static fromJSON(json) {\n return new FrameOverLife(ValueGeneratorFromJSON(json.frame));\n }\n clone() {\n return new FrameOverLife(this.frame.clone());\n }\n reset() { }\n}\n\n/**\n * Orbit particles around an axis over their life.\n */\nclass OrbitOverLife {\n constructor(orbitSpeed, axis = new Vector3(0, 1, 0)) {\n this.orbitSpeed = orbitSpeed;\n this.axis = axis;\n this.type = 'OrbitOverLife';\n this.temp = new Vector3();\n this.rotation = new Quaternion();\n }\n initialize(particle) {\n this.orbitSpeed.startGen(particle.memory);\n }\n update(particle, delta) {\n this.temp.copy(particle.position).projectOnVector(this.axis);\n this.rotation.setFromAxisAngle(this.axis, this.orbitSpeed.genValue(particle.memory, particle.age / particle.life) * delta);\n particle.position.sub(this.temp);\n particle.position.applyQuaternion(this.rotation);\n particle.position.add(this.temp);\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n orbitSpeed: this.orbitSpeed.toJSON(),\n axis: [this.axis.x, this.axis.y, this.axis.z],\n };\n }\n static fromJSON(json) {\n return new OrbitOverLife(ValueGeneratorFromJSON(json.orbitSpeed), json.axis ? new Vector3(json.axis[0], json.axis[1], json.axis[2]) : undefined);\n }\n clone() {\n return new OrbitOverLife(this.orbitSpeed.clone());\n }\n reset() { }\n}\n\nclass LinkedListNode {\n constructor(data) {\n this.data = data;\n this.next = null;\n this.prev = null;\n }\n hasPrev() {\n return this.prev !== null;\n }\n hasNext() {\n return this.next !== null;\n }\n}\nclass LinkedList {\n constructor() {\n this.length = 0;\n this.head = this.tail = null;\n }\n isEmpty() {\n return this.head === null;\n }\n clear() {\n this.length = 0;\n this.head = this.tail = null;\n }\n front() {\n if (this.head === null)\n return null;\n return this.head.data;\n }\n back() {\n if (this.tail === null)\n return null;\n return this.tail.data;\n }\n /**\n * remove at head in O(1)\n */\n dequeue() {\n if (this.head) {\n const value = this.head.data;\n this.head = this.head.next;\n if (!this.head) {\n this.tail = null;\n }\n else {\n this.head.prev = null;\n }\n this.length--;\n return value;\n }\n return undefined;\n }\n /**\n * remove at tail in O(1)\n */\n pop() {\n if (this.tail) {\n const value = this.tail.data;\n this.tail = this.tail.prev;\n if (!this.tail) {\n this.head = null;\n }\n else {\n this.tail.next = null;\n }\n this.length--;\n return value;\n }\n return undefined;\n }\n /**\n * add at head in O(1)\n */\n queue(data) {\n const node = new LinkedListNode(data);\n if (!this.tail) {\n this.tail = node;\n }\n if (this.head) {\n this.head.prev = node;\n node.next = this.head;\n }\n this.head = node;\n this.length++;\n }\n /**\n * add at tail in O(1)\n */\n push(data) {\n const node = new LinkedListNode(data);\n if (!this.head) {\n this.head = node;\n }\n if (this.tail) {\n this.tail.next = node;\n node.prev = this.tail;\n }\n this.tail = node;\n this.length++;\n }\n insertBefore(node, data) {\n const newNode = new LinkedListNode(data);\n newNode.next = node;\n newNode.prev = node.prev;\n if (newNode.prev !== null) {\n newNode.prev.next = newNode;\n }\n newNode.next.prev = newNode;\n if (node == this.head) {\n this.head = newNode;\n }\n this.length++;\n }\n remove(data) {\n if (this.head === null || this.tail === null) {\n return;\n }\n let tempNode = this.head;\n if (data === this.head.data) {\n this.head = this.head.next;\n }\n if (data === this.tail.data) {\n this.tail = this.tail.prev;\n }\n while (tempNode.next !== null && tempNode.data !== data) {\n tempNode = tempNode.next;\n }\n if (tempNode.data === data) {\n if (tempNode.prev !== null)\n tempNode.prev.next = tempNode.next;\n if (tempNode.next !== null)\n tempNode.next.prev = tempNode.prev;\n this.length--;\n }\n }\n /**\n * Returns an iterator over the values\n */\n *values() {\n let current = this.head;\n while (current !== null) {\n yield current.data;\n current = current.next;\n }\n }\n}\n\n/**\n * Particle implementation for node-based particle systems.\n */\nclass NodeParticle {\n constructor() {\n /**\n * Position of the particle.\n * @type {Vector3}\n */\n this.position = new Vector3();\n /**\n * Velocity of the particle.\n * @type {Vector3}\n */\n this.velocity = new Vector3();\n /**\n * Age of the particle.\n * @type {number}\n */\n this.age = 0;\n /**\n * Life duration of the particle.\n * @type {number}\n */\n this.life = 1;\n /**\n * Size of the particle.\n * @type {Vector3}\n */\n this.size = new Vector3();\n /**\n * Rotation of the particle.\n * @type {number | Quaternion}\n */\n this.rotation = 0;\n /**\n * Color of the particle.\n * @type {Vector4}\n */\n this.color = new Vector4(1, 1, 1, 1);\n /**\n * UV tile index.\n * @type {number}\n */\n this.uvTile = 0;\n this.memory = [];\n }\n /**\n * Indicates if the particle has died.\n * @type {boolean}\n */\n get died() {\n return this.age >= this.life;\n }\n /**\n * Resets the particle properties to initial values.\n */\n reset() {\n this.memory.length = 0;\n this.position.set(0, 0, 0);\n this.velocity.set(0, 0, 0);\n this.age = 0;\n this.life = 1;\n this.size.set(1, 1, 1);\n this.rotation = 0;\n this.color.set(1, 1, 1, 1);\n this.uvTile = 0;\n }\n}\n/**\n * Particle implementation for sprite-based particle.\n */\nclass SpriteParticle {\n constructor() {\n /**\n * Initial speed of the particle.\n * @type {number}\n */\n this.startSpeed = 0;\n /**\n * Initial color of the particle.\n * @type {Vector4}\n */\n this.startColor = new Vector4();\n /**\n * Initial size of the particle.\n * @type {Vector3}\n */\n this.startSize = new Vector3(1, 1, 1);\n /**\n * Position of the particle.\n * @type {Vector3}\n */\n this.position = new Vector3();\n /**\n * Velocity of the particle.\n * @type {Vector3}\n */\n this.velocity = new Vector3();\n /**\n * Age of the particle.\n * @type {number}\n */\n this.age = 0;\n /**\n * Life duration of the particle.\n * @type {number}\n */\n this.life = 1;\n /**\n * Size of the particle.\n * @type {Vector3}\n */\n this.size = new Vector3(1, 1, 1);\n /**\n * Speed modifier of the particle.\n * @type {number}\n */\n this.speedModifier = 1;\n // GPU properties\n /**\n * Rotation of the particle.\n * @type {number | Quaternion}\n */\n this.rotation = 0;\n /**\n * Color of the particle.\n * @type {Vector4}\n */\n this.color = new Vector4();\n /**\n * UV tile index.\n * @type {number}\n */\n this.uvTile = 0;\n this.memory = [];\n }\n /**\n * Indicates if the particle has died.\n * @type {boolean}\n */\n get died() {\n return this.age >= this.life;\n }\n reset() {\n this.memory.length = 0;\n }\n}\nclass RecordState {\n /**\n * Creates a new record state.\n * @param {Vector3} position - The position of the particle.\n * @param {number} size - The size of the particle.\n * @param {Vector4} color - The color of the particle.\n */\n constructor(position, size, color) {\n this.position = position;\n this.size = size;\n this.color = color;\n }\n}\n/**\n * Particle implementation for trail-based particles.\n */\nclass TrailParticle {\n constructor() {\n /**\n * Initial speed of the particle.\n * @type {number}\n */\n this.startSpeed = 0;\n /**\n * Initial color of the particle.\n * @type {Vector4}\n */\n this.startColor = new Vector4();\n /**\n * Initial size of the particle.\n * @type {Vector3}\n */\n this.startSize = new Vector3(1, 1, 1);\n /**\n * Position of the particle.\n * @type {Vector3}\n */\n this.position = new Vector3();\n /**\n * Velocity of the particle.\n * @type {Vector3}\n */\n this.velocity = new Vector3();\n /**\n * Age of the particle.\n * @type {number}\n */\n this.age = 0;\n /**\n * Life duration of the particle.\n * @type {number}\n */\n this.life = 1;\n /**\n * Size of the particle.\n * @type {Vector3}\n */\n this.size = new Vector3(1, 1, 1);\n /**\n * Length of the trail.\n * @type {number}\n */\n this.length = 100;\n /**\n * Speed modifier of the particle.\n * @type {number}\n */\n this.speedModifier = 1;\n // GPU properties\n /**\n * Color of the particle.\n * @type {Vector4}\n */\n this.color = new Vector4();\n /**\n * Previous states of the particle.\n * @type {LinkedList<RecordState>}\n */\n this.previous = new LinkedList();\n /**\n * UV tile index.\n * @type {number}\n */\n this.uvTile = 0;\n this.memory = [];\n }\n /**\n * Updates the particle state.\n */\n update() {\n if (this.age <= this.life) {\n this.previous.push(new RecordState(this.position.clone(), this.size.x, this.color.clone()));\n }\n else {\n if (this.previous.length > 0) {\n this.previous.dequeue();\n }\n }\n while (this.previous.length > this.length) {\n this.previous.dequeue();\n }\n }\n /**\n * Indicates if the particle has died.\n * @type {boolean}\n */\n get died() {\n return this.age >= this.life;\n }\n /**\n * Resets the particle properties and clears the previous states.\n */\n reset() {\n this.memory.length = 0;\n this.previous.clear();\n }\n}\n\n/**\n * Apply width to particles based on their length.\n */\nclass WidthOverLength {\n initialize(particle) {\n this.width.startGen(particle.memory);\n }\n constructor(width) {\n this.width = width;\n this.type = 'WidthOverLength';\n }\n update(particle) {\n if (particle instanceof TrailParticle) {\n const iter = particle.previous.values();\n for (let i = 0; i < particle.previous.length; i++) {\n const cur = iter.next();\n cur.value.size = this.width.genValue(particle.memory, (particle.previous.length - i) / particle.length);\n }\n }\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n width: this.width.toJSON(),\n };\n }\n static fromJSON(json) {\n return new WidthOverLength(ValueGeneratorFromJSON(json.width));\n }\n clone() {\n return new WidthOverLength(this.width.clone());\n }\n reset() { }\n}\n\n/**\n * Apply a global force to particles.\n */\nclass ApplyForce {\n constructor(direction, magnitude) {\n this.direction = direction;\n this.magnitude = magnitude;\n this.type = 'ApplyForce';\n this.memory = {\n data: [],\n dataCount: 0,\n };\n this.magnitudeValue = this.magnitude.genValue(this.memory);\n }\n initialize(particle) { }\n update(particle, delta) {\n particle.velocity.addScaledVector(this.direction, this.magnitudeValue * delta);\n }\n frameUpdate(delta) {\n this.magnitudeValue = this.magnitude.genValue(this.memory);\n }\n toJSON() {\n return {\n type: this.type,\n direction: [this.direction.x, this.direction.y, this.direction.z],\n magnitude: this.magnitude.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ApplyForce(new Vector3(json.direction[0], json.direction[1], json.direction[2]), ValueGeneratorFromJSON(json.magnitude ?? json.force));\n }\n clone() {\n return new ApplyForce(this.direction.clone(), this.magnitude.clone());\n }\n reset() { }\n}\n\n/**\n * Apply a gravity force to particles.\n * the gravity force is calculated as:\n * F = G * m1 * m2 / r^2\n */\nclass GravityForce {\n constructor(center, magnitude) {\n this.center = center;\n this.magnitude = magnitude;\n this.type = 'GravityForce';\n this.temp = new Vector3();\n }\n initialize(particle) { }\n update(particle, delta) {\n this.temp.copy(this.center).sub(particle.position).normalize();\n particle.velocity.addScaledVector(this.temp, (this.magnitude / particle.position.distanceToSquared(this.center)) * delta);\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n center: [this.center.x, this.center.y, this.center.z],\n magnitude: this.magnitude,\n };\n }\n static fromJSON(json) {\n return new GravityForce(new Vector3(json.center[0], json.center[1], json.center[2]), json.magnitude);\n }\n clone() {\n return new GravityForce(this.center.clone(), this.magnitude);\n }\n reset() { }\n}\n\n/**\n * Change the emit direction of particles.\n */\nclass ChangeEmitDirection {\n constructor(angle) {\n this.angle = angle;\n this.type = 'ChangeEmitDirection';\n this._temp = new Vector3();\n this._q = new Quaternion();\n this.memory = { data: [], dataCount: 0 };\n }\n initialize(particle) {\n const len = particle.velocity.length();\n if (len == 0)\n return;\n particle.velocity.normalize();\n if (particle.velocity.x === 0 && particle.velocity.y === 0) {\n this._temp.set(0, particle.velocity.z, 0);\n }\n else {\n this._temp.set(-particle.velocity.y, particle.velocity.x, 0);\n }\n this.angle.startGen(this.memory);\n this._q.setFromAxisAngle(this._temp.normalize(), this.angle.genValue(this.memory));\n this._temp.copy(particle.velocity);\n particle.velocity.applyQuaternion(this._q);\n this._q.setFromAxisAngle(this._temp, Math.random() * Math.PI * 2);\n particle.velocity.applyQuaternion(this._q);\n particle.velocity.setLength(len);\n }\n update(particle, delta) { }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n angle: this.angle.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ChangeEmitDirection(ValueGeneratorFromJSON(json.angle));\n }\n clone() {\n return new ChangeEmitDirection(this.angle);\n }\n reset() { }\n}\n\nvar SubParticleEmitMode;\n(function (SubParticleEmitMode) {\n SubParticleEmitMode[SubParticleEmitMode[\"Death\"] = 0] = \"Death\";\n SubParticleEmitMode[SubParticleEmitMode[\"Birth\"] = 1] = \"Birth\";\n SubParticleEmitMode[SubParticleEmitMode[\"Frame\"] = 2] = \"Frame\";\n})(SubParticleEmitMode || (SubParticleEmitMode = {}));\n/**\n * Emit a sub particle system from particles.\n */\nclass EmitSubParticleSystem {\n constructor(particleSystem, useVelocityAsBasis, subParticleSystem, mode = SubParticleEmitMode.Frame, emitProbability = 1) {\n this.particleSystem = particleSystem;\n this.useVelocityAsBasis = useVelocityAsBasis;\n this.subParticleSystem = subParticleSystem;\n this.mode = mode;\n this.emitProbability = emitProbability;\n this.type = 'EmitSubParticleSystem';\n //private matrix_ = new Matrix4();\n this.q_ = new Quaternion();\n this.v_ = new Vector3();\n this.v2_ = new Vector3();\n this.subEmissions = new Array();\n if (this.subParticleSystem && this.subParticleSystem.system) {\n this.subParticleSystem.system.onlyUsedByOther = true;\n }\n }\n initialize(particle) {\n /*particle.emissionState = {\n burstIndex: 0,\n burstWaveIndex: 0,\n time: 0,\n waitEmiting: 0,\n matrix: new Matrix4(),\n } as EmissionState;*/\n }\n update(particle, delta) {\n if (this.mode === SubParticleEmitMode.Frame) {\n this.emit(particle, delta);\n }\n else if (this.mode === SubParticleEmitMode.Birth && particle.age === 0) {\n this.emit(particle, delta);\n }\n else if (this.mode === SubParticleEmitMode.Death && particle.age + delta >= particle.life) {\n this.emit(particle, delta);\n }\n }\n emit(particle, delta) {\n if (!this.subParticleSystem)\n return;\n if (Math.random() > this.emitProbability) {\n return;\n }\n const m = new Matrix4();\n this.setMatrixFromParticle(m, particle);\n this.subEmissions.push({\n burstParticleCount: 0,\n burstParticleIndex: 0,\n isBursting: false,\n burstIndex: 0,\n burstWaveIndex: 0,\n time: 0,\n waitEmiting: 0,\n matrix: m,\n travelDistance: 0,\n particle: particle,\n });\n //(this.subParticleSystem.system as ParticleSystem).emit(delta, particle.emissionState, m);\n }\n frameUpdate(delta) {\n if (!this.subParticleSystem)\n return;\n for (let i = 0; i < this.subEmissions.length; i++) {\n if (this.subEmissions[i].time >= this.subParticleSystem.system.duration) {\n this.subEmissions[i] = this.subEmissions[this.subEmissions.length - 1];\n this.subEmissions.length = this.subEmissions.length - 1;\n i--;\n }\n else {\n const subEmissionState = this.subEmissions[i];\n if (subEmissionState.particle && subEmissionState.particle.age < subEmissionState.particle.life) {\n this.setMatrixFromParticle(subEmissionState.matrix, subEmissionState.particle);\n }\n else {\n subEmissionState.particle = undefined;\n }\n this.subParticleSystem.system.emit(delta, subEmissionState, subEmissionState.matrix);\n }\n }\n }\n toJSON() {\n return {\n type: this.type,\n subParticleSystem: this.subParticleSystem ? this.subParticleSystem.uuid : '',\n useVelocityAsBasis: this.useVelocityAsBasis,\n mode: this.mode,\n emitProbability: this.emitProbability,\n };\n }\n static fromJSON(json, particleSystem) {\n return new EmitSubParticleSystem(particleSystem, json.useVelocityAsBasis, json.subParticleSystem, json.mode, json.emitProbability);\n }\n clone() {\n return new EmitSubParticleSystem(this.particleSystem, this.useVelocityAsBasis, this.subParticleSystem, this.mode, this.emitProbability);\n }\n reset() { }\n setMatrixFromParticle(m, particle) {\n let rotation;\n if (particle.rotation === undefined || this.useVelocityAsBasis) {\n if (particle.velocity.x === 0 &&\n particle.velocity.y === 0 &&\n (particle.velocity.z === 1 || particle.velocity.z === 0)) {\n m.set(1, 0, 0, particle.position.x, 0, 1, 0, particle.position.y, 0, 0, 1, particle.position.z, 0, 0, 0, 1);\n }\n else {\n this.v_.copy(Z_VEC3).cross(particle.velocity);\n this.v2_.copy(particle.velocity).cross(this.v_);\n const len = this.v_.length();\n const len2 = this.v2_.length();\n m.set(this.v_.x / len, this.v2_.x / len2, particle.velocity.x, particle.position.x, this.v_.y / len, this.v2_.y / len2, particle.velocity.y, particle.position.y, this.v_.z / len, this.v2_.z / len2, particle.velocity.z, particle.position.z, 0, 0, 0, 1);\n }\n }\n else {\n if (particle.rotation instanceof Quaternion) {\n rotation = particle.rotation;\n }\n else {\n this.q_.setFromAxisAngle(Z_VEC3, particle.rotation);\n rotation = this.q_;\n }\n m.compose(particle.position, rotation, ONE_VEC3);\n }\n if (!this.particleSystem.worldSpace) {\n m.multiplyMatrices(this.particleSystem.emitter.matrixWorld, m);\n }\n }\n}\n\n/*\n * A fast javascript implementation of simplex noise by Jonas Wagner\nBased on a speed-improved simplex noise algorithm for 2D, 3D and 4D in Java.\nWhich is based on example code by Stefan Gustavson (stegu@itn.liu.se).\nWith Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).\nBetter rank ordering method by Stefan Gustavson in 2012.\n Copyright (c) 2021 Jonas Wagner\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\nconst F2 = 0.5 * (Math.sqrt(3.0) - 1.0);\nconst G2 = (3.0 - Math.sqrt(3.0)) / 6.0;\nconst F3 = 1.0 / 3.0;\nconst G3 = 1.0 / 6.0;\nconst F4 = (Math.sqrt(5.0) - 1.0) / 4.0;\nconst G4 = (5.0 - Math.sqrt(5.0)) / 20.0;\nconst grad3 = new Float32Array([1, 1, 0,\n -1, 1, 0,\n 1, -1, 0,\n -1, -1, 0,\n 1, 0, 1,\n -1, 0, 1,\n 1, 0, -1,\n -1, 0, -1,\n 0, 1, 1,\n 0, -1, 1,\n 0, 1, -1,\n 0, -1, -1]);\nconst grad4 = new Float32Array([0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1,\n 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1,\n 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, 0, -1, -1,\n -1, 0, 1, 1, -1, 0, 1, -1, -1, 0, -1, 1, -1, 0, -1, -1,\n 1, 1, 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1,\n -1, 1, 0, 1, -1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, -1,\n 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0,\n -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0]);\n/** Deterministic simplex noise generator suitable for 2D, 3D and 4D spaces. */\nclass SimplexNoise {\n /**\n * Creates a new `SimplexNoise` instance.\n * This involves some setup. You can save a few cpu cycles by reusing the same instance.\n * @param randomOrSeed A random number generator or a seed (string|number).\n * Defaults to Math.random (random irreproducible initialization).\n */\n constructor(randomOrSeed = Math.random) {\n const random = typeof randomOrSeed == 'function' ? randomOrSeed : alea(randomOrSeed);\n this.p = buildPermutationTable(random);\n this.perm = new Uint8Array(512);\n this.permMod12 = new Uint8Array(512);\n for (let i = 0; i < 512; i++) {\n this.perm[i] = this.p[i & 255];\n this.permMod12[i] = this.perm[i] % 12;\n }\n }\n /**\n * Samples the noise field in 2 dimensions\n * @param x\n * @param y\n * @returns a number in the interval [-1, 1]\n */\n noise2D(x, y) {\n const permMod12 = this.permMod12;\n const perm = this.perm;\n let n0 = 0; // Noise contributions from the ../math corners\n let n1 = 0;\n let n2 = 0;\n // Skew the input space to determine which simplex cell we're in\n const s = (x + y) * F2; // Hairy factor for 2D\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const t = (i + j) * G2;\n const X0 = i - t; // Unskew the cell origin back to (x,y) space\n const Y0 = j - t;\n const x0 = x - X0; // The x,y distances from the cell origin\n const y0 = y - Y0;\n // For the 2D case, the simplex shape is an equilateral triangle.\n // Determine which simplex we are in.\n let i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords\n if (x0 > y0) {\n i1 = 1;\n j1 = 0;\n } // lower triangle, XY order: (0,0)->(1,0)->(1,1)\n else {\n i1 = 0;\n j1 = 1;\n } // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n // c = (3-sqrt(3))/6\n const x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n const y1 = y0 - j1 + G2;\n const x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n const y2 = y0 - 1.0 + 2.0 * G2;\n // Work out the hashed gradient indices of the ../math simplex corners\n const ii = i & 255;\n const jj = j & 255;\n // Calculate the contribution from the ../math corners\n let t0 = 0.5 - x0 * x0 - y0 * y0;\n if (t0 >= 0) {\n const gi0 = permMod12[ii + perm[jj]] * 3;\n t0 *= t0;\n n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0); // (x,y) of grad3 used for 2D gradient\n }\n let t1 = 0.5 - x1 * x1 - y1 * y1;\n if (t1 >= 0) {\n const gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3;\n t1 *= t1;\n n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1);\n }\n let t2 = 0.5 - x2 * x2 - y2 * y2;\n if (t2 >= 0) {\n const gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3;\n t2 *= t2;\n n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2);\n }\n // Add contributions from each corner to get the final noise value.\n // The result is scaled to return values in the interval [-1,1].\n return 70.0 * (n0 + n1 + n2);\n }\n /**\n * Samples the noise field in 3 dimensions\n * @param x\n * @param y\n * @param z\n * @returns a number in the interval [-1, 1]\n */\n noise3D(x, y, z) {\n const permMod12 = this.permMod12;\n const perm = this.perm;\n let n0, n1, n2, n3; // Noise contributions from the four corners\n // Skew the input space to determine which simplex cell we're in\n const s = (x + y + z) * F3; // Very nice and simple skew factor for 3D\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const k = Math.floor(z + s);\n const t = (i + j + k) * G3;\n const X0 = i - t; // Unskew the cell origin back to (x,y,z) space\n const Y0 = j - t;\n const Z0 = k - t;\n const x0 = x - X0; // The x,y,z distances from the cell origin\n const y0 = y - Y0;\n const z0 = z - Z0;\n // For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n // Determine which simplex we are in.\n let i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords\n let i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } // X Y Z order\n else if (x0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } // X Z Y order\n else {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } // Z X Y order\n }\n else { // x0<y0\n if (y0 < z0) {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } // Z Y X order\n else if (x0 < z0) {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } // Y Z X order\n else {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } // Y X Z order\n }\n // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),\n // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and\n // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where\n // c = 1/6.\n const x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords\n const y1 = y0 - j1 + G3;\n const z1 = z0 - k1 + G3;\n const x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords\n const y2 = y0 - j2 + 2.0 * G3;\n const z2 = z0 - k2 + 2.0 * G3;\n const x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords\n const y3 = y0 - 1.0 + 3.0 * G3;\n const z3 = z0 - 1.0 + 3.0 * G3;\n // Work out the hashed gradient indices of the four simplex corners\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n // Calculate the contribution from the four corners\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n if (t0 < 0)\n n0 = 0.0;\n else {\n const gi0 = permMod12[ii + perm[jj + perm[kk]]] * 3;\n t0 *= t0;\n n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0 + grad3[gi0 + 2] * z0);\n }\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n if (t1 < 0)\n n1 = 0.0;\n else {\n const gi1 = permMod12[ii + i1 + perm[jj + j1 + perm[kk + k1]]] * 3;\n t1 *= t1;\n n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1 + grad3[gi1 + 2] * z1);\n }\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n if (t2 < 0)\n n2 = 0.0;\n else {\n const gi2 = permMod12[ii + i2 + perm[jj + j2 + perm[kk + k2]]] * 3;\n t2 *= t2;\n n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2 + grad3[gi2 + 2] * z2);\n }\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n if (t3 < 0)\n n3 = 0.0;\n else {\n const gi3 = permMod12[ii + 1 + perm[jj + 1 + perm[kk + 1]]] * 3;\n t3 *= t3;\n n3 = t3 * t3 * (grad3[gi3] * x3 + grad3[gi3 + 1] * y3 + grad3[gi3 + 2] * z3);\n }\n // Add contributions from each corner to get the final noise value.\n // The result is scaled to stay just inside [-1,1]\n return 32.0 * (n0 + n1 + n2 + n3);\n }\n /**\n * Samples the noise field in 4 dimensions\n * @param x\n * @param y\n * @param z\n * @returns a number in the interval [-1, 1]\n */\n noise4D(x, y, z, w) {\n const perm = this.perm;\n let n0, n1, n2, n3, n4; // Noise contributions from the five corners\n // Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in\n const s = (x + y + z + w) * F4; // Factor for 4D skewing\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const k = Math.floor(z + s);\n const l = Math.floor(w + s);\n const t = (i + j + k + l) * G4; // Factor for 4D unskewing\n const X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space\n const Y0 = j - t;\n const Z0 = k - t;\n const W0 = l - t;\n const x0 = x - X0; // The x,y,z,w distances from the cell origin\n const y0 = y - Y0;\n const z0 = z - Z0;\n const w0 = w - W0;\n // For the 4D case, the simplex is a 4D shape I won't even try to describe.\n // To find out which of the 24 possible simplices we're in, we need to\n // determine the magnitude ordering of x0, y0, z0 and w0.\n // Six pair-wise comparisons are performed between each possible pair\n // of the four coordinates, and the results are used to rank the numbers.\n let rankx = 0;\n let ranky = 0;\n let rankz = 0;\n let rankw = 0;\n if (x0 > y0)\n rankx++;\n else\n ranky++;\n if (x0 > z0)\n rankx++;\n else\n rankz++;\n if (x0 > w0)\n rankx++;\n else\n rankw++;\n if (y0 > z0)\n ranky++;\n else\n rankz++;\n if (y0 > w0)\n ranky++;\n else\n rankw++;\n if (z0 > w0)\n rankz++;\n else\n rankw++;\n // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.\n // Many values of c will never occur, since e.g. x>y>z>w makes x<z, y<w and x<w\n // impossible. Only the 24 indices which have non-zero entries make any sense.\n // We use a thresholding to set the coordinates in turn from the largest magnitude.\n // Rank 3 denotes the largest coordinate.\n // Rank 2 denotes the second largest coordinate.\n // Rank 1 denotes the second smallest coordinate.\n // The integer offsets for the second simplex corner\n const i1 = rankx >= 3 ? 1 : 0;\n const j1 = ranky >= 3 ? 1 : 0;\n const k1 = rankz >= 3 ? 1 : 0;\n const l1 = rankw >= 3 ? 1 : 0;\n // The integer offsets for the third simplex corner\n const i2 = rankx >= 2 ? 1 : 0;\n const j2 = ranky >= 2 ? 1 : 0;\n const k2 = rankz >= 2 ? 1 : 0;\n const l2 = rankw >= 2 ? 1 : 0;\n // The integer offsets for the fourth simplex corner\n const i3 = rankx >= 1 ? 1 : 0;\n const j3 = ranky >= 1 ? 1 : 0;\n const k3 = rankz >= 1 ? 1 : 0;\n const l3 = rankw >= 1 ? 1 : 0;\n // The fifth corner has all coordinate offsets = 1, so no need to compute that.\n const x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords\n const y1 = y0 - j1 + G4;\n const z1 = z0 - k1 + G4;\n const w1 = w0 - l1 + G4;\n const x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords\n const y2 = y0 - j2 + 2.0 * G4;\n const z2 = z0 - k2 + 2.0 * G4;\n const w2 = w0 - l2 + 2.0 * G4;\n const x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords\n const y3 = y0 - j3 + 3.0 * G4;\n const z3 = z0 - k3 + 3.0 * G4;\n const w3 = w0 - l3 + 3.0 * G4;\n const x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords\n const y4 = y0 - 1.0 + 4.0 * G4;\n const z4 = z0 - 1.0 + 4.0 * G4;\n const w4 = w0 - 1.0 + 4.0 * G4;\n // Work out the hashed gradient indices of the five simplex corners\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n const ll = l & 255;\n // Calculate the contribution from the five corners\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n if (t0 < 0)\n n0 = 0.0;\n else {\n const gi0 = (perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32) * 4;\n t0 *= t0;\n n0 = t0 * t0 * (grad4[gi0] * x0 + grad4[gi0 + 1] * y0 + grad4[gi0 + 2] * z0 + grad4[gi0 + 3] * w0);\n }\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n if (t1 < 0)\n n1 = 0.0;\n else {\n const gi1 = (perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32) * 4;\n t1 *= t1;\n n1 = t1 * t1 * (grad4[gi1] * x1 + grad4[gi1 + 1] * y1 + grad4[gi1 + 2] * z1 + grad4[gi1 + 3] * w1);\n }\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n if (t2 < 0)\n n2 = 0.0;\n else {\n const gi2 = (perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32) * 4;\n t2 *= t2;\n n2 = t2 * t2 * (grad4[gi2] * x2 + grad4[gi2 + 1] * y2 + grad4[gi2 + 2] * z2 + grad4[gi2 + 3] * w2);\n }\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n if (t3 < 0)\n n3 = 0.0;\n else {\n const gi3 = (perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32) * 4;\n t3 *= t3;\n n3 = t3 * t3 * (grad4[gi3] * x3 + grad4[gi3 + 1] * y3 + grad4[gi3 + 2] * z3 + grad4[gi3 + 3] * w3);\n }\n let t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n if (t4 < 0)\n n4 = 0.0;\n else {\n const gi4 = (perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32) * 4;\n t4 *= t4;\n n4 = t4 * t4 * (grad4[gi4] * x4 + grad4[gi4 + 1] * y4 + grad4[gi4 + 2] * z4 + grad4[gi4 + 3] * w4);\n }\n // Sum up and scale the result to cover the range [-1,1]\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n }\n}\n/**\n * Builds a random permutation table.\n * This is exported only for (internal) testing purposes.\n * Do not rely on this export.\n * @private\n */\nfunction buildPermutationTable(random) {\n const p = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n p[i] = i;\n }\n for (let i = 0; i < 255; i++) {\n const r = i + ~~(random() * (256 - i));\n const aux = p[i];\n p[i] = p[r];\n p[r] = aux;\n }\n return p;\n}\n/*\nThe ALEA PRNG and masher code used by simplex-noise.js\nis based on code by Johannes Baagøe, modified by Jonas Wagner.\nSee alea.md for the full license.\n*/\nfunction alea(seed) {\n let s0 = 0;\n let s1 = 0;\n let s2 = 0;\n let c = 1;\n const mash = masher();\n s0 = mash(' ');\n s1 = mash(' ');\n s2 = mash(' ');\n s0 -= mash(seed);\n if (s0 < 0) {\n s0 += 1;\n }\n s1 -= mash(seed);\n if (s1 < 0) {\n s1 += 1;\n }\n s2 -= mash(seed);\n if (s2 < 0) {\n s2 += 1;\n }\n return function () {\n const t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\n s0 = s1;\n s1 = s2;\n return s2 = t - (c = t | 0);\n };\n}\nfunction masher() {\n let n = 0xefc8249d;\n return function (data) {\n data = data.toString();\n for (let i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n let h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n}\n\n/**\n * Apply turbulence to particles.\n */\nclass TurbulenceField {\n constructor(scale, octaves, velocityMultiplier, timeScale) {\n this.scale = scale;\n this.octaves = octaves;\n this.velocityMultiplier = velocityMultiplier;\n this.timeScale = timeScale;\n this.type = 'TurbulenceField';\n this.generator = new SimplexNoise();\n this.timeOffset = new Vector3();\n this.temp = new Vector3();\n this.temp2 = new Vector3();\n this.timeOffset.x = (Math.random() / this.scale.x) * this.timeScale.x;\n this.timeOffset.y = (Math.random() / this.scale.y) * this.timeScale.y;\n this.timeOffset.z = (Math.random() / this.scale.z) * this.timeScale.z;\n }\n initialize(particle) { }\n update(particle, delta) {\n const x = particle.position.x / this.scale.x;\n const y = particle.position.y / this.scale.y;\n const z = particle.position.z / this.scale.z;\n this.temp.set(0, 0, 0);\n let lvl = 1;\n for (let i = 0; i < this.octaves; i++) {\n this.temp2.set(this.generator.noise4D(x * lvl, y * lvl, z * lvl, this.timeOffset.x * lvl) / lvl, this.generator.noise4D(x * lvl, y * lvl, z * lvl, this.timeOffset.y * lvl) / lvl, this.generator.noise4D(x * lvl, y * lvl, z * lvl, this.timeOffset.z * lvl) / lvl);\n this.temp.add(this.temp2);\n lvl *= 2;\n }\n this.temp.multiply(this.velocityMultiplier);\n particle.velocity.addScaledVector(this.temp, delta);\n }\n toJSON() {\n return {\n type: this.type,\n scale: [this.scale.x, this.scale.y, this.scale.z],\n octaves: this.octaves,\n velocityMultiplier: [this.velocityMultiplier.x, this.velocityMultiplier.y, this.velocityMultiplier.z],\n timeScale: [this.timeScale.x, this.timeScale.y, this.timeScale.z],\n };\n }\n frameUpdate(delta) {\n this.timeOffset.x += delta * this.timeScale.x;\n this.timeOffset.y += delta * this.timeScale.y;\n this.timeOffset.z += delta * this.timeScale.z;\n }\n static fromJSON(json) {\n return new TurbulenceField(new Vector3(json.scale[0], json.scale[1], json.scale[2]), json.octaves, new Vector3(json.velocityMultiplier[0], json.velocityMultiplier[1], json.velocityMultiplier[2]), new Vector3(json.timeScale[0], json.timeScale[1], json.timeScale[2]));\n }\n clone() {\n return new TurbulenceField(this.scale.clone(), this.octaves, this.velocityMultiplier.clone(), this.timeScale.clone());\n }\n reset() { }\n}\n\nconst generators = [];\nconst tempV = new Vector3();\nconst tempQ = new Quaternion();\n/**\n * Apply noise to particles.\n */\nclass Noise {\n constructor(frequency, power, positionAmount = new ConstantValue(1), rotationAmount = new ConstantValue(0)) {\n this.frequency = frequency;\n this.power = power;\n this.positionAmount = positionAmount;\n this.rotationAmount = rotationAmount;\n this.type = 'Noise';\n this.duration = 0;\n if (generators.length === 0) {\n for (let i = 0; i < 100; i++) {\n generators.push(new SimplexNoise());\n }\n }\n }\n initialize(particle) {\n particle.lastPosNoise = new Vector3();\n if (typeof particle.rotation === 'number') {\n particle.lastRotNoise = 0;\n }\n else {\n particle.lastRotNoise = new Quaternion();\n }\n particle.generatorIndex = [randomInt(0, 100), randomInt(0, 100), randomInt(0, 100), randomInt(0, 100)];\n this.positionAmount.startGen(particle.memory);\n this.rotationAmount.startGen(particle.memory);\n this.frequency.startGen(particle.memory);\n this.power.startGen(particle.memory);\n }\n update(particle, _) {\n let frequency = this.frequency.genValue(particle.memory, particle.age / particle.life);\n let power = this.power.genValue(particle.memory, particle.age / particle.life);\n let positionAmount = this.positionAmount.genValue(particle.memory, particle.age / particle.life);\n let rotationAmount = this.rotationAmount.genValue(particle.memory, particle.age / particle.life);\n if (positionAmount > 0 && particle.lastPosNoise !== undefined) {\n particle.position.sub(particle.lastPosNoise);\n tempV.set(generators[particle.generatorIndex[0]].noise2D(0, particle.age * frequency) *\n power *\n positionAmount, generators[particle.generatorIndex[1]].noise2D(0, particle.age * frequency) *\n power *\n positionAmount, generators[particle.generatorIndex[2]].noise2D(0, particle.age * frequency) *\n power *\n positionAmount);\n particle.position.add(tempV);\n particle.lastPosNoise.copy(tempV);\n }\n if (rotationAmount > 0 && particle.lastRotNoise !== undefined) {\n if (typeof particle.rotation === 'number') {\n particle.rotation -= particle.lastRotNoise;\n particle.rotation +=\n generators[particle.generatorIndex[3]].noise2D(0, particle.age * frequency) *\n Math.PI *\n power *\n rotationAmount;\n }\n else {\n particle.lastRotNoise.invert();\n particle.rotation.multiply(particle.lastRotNoise);\n tempQ\n .set(generators[particle.generatorIndex[0]].noise2D(0, particle.age * frequency) *\n power *\n rotationAmount, generators[particle.generatorIndex[1]].noise2D(0, particle.age * frequency) *\n power *\n rotationAmount, generators[particle.generatorIndex[2]].noise2D(0, particle.age * frequency) *\n power *\n rotationAmount, generators[particle.generatorIndex[3]].noise2D(0, particle.age * frequency) *\n power *\n rotationAmount)\n .normalize();\n particle.rotation.multiply(tempQ);\n particle.lastRotNoise.copy(tempQ);\n }\n }\n }\n toJSON() {\n return {\n type: this.type,\n frequency: this.frequency.toJSON(),\n power: this.power.toJSON(),\n positionAmount: this.positionAmount.toJSON(),\n rotationAmount: this.rotationAmount.toJSON(),\n };\n }\n frameUpdate(delta) {\n this.duration += delta;\n }\n static fromJSON(json) {\n return new Noise(ValueGeneratorFromJSON(json.frequency), ValueGeneratorFromJSON(json.power), ValueGeneratorFromJSON(json.positionAmount), ValueGeneratorFromJSON(json.rotationAmount));\n }\n clone() {\n return new Noise(this.frequency.clone(), this.power.clone(), this.positionAmount.clone(), this.rotationAmount.clone());\n }\n reset() { }\n}\n\nclass TextureSequencer {\n constructor(scaleX = 0, scaleY = 0, position = new Vector3()) {\n this.scaleX = scaleX;\n this.scaleY = scaleY;\n this.position = position;\n this.locations = [];\n }\n transform(position, index) {\n position.x = this.locations[index % this.locations.length].x * this.scaleX + this.position.x;\n position.y = this.locations[index % this.locations.length].y * this.scaleY + this.position.y;\n position.z = this.position.z;\n }\n static fromJSON(json) {\n const textureSequencer = new TextureSequencer(json.scaleX, json.scaleY, new Vector3(json.position[0], json.position[1], json.position[2]));\n textureSequencer.locations = json.locations.map((loc) => new Vector2(loc.x, loc.y));\n return textureSequencer;\n }\n clone() {\n const textureSequencer = new TextureSequencer(this.scaleX, this.scaleY, this.position.clone());\n textureSequencer.locations = this.locations.map((loc) => loc.clone());\n return textureSequencer;\n }\n toJSON() {\n return {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n position: this.position,\n locations: this.locations.map((loc) => ({\n x: loc.x,\n y: loc.y,\n })),\n };\n }\n fromImage(img, threshold) {\n // Create an empty canvas element\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n // Copy the image contents to the canvas\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.drawImage(img, 0, 0);\n const data = ctx.getImageData(0, 0, canvas.width, canvas.height, { colorSpace: 'srgb' });\n canvas.remove();\n this.locations.length = 0;\n for (let i = 0; i < data.height; i++) {\n for (let j = 0; j < data.width; j++) {\n if (data.data[(i * data.width + j) * 4 + 3] > threshold) {\n this.locations.push(new Vector2(j, data.height - i));\n }\n }\n }\n //return data;\n // Get the data-URL formatted image\n // Firefox supports PNG and JPEG. You could check img.src to\n // guess the original format, but be aware the using \"image/jpg\"\n // will re-encode the image.\n //var dataURL = canvas.toDataURL(\"image/png\");\n //return dataURL.replace(/^data:image\\/(png|jpg);base64,/, \"\");\n }\n}\n\nfunction SequencerFromJSON(json) {\n switch (json.type) {\n case 'TextureSequencer':\n return TextureSequencer.fromJSON(json);\n default:\n return new TextureSequencer();\n }\n}\n\n/**\n * Apply sequences to particles.\n * {@link Sequencer}\n */\nclass ApplySequences {\n constructor(delayBetweenParticles) {\n this.type = 'ApplySequences';\n this.sequencers = [];\n this.time = 0;\n this.index = 0;\n this.pCount = 0;\n this.tempV = new Vector3();\n this.delay = delayBetweenParticles;\n }\n initialize(particle) {\n particle.id = this.pCount;\n particle.dst = new Vector3();\n particle.begin = new Vector3();\n particle.inMotion = false;\n this.pCount++;\n }\n reset() {\n this.time = 0;\n this.index = 0;\n this.pCount = 0;\n }\n update(particle, delta) {\n const sequencer = this.sequencers[this.index];\n const delay = particle.id * this.delay;\n if (this.time >= sequencer[0].a + delay && this.time <= sequencer[0].b + delay) {\n if (!particle.inMotion) {\n particle.inMotion = true;\n particle.begin.copy(particle.position);\n sequencer[1].transform(particle.dst, particle.id);\n }\n particle.position.lerpVectors(particle.begin, particle.dst, ApplySequences.BEZIER.genValue((this.time - sequencer[0].a - delay) / (sequencer[0].b - sequencer[0].a)));\n }\n else if (this.time > sequencer[0].b + delay) {\n particle.inMotion = false;\n }\n }\n frameUpdate(delta) {\n while (this.index + 1 < this.sequencers.length && this.time >= this.sequencers[this.index + 1][0].a) {\n this.index++;\n }\n this.time += delta;\n }\n appendSequencer(range, sequencer) {\n this.sequencers.push([range, sequencer]);\n }\n toJSON() {\n return {\n type: this.type,\n delay: this.delay,\n sequencers: this.sequencers.map(([range, sequencer]) => ({\n range: range.toJSON(),\n sequencer: sequencer.toJSON(),\n })),\n };\n }\n static fromJSON(json) {\n const seq = new ApplySequences(json.delay);\n json.sequencers.forEach((sequencerJson) => {\n seq.sequencers.push([\n ValueGeneratorFromJSON(sequencerJson.range),\n SequencerFromJSON(sequencerJson.sequencer),\n ]);\n });\n return seq;\n }\n clone() {\n const applySequences = new ApplySequences(this.delay);\n applySequences.sequencers = this.sequencers.map((seq) => [seq[0].clone(), seq[1].clone()]);\n return applySequences;\n }\n}\nApplySequences.BEZIER = new Bezier(0, 0, 1, 1);\n\nlet physicsResolver;\nfunction setPhysicsResolver(resolver) {\n physicsResolver = resolver;\n}\nfunction getPhysicsResolver() {\n return physicsResolver;\n}\n/**\n * Apply collision to particles from a physics resolver.\n */\nclass ApplyCollision {\n constructor(resolver, bounce) {\n this.resolver = resolver;\n this.bounce = bounce;\n this.type = 'ApplyCollision';\n this.tempV = new Vector3();\n }\n initialize(particle) { }\n update(particle, delta) {\n // No-op when no collider is registered (getPhysicsResolver() was undefined at load time),\n // so a collision-bearing effect loads and renders anywhere — a host that wants actual\n // collisions registers a resolver via setPhysicsResolver.\n if (this.resolver && this.resolver.resolve(particle.position, this.tempV)) {\n particle.velocity.reflect(this.tempV).multiplyScalar(this.bounce);\n }\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n bounce: this.bounce,\n };\n }\n static fromJSON(json) {\n return new ApplyCollision(getPhysicsResolver(), json.bounce);\n }\n clone() {\n return new ApplyCollision(this.resolver, this.bounce);\n }\n reset() { }\n}\n\n/**\n * Color particles by their speed.\n */\nclass ColorBySpeed {\n constructor(color, speedRange) {\n this.color = color;\n this.speedRange = speedRange;\n this.type = 'ColorBySpeed';\n }\n initialize(particle) {\n this.color.startGen(particle.memory);\n }\n update(particle, delta) {\n const t = (particle.startSpeed - this.speedRange.a) / (this.speedRange.b - this.speedRange.a);\n this.color.genColor(particle.memory, particle.color, t);\n particle.color.x *= particle.startColor.x;\n particle.color.y *= particle.startColor.y;\n particle.color.z *= particle.startColor.z;\n particle.color.w *= particle.startColor.w;\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n color: this.color.toJSON(),\n speedRange: this.speedRange.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ColorBySpeed(ColorGeneratorFromJSON(json.color), IntervalValue.fromJSON(json.speedRange));\n }\n clone() {\n return new ColorBySpeed(this.color.clone(), this.speedRange.clone());\n }\n reset() { }\n}\n\n/**\n * Apply size to particles based on their speed.\n */\nclass SizeBySpeed {\n initialize(particle) {\n this.size.startGen(particle.memory);\n }\n constructor(size, speedRange) {\n this.size = size;\n this.speedRange = speedRange;\n this.type = 'SizeBySpeed';\n }\n update(particle) {\n const t = (particle.startSpeed - this.speedRange.a) / (this.speedRange.b - this.speedRange.a);\n if (this.size instanceof Vector3Function) {\n this.size.genValue(particle.memory, particle.size, t).multiply(particle.startSize);\n }\n else {\n particle.size.copy(particle.startSize).multiplyScalar(this.size.genValue(particle.memory, t));\n }\n }\n toJSON() {\n return {\n type: this.type,\n size: this.size.toJSON(),\n speedRange: this.speedRange.toJSON(),\n };\n }\n static fromJSON(json) {\n return new SizeBySpeed(GeneratorFromJSON(json.size), IntervalValue.fromJSON(json.speedRange));\n }\n frameUpdate(delta) { }\n clone() {\n return new SizeBySpeed(this.size.clone(), this.speedRange.clone());\n }\n reset() { }\n}\n\n/**\n * Apply rotation to particles based on their speed.\n */\nclass RotationBySpeed {\n constructor(angularVelocity, speedRange) {\n this.angularVelocity = angularVelocity;\n this.speedRange = speedRange;\n this.type = 'RotationBySpeed';\n this.tempQuat = new Quaternion();\n }\n initialize(particle) {\n if (typeof particle.rotation === 'number') {\n this.angularVelocity.startGen(particle.memory);\n }\n }\n update(particle, delta) {\n if (typeof particle.rotation === 'number') {\n const t = (particle.startSpeed - this.speedRange.a) / (this.speedRange.b - this.speedRange.a);\n particle.rotation +=\n delta * this.angularVelocity.genValue(particle.memory, t);\n }\n }\n toJSON() {\n return {\n type: this.type,\n angularVelocity: this.angularVelocity.toJSON(),\n speedRange: this.speedRange.toJSON(),\n };\n }\n static fromJSON(json) {\n return new RotationBySpeed(ValueGeneratorFromJSON(json.angularVelocity), IntervalValue.fromJSON(json.speedRange));\n }\n frameUpdate(delta) { }\n clone() {\n return new RotationBySpeed(this.angularVelocity.clone(), this.speedRange.clone());\n }\n reset() { }\n}\n\n/**\n * Limit the speed of particles over their life.\n */\nclass LimitSpeedOverLife {\n initialize(particle) {\n this.speed.startGen(particle.memory);\n }\n constructor(speed, dampen) {\n this.speed = speed;\n this.dampen = dampen;\n this.type = 'LimitSpeedOverLife';\n }\n update(particle, delta) {\n let speed = particle.velocity.length();\n let limit = this.speed.genValue(particle.memory, particle.age / particle.life);\n if (speed > limit) {\n const percent = (speed - limit) / speed;\n particle.velocity.multiplyScalar(1 - percent * this.dampen * delta * 20);\n }\n }\n toJSON() {\n return {\n type: this.type,\n speed: this.speed.toJSON(),\n dampen: this.dampen,\n };\n }\n static fromJSON(json) {\n return new LimitSpeedOverLife(ValueGeneratorFromJSON(json.speed), json.dampen);\n }\n frameUpdate(delta) { }\n clone() {\n return new LimitSpeedOverLife(this.speed.clone(), this.dampen);\n }\n reset() { }\n}\n\nconst BehaviorTypes = {\n ApplyForce: {\n type: 'ApplyForce',\n constructor: ApplyForce,\n params: [\n ['direction', ['vec3']],\n ['magnitude', ['value']],\n ],\n loadJSON: ApplyForce.fromJSON,\n },\n Noise: {\n type: 'Noise',\n constructor: Noise,\n params: [\n ['frequency', ['value']],\n ['power', ['value']],\n ['positionAmount', ['value']],\n ['rotationAmount', ['value']],\n ],\n loadJSON: Noise.fromJSON,\n },\n TurbulenceField: {\n type: 'TurbulenceField',\n constructor: TurbulenceField,\n params: [\n ['scale', ['vec3']],\n ['octaves', ['number']],\n ['velocityMultiplier', ['vec3']],\n ['timeScale', ['vec3']],\n ],\n loadJSON: TurbulenceField.fromJSON,\n },\n GravityForce: {\n type: 'GravityForce',\n constructor: GravityForce,\n params: [\n ['center', ['vec3']],\n ['magnitude', ['number']],\n ],\n loadJSON: GravityForce.fromJSON,\n },\n ColorOverLife: {\n type: 'ColorOverLife',\n constructor: ColorOverLife,\n params: [['color', ['colorFunc']]],\n loadJSON: ColorOverLife.fromJSON,\n },\n RotationOverLife: {\n type: 'RotationOverLife',\n constructor: RotationOverLife,\n params: [['angularVelocity', ['value', 'valueFunc']]],\n loadJSON: RotationOverLife.fromJSON,\n },\n Rotation3DOverLife: {\n type: 'Rotation3DOverLife',\n constructor: Rotation3DOverLife,\n params: [['angularVelocity', ['rotationFunc']]],\n loadJSON: Rotation3DOverLife.fromJSON,\n },\n SizeOverLife: {\n type: 'SizeOverLife',\n constructor: SizeOverLife,\n params: [['size', ['value', 'valueFunc', 'vec3Func']]],\n loadJSON: SizeOverLife.fromJSON,\n },\n ColorBySpeed: {\n type: 'ColorBySpeed',\n constructor: ColorBySpeed,\n params: [\n ['color', ['colorFunc']],\n ['speedRange', ['range']],\n ],\n loadJSON: ColorBySpeed.fromJSON,\n },\n RotationBySpeed: {\n type: 'RotationBySpeed',\n constructor: RotationBySpeed,\n params: [\n ['angularVelocity', ['value', 'valueFunc']],\n ['speedRange', ['range']],\n ],\n loadJSON: RotationBySpeed.fromJSON,\n },\n SizeBySpeed: {\n type: 'SizeBySpeed',\n constructor: SizeBySpeed,\n params: [\n ['size', ['value', 'valueFunc', 'vec3Func']],\n ['speedRange', ['range']],\n ],\n loadJSON: SizeBySpeed.fromJSON,\n },\n SpeedOverLife: {\n type: 'SpeedOverLife',\n constructor: SpeedOverLife,\n params: [['speed', ['value', 'valueFunc']]],\n loadJSON: SpeedOverLife.fromJSON,\n },\n FrameOverLife: {\n type: 'FrameOverLife',\n constructor: FrameOverLife,\n params: [['frame', ['value', 'valueFunc']]],\n loadJSON: FrameOverLife.fromJSON,\n },\n ForceOverLife: {\n type: 'ForceOverLife',\n constructor: ForceOverLife,\n params: [\n ['x', ['value', 'valueFunc']],\n ['y', ['value', 'valueFunc']],\n ['z', ['value', 'valueFunc']],\n ],\n loadJSON: ForceOverLife.fromJSON,\n },\n VelocityOverLife: {\n type: 'VelocityOverLife',\n constructor: VelocityOverLife,\n params: [\n ['linearX', ['value', 'valueFunc']],\n ['linearY', ['value', 'valueFunc']],\n ['linearZ', ['value', 'valueFunc']],\n ['orbitalX', ['value', 'valueFunc']],\n ['orbitalY', ['value', 'valueFunc']],\n ['orbitalZ', ['value', 'valueFunc']],\n ['space', ['string']],\n ],\n loadJSON: VelocityOverLife.fromJSON,\n },\n InheritVelocity: {\n type: 'InheritVelocity',\n constructor: InheritVelocity,\n params: [\n ['multiplier', ['value', 'valueFunc']],\n ['mode', ['string']],\n ],\n loadJSON: InheritVelocity.fromJSON,\n },\n OrbitOverLife: {\n type: 'OrbitOverLife',\n constructor: OrbitOverLife,\n params: [\n ['orbitSpeed', ['value', 'valueFunc']],\n ['axis', ['vec3']],\n ],\n loadJSON: OrbitOverLife.fromJSON,\n },\n WidthOverLength: {\n type: 'WidthOverLength',\n constructor: WidthOverLength,\n params: [['width', ['value', 'valueFunc']]],\n loadJSON: WidthOverLength.fromJSON,\n },\n ChangeEmitDirection: {\n type: 'ChangeEmitDirection',\n constructor: ChangeEmitDirection,\n params: [['angle', ['value']]],\n loadJSON: ChangeEmitDirection.fromJSON,\n },\n EmitSubParticleSystem: {\n type: 'EmitSubParticleSystem',\n constructor: EmitSubParticleSystem,\n params: [\n ['particleSystem', ['self']],\n ['useVelocityAsBasis', ['boolean']],\n ['subParticleSystem', ['particleSystem']],\n ['mode', ['number']],\n ['emitProbability', ['number']],\n ],\n loadJSON: EmitSubParticleSystem.fromJSON,\n },\n LimitSpeedOverLife: {\n type: 'LimitSpeedOverLife',\n constructor: LimitSpeedOverLife,\n params: [\n ['speed', ['value', 'valueFunc']],\n ['dampen', ['number']],\n ],\n loadJSON: LimitSpeedOverLife.fromJSON,\n },\n ApplyCollision: {\n type: 'ApplyCollision',\n constructor: ApplyCollision,\n // The resolver is host-provided (getPhysicsResolver), not serialized; only bounce round-trips.\n params: [['bounce', ['number']]],\n loadJSON: ApplyCollision.fromJSON,\n },\n};\nfunction BehaviorFromJSON(json, particleSystem) {\n if (BehaviorTypes[json.type]) {\n return BehaviorTypes[json.type].loadJSON(json, particleSystem);\n }\n return null;\n}\n\nconst Plugins = [];\nfunction loadPlugin(plugin) {\n const existing = Plugins.find((item) => item.id === plugin.id);\n if (!existing) {\n plugin.initialize();\n for (const emitterShape of plugin.emitterShapes) {\n if (!EmitterShapes[emitterShape.type]) {\n EmitterShapes[emitterShape.type] = emitterShape;\n }\n }\n for (const behavior of plugin.behaviors) {\n if (!BehaviorTypes[behavior.type]) {\n BehaviorTypes[behavior.type] = behavior;\n }\n }\n }\n}\nfunction unloadPlugin(pluginId) {\n const plugin = Plugins.find((item) => item.id === pluginId);\n if (plugin) {\n for (const emitterShape of plugin.emitterShapes) {\n if (EmitterShapes[emitterShape.type]) {\n delete EmitterShapes[emitterShape.type];\n }\n }\n for (const behavior of plugin.behaviors) {\n if (BehaviorTypes[behavior.type]) {\n delete BehaviorTypes[behavior.type];\n }\n }\n }\n}\n\nexport { ApplyCollision, ApplyForce, ApplySequences, AxisAngleGenerator, BehaviorFromJSON, BehaviorTypes, Bezier, ChangeEmitDirection, CircleEmitter, ColorBySpeed, ColorGeneratorFromJSON, ColorOverLife, ColorRange, ConeEmitter, ConstantColor, ConstantValue, DEG2RAD, DonutEmitter, EmitSubParticleSystem, EmitterFromJSON, EmitterMode, EmitterShapes, Euler, EulerGenerator, ForceOverLife, FrameOverLife, GeneratorFromJSON, Gradient, GravityForce, GridEmitter, HemisphereEmitter, InheritVelocity, IntervalValue, LimitSpeedOverLife, MathUtils, Matrix3, Matrix4, NodeParticle, Noise, OrbitOverLife, PiecewiseBezier, PiecewiseFunction, Plugins, PointEmitter, Quaternion, RAD2DEG, RandomColor, RandomColorBetweenGradient, RandomQuatGenerator, RecordState, RectangleEmitter, Rotation3DOverLife, RotationBySpeed, RotationGeneratorFromJSON, RotationOverLife, SequencerFromJSON, SizeBySpeed, SizeOverLife, SpeedOverLife, SphereEmitter, SpriteParticle, SubParticleEmitMode, TextureSequencer, TrailParticle, TurbulenceField, ValueGeneratorFromJSON, Vector2, Vector3, Vector3Function, Vector3GeneratorFromJSON, Vector4, VelocityOverLife, WebGLCoordinateSystem, WebGPUCoordinateSystem, WidthOverLength, ceilPowerOfTwo, clamp, damp, degToRad, denormalize, euclideanModulo, floorPowerOfTwo, generateUUID, getPhysicsResolver, getValueFromEmitterMode, inverseLerp, isPowerOfTwo, lerp, loadPlugin, mapLinear, normalize, pingpong, radToDeg, randFloat, randFloatSpread, randInt, seededRandom, setPhysicsResolver, setQuaternionFromProperEuler, smootherstep, smoothstep, unloadPlugin };\n","import {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {VertexBuffer} from '@babylonjs/core/Buffers/buffer';\nimport {\n Particle,\n EmitterShape,\n ShapeJSON,\n IParticleSystem,\n Vector3,\n Plugin,\n} from 'quarks.core';\n\nexport class MeshSurfaceEmitter implements EmitterShape {\n type = 'mesh_surface';\n\n private _triangleIndexToArea: number[] = [];\n private _mesh?: Mesh;\n private _positions?: Float32Array;\n private _indices?: Uint32Array | Int32Array;\n private _meshReferenceId?: string;\n\n get mesh() {\n return this._mesh;\n }\n\n set mesh(mesh: Mesh | undefined) {\n this._mesh = mesh;\n if (!mesh) return;\n\n const positions = mesh.getVerticesData(VertexBuffer.PositionKind);\n const indices = mesh.getIndices();\n if (!positions || !indices) return;\n\n this._positions = new Float32Array(positions);\n this._indices = new Int32Array(indices);\n\n this._triangleIndexToArea.length = 0;\n let area = 0;\n const triCount = indices.length / 3;\n this._triangleIndexToArea.push(0);\n\n const a = new Vector3();\n const b = new Vector3();\n const c = new Vector3();\n\n for (let i = 0; i < triCount; i++) {\n const i0 = indices[i * 3];\n const i1 = indices[i * 3 + 1];\n const i2 = indices[i * 3 + 2];\n\n a.set(positions[i0 * 3], positions[i0 * 3 + 1], positions[i0 * 3 + 2]);\n b.set(positions[i1 * 3], positions[i1 * 3 + 1], positions[i1 * 3 + 2]);\n c.set(positions[i2 * 3], positions[i2 * 3 + 1], positions[i2 * 3 + 2]);\n\n b.sub(a);\n c.sub(a);\n const cross = new Vector3();\n cross.crossVectors(b, c);\n area += cross.length() * 0.5;\n this._triangleIndexToArea.push(area);\n }\n }\n\n constructor(mesh?: Mesh, meshReferenceId?: string) {\n this._meshReferenceId = meshReferenceId;\n if (mesh) this.mesh = mesh;\n }\n\n initialize(p: Particle) {\n if (!this._positions || !this._indices) {\n p.position.set(0, 0, 0);\n p.velocity.set(0, 0, 1).multiplyScalar(p.startSpeed);\n return;\n }\n\n const triCount = this._triangleIndexToArea.length - 1;\n let left = 0, right = triCount;\n const target = Math.random() * this._triangleIndexToArea[triCount];\n\n while (left + 1 < right) {\n const mid = Math.floor((left + right) / 2);\n if (target < this._triangleIndexToArea[mid]) {\n right = mid;\n } else {\n left = mid;\n }\n }\n\n let u1 = Math.random();\n let u2 = Math.random();\n if (u1 + u2 > 1) {\n u1 = 1 - u1;\n u2 = 1 - u2;\n }\n\n const idx0 = this._indices[left * 3];\n const idx1 = this._indices[left * 3 + 1];\n const idx2 = this._indices[left * 3 + 2];\n\n const ax = this._positions[idx0 * 3], ay = this._positions[idx0 * 3 + 1], az = this._positions[idx0 * 3 + 2];\n const bx = this._positions[idx1 * 3] - ax, by = this._positions[idx1 * 3 + 1] - ay, bz = this._positions[idx1 * 3 + 2] - az;\n const cx = this._positions[idx2 * 3] - ax, cy = this._positions[idx2 * 3 + 1] - ay, cz = this._positions[idx2 * 3 + 2] - az;\n\n p.position.set(ax + bx * u1 + cx * u2, ay + by * u1 + cy * u2, az + bz * u1 + cz * u2);\n\n const nx = by * cz - bz * cy;\n const ny = bz * cx - bx * cz;\n const nz = bx * cy - by * cx;\n const len = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n p.velocity.set(nx / len, ny / len, nz / len).multiplyScalar(p.startSpeed);\n }\n\n toJSON(): ShapeJSON {\n return {type: 'mesh_surface', mesh: this._mesh ? (this._mesh as any).uniqueId?.toString() : this._meshReferenceId ?? ''};\n }\n\n static fromJSON(json: any): MeshSurfaceEmitter {\n return new MeshSurfaceEmitter(undefined, json?.mesh);\n }\n\n clone(): EmitterShape {\n return new MeshSurfaceEmitter(this._mesh, this._meshReferenceId);\n }\n\n update(_system: IParticleSystem, _delta: number): void {}\n}\n\nexport const MeshSurfaceEmitterPlugin: Plugin = {\n id: 'babylon.quarks',\n initialize: () => {},\n emitterShapes: [{\n type: 'mesh_surface',\n params: [['mesh', ['mesh']]],\n constructor: MeshSurfaceEmitter,\n loadJSON: (json: any) => MeshSurfaceEmitter.fromJSON(json),\n }],\n behaviors: [],\n};\n","import softFragment from './soft_fragment.glsl';\nimport softParsFragment from './soft_pars_fragment.glsl';\nimport softParsVertex from './soft_pars_vertex.glsl';\nimport softVertex from './soft_vertex.glsl';\nimport tileFragment from './tile_fragment.glsl';\nimport tileParsFragment from './tile_pars_fragment.glsl';\nimport tileParsVertex from './tile_pars_vertex.glsl';\nimport tileVertex from './tile_vertex.glsl';\n\nconst shaderChunks: Record<string, string> = {};\nlet registered = false;\n\nexport function registerShaderChunks(): void {\n if (registered) return;\n shaderChunks.tile_pars_vertex = tileParsVertex;\n shaderChunks.tile_vertex = tileVertex;\n shaderChunks.tile_pars_fragment = tileParsFragment;\n shaderChunks.tile_fragment = tileFragment;\n shaderChunks.soft_pars_vertex = softParsVertex;\n shaderChunks.soft_vertex = softVertex;\n shaderChunks.soft_pars_fragment = softParsFragment;\n shaderChunks.soft_fragment = softFragment;\n registered = true;\n}\n\nexport function getShaderChunk(chunkName: string): string | undefined {\n return shaderChunks[chunkName];\n}\n\nexport function getRegisteredShaderChunks(): Readonly<Record<string, string>> {\n return shaderChunks;\n}\n","export default /* glsl */ `\n#ifdef UV_TILE\n attribute float uvTile;\n uniform vec2 tileCount;\n\n mat3 makeTileTransform(float tileIndex) {\n float col = mod(tileIndex, tileCount.x);\n float row = (tileCount.y - floor(tileIndex / tileCount.x) - 1.0);\n return mat3(\n 1.0 / tileCount.x, 0.0, 0.0,\n 0.0, 1.0 / tileCount.y, 0.0,\n col / tileCount.x, row / tileCount.y, 1.0\n );\n }\n#else\n mat3 makeTileTransform(float tileIndex) {\n return mat3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0);\n }\n#endif\n\n#if defined(USE_UV)\n varying vec2 vUv;\n #ifdef TILE_BLEND\n varying vec2 vUvNext;\n varying float vUvBlend;\n #endif\n#endif\n`;\n","export default /* glsl */ `\n#ifdef UV_TILE\n mat3 tileTransform = makeTileTransform(floor(uvTile));\n #ifdef TILE_BLEND\n mat3 nextTileTransform = makeTileTransform(ceil(uvTile));\n vUvBlend = fract(uvTile);\n #endif\n#else\n mat3 tileTransform = makeTileTransform(0.0);\n#endif\n\n#if defined(USE_UV)\n vUv = (tileTransform * vec3(uv, 1.0)).xy;\n #if defined(TILE_BLEND) && defined(UV_TILE)\n vUvNext = (nextTileTransform * vec3(uv, 1.0)).xy;\n #endif\n#endif\n`;\n","export default /* glsl */ `\n#if defined(USE_UV)\n varying vec2 vUv;\n #ifdef TILE_BLEND\n varying vec2 vUvNext;\n varying float vUvBlend;\n #endif\n#endif\n`;\n","export default /* glsl */ `\n#ifdef USE_MAP\n vec4 texelColor = texture2D(map, vUv);\n #ifdef TILE_BLEND\n texelColor = mix(texelColor, texture2D(map, vUvNext), vUvBlend);\n #endif\n diffuseColor *= texelColor;\n#endif\n`;\n","export default /* glsl */ `\n#ifdef SOFT_PARTICLES\n varying vec4 projPosition;\n varying float linearDepth;\n#endif\n`;\n","export default /* glsl */ `\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -mvPosition.z;\n#endif\n`;\n","export default /* glsl */ `\n#ifdef SOFT_PARTICLES\n uniform sampler2D depthTexture;\n uniform vec4 projParams;\n uniform vec2 softParams;\n\n varying vec4 projPosition;\n varying float linearDepth;\n\n #define SOFT_NEAR_FADE softParams.x\n #define SOFT_INV_FADE_DISTANCE softParams.y\n\n #define zNear projParams.x\n #define zFar projParams.y\n\n float linearize_depth(float d) {\n return (zFar * zNear) / (zFar - d * (zFar - zNear));\n }\n#endif\n`;\n","export default /* glsl */ `\n#ifdef SOFT_PARTICLES\n\n vec2 p2 = projPosition.xy / projPosition.w;\n p2 = 0.5 * p2 + 0.5;\n\n float readDepth = texture2D(depthTexture, p2.xy).r;\n float viewDepth = linearize_depth(readDepth);\n float softParticlesFade = saturate(SOFT_INV_FADE_DISTANCE * ((viewDepth - SOFT_NEAR_FADE) - linearDepth));\n\n gl_FragColor *= softParticlesFade;\n#endif\n`;\n","export default /* glsl */ `\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute float rotation;\nattribute float uvTile;\n\n// Uniforms\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\nuniform mat4 worldViewProjection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvoid main() {\n float c = cos(rotation);\n float s = sin(rotation);\n\n vec2 alignedPosition = position.xy * size.xy;\n vec2 rotatedPosition;\n rotatedPosition.x = c * alignedPosition.x - s * alignedPosition.y;\n rotatedPosition.y = s * alignedPosition.x + c * alignedPosition.y;\n\n#ifdef HORIZONTAL\n vec4 mvPosition = world * vec4(offset, 1.0);\n mvPosition.x += rotatedPosition.x;\n mvPosition.z -= rotatedPosition.y;\n mvPosition = view * mvPosition;\n#elif defined(VERTICAL)\n vec4 mvPosition = world * vec4(offset, 1.0);\n mvPosition.y += rotatedPosition.y;\n mvPosition = view * mvPosition;\n mvPosition.x += rotatedPosition.x;\n#else\n vec4 mvPosition = view * world * vec4(offset, 1.0);\n mvPosition.xy += rotatedPosition;\n#endif\n\n gl_Position = projection * mvPosition;\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -mvPosition.z;\n#endif\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n`;\n","import {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {Scene} from '@babylonjs/core/scene';\nimport {BaseTexture} from '@babylonjs/core/Materials/Textures/baseTexture';\nimport {ShaderMaterial} from '@babylonjs/core/Materials/shaderMaterial';\nimport {IParticleSystem} from 'quarks.core';\nimport {VFXBatchSettings} from './BatchedRenderer';\n\nexport enum RenderMode {\n BillBoard = 0,\n StretchedBillBoard = 1,\n Mesh = 2,\n Trail = 3,\n HorizontalBillBoard = 4,\n VerticalBillBoard = 5,\n}\n\nexport interface StoredBatchSettings {\n instancingGeometry: Float32Array;\n instancingIndices: Uint32Array | Uint16Array;\n instancingUVs?: Float32Array;\n instancingNormals?: Float32Array;\n renderMode: RenderMode;\n renderOrder: number;\n uTileCount: number;\n vTileCount: number;\n blendTiles: boolean;\n softParticles: boolean;\n softNearFade: number;\n softFarFade: number;\n materialBlendMode: number;\n materialTransparent: boolean;\n materialDepthTest: boolean;\n materialDepthWrite: boolean;\n materialAlphaTest: number;\n texture: any;\n layerMask: number;\n}\n\nexport abstract class VFXBatch {\n mesh: Mesh;\n systems: Set<IParticleSystem>;\n settings: StoredBatchSettings;\n protected maxParticles: number;\n protected scene: Scene;\n\n protected constructor(settings: VFXBatchSettings, scene: Scene) {\n this.scene = scene;\n this.maxParticles = 1000;\n this.systems = new Set<IParticleSystem>();\n this.settings = {\n instancingGeometry: settings.instancingGeometry,\n instancingIndices: settings.instancingIndices,\n instancingUVs: settings.instancingUVs,\n instancingNormals: settings.instancingNormals,\n renderMode: settings.renderMode,\n renderOrder: settings.renderOrder,\n uTileCount: settings.uTileCount,\n vTileCount: settings.vTileCount,\n blendTiles: settings.blendTiles,\n softParticles: settings.softParticles,\n softNearFade: settings.softNearFade,\n softFarFade: settings.softFarFade,\n materialBlendMode: settings.materialBlendMode,\n materialTransparent: settings.materialTransparent,\n materialDepthTest: settings.materialDepthTest,\n materialDepthWrite: settings.materialDepthWrite,\n materialAlphaTest: settings.materialAlphaTest,\n texture: settings.texture,\n layerMask: settings.layerMask,\n };\n this.mesh = new Mesh('vfxBatch', scene);\n this.mesh.alwaysSelectAsActiveMesh = true;\n }\n\n addSystem(system: IParticleSystem) {\n this.systems.add(system);\n }\n\n removeSystem(system: IParticleSystem) {\n this.systems.delete(system);\n }\n\n getVisibleSystems(): IParticleSystem[] {\n const visibleSystems: IParticleSystem[] = [];\n for (const system of this.systems) {\n if (system.emitter.visible) {\n visibleSystems.push(system);\n }\n }\n return visibleSystems;\n }\n\n applyDepthTexture(depthTexture: BaseTexture | null): void {\n const material = this.mesh.material;\n if (material && material instanceof ShaderMaterial) {\n material.setTexture('depthTexture', depthTexture);\n }\n }\n\n abstract setupBuffers(): void;\n abstract expandBuffers(target: number): void;\n abstract rebuildMaterial(): void;\n abstract update(): void;\n\n dispose(): void {\n this.mesh.dispose();\n }\n}\n","export default /* glsl */ `\nvarying vec2 vUV;\nvarying vec4 vColor;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\n#ifdef SOFT_PARTICLES\nuniform sampler2D depthTexture;\nuniform vec2 softParams;\nuniform vec4 projParams;\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\n#ifdef USE_ALPHATEST\nuniform float alphaTest;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n #ifdef TILE_BLEND\n vec4 texColor2 = texture2D(map, vUV2);\n texColor = mix(texColor, texColor2, vTileBlend);\n #endif\n baseColor *= texColor;\n#endif\n\n#ifdef USE_COLOR_AS_ALPHA\n baseColor.a *= (baseColor.r + baseColor.g + baseColor.b) / 3.0;\n#endif\n\n#ifdef USE_ALPHATEST\n if (baseColor.a < alphaTest) discard;\n#else\n if (baseColor.a < 0.01) discard;\n#endif\n\n gl_FragColor = baseColor;\n\n#ifdef SOFT_PARTICLES\n vec2 p2 = projPosition.xy / projPosition.w;\n p2 = 0.5 * p2 + 0.5;\n float readDepth = texture2D(depthTexture, p2.xy).r;\n float zNear = projParams.x;\n float zFar = projParams.y;\n float viewDepth = (zFar * zNear) / (zFar - readDepth * (zFar - zNear));\n float fade = clamp(softParams.y * ((viewDepth - softParams.x) - linearDepth), 0.0, 1.0);\n gl_FragColor *= fade;\n#endif\n}\n`;\n","export default /* glsl */ `\nattribute vec3 position;\nattribute vec2 uv;\nattribute vec3 normal;\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute vec4 rotation;\nattribute float uvTile;\n\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\nvarying vec2 vUV;\nvarying vec4 vColor;\nvarying vec3 vNormal;\nvarying vec3 vWorldPos;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvec3 applyQuaternion(vec3 v, vec4 q) {\n vec3 qVec = q.xyz;\n float qW = q.w;\n vec3 t = 2.0 * cross(qVec, v);\n return v + qW * t + cross(qVec, t);\n}\n\nvoid main() {\n vec3 scaledPosition = position * size;\n vec3 rotatedPosition = applyQuaternion(scaledPosition, rotation);\n vec3 rotatedNormal = normalize(applyQuaternion(normal, rotation));\n vec3 localPos = rotatedPosition + offset;\n\n vec4 worldPos = world * vec4(localPos, 1.0);\n vec4 viewPos = view * worldPos;\n gl_Position = projection * viewPos;\n\n vWorldPos = worldPos.xyz;\n vNormal = normalize((world * vec4(rotatedNormal, 0.0)).xyz);\n\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -viewPos.z;\n#endif\n\n#ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n#else\n vUV = uv;\n#endif\n\n vColor = color;\n}\n`;\n","export default /* glsl */ `\nvarying vec2 vUV;\nvarying vec4 vColor;\nvarying vec3 vNormal;\n\nuniform vec3 lightDirection;\nuniform vec3 lightColor;\nuniform vec3 ambientColor;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\n#ifdef SOFT_PARTICLES\nuniform sampler2D depthTexture;\nuniform vec2 softParams;\nuniform vec4 projParams;\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\n#ifdef USE_ALPHATEST\nuniform float alphaTest;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n #ifdef TILE_BLEND\n vec4 texColor2 = texture2D(map, vUV2);\n texColor = mix(texColor, texColor2, vTileBlend);\n #endif\n baseColor *= texColor;\n#endif\n\n#ifdef USE_ALPHATEST\n if (baseColor.a < alphaTest) discard;\n#else\n if (baseColor.a < 0.01) discard;\n#endif\n\n vec3 N = normalize(vNormal);\n vec3 L = normalize(-lightDirection);\n float NdotL = max(dot(N, L), 0.0);\n vec3 litColor = ambientColor + lightColor * NdotL;\n\n gl_FragColor = vec4(baseColor.rgb * litColor, baseColor.a);\n\n#ifdef SOFT_PARTICLES\n vec2 p2 = projPosition.xy / projPosition.w;\n p2 = 0.5 * p2 + 0.5;\n float readDepth = texture2D(depthTexture, p2.xy).r;\n float zNear = projParams.x;\n float zFar = projParams.y;\n float viewDepth = (zFar * zNear) / (zFar - readDepth * (zFar - zNear));\n float fade = clamp(softParams.y * ((viewDepth - softParams.x) - linearDepth), 0.0, 1.0);\n gl_FragColor *= fade;\n#endif\n}\n`;\n","export default /* glsl */ `\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute float rotation;\nattribute float uvTile;\nattribute vec4 velocity;\n\n// Uniforms\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\nuniform float speedFactor;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvoid main() {\n float lengthFactor = velocity.w;\n float avgSize = (size.x + size.y) * 0.5;\n vec4 mvPosition = view * world * vec4(offset, 1.0);\n vec3 viewVelocity = mat3(view * world) * velocity.xyz;\n float vlength = length(viewVelocity);\n // Stretch direction is the velocity direction; only a genuinely motionless particle has none.\n // Deriving it via normalize keeps the stretch aligned even when the speed contribution is ~0\n // (e.g. speedFactor 0), instead of collapsing the whole burst onto a fixed screen axis.\n vec3 vdir = vlength > 0.000001 ? viewVelocity / vlength : vec3(0.0, 0.0, 1.0);\n mvPosition.xyz += position.y * normalize(cross(mvPosition.xyz, vdir)) * avgSize;\n // Equivalent to viewVelocity * (1.0 + lengthFactor / vlength) for moving particles, but the\n // size-based term (vdir * lengthFactor) survives when the velocity contribution vanishes.\n mvPosition.xyz -= (position.x + 0.5) * (viewVelocity + vdir * lengthFactor) * avgSize;\n gl_Position = projection * mvPosition;\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -mvPosition.z;\n#endif\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n`;\n","export default /* glsl */ `\nattribute vec3 position;\nattribute vec3 previous;\nattribute vec3 next;\nattribute float side;\nattribute float width;\nattribute vec2 uv;\nattribute vec4 color;\n\nuniform mat4 view;\nuniform mat4 projection;\nuniform float lineWidth;\nuniform vec2 resolution;\nuniform float sizeAttenuation;\n\nvarying vec2 vUV;\nvarying vec4 vColor;\n\nvec2 fix(vec4 i, float aspect) {\n vec2 res = i.xy / i.w;\n res.x *= aspect;\n return res;\n}\n\nvoid main() {\n float aspect = resolution.x / resolution.y;\n vec4 finalPosition = projection * view * vec4(position, 1.0);\n vec4 prevPos = projection * view * vec4(previous, 1.0);\n vec4 nextPos = projection * view * vec4(next, 1.0);\n\n vec2 currentP = fix(finalPosition, aspect);\n vec2 prevP = fix(prevPos, aspect);\n vec2 nextP = fix(nextPos, aspect);\n\n float w = lineWidth * width;\n vec2 dir;\n if (distance(nextP, currentP) < 0.0001) {\n dir = normalize(currentP - prevP);\n } else if (distance(prevP, currentP) < 0.0001) {\n dir = normalize(nextP - currentP);\n } else {\n vec2 dir1 = normalize(currentP - prevP);\n vec2 dir2 = normalize(nextP - currentP);\n dir = normalize(dir1 + dir2);\n }\n vec4 normal = vec4(-dir.y, dir.x, 0.0, 1.0);\n normal.xy *= 0.5 * w;\n normal *= projection;\n if (sizeAttenuation == 0.0) {\n normal.xy *= finalPosition.w;\n normal.xy /= (vec4(resolution, 0.0, 1.0) * projection).xy;\n }\n finalPosition.xy += normal.xy * side;\n gl_Position = finalPosition;\n vUV = uv;\n vColor = color;\n}\n`;\n","export default /* glsl */ `\nvarying vec2 vUV;\nvarying vec4 vColor;\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n baseColor *= texColor;\n#endif\n\n if (baseColor.a < 0.01) discard;\n\n gl_FragColor = baseColor;\n}\n`;\n","import {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {VertexData} from '@babylonjs/core/Meshes/mesh.vertexData';\nimport {VertexBuffer} from '@babylonjs/core/Buffers/buffer';\nimport {Effect} from '@babylonjs/core/Materials/effect';\nimport {ShaderMaterial} from '@babylonjs/core/Materials/shaderMaterial';\nimport {Scene} from '@babylonjs/core/scene';\nimport {Constants} from '@babylonjs/core/Engines/constants';\nimport {Vector2 as BVector2, Vector3 as BVector3, Vector4 as BVector4} from '@babylonjs/core/Maths/math.vector';\nimport {\n Vector3,\n Vector4,\n Quaternion,\n Matrix3,\n SpriteParticle,\n StretchedBillBoardSettings,\n} from 'quarks.core';\nimport {VFXBatch, RenderMode} from './VFXBatch';\nimport {VFXBatchSettings} from './BatchedRenderer';\nimport particle_vert from './shaders/particle_vert.glsl';\nimport particle_frag from './shaders/particle_frag.glsl';\nimport particle_physics_frag from './shaders/particle_physics_frag.glsl';\nimport stretched_bb_particle_vert from './shaders/stretched_bb_particle_vert.glsl';\nimport local_particle_physics_vert from './shaders/local_particle_physics_vert.glsl';\n\nexport class SpriteBatch extends VFXBatch {\n private offsetBuffer!: Float32Array;\n private rotationBuffer!: Float32Array;\n private sizeBuffer!: Float32Array;\n private colorBuffer!: Float32Array;\n private uvTileBuffer!: Float32Array;\n private velocityBuffer?: Float32Array;\n\n private offsetVB!: VertexBuffer;\n private rotationVB!: VertexBuffer;\n private sizeVB!: VertexBuffer;\n private colorVB!: VertexBuffer;\n private uvTileVB!: VertexBuffer;\n private velocityVB?: VertexBuffer;\n\n constructor(settings: VFXBatchSettings, scene: Scene) {\n super(settings, scene);\n this.maxParticles = 1000;\n this.setupBuffers();\n this.rebuildMaterial();\n }\n\n setupBuffers(): void {\n this.mesh.dispose();\n this.mesh = new Mesh('spriteBatch', this.scene);\n this.mesh.alwaysSelectAsActiveMesh = true;\n\n const vertexData = new VertexData();\n vertexData.positions = this.settings.instancingGeometry;\n vertexData.indices = this.settings.instancingIndices;\n if (this.settings.instancingUVs) {\n vertexData.uvs = this.settings.instancingUVs;\n }\n if (this.settings.instancingNormals) {\n vertexData.normals = this.settings.instancingNormals;\n }\n vertexData.applyToMesh(this.mesh, false);\n\n this.buildExpandableBuffers();\n }\n\n private buildExpandableBuffers(): void {\n const engine = this.scene.getEngine();\n\n this.offsetBuffer = new Float32Array(this.maxParticles * 3);\n this.offsetVB = new VertexBuffer(engine, this.offsetBuffer, 'offset', true, false, 3, true);\n this.mesh.setVerticesBuffer(this.offsetVB);\n\n this.colorBuffer = new Float32Array(this.maxParticles * 4);\n this.colorVB = new VertexBuffer(engine, this.colorBuffer, 'color', true, false, 4, true);\n this.mesh.setVerticesBuffer(this.colorVB);\n\n this.sizeBuffer = new Float32Array(this.maxParticles * 3);\n this.sizeVB = new VertexBuffer(engine, this.sizeBuffer, 'size', true, false, 3, true);\n this.mesh.setVerticesBuffer(this.sizeVB);\n\n this.uvTileBuffer = new Float32Array(this.maxParticles);\n this.uvTileVB = new VertexBuffer(engine, this.uvTileBuffer, 'uvTile', true, false, 1, true);\n this.mesh.setVerticesBuffer(this.uvTileVB);\n\n if (this.settings.renderMode === RenderMode.Mesh) {\n this.rotationBuffer = new Float32Array(this.maxParticles * 4);\n this.rotationVB = new VertexBuffer(engine, this.rotationBuffer, 'rotation', true, false, 4, true);\n } else {\n this.rotationBuffer = new Float32Array(this.maxParticles);\n this.rotationVB = new VertexBuffer(engine, this.rotationBuffer, 'rotation', true, false, 1, true);\n }\n this.mesh.setVerticesBuffer(this.rotationVB);\n\n if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n this.velocityBuffer = new Float32Array(this.maxParticles * 4);\n this.velocityVB = new VertexBuffer(engine, this.velocityBuffer, 'velocity', true, false, 4, true);\n this.mesh.setVerticesBuffer(this.velocityVB);\n }\n\n this.mesh.forcedInstanceCount = 0;\n this.mesh.doNotSyncBoundingInfo = true;\n }\n\n expandBuffers(target: number): void {\n while (target >= this.maxParticles) {\n this.maxParticles *= 2;\n }\n this.buildExpandableBuffers();\n }\n\n rebuildMaterial(): void {\n const shaderName = `quarksParticle_${this.settings.renderMode}_${Date.now()}`;\n this.lastStretchedSpeedFactor = Number.NaN;\n let vertexShader: string;\n let fragmentShader: string;\n const defines: string[] = [];\n\n if (this.settings.renderMode === RenderMode.Mesh) {\n vertexShader = local_particle_physics_vert;\n fragmentShader = particle_physics_frag;\n } else if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n vertexShader = stretched_bb_particle_vert;\n fragmentShader = particle_frag;\n } else {\n vertexShader = particle_vert;\n fragmentShader = particle_frag;\n }\n\n if (this.settings.texture) {\n defines.push('USE_MAP');\n }\n if (this.settings.uTileCount > 1 || this.settings.vTileCount > 1) {\n defines.push('UV_TILE');\n }\n if (this.settings.blendTiles) {\n defines.push('TILE_BLEND');\n }\n if (this.settings.softParticles) {\n defines.push('SOFT_PARTICLES');\n }\n if (this.settings.materialAlphaTest > 0) {\n defines.push('USE_ALPHATEST');\n }\n if (this.settings.renderMode === RenderMode.VerticalBillBoard) {\n defines.push('VERTICAL');\n }\n if (this.settings.renderMode === RenderMode.HorizontalBillBoard) {\n defines.push('HORIZONTAL');\n }\n\n Effect.ShadersStore[shaderName + 'VertexShader'] = vertexShader;\n Effect.ShadersStore[shaderName + 'FragmentShader'] = fragmentShader;\n\n const attributes = ['position', 'uv', 'offset', 'color', 'size', 'rotation', 'uvTile'];\n if (this.settings.renderMode === RenderMode.Mesh) {\n attributes.push('normal');\n }\n if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n attributes.push('velocity');\n }\n\n const uniforms = ['world', 'view', 'projection', 'worldView', 'worldViewProjection'];\n const samplers: string[] = [];\n\n if (this.settings.uTileCount > 1 || this.settings.vTileCount > 1) {\n uniforms.push('tileCountX');\n uniforms.push('tileCountY');\n }\n if (this.settings.texture) {\n samplers.push('map');\n }\n if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n uniforms.push('speedFactor');\n }\n if (this.settings.softParticles) {\n uniforms.push('softParams');\n uniforms.push('projParams');\n samplers.push('depthTexture');\n }\n if (this.settings.materialAlphaTest > 0) {\n uniforms.push('alphaTest');\n }\n if (this.settings.renderMode === RenderMode.Mesh) {\n uniforms.push('lightDirection');\n uniforms.push('lightColor');\n uniforms.push('ambientColor');\n }\n\n const mat = new ShaderMaterial(shaderName, this.scene,\n {vertex: shaderName, fragment: shaderName},\n {\n attributes,\n uniforms,\n samplers,\n defines,\n needAlphaBlending: this.settings.materialTransparent,\n }\n );\n\n if (this.settings.texture) {\n mat.setTexture('map', this.settings.texture);\n }\n if (this.settings.uTileCount > 1 || this.settings.vTileCount > 1) {\n mat.setFloat('tileCountX', this.settings.uTileCount);\n mat.setFloat('tileCountY', this.settings.vTileCount);\n }\n if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n mat.setFloat('speedFactor', this.settings.softNearFade > 0 ? this.settings.softNearFade : 1.0);\n }\n if (this.settings.softParticles) {\n mat.setVector2('softParams', new BVector2(this.settings.softNearFade, 1.0 / Math.max(this.settings.softFarFade - this.settings.softNearFade, 0.0001)));\n mat.onBindObservable.add(() => {\n const camera = this.scene.activeCamera;\n if (camera) {\n mat.setVector4('projParams', new BVector4(camera.minZ, camera.maxZ, 0, 0));\n }\n });\n }\n if (this.settings.materialAlphaTest > 0) {\n mat.setFloat('alphaTest', this.settings.materialAlphaTest);\n }\n if (this.settings.renderMode === RenderMode.Mesh) {\n mat.setVector3('lightDirection', new BVector3(0.4, -1, 0.6));\n mat.setVector3('lightColor', new BVector3(1, 1, 1));\n mat.setVector3('ambientColor', new BVector3(0.35, 0.35, 0.35));\n }\n\n mat.backFaceCulling = false;\n\n if (this.settings.materialTransparent) {\n mat.alphaMode = this.settings.materialBlendMode;\n } else {\n mat.alphaMode = Constants.ALPHA_DISABLE;\n }\n mat.needDepthPrePass = this.settings.materialDepthWrite;\n mat.forceDepthWrite = this.settings.materialDepthWrite;\n mat.disableDepthWrite = !this.settings.materialDepthWrite;\n\n this.mesh.material = mat;\n }\n\n private vector_ = new Vector3();\n private vector2_ = new Vector3();\n private vector3_ = new Vector3();\n private quaternion_ = new Quaternion();\n private quaternion2_ = new Quaternion();\n private quaternion3_ = new Quaternion();\n private rotationMat_ = new Matrix3();\n private rotationMat2_ = new Matrix3();\n private lastStretchedSpeedFactor = Number.NaN;\n\n update(): void {\n let index = 0;\n let particleCount = 0;\n const renderMode = this.settings.renderMode;\n const isMeshRender = renderMode === RenderMode.Mesh;\n const isStretchedRender = renderMode === RenderMode.StretchedBillBoard;\n\n const visibleSystems = this.getVisibleSystems();\n for (const system of visibleSystems) {\n particleCount += system.particleNum;\n }\n if (particleCount > this.maxParticles) {\n this.expandBuffers(particleCount);\n }\n\n for (const system of visibleSystems) {\n const particles = system.particles;\n const particleNum = system.particleNum;\n const rotation = this.quaternion2_;\n const translation = this.vector2_;\n const scale = this.vector3_;\n const systemWorldSpace = system.worldSpace;\n system.emitter.matrixWorld.decompose(translation, rotation, scale);\n this.rotationMat_.setFromMatrix4(system.emitter.matrixWorld);\n const absScaleX = Math.abs(scale.x);\n const absScaleY = Math.abs(scale.y);\n const absScaleZ = Math.abs(scale.z);\n\n for (let j = 0; j < particleNum; j++, index++) {\n const particle = particles[j] as SpriteParticle;\n\n if (isMeshRender) {\n let q: Quaternion;\n if (systemWorldSpace) {\n q = particle.rotation as Quaternion;\n } else {\n let parentQ: Quaternion;\n if (particle.parentMatrix) {\n parentQ = this.quaternion3_.setFromRotationMatrix(particle.parentMatrix);\n } else {\n parentQ = rotation;\n }\n q = this.quaternion_;\n q.copy(parentQ).multiply(particle.rotation as Quaternion);\n }\n const ri = index * 4;\n this.rotationBuffer[ri] = q.x;\n this.rotationBuffer[ri + 1] = q.y;\n this.rotationBuffer[ri + 2] = q.z;\n this.rotationBuffer[ri + 3] = q.w;\n } else {\n this.rotationBuffer[index] = particle.rotation as number;\n }\n\n let vec: Vector3;\n if (systemWorldSpace) {\n vec = particle.position;\n } else {\n vec = this.vector_;\n if (particle.parentMatrix) {\n vec.copy(particle.position).applyMatrix4(particle.parentMatrix);\n } else {\n vec.copy(particle.position).applyMatrix4(system.emitter.matrixWorld);\n }\n }\n\n const oi = index * 3;\n this.offsetBuffer[oi] = vec.x;\n this.offsetBuffer[oi + 1] = vec.y;\n this.offsetBuffer[oi + 2] = vec.z;\n\n const ci = index * 4;\n this.colorBuffer[ci] = particle.color.x;\n this.colorBuffer[ci + 1] = particle.color.y;\n this.colorBuffer[ci + 2] = particle.color.z;\n this.colorBuffer[ci + 3] = particle.color.w;\n\n const si = index * 3;\n if (systemWorldSpace) {\n this.sizeBuffer[si] = particle.size.x;\n this.sizeBuffer[si + 1] = particle.size.y;\n this.sizeBuffer[si + 2] = particle.size.z;\n } else {\n if (particle.parentMatrix) {\n this.sizeBuffer[si] = particle.size.x;\n this.sizeBuffer[si + 1] = particle.size.y;\n this.sizeBuffer[si + 2] = particle.size.z;\n } else {\n this.sizeBuffer[si] = particle.size.x * absScaleX;\n this.sizeBuffer[si + 1] = particle.size.y * absScaleY;\n this.sizeBuffer[si + 2] = particle.size.z * absScaleZ;\n }\n }\n\n this.uvTileBuffer[index] = particle.uvTile;\n\n if (isStretchedRender && this.velocityBuffer) {\n let speedFactor = (system.rendererEmitterSettings as StretchedBillBoardSettings).speedFactor;\n if (speedFactor === 0) speedFactor = 0.001;\n const lengthFactor = (system.rendererEmitterSettings as StretchedBillBoardSettings).lengthFactor;\n let vel: Vector3;\n if (systemWorldSpace) {\n vel = particle.velocity;\n } else {\n vel = this.vector_;\n if (particle.parentMatrix) {\n this.rotationMat2_.setFromMatrix4(particle.parentMatrix);\n vel.copy(particle.velocity).applyMatrix3(this.rotationMat2_);\n } else {\n vel.copy(particle.velocity).applyMatrix3(this.rotationMat_);\n }\n }\n const vi = index * 4;\n this.velocityBuffer[vi] = vel.x * speedFactor;\n this.velocityBuffer[vi + 1] = vel.y * speedFactor;\n this.velocityBuffer[vi + 2] = vel.z * speedFactor;\n this.velocityBuffer[vi + 3] = lengthFactor;\n }\n }\n }\n\n if (isStretchedRender && this.mesh.material instanceof ShaderMaterial && visibleSystems.length > 0) {\n const speedFactor = (visibleSystems[0].rendererEmitterSettings as StretchedBillBoardSettings).speedFactor ?? 1.0;\n const clampedSpeedFactor = speedFactor === 0 ? 0.001 : speedFactor;\n if (clampedSpeedFactor !== this.lastStretchedSpeedFactor) {\n this.mesh.material.setFloat('speedFactor', clampedSpeedFactor);\n this.lastStretchedSpeedFactor = clampedSpeedFactor;\n }\n }\n\n this.mesh.forcedInstanceCount = index;\n this.mesh.setEnabled(index > 0);\n\n if (index > 0) {\n this.offsetVB.update(this.offsetBuffer);\n this.sizeVB.update(this.sizeBuffer);\n this.colorVB.update(this.colorBuffer);\n this.uvTileVB.update(this.uvTileBuffer);\n this.rotationVB.update(this.rotationBuffer);\n if (isStretchedRender && this.velocityVB && this.velocityBuffer) {\n this.velocityVB.update(this.velocityBuffer);\n }\n }\n }\n\n dispose(): void {\n if (this.mesh.material) {\n this.mesh.material.dispose();\n }\n super.dispose();\n }\n}\n","import {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {VertexBuffer} from '@babylonjs/core/Buffers/buffer';\nimport {Effect} from '@babylonjs/core/Materials/effect';\nimport {ShaderMaterial} from '@babylonjs/core/Materials/shaderMaterial';\nimport {Scene} from '@babylonjs/core/scene';\nimport {BoundingInfo} from '@babylonjs/core/Culling/boundingInfo';\nimport {Vector3 as BVector3} from '@babylonjs/core/Maths/math.vector';\nimport {Vector2 as BVector2} from '@babylonjs/core/Maths/math.vector';\nimport {Constants} from '@babylonjs/core/Engines/constants';\nimport {Matrix4, Quaternion, RecordState, TrailParticle, Vector3} from 'quarks.core';\nimport {VFXBatch, RenderMode} from './VFXBatch';\nimport {VFXBatchSettings} from './BatchedRenderer';\nimport trail_vert from './shaders/trail_vert.glsl';\nimport trail_frag from './shaders/trail_frag.glsl';\n\nexport class TrailBatch extends VFXBatch {\n private positionBuffer!: Float32Array;\n private previousBuffer!: Float32Array;\n private nextBuffer!: Float32Array;\n private uvBuffer!: Float32Array;\n private sideBuffer!: Float32Array;\n private widthBuffer!: Float32Array;\n private colorBuffer!: Float32Array;\n private indexBuffer!: Uint32Array;\n private previousVB!: VertexBuffer;\n private nextVB!: VertexBuffer;\n private sideVB!: VertexBuffer;\n private widthVB!: VertexBuffer;\n\n private getTrailHistoryCount(particle: TrailParticle): number {\n const trailAny = particle as any;\n const fastHistoryCount = trailAny._trailHistoryCount;\n if (typeof fastHistoryCount === 'number') {\n return fastHistoryCount;\n }\n return particle.previous.length;\n }\n\n constructor(settings: VFXBatchSettings, scene: Scene) {\n super(settings, scene);\n this.maxParticles = 10000;\n this.setupBuffers();\n this.rebuildMaterial();\n this.mesh.setEnabled(false);\n }\n\n setupBuffers(): void {\n this.mesh.dispose();\n this.mesh = new Mesh('trailBatch', this.scene);\n this.mesh.alwaysSelectAsActiveMesh = true;\n this.buildGeometryBuffers();\n }\n\n private buildGeometryBuffers(): void {\n this.positionBuffer = new Float32Array(this.maxParticles * 6);\n this.previousBuffer = new Float32Array(this.maxParticles * 6);\n this.nextBuffer = new Float32Array(this.maxParticles * 6);\n this.uvBuffer = new Float32Array(this.maxParticles * 4);\n this.sideBuffer = new Float32Array(this.maxParticles * 2);\n this.widthBuffer = new Float32Array(this.maxParticles * 2);\n this.colorBuffer = new Float32Array(this.maxParticles * 8);\n this.indexBuffer = new Uint32Array(this.maxParticles * 6);\n\n // Initialize with full-capacity buffers (updatable) and a dummy triangle\n this.positionBuffer[0] = 0; this.positionBuffer[1] = 0; this.positionBuffer[2] = 0;\n this.positionBuffer[3] = 1; this.positionBuffer[4] = 0; this.positionBuffer[5] = 0;\n this.positionBuffer[6] = 0; this.positionBuffer[7] = 1; this.positionBuffer[8] = 0;\n this.positionBuffer[9] = 1; this.positionBuffer[10] = 1; this.positionBuffer[11] = 0;\n this.indexBuffer[0] = 0; this.indexBuffer[1] = 1; this.indexBuffer[2] = 2;\n this.indexBuffer[3] = 1; this.indexBuffer[4] = 3; this.indexBuffer[5] = 2;\n\n // Set standard vertex data with full buffer capacity (updatable)\n this.mesh.setVerticesData(VertexBuffer.PositionKind, this.positionBuffer, true);\n this.mesh.setVerticesData(VertexBuffer.UVKind, this.uvBuffer, true);\n this.mesh.setVerticesData(VertexBuffer.ColorKind, this.colorBuffer, true, 4);\n this.mesh.setIndices(this.indexBuffer.subarray(0, 6), null, true);\n const engine = this.scene.getEngine();\n this.previousVB = new VertexBuffer(engine, this.previousBuffer, 'previous', true, false, 3, false);\n this.nextVB = new VertexBuffer(engine, this.nextBuffer, 'next', true, false, 3, false);\n this.sideVB = new VertexBuffer(engine, this.sideBuffer, 'side', true, false, 1, false);\n this.widthVB = new VertexBuffer(engine, this.widthBuffer, 'width', true, false, 1, false);\n this.mesh.setVerticesBuffer(this.previousVB);\n this.mesh.setVerticesBuffer(this.nextVB);\n this.mesh.setVerticesBuffer(this.sideVB);\n this.mesh.setVerticesBuffer(this.widthVB);\n\n // Disable bounding info recomputation\n this.mesh.doNotSyncBoundingInfo = true;\n const min = new BVector3(-10000, -10000, -10000);\n const max = new BVector3(10000, 10000, 10000);\n this.mesh.setBoundingInfo(new BoundingInfo(min, max));\n if (this.mesh.subMeshes) {\n for (const sub of this.mesh.subMeshes) {\n (sub as any)._boundingInfo = this.mesh.getBoundingInfo();\n }\n }\n }\n\n expandBuffers(target: number): void {\n while (target >= this.maxParticles) {\n this.maxParticles *= 2;\n }\n this.buildGeometryBuffers();\n }\n\n rebuildMaterial(): void {\n const shaderName = `quarksTrail_${Date.now()}`;\n const defines: string[] = [];\n\n if (this.settings.texture) {\n defines.push('USE_MAP');\n }\n\n Effect.ShadersStore[shaderName + 'VertexShader'] = trail_vert;\n Effect.ShadersStore[shaderName + 'FragmentShader'] = trail_frag;\n\n const attributes = ['position', 'previous', 'next', 'side', 'width', 'uv', 'color'];\n const uniforms = ['world', 'view', 'projection', 'worldViewProjection', 'lineWidth', 'resolution', 'sizeAttenuation'];\n const samplers: string[] = [];\n\n if (this.settings.texture) {\n samplers.push('map');\n }\n\n const mat = new ShaderMaterial(shaderName, this.scene,\n {vertex: shaderName, fragment: shaderName},\n {\n attributes,\n uniforms,\n samplers,\n defines,\n needAlphaBlending: this.settings.materialTransparent,\n }\n );\n\n if (this.settings.texture) {\n mat.setTexture('map', this.settings.texture);\n }\n const engine = this.scene.getEngine();\n mat.setFloat('lineWidth', 1);\n mat.setVector2('resolution', new BVector2(engine.getRenderWidth(), engine.getRenderHeight()));\n mat.setFloat('sizeAttenuation', 1);\n mat.onBindObservable.add(() => {\n const renderEngine = this.scene.getEngine();\n mat.setVector2('resolution', new BVector2(renderEngine.getRenderWidth(), renderEngine.getRenderHeight()));\n });\n\n mat.backFaceCulling = false;\n\n if (this.settings.materialTransparent) {\n mat.alphaMode = this.settings.materialBlendMode;\n } else {\n mat.alphaMode = Constants.ALPHA_DISABLE;\n }\n mat.needDepthPrePass = this.settings.materialDepthWrite;\n mat.forceDepthWrite = this.settings.materialDepthWrite;\n mat.disableDepthWrite = !this.settings.materialDepthWrite;\n\n this.mesh.material = mat;\n }\n\n private vector_ = new Vector3();\n private vector2_ = new Vector3();\n private vector3_ = new Vector3();\n private quaternion_ = new Quaternion();\n\n update(): void {\n let index = 0;\n let triangles = 0;\n\n let particleCount = 0;\n const visibleSystems = this.getVisibleSystems();\n for (const system of visibleSystems) {\n for (let j = 0; j < system.particleNum; j++) {\n particleCount += this.getTrailHistoryCount(system.particles[j] as TrailParticle) * 2;\n }\n }\n if (particleCount > this.maxParticles) {\n this.expandBuffers(particleCount);\n }\n\n for (const system of visibleSystems) {\n // Ensure world matrix is up to date\n if ((system.emitter as any).computeWorldMatrix) {\n (system.emitter as any).computeWorldMatrix(true);\n }\n const rotation = this.quaternion_;\n const translation = this.vector2_;\n const scale = this.vector3_;\n system.emitter.matrixWorld.decompose(translation, rotation, scale);\n\n const particles = system.particles;\n const particleNum = system.particleNum;\n const uTileCount = this.settings.uTileCount;\n const vTileCount = this.settings.vTileCount;\n const tileWidth = 1 / uTileCount;\n const tileHeight = 1 / vTileCount;\n const systemWorldSpace = system.worldSpace;\n const objectScale = (Math.abs(scale.x) + Math.abs(scale.y) + Math.abs(scale.z)) / 3;\n\n for (let j = 0; j < particleNum; j++) {\n const particle = particles[j] as TrailParticle;\n const particleAny = particle as any;\n const fastHistoryCount = particleAny._trailHistoryCount as number | undefined;\n const fastHistoryCapacity = particleAny._trailHistoryCapacity as number | undefined;\n const fastHistoryHead = particleAny._trailHistoryHead as number | undefined;\n const fastHistoryPositions = particleAny._trailHistoryPositions as Float32Array | undefined;\n const fastHistorySizes = particleAny._trailHistorySizes as Float32Array | undefined;\n const fastHistoryColors = particleAny._trailHistoryColors as Float32Array | undefined;\n const hasFastHistory =\n typeof fastHistoryCount === 'number' &&\n fastHistoryCount > 0 &&\n typeof fastHistoryCapacity === 'number' &&\n typeof fastHistoryHead === 'number' &&\n fastHistoryPositions instanceof Float32Array &&\n fastHistorySizes instanceof Float32Array &&\n fastHistoryColors instanceof Float32Array;\n const historyCapacity = hasFastHistory ? (fastHistoryCapacity as number) : 0;\n const historyHead = hasFastHistory ? (fastHistoryHead as number) : 0;\n const historyPositions = fastHistoryPositions as Float32Array;\n const historySizes = fastHistorySizes as Float32Array;\n const historyColors = fastHistoryColors as Float32Array;\n const particleHistory = particle.previous;\n const particleHistoryLength = hasFastHistory ? fastHistoryCount : particleHistory.length;\n if (particleHistoryLength === 0) {\n continue;\n }\n const col = particle.uvTile % vTileCount;\n const row = Math.floor(particle.uvTile / vTileCount + 0.001);\n const particleMatrix = particle.parentMatrix as unknown as Matrix4 | undefined;\n const matrixToUse = particleMatrix ?? system.emitter.matrixWorld;\n\n let previousNode = particleHistory.head;\n let currentNode = previousNode;\n let nextNode = currentNode?.next ?? currentNode;\n const oldestFastHistoryIndex = hasFastHistory\n ? (historyHead - particleHistoryLength + historyCapacity) % historyCapacity\n : 0;\n\n for (let i = 0; i < particleHistoryLength; i++, index += 2) {\n let currentX: number;\n let currentY: number;\n let currentZ: number;\n let currentSize: number;\n let currentColorX: number;\n let currentColorY: number;\n let currentColorZ: number;\n let currentColorW: number;\n let previousX: number;\n let previousY: number;\n let previousZ: number;\n let nextX: number;\n let nextY: number;\n let nextZ: number;\n\n if (hasFastHistory) {\n const currentHistoryIndex = (oldestFastHistoryIndex + i) % historyCapacity;\n const previousHistoryIndex = i === 0 ? currentHistoryIndex : (oldestFastHistoryIndex + i - 1) % historyCapacity;\n const nextHistoryIndex =\n i + 1 < particleHistoryLength\n ? (oldestFastHistoryIndex + i + 1) % historyCapacity\n : currentHistoryIndex;\n\n const currentPosIndex = currentHistoryIndex * 3;\n const previousPosIndex = previousHistoryIndex * 3;\n const nextPosIndex = nextHistoryIndex * 3;\n\n currentX = historyPositions[currentPosIndex];\n currentY = historyPositions[currentPosIndex + 1];\n currentZ = historyPositions[currentPosIndex + 2];\n previousX = historyPositions[previousPosIndex];\n previousY = historyPositions[previousPosIndex + 1];\n previousZ = historyPositions[previousPosIndex + 2];\n nextX = historyPositions[nextPosIndex];\n nextY = historyPositions[nextPosIndex + 1];\n nextZ = historyPositions[nextPosIndex + 2];\n\n currentSize = historySizes[currentHistoryIndex];\n const currentColorIndex = currentHistoryIndex * 4;\n currentColorX = historyColors[currentColorIndex];\n currentColorY = historyColors[currentColorIndex + 1];\n currentColorZ = historyColors[currentColorIndex + 2];\n currentColorW = historyColors[currentColorIndex + 3];\n } else {\n const previous = previousNode!.data as RecordState;\n const current = currentNode!.data as RecordState;\n const next = nextNode!.data as RecordState;\n currentX = current.position.x;\n currentY = current.position.y;\n currentZ = current.position.z;\n previousX = previous.position.x;\n previousY = previous.position.y;\n previousZ = previous.position.z;\n nextX = next.position.x;\n nextY = next.position.y;\n nextZ = next.position.z;\n currentSize = current.size;\n currentColorX = current.color.x;\n currentColorY = current.color.y;\n currentColorZ = current.color.z;\n currentColorW = current.color.w;\n }\n\n if (!systemWorldSpace) {\n this.vector_.set(currentX, currentY, currentZ).applyMatrix4(matrixToUse);\n currentX = this.vector_.x;\n currentY = this.vector_.y;\n currentZ = this.vector_.z;\n this.vector_.set(previousX, previousY, previousZ).applyMatrix4(matrixToUse);\n previousX = this.vector_.x;\n previousY = this.vector_.y;\n previousZ = this.vector_.z;\n this.vector_.set(nextX, nextY, nextZ).applyMatrix4(matrixToUse);\n nextX = this.vector_.x;\n nextY = this.vector_.y;\n nextZ = this.vector_.z;\n }\n\n const pi = index * 3;\n this.positionBuffer[pi] = currentX;\n this.positionBuffer[pi + 1] = currentY;\n this.positionBuffer[pi + 2] = currentZ;\n this.positionBuffer[pi + 3] = currentX;\n this.positionBuffer[pi + 4] = currentY;\n this.positionBuffer[pi + 5] = currentZ;\n\n this.previousBuffer[pi] = previousX;\n this.previousBuffer[pi + 1] = previousY;\n this.previousBuffer[pi + 2] = previousZ;\n this.previousBuffer[pi + 3] = previousX;\n this.previousBuffer[pi + 4] = previousY;\n this.previousBuffer[pi + 5] = previousZ;\n\n this.nextBuffer[pi] = nextX;\n this.nextBuffer[pi + 1] = nextY;\n this.nextBuffer[pi + 2] = nextZ;\n this.nextBuffer[pi + 3] = nextX;\n this.nextBuffer[pi + 4] = nextY;\n this.nextBuffer[pi + 5] = nextZ;\n\n this.sideBuffer[index] = 1;\n this.sideBuffer[index + 1] = -1;\n\n if (systemWorldSpace || particle.parentMatrix) {\n this.widthBuffer[index] = currentSize;\n this.widthBuffer[index + 1] = currentSize;\n } else {\n this.widthBuffer[index] = currentSize * objectScale;\n this.widthBuffer[index + 1] = currentSize * objectScale;\n }\n\n const ui = index * 2;\n this.uvBuffer[ui] = (i / particleHistoryLength + col) * tileWidth;\n this.uvBuffer[ui + 1] = (vTileCount - row - 1) * tileHeight;\n this.uvBuffer[ui + 2] = (i / particleHistoryLength + col) * tileWidth;\n this.uvBuffer[ui + 3] = (vTileCount - row) * tileHeight;\n\n const cci = index * 4;\n this.colorBuffer[cci] = currentColorX;\n this.colorBuffer[cci + 1] = currentColorY;\n this.colorBuffer[cci + 2] = currentColorZ;\n this.colorBuffer[cci + 3] = currentColorW;\n this.colorBuffer[cci + 4] = currentColorX;\n this.colorBuffer[cci + 5] = currentColorY;\n this.colorBuffer[cci + 6] = currentColorZ;\n this.colorBuffer[cci + 7] = currentColorW;\n\n if (i + 1 < particleHistoryLength) {\n this.indexBuffer[triangles * 3] = index;\n this.indexBuffer[triangles * 3 + 1] = index + 1;\n this.indexBuffer[triangles * 3 + 2] = index + 2;\n triangles++;\n this.indexBuffer[triangles * 3] = index + 2;\n this.indexBuffer[triangles * 3 + 1] = index + 1;\n this.indexBuffer[triangles * 3 + 2] = index + 3;\n triangles++;\n }\n\n if (!hasFastHistory) {\n previousNode = currentNode;\n currentNode = nextNode;\n nextNode = nextNode?.next ?? nextNode;\n }\n }\n }\n }\n\n if (index > 0 && triangles > 0) {\n this.mesh.updateVerticesData(VertexBuffer.PositionKind, this.positionBuffer);\n this.mesh.updateVerticesData(VertexBuffer.UVKind, this.uvBuffer);\n this.mesh.updateIndices(this.indexBuffer.subarray(0, triangles * 3));\n this.previousVB.update(this.previousBuffer);\n this.nextVB.update(this.nextBuffer);\n this.sideVB.update(this.sideBuffer);\n this.widthVB.update(this.widthBuffer);\n\n const colorVB = this.mesh.getVertexBuffer(VertexBuffer.ColorKind);\n if (colorVB) colorVB.update(this.colorBuffer);\n\n this.mesh.setEnabled(true);\n if (this.mesh.subMeshes && this.mesh.subMeshes.length > 0) {\n const meshBoundingInfo = this.mesh.getBoundingInfo();\n for (const subMesh of this.mesh.subMeshes) {\n (subMesh as any)._boundingInfo = meshBoundingInfo;\n }\n this.mesh.subMeshes[0].indexCount = triangles * 3;\n this.mesh.subMeshes[0].verticesCount = index;\n }\n } else {\n this.mesh.setEnabled(false);\n }\n }\n\n dispose(): void {\n if (this.mesh.material) {\n this.mesh.material.dispose();\n }\n super.dispose();\n }\n}\n","import {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {Scene} from '@babylonjs/core/scene';\nimport {Texture} from '@babylonjs/core/Materials/Textures/texture';\nimport {BaseTexture} from '@babylonjs/core/Materials/Textures/baseTexture';\nimport {IParticleSystem} from 'quarks.core';\nimport {VFXBatch, RenderMode, StoredBatchSettings} from './VFXBatch';\nimport {SpriteBatch} from './SpriteBatch';\nimport {TrailBatch} from './TrailBatch';\nimport {ParticleSystem} from './ParticleSystem';\n\nexport interface VFXBatchSettings {\n instancingGeometry: Float32Array;\n instancingIndices: Uint32Array | Uint16Array;\n instancingUVs?: Float32Array;\n instancingNormals?: Float32Array;\n renderMode: RenderMode;\n renderOrder: number;\n uTileCount: number;\n vTileCount: number;\n blendTiles: boolean;\n softParticles: boolean;\n softNearFade: number;\n softFarFade: number;\n materialBlendMode: number;\n materialTransparent: boolean;\n materialDepthTest: boolean;\n materialDepthWrite: boolean;\n materialAlphaTest: number;\n texture: Texture | null;\n layerMask: number;\n}\n\nexport interface AdaptivePerformanceOptions {\n targetFrameMs: number;\n minQuality: number;\n maxQuality: number;\n decreaseStep: number;\n increaseStep: number;\n}\n\nexport interface AdaptivePerformanceState extends AdaptivePerformanceOptions {\n enabled: boolean;\n currentQuality: number;\n lastFrameCpuMs: number;\n}\n\nexport class BatchedRenderer extends TransformNode {\n batches: Array<VFXBatch> = [];\n systemToBatchIndex: Map<IParticleSystem, number> = new Map<IParticleSystem, number>();\n depthTexture: BaseTexture | null = null;\n private adaptivePerformanceState: AdaptivePerformanceState = {\n enabled: false,\n targetFrameMs: 16.7,\n minQuality: 0.35,\n maxQuality: 1,\n decreaseStep: 0.08,\n increaseStep: 0.02,\n currentQuality: 1,\n lastFrameCpuMs: 0,\n };\n private lastAppliedQuality = Number.NaN;\n\n constructor(name: string, scene: Scene) {\n super(name, scene);\n }\n\n private static clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n }\n\n private static equals(a: StoredBatchSettings, b: VFXBatchSettings): boolean {\n return (\n a.materialBlendMode === b.materialBlendMode &&\n a.materialTransparent === b.materialTransparent &&\n a.materialDepthTest === b.materialDepthTest &&\n a.materialDepthWrite === b.materialDepthWrite &&\n a.materialAlphaTest === b.materialAlphaTest &&\n a.texture === b.texture &&\n a.renderMode === b.renderMode &&\n a.blendTiles === b.blendTiles &&\n a.softParticles === b.softParticles &&\n a.softFarFade === b.softFarFade &&\n a.softNearFade === b.softNearFade &&\n a.uTileCount === b.uTileCount &&\n a.vTileCount === b.vTileCount &&\n a.instancingGeometry === b.instancingGeometry &&\n a.renderOrder === b.renderOrder &&\n a.layerMask === b.layerMask\n );\n }\n\n addSystem(system: IParticleSystem) {\n const particleSystem = system as ParticleSystem;\n particleSystem._renderer = this;\n if (this.adaptivePerformanceState.enabled) {\n particleSystem.setQualityFactor(this.adaptivePerformanceState.currentQuality);\n }\n const settings = particleSystem.getRendererSettings();\n for (let i = 0; i < this.batches.length; i++) {\n if (BatchedRenderer.equals(this.batches[i].settings, settings)) {\n this.batches[i].addSystem(system);\n this.systemToBatchIndex.set(system, i);\n return;\n }\n }\n let batch: VFXBatch;\n const scene = this.getScene();\n switch (settings.renderMode) {\n case RenderMode.Trail:\n batch = new TrailBatch(settings, scene);\n break;\n case RenderMode.Mesh:\n case RenderMode.BillBoard:\n case RenderMode.VerticalBillBoard:\n case RenderMode.HorizontalBillBoard:\n case RenderMode.StretchedBillBoard:\n batch = new SpriteBatch(settings, scene);\n break;\n default:\n throw new Error(`Unsupported render mode: ${settings.renderMode}`);\n }\n batch.mesh.parent = this;\n if (this.depthTexture) {\n batch.applyDepthTexture(this.depthTexture);\n }\n batch.addSystem(system);\n this.batches.push(batch);\n this.systemToBatchIndex.set(system, this.batches.length - 1);\n }\n\n deleteSystem(system: IParticleSystem) {\n const batchIndex = this.systemToBatchIndex.get(system);\n if (batchIndex !== undefined) {\n this.batches[batchIndex].removeSystem(system);\n this.systemToBatchIndex.delete(system);\n }\n }\n\n updateSystem(system: IParticleSystem) {\n this.deleteSystem(system);\n this.addSystem(system);\n }\n\n setDepthTexture(depthTexture: BaseTexture | null) {\n this.depthTexture = depthTexture;\n for (const batch of this.batches) {\n batch.applyDepthTexture(depthTexture);\n }\n }\n\n configureAdaptivePerformance(options: Partial<AdaptivePerformanceOptions> = {}) {\n const state = this.adaptivePerformanceState;\n const minQuality = BatchedRenderer.clamp(options.minQuality ?? state.minQuality, 0.05, 1);\n const maxQuality = BatchedRenderer.clamp(options.maxQuality ?? state.maxQuality, minQuality, 1);\n state.targetFrameMs = Math.max(options.targetFrameMs ?? state.targetFrameMs, 0.1);\n state.minQuality = minQuality;\n state.maxQuality = maxQuality;\n state.decreaseStep = Math.max(options.decreaseStep ?? state.decreaseStep, 0.001);\n state.increaseStep = Math.max(options.increaseStep ?? state.increaseStep, 0.001);\n state.currentQuality = BatchedRenderer.clamp(state.currentQuality, state.minQuality, state.maxQuality);\n state.enabled = true;\n this.lastAppliedQuality = Number.NaN;\n }\n\n disableAdaptivePerformance(resetQuality = true) {\n this.adaptivePerformanceState.enabled = false;\n if (resetQuality) {\n this.adaptivePerformanceState.currentQuality = this.adaptivePerformanceState.maxQuality;\n this.applyAdaptiveQuality();\n }\n }\n\n getAdaptivePerformanceState(): AdaptivePerformanceState {\n return {...this.adaptivePerformanceState};\n }\n\n private applyAdaptiveQuality() {\n const quality = this.adaptivePerformanceState.currentQuality;\n if (quality === this.lastAppliedQuality) {\n return;\n }\n for (const ps of this.systemToBatchIndex.keys()) {\n (ps as ParticleSystem).setQualityFactor(quality);\n }\n this.lastAppliedQuality = quality;\n }\n\n update(delta: number) {\n const adaptiveState = this.adaptivePerformanceState;\n const frameStart = adaptiveState.enabled ? performance.now() : 0;\n if (adaptiveState.enabled) {\n this.applyAdaptiveQuality();\n }\n for (const ps of this.systemToBatchIndex.keys()) {\n (ps as ParticleSystem).update(delta);\n }\n for (let i = 0; i < this.batches.length; i++) {\n this.batches[i].update();\n }\n if (!adaptiveState.enabled) {\n return;\n }\n\n adaptiveState.lastFrameCpuMs = performance.now() - frameStart;\n if (adaptiveState.lastFrameCpuMs > adaptiveState.targetFrameMs) {\n adaptiveState.currentQuality = BatchedRenderer.clamp(\n adaptiveState.currentQuality - adaptiveState.decreaseStep,\n adaptiveState.minQuality,\n adaptiveState.maxQuality\n );\n } else {\n adaptiveState.currentQuality = BatchedRenderer.clamp(\n adaptiveState.currentQuality + adaptiveState.increaseStep,\n adaptiveState.minQuality,\n adaptiveState.maxQuality\n );\n }\n }\n\n dispose(): void {\n for (const batch of this.batches) {\n batch.dispose();\n }\n this.batches = [];\n this.systemToBatchIndex.clear();\n super.dispose();\n }\n}\n","import {BatchedRenderer} from './BatchedRenderer';\n\nexport const BatchedParticleRenderer = BatchedRenderer;\n","import {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {Scene} from '@babylonjs/core/scene';\nimport {Matrix4, IParticleSystem, SerializationOptions} from 'quarks.core';\n\nexport class ParticleEmitter extends TransformNode {\n system: IParticleSystem;\n private _matrixWorld: Matrix4 = new Matrix4();\n\n get matrixWorld(): Matrix4 {\n const m = this.getWorldMatrix();\n const e = this._matrixWorld.elements;\n e[0] = m.m[0]; e[1] = m.m[1]; e[2] = m.m[2]; e[3] = m.m[3];\n e[4] = m.m[4]; e[5] = m.m[5]; e[6] = m.m[6]; e[7] = m.m[7];\n e[8] = m.m[8]; e[9] = m.m[9]; e[10] = m.m[10]; e[11] = m.m[11];\n e[12] = m.m[12]; e[13] = m.m[13]; e[14] = m.m[14]; e[15] = m.m[15];\n return this._matrixWorld;\n }\n\n get visible(): boolean {\n return this.isEnabled();\n }\n\n set visible(value: boolean) {\n this.setEnabled(value);\n }\n\n get uuid(): string {\n return this.uniqueId.toString();\n }\n\n constructor(system: IParticleSystem, scene?: Scene) {\n super('particleEmitter', scene || undefined);\n this.system = system;\n }\n\n dispose(): void {\n super.dispose();\n }\n\n extractFromCache(cache: any): any[] {\n const values: any[] = [];\n for (const key in cache) {\n const data = cache[key];\n if (data && typeof data === 'object') {\n delete data.metadata;\n }\n values.push(data);\n }\n return values;\n }\n\n clone(name?: string): ParticleEmitter {\n const clonedSystem = this.system.clone();\n const clonedEmitter = clonedSystem.emitter as ParticleEmitter;\n clonedEmitter.name = name ?? this.name;\n clonedEmitter.position.copyFrom(this.position);\n clonedEmitter.rotation.copyFrom(this.rotation);\n clonedEmitter.scaling.copyFrom(this.scaling);\n if (this.rotationQuaternion) {\n clonedEmitter.rotationQuaternion = this.rotationQuaternion.clone();\n }\n clonedEmitter.setEnabled(this.isEnabled());\n return clonedEmitter;\n }\n\n toJSON(meta?: any, options: SerializationOptions = {}): any {\n return {\n uuid: (this as any)._quarksUUID ?? this.uniqueId.toString(),\n type: 'ParticleEmitter',\n name: this.name,\n position: [this.position.x, this.position.y, this.position.z],\n rotation: [this.rotation.x, this.rotation.y, this.rotation.z],\n quaternion: this.rotationQuaternion\n ? [\n this.rotationQuaternion.x,\n this.rotationQuaternion.y,\n this.rotationQuaternion.z,\n this.rotationQuaternion.w,\n ]\n : undefined,\n scale: [this.scaling.x, this.scaling.y, this.scaling.z],\n visible: this.isEnabled(),\n ps: this.system.toJSON(meta, options),\n };\n }\n}\n","/** Sequential 0..N-1 indices for non-indexed triangle-list BufferGeometry (Three.js drawArrays). */\nexport function ensureTriangleIndices(\n positions: Float32Array,\n indices?: Uint32Array | Uint16Array\n): Uint32Array | Uint16Array {\n if (indices && indices.length > 0) {\n return indices;\n }\n const vertexCount = positions.length / 3;\n const out = new Uint32Array(vertexCount);\n for (let i = 0; i < vertexCount; i++) {\n out[i] = i;\n }\n return out;\n}\n","import {Scene} from '@babylonjs/core/scene';\nimport {Texture} from '@babylonjs/core/Materials/Textures/texture';\nimport {Constants} from '@babylonjs/core/Engines/constants';\nimport {\n AxisAngleGenerator,\n ColorGenerator,\n ColorGeneratorFromJSON,\n ConstantColor,\n ConstantValue,\n FunctionColorGenerator,\n FunctionJSON,\n FunctionValueGenerator,\n GeneratorFromJSON,\n ValueGenerator,\n ValueGeneratorFromJSON,\n Behavior,\n BehaviorFromJSON,\n Particle,\n SpriteParticle,\n TrailParticle,\n EmitterFromJSON,\n EmitterShape,\n SphereEmitter,\n RendererEmitterSettings,\n RotationGenerator,\n IParticleSystem,\n EmissionState,\n GeneratorMemory,\n TrailSettings,\n StretchedBillBoardSettings,\n SerializationOptions,\n Vector3,\n Vector4,\n Matrix3,\n Matrix4,\n Quaternion,\n Vector3Generator,\n ParticleSystemEvent,\n ParticleSystemEventType,\n} from 'quarks.core';\nimport {ParticleEmitter} from './ParticleEmitter';\nimport {RenderMode} from './VFXBatch';\nimport {BatchedRenderer, VFXBatchSettings} from './BatchedRenderer';\nimport {ensureTriangleIndices} from './geometryUtil';\n\nexport interface BurstParameters {\n time: number;\n count: ValueGenerator | FunctionValueGenerator;\n cycle: number;\n interval: number;\n probability: number;\n}\n\nconst UP = new Vector3(0, 0, 1);\nconst tempQ = new Quaternion();\nconst tempV = new Vector3();\nconst tempV2 = new Vector3();\nconst PREWARM_FPS = 60;\n\nconst DEFAULT_POSITIONS = new Float32Array([\n -0.5, -0.5, 0,\n 0.5, -0.5, 0,\n 0.5, 0.5, 0,\n -0.5, 0.5, 0,\n]);\nconst DEFAULT_UVS = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);\nconst DEFAULT_INDICES = new Uint32Array([0, 1, 2, 0, 2, 3]);\n\nexport interface ParticleSystemParameters {\n autoDestroy?: boolean;\n looping?: boolean;\n prewarm?: boolean;\n duration?: number;\n startDelay?: ValueGenerator | FunctionValueGenerator;\n shape?: EmitterShape;\n startLife?: ValueGenerator | FunctionValueGenerator;\n startSpeed?: ValueGenerator | FunctionValueGenerator;\n startRotation?: ValueGenerator | FunctionValueGenerator | RotationGenerator;\n startSize?: ValueGenerator | FunctionValueGenerator | Vector3Generator;\n startLength?: ValueGenerator | FunctionValueGenerator;\n startColor?: ColorGenerator | FunctionColorGenerator;\n emissionOverTime?: ValueGenerator | FunctionValueGenerator;\n emissionOverDistance?: ValueGenerator | FunctionValueGenerator;\n emissionBursts?: Array<BurstParameters>;\n onlyUsedByOther?: boolean;\n behaviors?: Array<Behavior>;\n instancingGeometry?: Float32Array;\n instancingIndices?: Uint32Array | Uint16Array;\n instancingUVs?: Float32Array;\n instancingNormals?: Float32Array;\n renderMode?: RenderMode;\n rendererEmitterSettings?: RendererEmitterSettings;\n speedFactor?: number;\n material?: any;\n texture?: Texture | null;\n startTileIndex?: ValueGenerator;\n uTileCount?: number;\n vTileCount?: number;\n blendTiles?: boolean;\n softParticles?: boolean;\n softFarFade?: number;\n softNearFade?: number;\n renderOrder?: number;\n worldSpace?: boolean;\n blendMode?: number;\n transparent?: boolean;\n depthTest?: boolean;\n depthWrite?: boolean;\n alphaTest?: number;\n layerMask?: number;\n scene?: Scene;\n}\n\nexport interface BurstParametersJSON {\n time: number;\n count: FunctionJSON | number;\n cycle: number;\n interval: number;\n probability: number;\n}\n\nexport interface ParticleSystemJSONParameters {\n version: string;\n autoDestroy: boolean;\n looping: boolean;\n prewarm: boolean;\n duration: number;\n startDelay?: FunctionJSON;\n shape: any;\n startLife: FunctionJSON;\n startSpeed: FunctionJSON;\n startRotation: FunctionJSON;\n startSize: FunctionJSON;\n startColor: FunctionJSON;\n emissionOverTime: FunctionJSON;\n emissionOverDistance: FunctionJSON;\n emissionBursts?: Array<BurstParametersJSON>;\n onlyUsedByOther: boolean;\n rendererEmitterSettings: RendererEmitterSettings;\n instancingGeometry?: any;\n renderMode: number;\n renderOrder?: number;\n speedFactor?: number;\n texture?: string;\n material?: string;\n layers?: number;\n startTileIndex: FunctionJSON | number;\n uTileCount: number;\n vTileCount: number;\n blendTiles?: boolean;\n softParticles?: boolean;\n softFarFade?: number;\n softNearFade?: number;\n blending?: number;\n transparent?: boolean;\n depthTest?: boolean;\n depthWrite?: boolean;\n alphaTest?: number;\n behaviors: Array<any>;\n worldSpace: boolean;\n}\n\nexport interface BabylonMetaData {\n textures: {[uuid: string]: Texture | null};\n materials: {[uuid: string]: any};\n geometries: {[uuid: string]: any};\n images?: {[uuid: string]: any};\n shapes?: {[uuid: string]: any};\n skeletons?: {[uuid: string]: any};\n animations?: {[uuid: string]: any};\n nodes?: {[uuid: string]: any};\n}\n\nexport class ParticleSystem implements IParticleSystem {\n private static serializationCounter = 0;\n\n autoDestroy: boolean;\n prewarm: boolean;\n looping: boolean;\n duration: number;\n startDelay: ValueGenerator | FunctionValueGenerator;\n startLife: ValueGenerator | FunctionValueGenerator;\n startSpeed: ValueGenerator | FunctionValueGenerator;\n startRotation: ValueGenerator | FunctionValueGenerator | RotationGenerator;\n startSize: ValueGenerator | FunctionValueGenerator | Vector3Generator;\n startColor: ColorGenerator | FunctionColorGenerator;\n startTileIndex: ValueGenerator;\n rendererEmitterSettings: RendererEmitterSettings;\n emissionOverTime: ValueGenerator | FunctionValueGenerator;\n emissionOverDistance: ValueGenerator | FunctionValueGenerator;\n emissionBursts: Array<BurstParameters>;\n onlyUsedByOther: boolean;\n worldSpace: boolean;\n particleNum: number;\n paused: boolean;\n particles: Array<Particle>;\n emitterShape: EmitterShape;\n emitter: ParticleEmitter;\n rendererSettings: VFXBatchSettings;\n neededToUpdateRender: boolean;\n behaviors: Array<Behavior>;\n emissionState: EmissionState;\n emitterVelocity: Vector3 = new Vector3();\n\n private prewarmed: boolean;\n private emitEnded: boolean;\n private markForDestroy: boolean;\n private startDelayTimeLeft = 0;\n private previousEmitterPos?: Vector3;\n private tempEmitterPos: Vector3 = new Vector3();\n private temp: Vector3 = new Vector3();\n private normalMatrix: Matrix3 = new Matrix3();\n private memory: GeneratorMemory = [];\n private listeners: {[event: string]: Array<(event: ParticleSystemEvent) => void>} = {};\n private readonly layerMaskProxy: {mask: number};\n private materialRef: any = null;\n private qualityFactor = 1;\n private useFastTrailHistory = true;\n /** @internal **/\n _renderer?: BatchedRenderer;\n\n set time(time: number) {\n this.emissionState.time = time;\n }\n\n get time(): number {\n return this.emissionState.time;\n }\n\n get layers() {\n return this.layerMaskProxy;\n }\n\n get texture() {\n return this.rendererSettings.texture;\n }\n\n set texture(texture: Texture | null) {\n this.rendererSettings.texture = texture;\n this.neededToUpdateRender = true;\n }\n\n get material() {\n return this.materialRef;\n }\n\n set material(material: any) {\n this.materialRef = material;\n this.applyMaterialSettings(material);\n }\n\n get uTileCount() {\n return this.rendererSettings.uTileCount;\n }\n\n set uTileCount(u: number) {\n this.rendererSettings.uTileCount = u;\n this.neededToUpdateRender = true;\n }\n\n get vTileCount() {\n return this.rendererSettings.vTileCount;\n }\n\n set vTileCount(v: number) {\n this.rendererSettings.vTileCount = v;\n this.neededToUpdateRender = true;\n }\n\n get blendTiles() {\n return this.rendererSettings.blendTiles;\n }\n\n set blendTiles(v: boolean) {\n this.rendererSettings.blendTiles = v;\n this.neededToUpdateRender = true;\n }\n\n get softParticles() {\n return this.rendererSettings.softParticles;\n }\n\n set softParticles(v: boolean) {\n this.rendererSettings.softParticles = v;\n this.neededToUpdateRender = true;\n }\n\n get softNearFade() {\n return this.rendererSettings.softNearFade;\n }\n\n set softNearFade(v: number) {\n this.rendererSettings.softNearFade = v;\n this.neededToUpdateRender = true;\n }\n\n get softFarFade() {\n return this.rendererSettings.softFarFade;\n }\n\n set softFarFade(v: number) {\n this.rendererSettings.softFarFade = v;\n this.neededToUpdateRender = true;\n }\n\n get instancingGeometry(): Float32Array {\n return this.rendererSettings.instancingGeometry;\n }\n\n set instancingGeometry(geometry: Float32Array) {\n this.restart();\n this.particles.length = 0;\n this.rendererSettings.instancingGeometry = geometry;\n this.neededToUpdateRender = true;\n }\n\n get blending() {\n return this.rendererSettings.materialBlendMode;\n }\n\n set blending(blending: number) {\n this.rendererSettings.materialBlendMode = blending;\n this.neededToUpdateRender = true;\n }\n\n get renderMode(): RenderMode {\n return this.rendererSettings.renderMode;\n }\n\n set renderMode(renderMode: RenderMode) {\n if (this.rendererSettings.renderMode !== renderMode) {\n let needRestart = false;\n if (this.rendererSettings.renderMode === RenderMode.Trail) {\n needRestart = true;\n }\n if (this.rendererSettings.renderMode === RenderMode.Mesh) {\n this.startRotation = new ConstantValue(0);\n }\n switch (renderMode) {\n case RenderMode.Trail:\n this.rendererEmitterSettings = {startLength: new ConstantValue(30), followLocalOrigin: false};\n needRestart = true;\n break;\n case RenderMode.Mesh:\n this.rendererEmitterSettings = {};\n this.startRotation = new AxisAngleGenerator(new Vector3(0, 1, 0), new ConstantValue(0));\n break;\n case RenderMode.StretchedBillBoard:\n this.rendererEmitterSettings = {speedFactor: 0, lengthFactor: 2};\n break;\n case RenderMode.BillBoard:\n case RenderMode.VerticalBillBoard:\n case RenderMode.HorizontalBillBoard:\n this.rendererEmitterSettings = {};\n break;\n }\n this.rendererSettings.renderMode = renderMode;\n if (needRestart) {\n this.restart();\n this.particles.length = 0;\n }\n this.neededToUpdateRender = true;\n }\n }\n\n get renderOrder(): number {\n return this.rendererSettings.renderOrder;\n }\n\n set renderOrder(renderOrder: number) {\n this.rendererSettings.renderOrder = renderOrder;\n this.neededToUpdateRender = true;\n }\n\n constructor(parameters: ParticleSystemParameters) {\n this.layerMaskProxy = {mask: parameters.layerMask ?? 0x0FFFFFFF};\n Object.defineProperty(this.layerMaskProxy, 'mask', {\n enumerable: true,\n get: () => this.rendererSettings.layerMask,\n set: (mask: number) => {\n this.rendererSettings.layerMask = mask;\n this.neededToUpdateRender = true;\n },\n });\n\n this.autoDestroy = parameters.autoDestroy ?? false;\n this.duration = parameters.duration ?? 1;\n this.startDelay = parameters.startDelay ?? new ConstantValue(0);\n this.looping = parameters.looping ?? true;\n this.prewarm = parameters.prewarm ?? false;\n this.startLife = parameters.startLife ?? new ConstantValue(5);\n this.startSpeed = parameters.startSpeed ?? new ConstantValue(0);\n this.startRotation = parameters.startRotation ?? new ConstantValue(0);\n this.startSize = parameters.startSize ?? new ConstantValue(1);\n this.startColor = parameters.startColor ?? new ConstantColor(new Vector4(1, 1, 1, 1));\n this.emissionOverTime = parameters.emissionOverTime ?? new ConstantValue(10);\n this.emissionOverDistance = parameters.emissionOverDistance ?? new ConstantValue(0);\n this.emissionBursts = parameters.emissionBursts ?? [];\n this.onlyUsedByOther = parameters.onlyUsedByOther ?? false;\n this.emitterShape = parameters.shape ?? new SphereEmitter();\n this.behaviors = parameters.behaviors ?? [];\n this.worldSpace = parameters.worldSpace ?? false;\n this.rendererEmitterSettings = parameters.rendererEmitterSettings ?? {};\n\n if (parameters.renderMode === RenderMode.StretchedBillBoard) {\n const settings = this.rendererEmitterSettings as StretchedBillBoardSettings;\n if (parameters.speedFactor !== undefined) {\n settings.speedFactor = parameters.speedFactor;\n }\n settings.speedFactor = settings.speedFactor ?? 0;\n settings.lengthFactor = settings.lengthFactor ?? 0;\n }\n\n this.rendererSettings = {\n instancingGeometry: parameters.instancingGeometry ?? DEFAULT_POSITIONS,\n instancingIndices: parameters.instancingIndices ?? DEFAULT_INDICES,\n instancingUVs: parameters.instancingUVs ?? DEFAULT_UVS,\n instancingNormals: parameters.instancingNormals,\n renderMode: parameters.renderMode ?? RenderMode.BillBoard,\n renderOrder: parameters.renderOrder ?? 0,\n uTileCount: parameters.uTileCount ?? 1,\n vTileCount: parameters.vTileCount ?? 1,\n blendTiles: parameters.blendTiles ?? false,\n softParticles: parameters.softParticles ?? false,\n softNearFade: parameters.softNearFade ?? 0,\n softFarFade: parameters.softFarFade ?? 0,\n materialBlendMode: parameters.blendMode ?? Constants.ALPHA_ADD,\n materialTransparent: parameters.transparent ?? true,\n materialDepthTest: parameters.depthTest ?? true,\n materialDepthWrite: parameters.depthWrite ?? false,\n materialAlphaTest: parameters.alphaTest ?? 0,\n texture: parameters.texture ?? null,\n layerMask: parameters.layerMask ?? 0x0FFFFFFF,\n };\n if (this.rendererSettings.renderMode === RenderMode.Mesh && !this.rendererSettings.instancingNormals) {\n this.rendererSettings.instancingNormals = ParticleSystem.createFallbackNormals(this.rendererSettings.instancingGeometry);\n }\n\n this.materialRef = parameters.material ?? null;\n this.applyMaterialSettings(this.materialRef, {\n blendMode: parameters.blendMode,\n transparent: parameters.transparent,\n depthTest: parameters.depthTest,\n depthWrite: parameters.depthWrite,\n alphaTest: parameters.alphaTest,\n texture: parameters.texture,\n layerMask: parameters.layerMask,\n });\n this.neededToUpdateRender = true;\n\n this.particles = [];\n this.startTileIndex = parameters.startTileIndex || new ConstantValue(0);\n this.emitter = new ParticleEmitter(this, parameters.scene);\n\n this.paused = false;\n this.particleNum = 0;\n this.emissionState = {\n isBursting: false,\n burstParticleIndex: 0,\n burstParticleCount: 0,\n burstIndex: 0,\n burstWaveIndex: 0,\n time: 0,\n waitEmiting: 0,\n travelDistance: 0,\n };\n\n this.emissionBursts.forEach((burst) => burst.count.startGen(this.memory));\n this.emissionOverDistance.startGen(this.memory);\n this.startDelay.startGen(this.memory);\n this.startDelayTimeLeft = this.startDelay.genValue(this.memory, 0);\n this.refreshTrailHistoryMode();\n\n this.emitEnded = false;\n this.markForDestroy = false;\n this.prewarmed = false;\n }\n\n private applyMaterialSettings(\n material: any,\n overrides: {\n blendMode?: number;\n transparent?: boolean;\n depthTest?: boolean;\n depthWrite?: boolean;\n alphaTest?: number;\n texture?: Texture | null;\n layerMask?: number;\n } = {}\n ) {\n /* istanbul ignore if -- rendererSettings is always assigned in the constructor before any code path can call this private method */\n if (!this.rendererSettings) {\n return;\n }\n\n const resolvedTexture =\n overrides.texture !== undefined\n ? overrides.texture\n : (material?.albedoTexture ??\n material?.diffuseTexture ??\n material?.emissiveTexture ??\n material?.opacityTexture ??\n material?.baseTexture ??\n this.rendererSettings.texture ??\n null);\n const resolvedBlendMode =\n overrides.blendMode ??\n (typeof material?.alphaMode === 'number' ? material.alphaMode : this.rendererSettings.materialBlendMode);\n const resolvedTransparent =\n overrides.transparent ??\n (typeof material?.needAlphaBlending === 'function'\n ? material.needAlphaBlending()\n : typeof material?.alpha === 'number'\n ? material.alpha < 1\n : this.rendererSettings.materialTransparent);\n const resolvedDepthTest =\n overrides.depthTest ??\n (typeof material?.disableDepthTest === 'boolean'\n ? !material.disableDepthTest\n : this.rendererSettings.materialDepthTest);\n const resolvedDepthWrite =\n overrides.depthWrite ??\n (typeof material?.disableDepthWrite === 'boolean'\n ? !material.disableDepthWrite\n : typeof material?.forceDepthWrite === 'boolean'\n ? material.forceDepthWrite\n : this.rendererSettings.materialDepthWrite);\n const resolvedAlphaTest =\n overrides.alphaTest ??\n (typeof material?.alphaCutOff === 'number'\n ? material.alphaCutOff\n : typeof material?.alphaCutOffValue === 'number'\n ? material.alphaCutOffValue\n : this.rendererSettings.materialAlphaTest);\n\n this.rendererSettings.texture = resolvedTexture;\n this.rendererSettings.materialBlendMode = resolvedBlendMode;\n this.rendererSettings.materialTransparent = resolvedTransparent;\n this.rendererSettings.materialDepthTest = resolvedDepthTest;\n this.rendererSettings.materialDepthWrite = resolvedDepthWrite;\n this.rendererSettings.materialAlphaTest = resolvedAlphaTest;\n if (overrides.layerMask !== undefined) {\n this.rendererSettings.layerMask = overrides.layerMask;\n }\n this.neededToUpdateRender = true;\n }\n\n pause() { this.paused = true; }\n play() { this.paused = false; }\n stop() { this.restart(); this.pause(); }\n\n private refreshTrailHistoryMode() {\n this.useFastTrailHistory = !this.behaviors.some((behavior) => (behavior as any).type === 'WidthOverLength');\n }\n\n private ensureTrailHistoryCapacity(particle: TrailParticle, capacity: number) {\n const trailAny = particle as any;\n if (trailAny._trailHistoryCapacity === capacity && trailAny._trailHistoryPositions) {\n return;\n }\n trailAny._trailHistoryCapacity = capacity;\n trailAny._trailHistoryPositions = new Float32Array(capacity * 3);\n trailAny._trailHistorySizes = new Float32Array(capacity);\n trailAny._trailHistoryColors = new Float32Array(capacity * 4);\n trailAny._trailHistoryHead = 0;\n trailAny._trailHistoryCount = 0;\n }\n\n private resetTrailHistory(particle: TrailParticle) {\n const trailAny = particle as any;\n trailAny._trailHistoryHead = 0;\n trailAny._trailHistoryCount = 0;\n }\n\n private getTrailHistoryCount(particle: TrailParticle): number {\n const trailAny = particle as any;\n const fastHistoryCount = trailAny._trailHistoryCount;\n if (typeof fastHistoryCount === 'number') {\n return fastHistoryCount;\n }\n return particle.previous.length;\n }\n\n private updateFastTrailHistory(particle: TrailParticle) {\n const trailAny = particle as any;\n const capacity = Math.max(1, Math.ceil(particle.length));\n this.ensureTrailHistoryCapacity(particle, capacity);\n let head = trailAny._trailHistoryHead as number;\n let count = trailAny._trailHistoryCount as number;\n const positions = trailAny._trailHistoryPositions as Float32Array;\n const sizes = trailAny._trailHistorySizes as Float32Array;\n const colors = trailAny._trailHistoryColors as Float32Array;\n\n if (particle.age <= particle.life) {\n const posIndex = head * 3;\n positions[posIndex] = particle.position.x;\n positions[posIndex + 1] = particle.position.y;\n positions[posIndex + 2] = particle.position.z;\n sizes[head] = particle.size.x;\n const colorIndex = head * 4;\n colors[colorIndex] = particle.color.x;\n colors[colorIndex + 1] = particle.color.y;\n colors[colorIndex + 2] = particle.color.z;\n colors[colorIndex + 3] = particle.color.w;\n head = (head + 1) % capacity;\n if (count < capacity) {\n count++;\n }\n } else if (count > 0) {\n count--;\n }\n\n trailAny._trailHistoryHead = head;\n trailAny._trailHistoryCount = count;\n }\n\n setQualityFactor(qualityFactor: number) {\n this.qualityFactor = Math.max(0.1, Math.min(1, qualityFactor));\n }\n\n private spawn(count: number, emissionState: EmissionState, matrix: Matrix4) {\n tempQ.setFromRotationMatrix(matrix);\n const translation = tempV;\n const scale = tempV2;\n matrix.decompose(translation, tempQ, scale);\n const behaviors = this.behaviors;\n const behaviorCount = behaviors.length;\n const renderMode = this.rendererSettings.renderMode;\n const isTrailMode = renderMode === RenderMode.Trail;\n const timeRatio = emissionState.time / this.duration;\n const trailSettings = isTrailMode ? (this.rendererEmitterSettings as TrailSettings) : undefined;\n const followLocalOrigin = Boolean(trailSettings?.followLocalOrigin);\n\n for (let i = 0; i < count; i++) {\n emissionState.burstParticleIndex = i;\n this.particleNum++;\n if (this.particles.length < this.particleNum) {\n if (isTrailMode) {\n this.particles.push(new TrailParticle());\n } else {\n this.particles.push(new SpriteParticle());\n }\n }\n const particle = this.particles[this.particleNum - 1];\n particle.reset();\n particle.speedModifier = 1;\n this.startColor.startGen(particle.memory);\n this.startColor.genColor(particle.memory, particle.startColor, this.emissionState.time);\n particle.color.copy(particle.startColor);\n this.startSpeed.startGen(particle.memory);\n particle.startSpeed = this.startSpeed.genValue(particle.memory, timeRatio);\n this.startLife.startGen(particle.memory);\n particle.life = this.startLife.genValue(particle.memory, timeRatio);\n particle.age = 0;\n this.startSize.startGen(particle.memory);\n if (this.startSize.type === 'vec3function') {\n (this.startSize as Vector3Generator).genValue(particle.memory, particle.startSize, timeRatio);\n } else {\n const size = (this.startSize as FunctionValueGenerator).genValue(particle.memory, timeRatio);\n particle.startSize.set(size, size, size);\n }\n this.startTileIndex.startGen(particle.memory);\n particle.uvTile = this.startTileIndex.genValue(particle.memory);\n particle.size.copy(particle.startSize);\n\n if (\n this.rendererSettings.renderMode === RenderMode.Mesh ||\n this.rendererSettings.renderMode === RenderMode.BillBoard ||\n this.rendererSettings.renderMode === RenderMode.VerticalBillBoard ||\n this.rendererSettings.renderMode === RenderMode.HorizontalBillBoard ||\n this.rendererSettings.renderMode === RenderMode.StretchedBillBoard\n ) {\n const sprite = particle as SpriteParticle;\n this.startRotation.startGen(particle.memory);\n if (renderMode === RenderMode.Mesh) {\n if (!(sprite.rotation instanceof Quaternion)) {\n sprite.rotation = new Quaternion();\n }\n if (this.startRotation.type === 'rotation') {\n this.startRotation.genValue(particle.memory, sprite.rotation as Quaternion, 1, timeRatio);\n } else {\n (sprite.rotation as Quaternion).setFromAxisAngle(UP, this.startRotation.genValue(sprite.memory, timeRatio));\n }\n } else {\n if (this.startRotation.type === 'rotation') {\n sprite.rotation = 0;\n } else {\n sprite.rotation = this.startRotation.genValue(sprite.memory, timeRatio);\n }\n }\n } else if (isTrailMode && trailSettings) {\n const trail = particle as TrailParticle;\n trailSettings.startLength.startGen(trail.memory);\n trail.length = trailSettings.startLength.genValue(trail.memory, timeRatio);\n if (this.useFastTrailHistory) {\n this.ensureTrailHistoryCapacity(trail, Math.max(1, Math.ceil(trail.length)));\n this.resetTrailHistory(trail);\n }\n }\n\n this.emitterShape.initialize(particle, emissionState);\n\n if (isTrailMode && followLocalOrigin) {\n const trail = particle as TrailParticle;\n if (!trail.localPosition) {\n trail.localPosition = new Vector3();\n }\n trail.localPosition.copy(trail.position);\n }\n\n if (this.worldSpace) {\n particle.position.applyMatrix4(matrix);\n particle.startSize.multiply(scale).abs();\n particle.size.copy(particle.startSize);\n particle.velocity.multiply(scale).applyMatrix3(this.normalMatrix);\n if (particle.rotation && particle.rotation instanceof Quaternion) {\n particle.rotation.multiplyQuaternions(tempQ, particle.rotation);\n }\n } else {\n if (this.onlyUsedByOther) {\n particle.parentMatrix = matrix;\n }\n }\n\n for (let j = 0; j < behaviorCount; j++) {\n behaviors[j].initialize(particle, this);\n }\n }\n }\n\n endEmit() {\n this.emitEnded = true;\n if (this.autoDestroy) {\n this.markForDestroy = true;\n }\n this.fire({type: 'emitEnd', particleSystem: this});\n }\n\n dispose() {\n if (this._renderer) this._renderer.deleteSystem(this);\n this.emitter.dispose();\n this.fire({type: 'destroy', particleSystem: this});\n }\n\n restart() {\n this.memory.length = 0;\n this.paused = false;\n this.particleNum = 0;\n this.emissionState.isBursting = false;\n this.emissionState.burstIndex = 0;\n this.emissionState.burstWaveIndex = 0;\n this.emissionState.time = 0;\n this.emissionState.waitEmiting = 0;\n this.behaviors.forEach((behavior) => behavior.reset());\n this.emitEnded = false;\n this.markForDestroy = false;\n this.prewarmed = false;\n this.emissionBursts.forEach((burst) => burst.count.startGen(this.memory));\n this.emissionOverDistance.startGen(this.memory);\n this.startDelay.startGen(this.memory);\n this.startDelayTimeLeft = this.startDelay.genValue(this.memory, 0);\n this.previousEmitterPos = undefined;\n this.emitterVelocity.set(0, 0, 0);\n }\n\n private firstTimeUpdate = true;\n\n /** @internal */\n update(delta: number) {\n if (this.paused) return;\n\n if (this.firstTimeUpdate) {\n this.firstTimeUpdate = false;\n this.emitter.computeWorldMatrix(true);\n }\n\n if (this.emitEnded && this.particleNum === 0) {\n if (this.markForDestroy) this.dispose();\n return;\n }\n\n if (this.looping && this.prewarm && !this.prewarmed) {\n this.prewarmed = true;\n for (let i = 0; i < this.duration * PREWARM_FPS; i++) {\n this.update(1.0 / PREWARM_FPS);\n }\n }\n\n if (delta > 0.1) {\n delta = 0.1;\n }\n\n if (this.neededToUpdateRender) {\n if (this._renderer) this._renderer.updateSystem(this);\n this.neededToUpdateRender = false;\n }\n\n const emitterElements = this.emitter.matrixWorld.elements;\n this.tempEmitterPos.set(emitterElements[12], emitterElements[13], emitterElements[14]);\n if (this.previousEmitterPos !== undefined && delta > 0) {\n this.emitterVelocity\n .copy(this.tempEmitterPos)\n .sub(this.previousEmitterPos)\n .divideScalar(delta);\n }\n (this.previousEmitterPos ??= new Vector3()).copy(this.tempEmitterPos);\n\n // Start delay holds back emission once per play/restart (ignored with\n // prewarm, matching Unity). Carry the remainder so a large frame does\n // not lose time.\n if (this.startDelayTimeLeft > 0 && !(this.prewarm && this.looping)) {\n this.startDelayTimeLeft -= delta;\n if (this.startDelayTimeLeft >= 0) return;\n delta = Math.min(-this.startDelayTimeLeft, 0.1);\n this.startDelayTimeLeft = 0;\n }\n\n if (!this.onlyUsedByOther) {\n this.emit(delta, this.emissionState, this.emitter.matrixWorld);\n }\n\n const particles = this.particles;\n const behaviorCount = this.behaviors.length;\n const particleCount = this.particleNum;\n this.emitterShape.update(this, delta);\n for (let j = 0; j < behaviorCount; j++) {\n const behavior = this.behaviors[j];\n behavior.frameUpdate(delta);\n for (let i = 0; i < particleCount; i++) {\n const particle = particles[i];\n if (!particle.died) {\n behavior.update(particle, delta);\n }\n }\n }\n\n const followLocalOrigin =\n this.rendererSettings.renderMode === RenderMode.Trail &&\n (this.rendererEmitterSettings as TrailSettings).followLocalOrigin;\n const emitterMatrix = this.emitter.matrixWorld;\n for (let i = 0; i < particleCount; i++) {\n const particle = particles[i];\n if (followLocalOrigin && (particle as TrailParticle).localPosition) {\n particle.position.copy((particle as TrailParticle).localPosition!);\n if (particle.parentMatrix) {\n particle.position.applyMatrix4(particle.parentMatrix);\n } else {\n particle.position.applyMatrix4(emitterMatrix);\n }\n } else {\n particle.position.addScaledVector(particle.velocity, delta * particle.speedModifier);\n }\n particle.age += delta;\n }\n\n if (this.rendererSettings.renderMode === RenderMode.Trail) {\n for (let i = 0; i < particleCount; i++) {\n const trailParticle = particles[i] as TrailParticle;\n if (this.useFastTrailHistory) {\n this.updateFastTrailHistory(trailParticle);\n } else {\n trailParticle.update();\n }\n }\n }\n\n let liveParticleCount = this.particleNum;\n for (let i = 0; i < liveParticleCount; i++) {\n const particle = particles[i];\n if (\n particle.died &&\n (!(particle instanceof TrailParticle) || this.getTrailHistoryCount(particle as TrailParticle) === 0)\n ) {\n particles[i] = particles[liveParticleCount - 1];\n particles[liveParticleCount - 1] = particle;\n liveParticleCount--;\n i--;\n this.fire({type: 'particleDied', particleSystem: this, particle: particle});\n }\n }\n this.particleNum = liveParticleCount;\n }\n\n emit(delta: number, emissionState: EmissionState, emitterMatrix: Matrix4) {\n if (emissionState.time > this.duration) {\n if (this.looping) {\n emissionState.time -= this.duration;\n emissionState.burstIndex = 0;\n this.behaviors.forEach((behavior) => behavior.reset());\n } else {\n if (!this.emitEnded && !this.onlyUsedByOther) {\n this.endEmit();\n }\n }\n }\n\n this.normalMatrix.getNormalMatrix(emitterMatrix);\n const emissionBursts = this.emissionBursts;\n const emissionBurstCount = emissionBursts.length;\n const qualityFactor = this.qualityFactor;\n\n const totalSpawn = Math.ceil(emissionState.waitEmiting);\n this.spawn(totalSpawn, emissionState, emitterMatrix);\n emissionState.waitEmiting -= totalSpawn;\n\n while (\n emissionState.burstIndex < emissionBurstCount &&\n emissionBursts[emissionState.burstIndex].time <= emissionState.time\n ) {\n const burst = emissionBursts[emissionState.burstIndex];\n if (Math.random() < burst.probability) {\n const rawCount = burst.count.genValue(this.memory, this.time);\n const count = qualityFactor >= 0.999 ? rawCount : Math.floor(rawCount * qualityFactor);\n emissionState.isBursting = true;\n emissionState.burstParticleCount = count;\n this.spawn(count, emissionState, emitterMatrix);\n emissionState.isBursting = false;\n }\n emissionState.burstIndex++;\n }\n\n if (!this.emitEnded) {\n const timeRatio = emissionState.time / this.duration;\n emissionState.waitEmiting += delta * this.emissionOverTime.genValue(this.memory, timeRatio) * qualityFactor;\n\n const previousWorldPos = emissionState.previousWorldPos;\n if (previousWorldPos !== undefined) {\n this.temp.set(emitterMatrix.elements[12], emitterMatrix.elements[13], emitterMatrix.elements[14]);\n emissionState.travelDistance += previousWorldPos.distanceTo(this.temp);\n const emitPerMeter = this.emissionOverDistance.genValue(this.memory, timeRatio) * qualityFactor;\n if (emissionState.travelDistance * emitPerMeter > 0) {\n const count = Math.floor(emissionState.travelDistance * emitPerMeter);\n emissionState.travelDistance -= count / emitPerMeter;\n emissionState.waitEmiting += count;\n }\n }\n }\n if (emissionState.previousWorldPos === undefined) emissionState.previousWorldPos = new Vector3();\n emissionState.previousWorldPos.set(emitterMatrix.elements[12], emitterMatrix.elements[13], emitterMatrix.elements[14]);\n emissionState.time += delta;\n }\n\n toJSON(metaData?: BabylonMetaData | string, _options: SerializationOptions = {}): ParticleSystemJSONParameters {\n const isRootObject = metaData === undefined || typeof metaData === 'string';\n const meta: BabylonMetaData = isRootObject\n ? {\n geometries: {},\n materials: {},\n textures: {},\n images: {},\n shapes: {},\n skeletons: {},\n animations: {},\n nodes: {},\n }\n : metaData;\n\n const geometryUUID = this.ensureGeometryMeta(meta);\n const materialUUID = this.ensureMaterialMeta(meta);\n const rendererEmitterSettingsJSON = this.toRendererSettingsJSON();\n\n return {\n version: '3.0',\n autoDestroy: this.autoDestroy,\n looping: this.looping,\n prewarm: this.prewarm,\n duration: this.duration,\n startDelay: this.startDelay.toJSON(),\n shape: this.emitterShape.toJSON(),\n startLife: this.startLife.toJSON(),\n startSpeed: this.startSpeed.toJSON(),\n startRotation: this.startRotation.toJSON(),\n startSize: this.startSize.toJSON(),\n startColor: this.startColor.toJSON(),\n emissionOverTime: this.emissionOverTime.toJSON(),\n emissionOverDistance: this.emissionOverDistance.toJSON(),\n emissionBursts: this.emissionBursts.map((burst) => ({\n time: burst.time,\n count: burst.count.toJSON(),\n probability: burst.probability,\n interval: burst.interval,\n cycle: burst.cycle,\n })),\n onlyUsedByOther: this.onlyUsedByOther,\n instancingGeometry: geometryUUID,\n renderMode: this.renderMode,\n renderOrder: this.renderOrder,\n rendererEmitterSettings: rendererEmitterSettingsJSON,\n material: materialUUID,\n layers: this.rendererSettings.layerMask,\n startTileIndex: this.startTileIndex.toJSON(),\n uTileCount: this.rendererSettings.uTileCount,\n vTileCount: this.rendererSettings.vTileCount,\n blendTiles: this.rendererSettings.blendTiles,\n softParticles: this.rendererSettings.softParticles,\n softFarFade: this.rendererSettings.softFarFade,\n softNearFade: this.rendererSettings.softNearFade,\n blending: this.rendererSettings.materialBlendMode,\n transparent: this.rendererSettings.materialTransparent,\n depthTest: this.rendererSettings.materialDepthTest,\n depthWrite: this.rendererSettings.materialDepthWrite,\n alphaTest: this.rendererSettings.materialAlphaTest,\n behaviors: this.behaviors.map((b) => b.toJSON()),\n worldSpace: this.worldSpace,\n };\n }\n\n static fromJSON(\n json: ParticleSystemJSONParameters,\n meta: BabylonMetaData,\n dependencies: {[uuid: string]: Behavior} = {},\n scene?: Scene\n ): ParticleSystem {\n const shape = EmitterFromJSON(json.shape, meta as any);\n let rendererEmitterSettings: RendererEmitterSettings;\n if (json.renderMode === RenderMode.Trail) {\n const trailSettings = json.rendererEmitterSettings as TrailSettings;\n rendererEmitterSettings = {\n startLength:\n trailSettings?.startLength !== undefined\n ? ValueGeneratorFromJSON(trailSettings.startLength)\n : new ConstantValue(30),\n followLocalOrigin: trailSettings?.followLocalOrigin ?? false,\n };\n } else if (json.renderMode === RenderMode.StretchedBillBoard) {\n rendererEmitterSettings = {...(json.rendererEmitterSettings ?? {})};\n if (json.speedFactor !== undefined) {\n (rendererEmitterSettings as StretchedBillBoardSettings).speedFactor = json.speedFactor;\n }\n } else {\n rendererEmitterSettings = {};\n }\n\n const materialMeta = json.material ? meta.materials?.[json.material] : undefined;\n const materialTextureRef = materialMeta?.texture ?? json.texture;\n const texture =\n typeof materialTextureRef === 'string'\n ? meta.textures?.[materialTextureRef] ?? null\n : materialTextureRef ?? null;\n const resolvedGeometryEntry =\n typeof json.instancingGeometry === 'string'\n ? meta.geometries?.[json.instancingGeometry]\n : json.instancingGeometry;\n const resolvedGeometry = ParticleSystem.resolveGeometryData(resolvedGeometryEntry);\n\n const ps = new ParticleSystem({\n scene,\n autoDestroy: json.autoDestroy,\n looping: json.looping,\n prewarm: json.prewarm,\n duration: json.duration,\n startDelay: json.startDelay ? ValueGeneratorFromJSON(json.startDelay) : undefined,\n shape,\n startLife: ValueGeneratorFromJSON(json.startLife),\n startSpeed: ValueGeneratorFromJSON(json.startSpeed),\n startRotation: GeneratorFromJSON(json.startRotation) as RotationGenerator | ValueGenerator | FunctionValueGenerator,\n startSize: GeneratorFromJSON(json.startSize) as Vector3Generator | ValueGenerator | FunctionValueGenerator,\n startColor: ColorGeneratorFromJSON(json.startColor) as ColorGenerator,\n emissionOverTime: ValueGeneratorFromJSON(json.emissionOverTime),\n emissionOverDistance: ValueGeneratorFromJSON(json.emissionOverDistance),\n emissionBursts: json.emissionBursts?.map((burst: any) => ({\n time: burst.time,\n count: typeof burst.count === 'number' ? new ConstantValue(burst.count) : ValueGeneratorFromJSON(burst.count),\n probability: burst.probability ?? 1,\n interval: burst.interval ?? 0.1,\n cycle: burst.cycle ?? burst.cycleCount ?? 1,\n })),\n onlyUsedByOther: json.onlyUsedByOther,\n instancingGeometry: resolvedGeometry.positions,\n instancingIndices: resolvedGeometry.indices,\n instancingUVs: resolvedGeometry.uvs,\n instancingNormals: resolvedGeometry.normals,\n renderMode: json.renderMode,\n rendererEmitterSettings,\n renderOrder: json.renderOrder,\n texture,\n material: materialMeta?.sourceMaterial,\n blendMode: materialMeta?.alphaMode ?? json.blending ?? Constants.ALPHA_ADD,\n transparent: materialMeta?.transparent ?? json.transparent ?? true,\n depthTest: materialMeta?.depthTest ?? json.depthTest ?? true,\n depthWrite: materialMeta?.depthWrite ?? json.depthWrite ?? false,\n alphaTest: materialMeta?.alphaTest ?? json.alphaTest ?? 0,\n startTileIndex:\n typeof json.startTileIndex === 'number'\n ? new ConstantValue(json.startTileIndex)\n : (ValueGeneratorFromJSON(json.startTileIndex) as ValueGenerator),\n uTileCount: json.uTileCount,\n vTileCount: json.vTileCount,\n blendTiles: json.blendTiles,\n softParticles: json.softParticles,\n softFarFade: json.softFarFade,\n softNearFade: json.softNearFade,\n behaviors: [],\n worldSpace: json.worldSpace,\n layerMask: json.layers,\n });\n ps.behaviors = (json.behaviors ?? [])\n .map((behaviorJson) => {\n const behavior = BehaviorFromJSON(behaviorJson, ps);\n if (behavior && behavior.type === 'EmitSubParticleSystem') {\n dependencies[(behaviorJson as any).subParticleSystem] = behavior;\n }\n return behavior;\n })\n .filter((behavior) => behavior !== null) as Behavior[];\n return ps;\n }\n\n private static nextSerializationId(prefix: string): string {\n ParticleSystem.serializationCounter += 1;\n return `${prefix}_${ParticleSystem.serializationCounter}`;\n }\n\n private static createFallbackNormals(positions: Float32Array): Float32Array {\n const normals = new Float32Array(positions.length);\n for (let i = 0; i < normals.length; i += 3) {\n normals[i] = 0;\n normals[i + 1] = 0;\n normals[i + 2] = 1;\n }\n return normals;\n }\n\n private toRendererSettingsJSON(): RendererEmitterSettings {\n if (this.renderMode === RenderMode.Trail) {\n return {\n startLength: (this.rendererEmitterSettings as TrailSettings).startLength.toJSON(),\n followLocalOrigin: (this.rendererEmitterSettings as TrailSettings).followLocalOrigin,\n };\n }\n if (this.renderMode === RenderMode.StretchedBillBoard) {\n return {\n speedFactor: (this.rendererEmitterSettings as StretchedBillBoardSettings).speedFactor,\n lengthFactor: (this.rendererEmitterSettings as StretchedBillBoardSettings).lengthFactor,\n };\n }\n return {};\n }\n\n private ensureGeometryMeta(meta: BabylonMetaData): string {\n const geometryUUID = ParticleSystem.nextSerializationId('quarks_geometry');\n meta.geometries[geometryUUID] = {\n uuid: geometryUUID,\n type: 'QuarksGeometry',\n positions: Array.from(this.rendererSettings.instancingGeometry),\n indices: Array.from(this.rendererSettings.instancingIndices),\n uvs: this.rendererSettings.instancingUVs ? Array.from(this.rendererSettings.instancingUVs) : undefined,\n normals: this.rendererSettings.instancingNormals ? Array.from(this.rendererSettings.instancingNormals) : undefined,\n };\n return geometryUUID;\n }\n\n private ensureMaterialMeta(meta: BabylonMetaData): string {\n const texture = this.rendererSettings.texture;\n let textureUUID: string | undefined;\n if (texture) {\n textureUUID = ParticleSystem.nextSerializationId('quarks_texture');\n meta.textures[textureUUID] = texture;\n }\n\n const materialUUID = ParticleSystem.nextSerializationId('quarks_material');\n meta.materials[materialUUID] = {\n uuid: materialUUID,\n type: 'QuarksMaterial',\n transparent: this.rendererSettings.materialTransparent,\n alphaMode: this.rendererSettings.materialBlendMode,\n depthTest: this.rendererSettings.materialDepthTest,\n depthWrite: this.rendererSettings.materialDepthWrite,\n alphaTest: this.rendererSettings.materialAlphaTest,\n texture: textureUUID,\n sourceMaterial: this.materialRef ?? undefined,\n };\n return materialUUID;\n }\n\n private static resolveGeometryData(entry: any): {\n positions: Float32Array;\n indices: Uint32Array | Uint16Array;\n uvs?: Float32Array;\n normals?: Float32Array;\n } {\n if (entry?.positions) {\n const positions =\n entry.positions instanceof Float32Array ? entry.positions : new Float32Array(entry.positions);\n const rawIndices =\n entry.indices instanceof Uint16Array || entry.indices instanceof Uint32Array\n ? entry.indices\n : entry.indices\n ? new Uint32Array(entry.indices)\n : undefined;\n return {\n positions,\n indices: ensureTriangleIndices(positions, rawIndices),\n uvs: entry.uvs\n ? entry.uvs instanceof Float32Array\n ? entry.uvs\n : new Float32Array(entry.uvs)\n : undefined,\n normals: entry.normals\n ? entry.normals instanceof Float32Array\n ? entry.normals\n : new Float32Array(entry.normals)\n : undefined,\n };\n }\n\n const data = entry?.data ?? entry;\n if (data?.attributes?.position?.array) {\n const positions = new Float32Array(data.attributes.position.array);\n let indices: Uint32Array | Uint16Array | undefined;\n if (data.index?.array) {\n const indexType = data.index.type === 'Uint16Array' ? Uint16Array : Uint32Array;\n indices = new indexType(data.index.array);\n }\n return {\n positions,\n indices: ensureTriangleIndices(positions, indices),\n uvs: data.attributes.uv?.array ? new Float32Array(data.attributes.uv.array) : undefined,\n normals: data.attributes.normal?.array ? new Float32Array(data.attributes.normal.array) : undefined,\n };\n }\n\n return {\n positions: DEFAULT_POSITIONS,\n indices: DEFAULT_INDICES,\n uvs: DEFAULT_UVS,\n };\n }\n\n addBehavior(behavior: Behavior) {\n this.behaviors.push(behavior);\n this.refreshTrailHistoryMode();\n }\n\n getRendererSettings(): VFXBatchSettings {\n return this.rendererSettings;\n }\n\n addEventListener(event: ParticleSystemEventType, callback: (event: ParticleSystemEvent) => void): void {\n if (!this.listeners[event]) this.listeners[event] = [];\n this.listeners[event].push(callback);\n }\n\n removeAllEventListeners(event: ParticleSystemEventType): void {\n if (this.listeners[event]) this.listeners[event] = [];\n }\n\n removeEventListener(event: ParticleSystemEventType, callback: (event: ParticleSystemEvent) => void): void {\n if (this.listeners[event]) {\n const index = this.listeners[event].indexOf(callback);\n if (index !== -1) this.listeners[event].splice(index, 1);\n }\n }\n\n private fire(event: ParticleSystemEvent) {\n if (this.listeners[event.type]) {\n this.listeners[event.type].forEach((callback) => callback(event));\n }\n }\n\n clone(): ParticleSystem {\n const newBehaviors: Array<Behavior> = this.behaviors.map((b) => b.clone());\n let rendererEmitterSettings: RendererEmitterSettings;\n\n if (this.renderMode === RenderMode.Trail) {\n rendererEmitterSettings = {\n startLength: (this.rendererEmitterSettings as TrailSettings).startLength.clone(),\n followLocalOrigin: (this.rendererEmitterSettings as TrailSettings).followLocalOrigin,\n };\n } else if (this.renderMode === RenderMode.StretchedBillBoard) {\n rendererEmitterSettings = {\n lengthFactor: (this.rendererEmitterSettings as StretchedBillBoardSettings).lengthFactor,\n speedFactor: (this.rendererEmitterSettings as StretchedBillBoardSettings).speedFactor,\n };\n } else {\n rendererEmitterSettings = {};\n }\n\n return new ParticleSystem({\n autoDestroy: this.autoDestroy,\n looping: this.looping,\n prewarm: this.prewarm,\n duration: this.duration,\n startDelay: this.startDelay.clone(),\n shape: this.emitterShape.clone(),\n startLife: this.startLife.clone(),\n startSpeed: this.startSpeed.clone(),\n startRotation: this.startRotation.clone(),\n startSize: this.startSize.clone(),\n startColor: this.startColor.clone(),\n emissionOverTime: this.emissionOverTime.clone(),\n emissionOverDistance: this.emissionOverDistance.clone(),\n emissionBursts: this.emissionBursts.map((b) => ({...b})),\n onlyUsedByOther: this.onlyUsedByOther,\n instancingGeometry: this.rendererSettings.instancingGeometry,\n instancingIndices: this.rendererSettings.instancingIndices,\n instancingUVs: this.rendererSettings.instancingUVs,\n instancingNormals: this.rendererSettings.instancingNormals,\n renderMode: this.renderMode,\n renderOrder: this.renderOrder,\n rendererEmitterSettings,\n material: this.materialRef,\n texture: this.rendererSettings.texture,\n startTileIndex: this.startTileIndex,\n uTileCount: this.rendererSettings.uTileCount,\n vTileCount: this.rendererSettings.vTileCount,\n blendTiles: this.rendererSettings.blendTiles,\n softParticles: this.rendererSettings.softParticles,\n softFarFade: this.rendererSettings.softFarFade,\n softNearFade: this.rendererSettings.softNearFade,\n behaviors: newBehaviors,\n worldSpace: this.worldSpace,\n blendMode: this.rendererSettings.materialBlendMode,\n transparent: this.rendererSettings.materialTransparent,\n depthTest: this.rendererSettings.materialDepthTest,\n depthWrite: this.rendererSettings.materialDepthWrite,\n alphaTest: this.rendererSettings.materialAlphaTest,\n layerMask: this.rendererSettings.layerMask,\n scene: this.emitter.getScene(),\n });\n }\n}\n","import {Node} from '@babylonjs/core/node';\nimport {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {ParticleEmitter} from './ParticleEmitter';\nimport {ParticleSystem} from './ParticleSystem';\nimport {BatchedRenderer} from './BatchedRenderer';\nimport {IParticleSystem} from 'quarks.core';\n\nexport class QuarksUtil {\n static runOnAllParticleEmitters(root: Node, callback: (emitter: ParticleEmitter) => void): void {\n QuarksUtil.traverseNode(root, (node) => {\n if (node instanceof ParticleEmitter) {\n callback(node);\n }\n });\n }\n\n static addToBatchRenderer(root: Node, batchRenderer: BatchedRenderer): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n batchRenderer.addSystem(emitter.system);\n });\n }\n\n static play(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).play();\n });\n }\n\n static stop(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).stop();\n });\n }\n\n static pause(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).pause();\n });\n }\n\n static restart(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).restart();\n });\n }\n\n static setAutoDestroy(root: Node, autoDestroy: boolean): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).autoDestroy = autoDestroy;\n });\n }\n\n static endEmit(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).endEmit();\n });\n }\n\n private static traverseNode(node: Node, callback: (node: Node) => void): void {\n callback(node);\n const children = node.getChildren();\n for (const child of children) {\n QuarksUtil.traverseNode(child, callback);\n }\n }\n}\n","import {IAnimationData, IPrefab} from 'quarks.core';\nimport {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {Scene} from '@babylonjs/core/scene';\nimport {ParticleEmitter} from './ParticleEmitter';\nimport {BatchedRenderer} from './BatchedRenderer';\n\nexport interface QuarksTimelineClip {\n uuid?: string;\n duration?: number;\n play?: () => void;\n pause?: () => void;\n stop?: () => void;\n setTime?: (time: number) => void;\n}\n\nexport interface AnimationData extends IAnimationData {\n type: 'three' | 'ps';\n target: TransformNode;\n loop: boolean;\n clip?: QuarksTimelineClip;\n clipUUID?: string;\n}\n\ninterface AnimationJSON {\n startTime: number;\n duration: number;\n type: 'three' | 'ps';\n targetUUID: string;\n clipUUID?: string;\n loop: boolean;\n}\n\nexport class QuarksPrefab extends TransformNode implements IPrefab {\n type = 'QuarksPrefab';\n animationData: Array<AnimationData> = [];\n isPlaying = false;\n currentTime = -0.00001;\n timeScale = 1;\n duration = 0;\n\n private _lastUpdateTimeMs = Date.now();\n private _batchedRenderer?: BatchedRenderer;\n private _tempAnimationJSON: Array<AnimationJSON> = [];\n\n constructor(name = 'QuarksPrefab', scene?: Scene) {\n super(name, scene);\n }\n\n registerBatchedRenderer(renderer: BatchedRenderer): void {\n this._batchedRenderer = renderer;\n }\n\n addParticleSystemAnimation(\n emitter: ParticleEmitter,\n startTime = 0,\n duration = 0,\n loop = false\n ): AnimationData {\n const animationDuration = duration > 0 ? duration : emitter.system.duration;\n const data: AnimationData = {\n startTime,\n duration: animationDuration,\n type: 'ps',\n loop,\n target: emitter,\n };\n this.animationData.push(data);\n this.pause();\n this.updateDuration();\n return data;\n }\n\n addThreeAnimation(\n target: TransformNode,\n clip?: QuarksTimelineClip,\n startTime = 0,\n duration = clip?.duration ?? 0,\n loop = false,\n clipUUID?: string\n ): AnimationData {\n const animationDuration = duration > 0 ? duration : clip?.duration ?? 0;\n const data: AnimationData = {\n startTime,\n duration: animationDuration,\n type: 'three',\n loop,\n target,\n clip,\n clipUUID: clipUUID ?? clip?.uuid,\n };\n this.animationData.push(data);\n this.updateDuration();\n return data;\n }\n\n removeAnimation(index: number): void {\n this.animationData.splice(index, 1);\n this.updateDuration();\n }\n\n play(): void {\n if (this.isPlaying) return;\n this.isPlaying = true;\n this._lastUpdateTimeMs = Date.now();\n }\n\n pause(): void {\n if (!this.isPlaying) return;\n this.isPlaying = false;\n this.animationData.forEach((animation) => {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.pause();\n return;\n }\n animation.clip?.pause?.();\n });\n }\n\n stop(): void {\n this.pause();\n this.currentTime = -0.00001;\n this.animationData.forEach((animation) => {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.stop();\n return;\n }\n animation.clip?.stop?.();\n });\n }\n\n update(forceDelta?: number): void {\n if (!this.isPlaying) return;\n const now = Date.now();\n const delta = forceDelta ?? Math.max((now - this._lastUpdateTimeMs) / 1000, 0);\n this._lastUpdateTimeMs = now;\n const previousTime = this.currentTime;\n this.currentTime += delta * this.timeScale;\n\n if (this.currentTime > this.duration) {\n this.stop();\n return;\n }\n\n this.animationData.forEach((animation) => {\n const startTime = animation.startTime;\n const endTime = animation.startTime + animation.duration;\n const isActive = this.currentTime >= startTime && this.currentTime <= endTime;\n const wasActive = previousTime >= startTime && previousTime <= endTime;\n if (isActive && !wasActive) {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.restart();\n if (this._batchedRenderer) {\n this._batchedRenderer.addSystem(animation.target.system);\n }\n } else {\n animation.clip?.play?.();\n }\n return;\n }\n\n if (!isActive && wasActive) {\n if (animation.loop && animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.restart();\n return;\n }\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.endEmit();\n } else if (animation.loop) {\n animation.clip?.play?.();\n } else {\n animation.clip?.stop?.();\n }\n }\n });\n }\n\n setTime(time: number): void {\n const previousTime = this.currentTime;\n this.currentTime = time;\n this.animationData.forEach((animation) => {\n const startTime = animation.startTime;\n const endTime = animation.startTime + animation.duration;\n const isActive = this.currentTime >= startTime && this.currentTime < endTime;\n const wasActive = previousTime >= startTime && previousTime < endTime;\n if (isActive && !wasActive) {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.restart();\n } else {\n animation.clip?.play?.();\n }\n return;\n }\n if (!isActive && wasActive) {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.endEmit();\n } else {\n animation.clip?.stop?.();\n }\n return;\n }\n if (isActive && animation.type === 'three') {\n animation.clip?.setTime?.(Math.max(time - startTime, 0));\n }\n });\n }\n\n getDuration(): number {\n return this.duration;\n }\n\n resolveReferences(root: TransformNode): void {\n const nodesMap: {[uuid: string]: TransformNode} = {};\n const traverse = (node: TransformNode) => {\n if ((node as any)._quarksUUID) {\n nodesMap[(node as any)._quarksUUID] = node;\n }\n nodesMap[node.uniqueId.toString()] = node;\n const children = node.getChildren();\n for (const child of children) {\n if (child instanceof TransformNode) {\n traverse(child);\n }\n }\n };\n traverse(root);\n\n this._tempAnimationJSON.forEach((animationJSON) => {\n const target = nodesMap[animationJSON.targetUUID];\n if (animationJSON.type === 'ps' && target instanceof ParticleEmitter) {\n this.addParticleSystemAnimation(\n target,\n animationJSON.startTime,\n animationJSON.duration,\n animationJSON.loop\n );\n return;\n }\n if (animationJSON.type === 'three' && target) {\n const clip = this.resolveTimelineClip(target, animationJSON.clipUUID);\n this.addThreeAnimation(\n target,\n clip,\n animationJSON.startTime,\n animationJSON.duration,\n animationJSON.loop,\n animationJSON.clipUUID\n );\n }\n });\n this.updateDuration();\n this._tempAnimationJSON = [];\n }\n\n toJSON(): any {\n return {\n type: this.type,\n name: this.name,\n animationData: this.animationData.map((animation) => ({\n startTime: animation.startTime,\n duration: animation.duration,\n type: animation.type,\n targetUUID: (animation.target as any)._quarksUUID ?? animation.target.uniqueId.toString(),\n clipUUID: animation.type === 'three' ? animation.clipUUID ?? animation.clip?.uuid : undefined,\n loop: animation.loop,\n })),\n };\n }\n\n static fromJSON(json: any, scene?: Scene): QuarksPrefab {\n const prefab = new QuarksPrefab(json.name || 'QuarksPrefab', scene);\n if (Array.isArray(json.animationData)) {\n prefab._tempAnimationJSON = json.animationData.filter((item: any) => item?.type === 'ps' || item?.type === 'three');\n }\n return prefab;\n }\n\n private resolveTimelineClip(target: TransformNode, clipUUID?: string): QuarksTimelineClip | undefined {\n const animationSources = [\n (target as any).animations,\n (target as any).animationGroups,\n (target.metadata as any)?.animations,\n (target.metadata as any)?.animationGroups,\n ];\n for (const source of animationSources) {\n if (!Array.isArray(source)) continue;\n if (!clipUUID) {\n return source[0];\n }\n const found = source.find((item: any) => item?.uuid === clipUUID);\n if (found) {\n return found;\n }\n }\n return undefined;\n }\n\n private updateDuration(): void {\n let maxDuration = 0;\n this.animationData.forEach((animation) => {\n const endTime = animation.startTime + animation.duration;\n if (endTime > maxDuration) {\n maxDuration = endTime;\n }\n });\n this.duration = maxDuration;\n }\n}\n","import {Scene} from '@babylonjs/core/scene';\nimport {PBRMaterial} from '@babylonjs/core/Materials/PBR/pbrMaterial';\nimport {StandardMaterial} from '@babylonjs/core/Materials/standardMaterial';\n\nexport type BabylonParticleMaterialParameters = Record<string, any>;\n\nexport class ParticleMeshStandardMaterial extends StandardMaterial {\n readonly isParticleMeshStandardMaterial = true;\n\n constructor(name: string, scene?: Scene, parameters: BabylonParticleMaterialParameters = {}) {\n super(name, scene);\n Object.assign(this, parameters);\n }\n}\n\nexport class ParticleMeshPhysicsMaterial extends PBRMaterial {\n readonly isParticleMeshPhysicsMaterial = true;\n\n constructor(name: string, scene?: Scene, parameters: BabylonParticleMaterialParameters = {}) {\n super(name, scene);\n Object.assign(this, parameters);\n }\n}\n","import {loadPlugin} from 'quarks.core';\nimport {MeshSurfaceEmitterPlugin} from './MeshSurfaceEmitter';\nimport {registerShaderChunks} from './shaders';\n\nexport {BatchedRenderer} from './BatchedRenderer';\nexport type {VFXBatchSettings, AdaptivePerformanceOptions, AdaptivePerformanceState} from './BatchedRenderer';\nexport {BatchedParticleRenderer} from './BatchedParticleRenderer';\nexport {VFXBatch, RenderMode} from './VFXBatch';\nexport type {StoredBatchSettings} from './VFXBatch';\nexport {SpriteBatch} from './SpriteBatch';\nexport {TrailBatch} from './TrailBatch';\nexport {ParticleSystem} from './ParticleSystem';\nexport type {\n ParticleSystemParameters,\n BurstParameters,\n BurstParametersJSON,\n ParticleSystemJSONParameters,\n BabylonMetaData,\n} from './ParticleSystem';\nexport {ParticleEmitter} from './ParticleEmitter';\nexport {QuarksUtil} from './QuarksUtil';\nexport {QuarksLoader} from './QuarksLoader';\nexport type {QuarksLoaderOptions} from './QuarksLoader';\nexport {QuarksPrefab} from './QuarksPrefab';\nexport type {AnimationData, QuarksTimelineClip} from './QuarksPrefab';\nexport {MeshSurfaceEmitter, MeshSurfaceEmitterPlugin} from './MeshSurfaceEmitter';\nexport * from './shaders/';\nexport * from './materials/';\nexport * from 'quarks.core';\n\n\n// Re-export quarks.core types (interfaces - type-only)\nexport type {\n IParticleSystem,\n IParticle,\n Particle,\n EmissionState,\n RendererEmitterSettings,\n TrailSettings,\n StretchedBillBoardSettings,\n BillBoardSettings,\n MeshSettings,\n IEmitter,\n ParticleSystemEvent,\n ParticleSystemEventType,\n SerializationOptions,\n Behavior,\n EmitterShape,\n ValueGenerator,\n FunctionValueGenerator,\n ColorGenerator,\n FunctionColorGenerator,\n RotationGenerator,\n Vector3Generator,\n} from 'quarks.core';\n\nregisterShaderChunks();\nloadPlugin(MeshSurfaceEmitterPlugin);\n\n","import {Scene} from '@babylonjs/core/scene';\nimport {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {VertexData} from '@babylonjs/core/Meshes/mesh.vertexData';\nimport {Texture} from '@babylonjs/core/Materials/Textures/texture';\nimport {StandardMaterial} from '@babylonjs/core/Materials/standardMaterial';\nimport {Constants} from '@babylonjs/core/Engines/constants';\nimport {Matrix, Quaternion, Vector3} from '@babylonjs/core/Maths/math.vector';\nimport {\n Behavior,\n EmitSubParticleSystem,\n} from 'quarks.core';\nimport {ParticleSystem} from './ParticleSystem';\nimport {ParticleEmitter} from './ParticleEmitter';\nimport {QuarksPrefab} from './QuarksPrefab';\nimport {ensureTriangleIndices} from './geometryUtil';\n\nexport interface QuarksLoaderOptions {\n baseUrl?: string;\n}\n\ninterface ParsedGeometry {\n positions: Float32Array;\n indices: Uint32Array | Uint16Array;\n uvs?: Float32Array;\n normals?: Float32Array;\n}\n\ninterface LoadedMeta {\n textures: {[uuid: string]: Texture | null};\n geometries: {[uuid: string]: ParsedGeometry};\n materials: {[uuid: string]: any};\n}\n\nexport class QuarksLoader {\n private scene: Scene;\n private options: QuarksLoaderOptions;\n\n constructor(scene: Scene, options: QuarksLoaderOptions = {}) {\n this.scene = scene;\n this.options = options;\n }\n\n async load(url: string): Promise<TransformNode> {\n const baseUrl = this.options.baseUrl || url.substring(0, url.lastIndexOf('/') + 1);\n const response = await fetch(url);\n const json = await response.json();\n return this.parse(json, baseUrl);\n }\n\n parse(json: any, baseUrl: string = ''): TransformNode {\n const meta: LoadedMeta = {\n textures: {},\n geometries: {},\n materials: {},\n };\n\n if (json.geometries) {\n this.parseGeometries(json.geometries, meta);\n }\n if (json.images) {\n this.parseImages(json.images, baseUrl, meta);\n }\n if (json.textures) {\n this.parseTextures(json.textures, meta);\n }\n if (json.materials) {\n this.parseMaterials(json.materials, meta);\n }\n\n const root = this.parseObject(json.object, meta);\n this.linkReferences(root);\n return root;\n }\n\n private parseGeometries(geometries: any[], meta: LoadedMeta): void {\n for (const geom of geometries) {\n if (geom.type === 'PlaneGeometry') {\n const w = geom.width || 1;\n const h = geom.height || 1;\n const hw = w / 2;\n const hh = h / 2;\n meta.geometries[geom.uuid] = {\n positions: new Float32Array([-hw, -hh, 0, hw, -hh, 0, hw, hh, 0, -hw, hh, 0]),\n indices: new Uint32Array([0, 1, 2, 0, 2, 3]),\n uvs: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]),\n normals: new Float32Array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]),\n };\n } else if (geom.type === 'SphereGeometry') {\n meta.geometries[geom.uuid] = this.parseSphereGeometry(geom);\n } else if (geom.type === 'BufferGeometry' && geom.data) {\n const parsed = this.parseBufferGeometry(geom.data);\n meta.geometries[geom.uuid] = parsed;\n } else if (geom.type === 'QuarksGeometry') {\n meta.geometries[geom.uuid] = {\n positions: new Float32Array(geom.positions ?? []),\n indices: geom.indices ? new Uint32Array(geom.indices) : new Uint32Array(0),\n uvs: geom.uvs ? new Float32Array(geom.uvs) : undefined,\n normals: geom.normals ? new Float32Array(geom.normals) : undefined,\n };\n }\n }\n }\n\n private parseSphereGeometry(geom: any): ParsedGeometry {\n const radius = geom.radius ?? 0.5;\n const widthSegments = Math.max(3, Math.floor(geom.widthSegments ?? 16));\n const heightSegments = Math.max(2, Math.floor(geom.heightSegments ?? 8));\n const phiStart = geom.phiStart ?? 0;\n const phiLength = geom.phiLength ?? Math.PI * 2;\n const thetaStart = geom.thetaStart ?? 0;\n const thetaLength = geom.thetaLength ?? Math.PI;\n\n const positions: number[] = [];\n const normals: number[] = [];\n const uvs: number[] = [];\n const indices: number[] = [];\n const grid: number[][] = [];\n\n let index = 0;\n\n for (let iy = 0; iy <= heightSegments; iy++) {\n const verticesRow: number[] = [];\n const v = iy / heightSegments;\n const theta = thetaStart + v * thetaLength;\n\n for (let ix = 0; ix <= widthSegments; ix++) {\n const u = ix / widthSegments;\n const phi = phiStart + u * phiLength;\n\n const x = -radius * Math.cos(phi) * Math.sin(theta);\n const y = radius * Math.cos(theta);\n const z = radius * Math.sin(phi) * Math.sin(theta);\n\n positions.push(x, y, z);\n const length = Math.hypot(x, y, z) || 1;\n normals.push(x / length, y / length, z / length);\n uvs.push(u, 1 - v);\n\n verticesRow.push(index++);\n }\n\n grid.push(verticesRow);\n }\n\n const thetaEnd = thetaStart + thetaLength;\n const isTopFull = thetaStart <= 0;\n const isBottomFull = thetaEnd >= Math.PI;\n\n for (let iy = 0; iy < heightSegments; iy++) {\n for (let ix = 0; ix < widthSegments; ix++) {\n const a = grid[iy][ix + 1];\n const b = grid[iy][ix];\n const c = grid[iy + 1][ix];\n const d = grid[iy + 1][ix + 1];\n\n if (iy !== 0 || !isTopFull) {\n indices.push(a, b, d);\n }\n if (iy !== heightSegments - 1 || !isBottomFull) {\n indices.push(b, c, d);\n }\n }\n }\n\n const typedIndices = positions.length / 3 > 65535 ? new Uint32Array(indices) : new Uint16Array(indices);\n return {\n positions: new Float32Array(positions),\n indices: typedIndices,\n uvs: new Float32Array(uvs),\n normals: new Float32Array(normals),\n };\n }\n\n private parseBufferGeometry(data: any): ParsedGeometry {\n let positions = new Float32Array(0);\n let indices: Uint32Array | Uint16Array = new Uint32Array(0);\n let uvs: Float32Array | undefined;\n let normals: Float32Array | undefined;\n\n if (data.interleavedBuffers && data.arrayBuffers) {\n const buffers: {[uuid: string]: {data: Float32Array; stride: number}} = {};\n for (const [uuid, ibDef] of Object.entries(data.interleavedBuffers) as any[]) {\n const arrayBuffer = data.arrayBuffers[ibDef.buffer];\n if (arrayBuffer) {\n const floatArray = new Float32Array(\n Array.isArray(arrayBuffer) ? this.int32ArrayToFloat32(arrayBuffer) : arrayBuffer\n );\n buffers[uuid] = {data: floatArray, stride: ibDef.stride};\n }\n }\n\n if (data.attributes) {\n if (data.attributes.position?.isInterleavedBufferAttribute) {\n const attr = data.attributes.position;\n const buf = buffers[attr.data];\n if (buf) positions = this.extractInterleavedAttribute(buf.data, buf.stride, attr.offset, attr.itemSize);\n }\n if (data.attributes.uv?.isInterleavedBufferAttribute) {\n const attr = data.attributes.uv;\n const buf = buffers[attr.data];\n if (buf) uvs = this.extractInterleavedAttribute(buf.data, buf.stride, attr.offset, attr.itemSize);\n }\n if (data.attributes.normal?.isInterleavedBufferAttribute) {\n const attr = data.attributes.normal;\n const buf = buffers[attr.data];\n if (buf) normals = this.extractInterleavedAttribute(buf.data, buf.stride, attr.offset, attr.itemSize);\n }\n }\n } else if (data.attributes) {\n if (data.attributes.position?.array) {\n positions = new Float32Array(data.attributes.position.array);\n }\n if (data.attributes.uv?.array) {\n uvs = new Float32Array(data.attributes.uv.array);\n }\n if (data.attributes.normal?.array) {\n normals = new Float32Array(data.attributes.normal.array);\n }\n }\n\n if (data.index) {\n if (data.index.type === 'Uint16Array') {\n indices = new Uint16Array(data.index.array);\n } else {\n indices = new Uint32Array(data.index.array);\n }\n }\n\n indices = ensureTriangleIndices(positions, indices);\n\n return {positions, indices, uvs, normals};\n }\n\n private extractInterleavedAttribute(buffer: Float32Array, stride: number, offset: number, itemSize: number): any {\n const count = Math.floor(buffer.length / stride);\n const result = new Float32Array(count * itemSize);\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < itemSize; j++) {\n result[i * itemSize + j] = buffer[i * stride + offset + j];\n }\n }\n return result;\n }\n\n private int32ArrayToFloat32(intArray: number[]): Float32Array {\n const buffer = new ArrayBuffer(intArray.length * 4);\n const int32View = new Int32Array(buffer);\n for (let i = 0; i < intArray.length; i++) {\n int32View[i] = intArray[i];\n }\n return new Float32Array(buffer) as any;\n }\n\n private parseImages(images: any[], baseUrl: string, _meta: LoadedMeta): void {\n (this as any)._images = {};\n for (const img of images) {\n (this as any)._images[img.uuid] = img.url ? baseUrl + img.url : null;\n }\n }\n\n private parseTextures(textures: any[], meta: LoadedMeta): void {\n const images = (this as any)._images || {};\n for (const texDef of textures) {\n const imageUrl = images[texDef.image];\n if (imageUrl) {\n const texture = new Texture(imageUrl, this.scene);\n if (Array.isArray(texDef.wrap)) {\n texture.wrapU = this.mapWrapMode(texDef.wrap[0]);\n texture.wrapV = this.mapWrapMode(texDef.wrap[1] ?? texDef.wrap[0]);\n }\n if (Array.isArray(texDef.repeat)) {\n texture.uScale = texDef.repeat[0] ?? 1;\n texture.vScale = texDef.repeat[1] ?? 1;\n }\n if (Array.isArray(texDef.offset)) {\n texture.uOffset = texDef.offset[0] ?? 0;\n texture.vOffset = texDef.offset[1] ?? 0;\n }\n if (typeof texDef.rotation === 'number') {\n texture.wAng = texDef.rotation;\n }\n meta.textures[texDef.uuid] = texture;\n } else {\n meta.textures[texDef.uuid] = null;\n }\n }\n }\n\n private mapWrapMode(wrapMode?: number): number {\n switch (wrapMode) {\n case 1001: // ClampToEdgeWrapping (three.js)\n return Texture.CLAMP_ADDRESSMODE;\n case 1002: // MirroredRepeatWrapping (three.js)\n return Texture.MIRROR_ADDRESSMODE;\n case 1000: // RepeatWrapping (three.js)\n default:\n return Texture.WRAP_ADDRESSMODE;\n }\n }\n\n private parseMaterials(materials: any[], meta: LoadedMeta): void {\n for (const matDef of materials) {\n const matInfo: any = {\n uuid: matDef.uuid,\n transparent: matDef.transparent ?? true,\n blending: matDef.blending ?? 1,\n side: matDef.side ?? 2,\n depthTest: matDef.depthTest ?? true,\n depthWrite: matDef.depthWrite ?? false,\n alphaTest: matDef.alphaTest ?? 0,\n texture: null,\n };\n\n // three.js MeshBasicMaterial uses `map`; QuarksMaterial (what ParticleSystem.toJSON\n // emits) uses `texture`. Accept both so library-exported effects round-trip.\n const textureRef = matDef.map ?? matDef.texture;\n if (textureRef) {\n matInfo.texture = meta.textures[textureRef] || null;\n }\n\n // QuarksMaterial (what ParticleSystem.ensureMaterialMeta emits) writes `alphaMode`\n // directly as a Babylon alpha-mode constant; three.js materials (MeshBasicMaterial\n // etc.) instead use `blending` with three.js's own 1..4 numbering, which does NOT\n // line up with Babylon's constants (e.g. three.js Additive=2 vs Babylon ALPHA_ADD=1)\n // — only convert through the table when there's no native alphaMode to trust.\n if (typeof matDef.alphaMode === 'number') {\n matInfo.alphaMode = matDef.alphaMode;\n } else {\n const blendingToAlphaMode: {[key: number]: number} = {\n 1: Constants.ALPHA_COMBINE,\n 2: Constants.ALPHA_ADD,\n 3: Constants.ALPHA_SUBTRACT,\n 4: Constants.ALPHA_MULTIPLY,\n };\n matInfo.alphaMode = blendingToAlphaMode[matDef.blending] || Constants.ALPHA_COMBINE;\n }\n\n meta.materials[matDef.uuid] = matInfo;\n }\n }\n\n private getGeometry(meta: LoadedMeta, geometryId: string | undefined): ParsedGeometry | undefined {\n if (!geometryId) return undefined;\n return meta.geometries[geometryId];\n }\n\n private getMaterial(meta: LoadedMeta, materialId: string | string[] | undefined): any | undefined {\n if (!materialId) return undefined;\n const selectedId = Array.isArray(materialId) ? materialId[0] : materialId;\n return meta.materials[selectedId];\n }\n\n private createPlaceholderNode(type: string, name?: string): TransformNode {\n const node = new TransformNode(name || type || 'node', this.scene);\n (node as any).quarksOriginalType = type;\n return node;\n }\n\n private createMeshNode(data: any, meta: LoadedMeta): Mesh {\n const mesh = new Mesh(data.name || data.type || 'mesh', this.scene);\n const geometry = this.getGeometry(meta, data.geometry);\n if (geometry && geometry.positions.length > 0 && geometry.indices.length > 0) {\n const vertexData = new VertexData();\n vertexData.positions = geometry.positions;\n vertexData.indices = geometry.indices;\n if (geometry.uvs && geometry.uvs.length > 0) {\n vertexData.uvs = geometry.uvs;\n }\n if (geometry.normals && geometry.normals.length > 0) {\n vertexData.normals = geometry.normals;\n }\n vertexData.applyToMesh(mesh, true);\n }\n\n const materialInfo = this.getMaterial(meta, data.material);\n if (materialInfo) {\n const material = new StandardMaterial(`quarks_loader_material_${materialInfo.uuid}`, this.scene);\n material.alphaMode = materialInfo.alphaMode ?? Constants.ALPHA_COMBINE;\n material.backFaceCulling = materialInfo.side !== 2;\n material.alphaCutOff = materialInfo.alphaTest ?? 0;\n material.disableDepthWrite = !(materialInfo.depthWrite ?? false);\n if (materialInfo.texture) {\n material.diffuseTexture = materialInfo.texture;\n material.opacityTexture = materialInfo.texture;\n }\n mesh.material = material;\n }\n return mesh;\n }\n\n private parseObject(data: any, meta: LoadedMeta): TransformNode {\n let node: TransformNode;\n switch (data.type) {\n case 'QuarksPrefab':\n node = QuarksPrefab.fromJSON(data, this.scene);\n break;\n case 'ParticleEmitter':\n if (data.ps) {\n const ps = this.parseParticleSystem(data.ps, meta);\n node = ps.emitter;\n break;\n }\n node = this.createPlaceholderNode(data.type, data.name);\n break;\n case 'Mesh':\n case 'SkinnedMesh':\n case 'InstancedMesh':\n case 'BatchedMesh':\n node = this.createMeshNode(data, meta);\n break;\n case 'Scene':\n case 'Group':\n case 'Object3D':\n case 'PerspectiveCamera':\n case 'OrthographicCamera':\n case 'AmbientLight':\n case 'DirectionalLight':\n case 'PointLight':\n case 'RectAreaLight':\n case 'SpotLight':\n case 'HemisphereLight':\n case 'LightProbe':\n case 'LOD':\n case 'Line':\n case 'LineSegments':\n case 'LineLoop':\n case 'PointCloud':\n case 'Points':\n case 'Sprite':\n case 'Bone':\n node = this.createPlaceholderNode(data.type, data.name);\n break;\n default:\n node = new TransformNode(data.name || data.type || 'node', this.scene);\n }\n\n if (data.uuid) (node as any)._quarksUUID = data.uuid;\n if (data.name) node.name = data.name;\n\n if (data.matrix) {\n const matrix = Matrix.FromArray(data.matrix);\n const scaling = new Vector3(1, 1, 1);\n const rotation = Quaternion.Identity();\n const translation = new Vector3(0, 0, 0);\n matrix.decompose(scaling, rotation, translation);\n node.position.copyFrom(translation);\n node.scaling.copyFrom(scaling);\n node.rotationQuaternion = rotation;\n } else {\n if (data.position) node.position.set(data.position[0], data.position[1], data.position[2]);\n if (data.scale) node.scaling.set(data.scale[0], data.scale[1], data.scale[2]);\n if (data.quaternion) {\n node.rotationQuaternion = new Quaternion(data.quaternion[0], data.quaternion[1], data.quaternion[2], data.quaternion[3]);\n } else if (data.rotation) {\n node.rotation.set(data.rotation[0], data.rotation[1], data.rotation[2]);\n }\n }\n\n if (data.visible !== undefined) node.setEnabled(data.visible);\n\n if (data.children) {\n for (const childData of data.children) {\n const child = this.parseObject(childData, meta);\n child.parent = node;\n }\n }\n\n return node;\n }\n\n private parseParticleSystem(json: any, meta: LoadedMeta): ParticleSystem {\n const dependencies: {[uuid: string]: Behavior} = {};\n const ps = ParticleSystem.fromJSON(json, meta as any, dependencies, this.scene);\n (ps as any)._meshSurfaceReferenceUUID = json?.shape?.type === 'mesh_surface' ? json?.shape?.mesh : undefined;\n return ps;\n }\n\n private linkReferences(root: TransformNode): void {\n const nodesMap: {[uuid: string]: TransformNode} = {};\n\n const traverse = (node: TransformNode) => {\n if ((node as any)._quarksUUID) {\n nodesMap[(node as any)._quarksUUID] = node;\n }\n for (const child of node.getChildren()) {\n if (child instanceof TransformNode) {\n traverse(child);\n }\n }\n };\n traverse(root);\n\n const linkNode = (node: TransformNode) => {\n if (node instanceof QuarksPrefab) {\n node.resolveReferences(root);\n }\n if (node instanceof ParticleEmitter) {\n const system = node.system as ParticleSystem;\n const meshSurfaceUUID = (system as any)._meshSurfaceReferenceUUID;\n if (meshSurfaceUUID && (system.emitterShape as any).type === 'mesh_surface') {\n const targetNode = nodesMap[meshSurfaceUUID];\n if (targetNode instanceof Mesh) {\n (system.emitterShape as any).mesh = targetNode;\n }\n }\n for (let i = 0; i < system.behaviors.length; i++) {\n if (system.behaviors[i] instanceof EmitSubParticleSystem) {\n const subEmitter = system.behaviors[i] as EmitSubParticleSystem;\n const targetUUID = subEmitter.subParticleSystem as any;\n if (typeof targetUUID === 'string' && nodesMap[targetUUID]) {\n const resolved = nodesMap[targetUUID];\n (subEmitter as any).subParticleSystem = resolved;\n if (resolved instanceof ParticleEmitter) {\n (resolved.system as ParticleSystem).onlyUsedByOther = true;\n }\n }\n }\n }\n }\n for (const child of node.getChildren()) {\n if (child instanceof TransformNode) {\n linkNode(child);\n }\n }\n };\n linkNode(root);\n }\n}\n","export default /* glsl */ `\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute vec4 rotation;\nattribute float uvTile;\n\n// Uniforms\nuniform mat4 worldViewProjection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n\nvec3 applyQuaternion(vec3 v, vec4 q) {\n vec3 qVec = q.xyz;\n float qW = q.w;\n vec3 t = 2.0 * cross(qVec, v);\n return v + qW * t + cross(qVec, t);\n}\n\nvoid main() {\n vec3 rotatedPosition = applyQuaternion(position * size, rotation);\n vec3 worldPos = rotatedPosition + offset;\n\n gl_Position = worldViewProjection * vec4(worldPos, 1.0);\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n`;\n"],"names":["_lut","_seed","DEG2RAD","Math","PI","RAD2DEG","generateUUID","d0","random","d1","d2","d3","toLowerCase","clamp","value","min","max","euclideanModulo","n","m","mapLinear","x","a1","a2","b1","b2","inverseLerp","y","lerp","t","damp","lambda","dt","exp","pingpong","length","abs","smoothstep","smootherstep","randInt","low","high","floor","randFloat","randFloatSpread","range","seededRandom","s","undefined","imul","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","pow","ceil","log","LN2","floorPowerOfTwo","setQuaternionFromProperEuler","q","a","b","c","order","cos","sin","c2","s2","c13","s13","c1_3","s1_3","c3_1","s3_1","set","console","warn","denormalize","array","constructor","Float32Array","Uint32Array","Uint16Array","Uint8Array","Int32Array","Int16Array","Int8Array","Error","normalize","round","MathUtils","Quaternion","z","w","this","isQuaternion","_x","_y","_z","_w","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","Number","EPSILON","sqrt","len","atan2","tDir","f","multiplyQuaternionsFlat","_onChangeCallback","clone","copy","quaternion","setFromEuler","euler","update","_order","c1","c3","s1","s3","setFromAxisAngle","axis","angle","halfAngle","setFromRotationMatrix","te","elements","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","vFrom","vTo","r","dot","angleTo","acos","rotateTowards","step","slerp","identity","invert","conjugate","v","lengthSq","l","multiply","multiplyQuaternions","premultiply","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","slerpQuaternions","qa","theta1","theta2","r1","r2","equals","fromArray","offset","toArray","toJSON","_onChange","callback","Symbol","iterator","Vector3","isVector3","prototype","setScalar","scalar","setX","setY","setZ","setComponent","index","getComponent","add","addScalar","addVectors","addScaledVector","sub","subScalar","subVectors","multiplyScalar","multiplyVectors","applyEuler","applyQuaternion","_quaternion$1","applyAxisAngle","applyMatrix3","e","applyNormalMatrix","applyMatrix4","vx","vy","vz","qx","qy","qz","qw","tx","ty","tz","transformDirection","divide","divideScalar","clampScalar","minVal","maxVal","clampLength","roundToZero","trunc","negate","manhattanLength","setLength","alpha","lerpVectors","v1","v2","cross","crossVectors","ax","ay","az","bx","by","bz","projectOnVector","denominator","projectOnPlane","planeNormal","_vector","reflect","normal","theta","distanceTo","distanceToSquared","dx","dy","dz","manhattanDistanceTo","setFromSphericalCoords","radius","phi","sinPhiRadius","setFromCylindricalCoords","setFromMatrixPosition","setFromMatrixScale","sx","setFromMatrixColumn","sy","sz","setFromMatrix3Column","randomDirection","u","WebGLCoordinateSystem","WebGPUCoordinateSystem","Matrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","isMatrix4","extractPosition","copyPosition","multiplyToArray","error","setRotationFromQuaternion","makeRotationFromQuaternion","me","setFromMatrix3","extractBasis","xAxis","yAxis","zAxis","makeBasis","extractRotation","scaleX","_v1","scaleY","scaleZ","makeRotationFromEuler","d","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","compose","_zero","_one","lookAt","eye","target","up","multiplyMatrices","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","determinant","transpose","tmp","setPosition","t11","t12","t13","t14","det","detInv","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","makeScale","makeShear","xy","xz","yx","yz","zx","zy","position","x2","y2","z2","xx","yy","zz","wx","wy","wz","decompose","_m1","invSX","invSY","invSZ","makePerspective","left","right","top","bottom","near","far","coordinateSystem","makeOrthographic","h","p","zInv","matrix","i","_matrix","_quaternion","Euler","DEFAULT_ORDER","isEuler","asin","setFromQuaternion","setFromVector3","reorder","newOrder","Vector2","width","height","rotateAround","center","isVector2","Vector4","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","epsilon","epsilon2","Matrix3","isMatrix3","setFromMatrix4","g","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","_m3","rotate","makeRotation","translate","EmitterMode","getValueFromEmitterMode","mode","currentValue","spread","emissionState","Random","Burst","isBursting","burstParticleIndex","burstParticleCount","Loop","PingPong","Bezier","p1","p2","p3","p4","genValue","t2","t3","mt","mt2","mt3","derivativeCoefficients","points","dpoints","list","j","dpt","push","getSlope","controlCurve","hull","pt","_p","idx","split","span","p0","fromJSON","json","ColorToJSON","color","JSONToColor","JSONToValue","type","ValueToJSON","RandomColor","startGen","memory","genColor","rand","ColorRange","indexCount","ContinuousLinearFunction","keys","subType","findKey","mid","getStartX","getEndX","name","map","pos","pair","tempVec3","Gradient","functions","func","function","start","key","gradient","tempColor","RandomColorBetweenGradient","gradient1","gradient2","ConstantColor","memoryGenerator","ColorGeneratorFromJSON","ConstantValue","IntervalValue","PiecewiseFunction","Array","findFunction","setStartX","setEndX","insertFunction","splice","removeFunction","getFunction","setFunction","numOfFunctions","PiecewiseBezier","curves","super","toSVG","segments","result","join","bezier","piecewiseFunction","ValueGeneratorFromJSON","RandomQuatGenerator","quat","delta","AxisAngleGenerator","EulerGenerator","angleX","angleY","angleZ","eulerOrder","eular","RotationGeneratorFromJSON","Vector3Function","vec","Vector3GeneratorFromJSON","GeneratorFromJSON","ConeEmitter","parameters","arc","thickness","speed","system","time","duration","initialize","sinTheta","cosTheta","velocity","startSpeed","CircleEmitter","randomInt","UP_VEC3","ZERO_VEC3","ONE_VEC3","Z_VEC3","DonutEmitter","donutRadius","PointEmitter","cbrt","sinPhi","cosPhi","SphereEmitter","HemisphereEmitter","GridEmitter","column","row","RectangleEmitter","point","thicknessScale","EmitterShapes","circle","params","loadJSON","cone","donut","sphere","hemisphere","grid","rectangle","EmitterFromJSON","meta","ColorOverLife","particle","age","life","startColor","frameUpdate","reset","RotationOverLife","angularVelocity","Rotation3DOverLife","tempQuat","tempQuat2","ForceOverLife","particleSystem","ps","_temp","_tempScale","_tempQ","worldSpace","translation","emitter","matrixWorld","UNIT_X","UNIT_Y","UNIT_Z","VelocityOverLife","linearX","linearY","linearZ","orbitalX","orbitalY","orbitalZ","space","_tempEmitterPos","_tempQInv","_tempScaleInv","_tempRot","_tempAxis","worldPivot","orbit","worldAxes","readValue","field","InheritVelocity","multiplier","_tempPos","emitterVelocity","decomposeInverse","SizeOverLife","size","startSize","SpeedOverLife","speedModifier","FrameOverLife","frame","uvTile","OrbitOverLife","orbitSpeed","temp","LinkedListNode","data","next","prev","hasPrev","hasNext","LinkedList","head","tail","isEmpty","clear","front","back","dequeue","pop","queue","node","insertBefore","newNode","remove","tempNode","values","current","SpriteParticle","died","RecordState","TrailParticle","previous","WidthOverLength","iter","ApplyForce","direction","magnitude","dataCount","magnitudeValue","force","GravityForce","ChangeEmitDirection","_q","SubParticleEmitMode","EmitSubParticleSystem","useVelocityAsBasis","subParticleSystem","Frame","emitProbability","q_","v_","v2_","subEmissions","onlyUsedByOther","Birth","Death","emit","setMatrixFromParticle","burstIndex","burstWaveIndex","waitEmiting","travelDistance","subEmissionState","uuid","len2","F2","G2","F3","G3","F4","G4","grad3","grad4","SimplexNoise","randomOrSeed","seed","s0","mash","toString","charCodeAt","masher","alea","aux","buildPermutationTable","perm","permMod12","noise2D","n0","n1","n2","i1","j1","ii","jj","t0","gi0","t1","gi1","gi2","noise3D","n3","k","k1","i2","j2","k2","x3","y3","z3","kk","gi3","noise4D","n4","rankx","ranky","rankz","rankw","l1","l2","i3","j3","k3","l3","w2","w3","x4","y4","z4","w4","ll","t4","gi4","TurbulenceField","octaves","velocityMultiplier","timeScale","generator","timeOffset","temp2","lvl","generators","tempV","tempQ","Noise","frequency","power","positionAmount","rotationAmount","lastPosNoise","lastRotNoise","generatorIndex","_","TextureSequencer","locations","transform","textureSequencer","loc","fromImage","img","threshold","canvas","document","createElement","ctx","getContext","drawImage","getImageData","colorSpace","SequencerFromJSON","ApplySequences","delayBetweenParticles","sequencers","pCount","delay","id","begin","inMotion","sequencer","BEZIER","appendSequencer","seq","forEach","sequencerJson","applySequences","physicsResolver","getPhysicsResolver","ApplyCollision","resolver","bounce","resolve","ColorBySpeed","speedRange","SizeBySpeed","RotationBySpeed","LimitSpeedOverLife","dampen","limit","percent","BehaviorTypes","BehaviorFromJSON","Plugins","loadPlugin","plugin","find","item","emitterShape","emitterShapes","behavior","behaviors","MeshSurfaceEmitter","mesh","_mesh","positions","getVerticesData","VertexBuffer","PositionKind","indices","getIndices","_positions","_indices","_triangleIndexToArea","area","triCount","i0","meshReferenceId","_meshReferenceId","u1","u2","idx0","idx1","idx2","cz","nx","ny","nz","uniqueId","_system","_delta","MeshSurfaceEmitterPlugin","shaderChunks","registered","registerShaderChunks","tile_pars_vertex","tile_vertex","tile_pars_fragment","tile_fragment","soft_pars_vertex","soft_vertex","soft_pars_fragment","soft_fragment","RenderMode","particle_vert","particle_frag","local_particle_physics_vert","particle_physics_frag","stretched_bb_particle_vert","trail_vert","trail_frag","VFXBatch","settings","scene","maxParticles","systems","Set","instancingGeometry","instancingIndices","instancingUVs","instancingNormals","renderMode","renderOrder","uTileCount","vTileCount","blendTiles","softParticles","softNearFade","softFarFade","materialBlendMode","materialTransparent","materialDepthTest","materialDepthWrite","materialAlphaTest","texture","layerMask","Mesh","alwaysSelectAsActiveMesh","addSystem","removeSystem","delete","getVisibleSystems","visibleSystems","visible","applyDepthTexture","depthTexture","material","ShaderMaterial","setTexture","dispose","SpriteBatch","vector_","vector2_","vector3_","quaternion_","quaternion2_","quaternion3_","rotationMat_","rotationMat2_","lastStretchedSpeedFactor","NaN","setupBuffers","rebuildMaterial","vertexData","VertexData","uvs","normals","applyToMesh","buildExpandableBuffers","engine","getEngine","offsetBuffer","offsetVB","setVerticesBuffer","colorBuffer","colorVB","sizeBuffer","sizeVB","uvTileBuffer","uvTileVB","rotationBuffer","rotationVB","StretchedBillBoard","velocityBuffer","velocityVB","forcedInstanceCount","doNotSyncBoundingInfo","expandBuffers","shaderName","Date","now","vertexShader","fragmentShader","defines","VerticalBillBoard","HorizontalBillBoard","Effect","ShadersStore","attributes","uniforms","samplers","mat","vertex","fragment","needAlphaBlending","setFloat","setVector2","BVector2","onBindObservable","camera","activeCamera","setVector4","BVector4","minZ","maxZ","setVector3","BVector3","backFaceCulling","alphaMode","Constants","ALPHA_DISABLE","needDepthPrePass","forceDepthWrite","disableDepthWrite","particleCount","isMeshRender","isStretchedRender","particleNum","particles","systemWorldSpace","absScaleX","absScaleY","absScaleZ","parentQ","parentMatrix","ri","oi","ci","si","speedFactor","rendererEmitterSettings","lengthFactor","vel","vi","clampedSpeedFactor","setEnabled","TrailBatch","getTrailHistoryCount","fastHistoryCount","_trailHistoryCount","buildGeometryBuffers","positionBuffer","previousBuffer","nextBuffer","uvBuffer","sideBuffer","widthBuffer","indexBuffer","setVerticesData","UVKind","ColorKind","setIndices","subarray","previousVB","nextVB","sideVB","widthVB","setBoundingInfo","BoundingInfo","subMeshes","_boundingInfo","getBoundingInfo","getRenderWidth","getRenderHeight","renderEngine","triangles","computeWorldMatrix","tileWidth","tileHeight","objectScale","particleAny","fastHistoryCapacity","_trailHistoryCapacity","fastHistoryHead","_trailHistoryHead","fastHistoryPositions","_trailHistoryPositions","fastHistorySizes","_trailHistorySizes","fastHistoryColors","_trailHistoryColors","hasFastHistory","historyCapacity","historyHead","historyPositions","historySizes","historyColors","particleHistory","particleHistoryLength","col","matrixToUse","previousNode","currentNode","nextNode","oldestFastHistoryIndex","currentX","currentY","currentZ","currentSize","currentColorX","currentColorY","currentColorZ","currentColorW","previousX","previousY","previousZ","nextX","nextY","nextZ","currentHistoryIndex","currentPosIndex","previousPosIndex","nextPosIndex","currentColorIndex","pi","ui","cci","updateVerticesData","updateIndices","getVertexBuffer","meshBoundingInfo","subMesh","verticesCount","BatchedRenderer","TransformNode","batches","systemToBatchIndex","Map","adaptivePerformanceState","enabled","targetFrameMs","minQuality","maxQuality","decreaseStep","increaseStep","currentQuality","lastFrameCpuMs","lastAppliedQuality","_renderer","setQualityFactor","getRendererSettings","batch","getScene","Trail","BillBoard","parent","deleteSystem","batchIndex","get","updateSystem","setDepthTexture","configureAdaptivePerformance","options","state","disableAdaptivePerformance","resetQuality","applyAdaptiveQuality","getAdaptivePerformanceState","quality","adaptiveState","frameStart","performance","BatchedParticleRenderer","ParticleEmitter","getWorldMatrix","_matrixWorld","isEnabled","extractFromCache","cache","metadata","clonedEmitter","copyFrom","scaling","rotationQuaternion","_quarksUUID","ensureTriangleIndices","vertexCount","out","UP","tempV2","DEFAULT_POSITIONS","DEFAULT_UVS","DEFAULT_INDICES","ParticleSystem","layers","layerMaskProxy","rendererSettings","neededToUpdateRender","materialRef","applyMaterialSettings","geometry","restart","blending","needRestart","startRotation","startLength","followLocalOrigin","startDelayTimeLeft","tempEmitterPos","normalMatrix","listeners","qualityFactor","useFastTrailHistory","firstTimeUpdate","mask","Object","defineProperty","enumerable","autoDestroy","startDelay","looping","prewarm","startLife","emissionOverTime","emissionOverDistance","emissionBursts","shape","blendMode","ALPHA_ADD","transparent","depthTest","depthWrite","alphaTest","createFallbackNormals","startTileIndex","paused","burst","count","refreshTrailHistoryMode","emitEnded","markForDestroy","prewarmed","overrides","resolvedTexture","albedoTexture","diffuseTexture","emissiveTexture","opacityTexture","baseTexture","resolvedBlendMode","resolvedTransparent","resolvedDepthTest","disableDepthTest","resolvedDepthWrite","resolvedAlphaTest","alphaCutOff","alphaCutOffValue","pause","play","stop","some","ensureTrailHistoryCapacity","capacity","trailAny","resetTrailHistory","updateFastTrailHistory","sizes","colors","posIndex","colorIndex","spawn","behaviorCount","isTrailMode","timeRatio","trailSettings","Boolean","sprite","trail","localPosition","endEmit","fire","previousEmitterPos","emitterElements","emitterMatrix","trailParticle","liveParticleCount","emissionBurstCount","totalSpawn","probability","rawCount","previousWorldPos","emitPerMeter","metaData","_options","geometries","materials","textures","images","shapes","skeletons","animations","nodes","geometryUUID","ensureGeometryMeta","materialUUID","ensureMaterialMeta","rendererEmitterSettingsJSON","toRendererSettingsJSON","version","interval","cycle","dependencies","materialMeta","materialTextureRef","resolvedGeometryEntry","resolvedGeometry","resolveGeometryData","cycleCount","sourceMaterial","behaviorJson","filter","nextSerializationId","prefix","serializationCounter","from","textureUUID","entry","uv","addBehavior","addEventListener","event","removeAllEventListeners","removeEventListener","indexOf","newBehaviors","QuarksUtil","runOnAllParticleEmitters","root","traverseNode","addToBatchRenderer","batchRenderer","setAutoDestroy","children","getChildren","child","QuarksPrefab","animationData","isPlaying","currentTime","_lastUpdateTimeMs","_tempAnimationJSON","registerBatchedRenderer","renderer","_batchedRenderer","addParticleSystemAnimation","startTime","loop","updateDuration","addThreeAnimation","clip","clipUUID","removeAnimation","animation","forceDelta","previousTime","endTime","isActive","wasActive","setTime","getDuration","resolveReferences","nodesMap","traverse","animationJSON","targetUUID","resolveTimelineClip","prefab","isArray","animationSources","animationGroups","source","found","maxDuration","ParticleMeshStandardMaterial","StandardMaterial","isParticleMeshStandardMaterial","assign","ParticleMeshPhysicsMaterial","PBRMaterial","isParticleMeshPhysicsMaterial","load","url","baseUrl","substring","lastIndexOf","response","fetch","parse","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","object","linkReferences","geom","hw","hh","parseSphereGeometry","parsed","parseBufferGeometry","widthSegments","heightSegments","phiStart","phiLength","thetaStart","thetaLength","iy","verticesRow","ix","hypot","isTopFull","isBottomFull","typedIndices","interleavedBuffers","arrayBuffers","buffers","ibDef","entries","arrayBuffer","buffer","floatArray","int32ArrayToFloat32","stride","isInterleavedBufferAttribute","attr","buf","extractInterleavedAttribute","itemSize","intArray","ArrayBuffer","int32View","_meta","_images","texDef","imageUrl","image","Texture","wrap","wrapU","mapWrapMode","wrapV","repeat","uScale","vScale","uOffset","vOffset","wAng","wrapMode","CLAMP_ADDRESSMODE","MIRROR_ADDRESSMODE","WRAP_ADDRESSMODE","matDef","matInfo","side","textureRef","blendingToAlphaMode","ALPHA_COMBINE","ALPHA_SUBTRACT","ALPHA_MULTIPLY","getGeometry","geometryId","getMaterial","materialId","selectedId","createPlaceholderNode","quarksOriginalType","createMeshNode","materialInfo","parseParticleSystem","Matrix","FromArray","Identity","childData","_meshSurfaceReferenceUUID","linkNode","meshSurfaceUUID","targetNode","subEmitter","resolved","chunkName","pluginId"],"mappings":"umBAKA,MAAMA,EAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KA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"}
1
+ {"version":3,"file":"babylon.quarks.cjs","sources":["../../quarks.core/dist/quarks.core.esm.js","../src/MeshSurfaceEmitter.ts","../src/shaders/chunks/register-shader-chunks.ts","../src/shaders/chunks/tile_pars_vertex.glsl.ts","../src/shaders/chunks/tile_vertex.glsl.ts","../src/shaders/chunks/tile_pars_fragment.glsl.ts","../src/shaders/chunks/tile_fragment.glsl.ts","../src/shaders/chunks/soft_pars_vertex.glsl.ts","../src/shaders/chunks/soft_vertex.glsl.ts","../src/shaders/chunks/soft_pars_fragment.glsl.ts","../src/shaders/chunks/soft_fragment.glsl.ts","../src/shaders/particle_vert.glsl.ts","../src/VFXBatch.ts","../src/shaders/particle_frag.glsl.ts","../src/shaders/local_particle_physics_vert.glsl.ts","../src/shaders/particle_physics_frag.glsl.ts","../src/shaders/stretched_bb_particle_vert.glsl.ts","../src/shaders/trail_vert.glsl.ts","../src/shaders/trail_frag.glsl.ts","../src/SpriteBatch.ts","../src/TrailBatch.ts","../src/BatchedRenderer.ts","../src/BatchedParticleRenderer.ts","../src/ParticleEmitter.ts","../src/geometryUtil.ts","../src/ParticleSystem.ts","../src/QuarksUtil.ts","../src/QuarksPrefab.ts","../src/materials/ParticleMaterials.ts","../src/index.ts","../src/QuarksLoader.ts","../src/shaders/local_particle_vert.glsl.ts"],"sourcesContent":["/**\n * quarks.core v0.17.8 build Fri Jul 10 2026\n * https://quarks.art\n * Copyright 2026 Alchemist0823 <the.forrest.sun@gmail.com>, MIT\n */\nconst _lut = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff'];\nlet _seed = 1234567;\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n const d0 = Math.random() * 0xffffffff | 0;\n const d1 = Math.random() * 0xffffffff | 0;\n const d2 = Math.random() * 0xffffffff | 0;\n const d3 = Math.random() * 0xffffffff | 0;\n const uuid = _lut[d0 & 0xff] + _lut[d0 >> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' +\n _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' +\n _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] +\n _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff];\n // .toLowerCase() here flattens concatenated strings to save heap memory space.\n return uuid.toLowerCase();\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n// Linear mapping from range <a1, a2> to range <b1, b2>\nfunction mapLinear(x, a1, a2, b1, b2) {\n return b1 + (x - a1) * (b2 - b1) / (a2 - a1);\n}\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp(x, y, value) {\n if (x !== y) {\n return (value - x) / (y - x);\n }\n else {\n return 0;\n }\n}\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp(x, y, t) {\n return (1 - t) * x + t * y;\n}\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp(x, y, lambda, dt) {\n return lerp(x, y, 1 - Math.exp(-lambda * dt));\n}\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong(x, length = 1) {\n return length - Math.abs(euclideanModulo(x, length * 2) - length);\n}\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep(x, min, max) {\n if (x <= min)\n return 0;\n if (x >= max)\n return 1;\n x = (x - min) / (max - min);\n return x * x * (3 - 2 * x);\n}\nfunction smootherstep(x, min, max) {\n if (x <= min)\n return 0;\n if (x >= max)\n return 1;\n x = (x - min) / (max - min);\n return x * x * x * (x * (x * 6 - 15) + 10);\n}\n// Random integer from <low, high> interval\nfunction randInt(low, high) {\n return low + Math.floor(Math.random() * (high - low + 1));\n}\n// Random float from <low, high> interval\nfunction randFloat(low, high) {\n return low + Math.random() * (high - low);\n}\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread(range) {\n return range * (0.5 - Math.random());\n}\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom(s) {\n if (s !== undefined)\n _seed = s;\n // Mulberry32 generator\n let t = _seed += 0x6D2B79F5;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n}\nfunction degToRad(degrees) {\n return degrees * DEG2RAD;\n}\nfunction radToDeg(radians) {\n return radians * RAD2DEG;\n}\nfunction isPowerOfTwo(value) {\n return (value & (value - 1)) === 0 && value !== 0;\n}\nfunction ceilPowerOfTwo(value) {\n return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));\n}\nfunction floorPowerOfTwo(value) {\n return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));\n}\nfunction setQuaternionFromProperEuler(q, a, b, c, order) {\n // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n // rotations are applied to the axes in the order specified by 'order'\n // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n // angles are in radians\n const cos = Math.cos;\n const sin = Math.sin;\n const c2 = cos(b / 2);\n const s2 = sin(b / 2);\n const c13 = cos((a + c) / 2);\n const s13 = sin((a + c) / 2);\n const c1_3 = cos((a - c) / 2);\n const s1_3 = sin((a - c) / 2);\n const c3_1 = cos((c - a) / 2);\n const s3_1 = sin((c - a) / 2);\n switch (order) {\n case 'XYX':\n q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);\n break;\n case 'YZY':\n q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);\n break;\n case 'ZXZ':\n q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);\n break;\n case 'XZX':\n q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);\n break;\n case 'YXY':\n q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);\n break;\n case 'ZYZ':\n q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);\n break;\n default:\n console.warn('../math.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order);\n }\n}\nfunction denormalize(value, array) {\n switch (array.constructor) {\n case Float32Array:\n return value;\n case Uint32Array:\n return value / 4294967295.0;\n case Uint16Array:\n return value / 65535.0;\n case Uint8Array:\n return value / 255.0;\n case Int32Array:\n return Math.max(value / 2147483647.0, -1);\n case Int16Array:\n return Math.max(value / 32767.0, -1);\n case Int8Array:\n return Math.max(value / 127.0, -1);\n default:\n throw new Error('Invalid component type.');\n }\n}\nfunction normalize(value, array) {\n switch (array.constructor) {\n case Float32Array:\n return value;\n case Uint32Array:\n return Math.round(value * 4294967295.0);\n case Uint16Array:\n return Math.round(value * 65535.0);\n case Uint8Array:\n return Math.round(value * 255.0);\n case Int32Array:\n return Math.round(value * 2147483647.0);\n case Int16Array:\n return Math.round(value * 32767.0);\n case Int8Array:\n return Math.round(value * 127.0);\n default:\n throw new Error('Invalid component type.');\n }\n}\nconst MathUtils = {\n DEG2RAD: DEG2RAD,\n RAD2DEG: RAD2DEG,\n generateUUID: generateUUID,\n clamp: clamp,\n euclideanModulo: euclideanModulo,\n mapLinear: mapLinear,\n inverseLerp: inverseLerp,\n lerp: lerp,\n damp: damp,\n pingpong: pingpong,\n smoothstep: smoothstep,\n smootherstep: smootherstep,\n randInt: randInt,\n randFloat: randFloat,\n randFloatSpread: randFloatSpread,\n seededRandom: seededRandom,\n degToRad: degToRad,\n radToDeg: radToDeg,\n isPowerOfTwo: isPowerOfTwo,\n ceilPowerOfTwo: ceilPowerOfTwo,\n floorPowerOfTwo: floorPowerOfTwo,\n setQuaternionFromProperEuler: setQuaternionFromProperEuler,\n normalize: normalize,\n denormalize: denormalize\n};\n\nclass Quaternion {\n constructor(x = 0, y = 0, z = 0, w = 1) {\n this.isQuaternion = true;\n this._x = x;\n this._y = y;\n this._z = z;\n this._w = w;\n }\n static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\n // fuzz-free, array-based Quaternion SLERP operation\n let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3];\n const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3];\n if (t === 0) {\n dst[dstOffset + 0] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n return;\n }\n if (t === 1) {\n dst[dstOffset + 0] = x1;\n dst[dstOffset + 1] = y1;\n dst[dstOffset + 2] = z1;\n dst[dstOffset + 3] = w1;\n return;\n }\n if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n let s = 1 - t;\n const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = (cos >= 0 ? 1 : -1), sqrSin = 1 - cos * cos;\n // Skip the Slerp for tiny steps to avoid numeric problems:\n if (sqrSin > Number.EPSILON) {\n const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir);\n s = Math.sin(s * len) / sin;\n t = Math.sin(t * len) / sin;\n }\n const tDir = t * dir;\n x0 = x0 * s + x1 * tDir;\n y0 = y0 * s + y1 * tDir;\n z0 = z0 * s + z1 * tDir;\n w0 = w0 * s + w1 * tDir;\n // Normalize in case we just did a lerp:\n if (s === 1 - t) {\n const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n x0 *= f;\n y0 *= f;\n z0 *= f;\n w0 *= f;\n }\n }\n dst[dstOffset] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n }\n static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) {\n const x0 = src0[srcOffset0];\n const y0 = src0[srcOffset0 + 1];\n const z0 = src0[srcOffset0 + 2];\n const w0 = src0[srcOffset0 + 3];\n const x1 = src1[srcOffset1];\n const y1 = src1[srcOffset1 + 1];\n const z1 = src1[srcOffset1 + 2];\n const w1 = src1[srcOffset1 + 3];\n dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n return dst;\n }\n get x() {\n return this._x;\n }\n set x(value) {\n this._x = value;\n this._onChangeCallback();\n }\n get y() {\n return this._y;\n }\n set y(value) {\n this._y = value;\n this._onChangeCallback();\n }\n get z() {\n return this._z;\n }\n set z(value) {\n this._z = value;\n this._onChangeCallback();\n }\n get w() {\n return this._w;\n }\n set w(value) {\n this._w = value;\n this._onChangeCallback();\n }\n set(x, y, z, w) {\n this._x = x;\n this._y = y;\n this._z = z;\n this._w = w;\n this._onChangeCallback();\n return this;\n }\n clone() {\n return new Quaternion(this._x, this._y, this._z, this._w);\n }\n copy(quaternion) {\n this._x = quaternion.x;\n this._y = quaternion.y;\n this._z = quaternion.z;\n this._w = quaternion.w;\n this._onChangeCallback();\n return this;\n }\n setFromEuler(euler, update = true) {\n const x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n // http://www.mathworks.com/matlabcentral/fileexchange/\n // \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n //\tcontent/SpinCalc.m\n const cos = Math.cos;\n const sin = Math.sin;\n const c1 = cos(x / 2);\n const c2 = cos(y / 2);\n const c3 = cos(z / 2);\n const s1 = sin(x / 2);\n const s2 = sin(y / 2);\n const s3 = sin(z / 2);\n switch (order) {\n case 'XYZ':\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'YXZ':\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case 'ZXY':\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'ZYX':\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case 'YZX':\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'XZY':\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n default:\n console.warn('../math.Quaternion: .setFromEuler() encountered an unknown order: ' + order);\n }\n if (update === true)\n this._onChangeCallback();\n return this;\n }\n setFromAxisAngle(axis, angle) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n // assumes axis is normalized\n const halfAngle = angle / 2, s = Math.sin(halfAngle);\n this._x = axis.x * s;\n this._y = axis.y * s;\n this._z = axis.z * s;\n this._w = Math.cos(halfAngle);\n this._onChangeCallback();\n return this;\n }\n setFromRotationMatrix(m) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n const te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10], trace = m11 + m22 + m33;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1.0);\n this._w = 0.25 / s;\n this._x = (m32 - m23) * s;\n this._y = (m13 - m31) * s;\n this._z = (m21 - m12) * s;\n }\n else if (m11 > m22 && m11 > m33) {\n const s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n this._w = (m32 - m23) / s;\n this._x = 0.25 * s;\n this._y = (m12 + m21) / s;\n this._z = (m13 + m31) / s;\n }\n else if (m22 > m33) {\n const s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n this._w = (m13 - m31) / s;\n this._x = (m12 + m21) / s;\n this._y = 0.25 * s;\n this._z = (m23 + m32) / s;\n }\n else {\n const s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n this._w = (m21 - m12) / s;\n this._x = (m13 + m31) / s;\n this._y = (m23 + m32) / s;\n this._z = 0.25 * s;\n }\n this._onChangeCallback();\n return this;\n }\n setFromUnitVectors(vFrom, vTo) {\n // assumes direction vectors vFrom and vTo are normalized\n let r = vFrom.dot(vTo) + 1;\n if (r < Number.EPSILON) {\n // vFrom and vTo point in opposite directions\n r = 0;\n if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n this._x = -vFrom.y;\n this._y = vFrom.x;\n this._z = 0;\n this._w = r;\n }\n else {\n this._x = 0;\n this._y = -vFrom.z;\n this._z = vFrom.y;\n this._w = r;\n }\n }\n else {\n // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n this._w = r;\n }\n return this.normalize();\n }\n angleTo(q) {\n return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));\n }\n rotateTowards(q, step) {\n const angle = this.angleTo(q);\n if (angle === 0)\n return this;\n const t = Math.min(1, step / angle);\n this.slerp(q, t);\n return this;\n }\n identity() {\n return this.set(0, 0, 0, 1);\n }\n invert() {\n // quaternion is assumed to have unit length\n return this.conjugate();\n }\n conjugate() {\n this._x *= -1;\n this._y *= -1;\n this._z *= -1;\n this._onChangeCallback();\n return this;\n }\n dot(v) {\n return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n }\n lengthSq() {\n return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n }\n length() {\n return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);\n }\n normalize() {\n let l = this.length();\n if (l === 0) {\n this._x = 0;\n this._y = 0;\n this._z = 0;\n this._w = 1;\n }\n else {\n l = 1 / l;\n this._x = this._x * l;\n this._y = this._y * l;\n this._z = this._z * l;\n this._w = this._w * l;\n }\n this._onChangeCallback();\n return this;\n }\n multiply(q) {\n return this.multiplyQuaternions(this, q);\n }\n premultiply(q) {\n return this.multiplyQuaternions(q, this);\n }\n multiplyQuaternions(a, b) {\n // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n this._onChangeCallback();\n return this;\n }\n slerp(qb, t) {\n if (t === 0)\n return this;\n if (t === 1)\n return this.copy(qb);\n const x = this._x, y = this._y, z = this._z, w = this._w;\n // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n if (cosHalfTheta < 0) {\n this._w = -qb._w;\n this._x = -qb._x;\n this._y = -qb._y;\n this._z = -qb._z;\n cosHalfTheta = -cosHalfTheta;\n }\n else {\n this.copy(qb);\n }\n if (cosHalfTheta >= 1.0) {\n this._w = w;\n this._x = x;\n this._y = y;\n this._z = z;\n return this;\n }\n const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n if (sqrSinHalfTheta <= Number.EPSILON) {\n const s = 1 - t;\n this._w = s * w + t * this._w;\n this._x = s * x + t * this._x;\n this._y = s * y + t * this._y;\n this._z = s * z + t * this._z;\n this.normalize(); // normalize calls _onChangeCallback()\n return this;\n }\n const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n this._w = (w * ratioA + this._w * ratioB);\n this._x = (x * ratioA + this._x * ratioB);\n this._y = (y * ratioA + this._y * ratioB);\n this._z = (z * ratioA + this._z * ratioB);\n this._onChangeCallback();\n return this;\n }\n slerpQuaternions(qa, qb, t) {\n return this.copy(qa).slerp(qb, t);\n }\n random() {\n // sets this quaternion to a uniform random unit quaternnion\n // Ken Shoemake\n // Uniform random rotations\n // D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n const theta1 = 2 * Math.PI * Math.random();\n const theta2 = 2 * Math.PI * Math.random();\n const x0 = Math.random();\n const r1 = Math.sqrt(1 - x0);\n const r2 = Math.sqrt(x0);\n return this.set(r1 * Math.sin(theta1), r1 * Math.cos(theta1), r2 * Math.sin(theta2), r2 * Math.cos(theta2));\n }\n equals(quaternion) {\n return (quaternion._x === this._x) && (quaternion._y === this._y) && (quaternion._z === this._z) && (quaternion._w === this._w);\n }\n fromArray(array, offset = 0) {\n this._x = array[offset];\n this._y = array[offset + 1];\n this._z = array[offset + 2];\n this._w = array[offset + 3];\n this._onChangeCallback();\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this._x;\n array[offset + 1] = this._y;\n array[offset + 2] = this._z;\n array[offset + 3] = this._w;\n return array;\n }\n /*\n fromBufferAttribute( attribute, index ) {\n\n this._x = attribute.getX( index );\n this._y = attribute.getY( index );\n this._z = attribute.getZ( index );\n this._w = attribute.getW( index );\n\n this._onChangeCallback();\n\n return this;\n\n }*/\n toJSON() {\n return this.toArray();\n }\n _onChange(callback) {\n this._onChangeCallback = callback;\n return this;\n }\n _onChangeCallback() { }\n *[Symbol.iterator]() {\n yield this._x;\n yield this._y;\n yield this._z;\n yield this._w;\n }\n}\n\nclass Vector3 {\n constructor(x = 0, y = 0, z = 0) {\n this.isVector3 = true;\n Vector3.prototype.isVector3 = true;\n this.x = x;\n this.y = y;\n this.z = z;\n }\n set(x, y, z) {\n if (z === undefined)\n z = this.z; // sprite.scale.set(x,y)\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n setScalar(scalar) {\n this.x = scalar;\n this.y = scalar;\n this.z = scalar;\n return this;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n setZ(z) {\n this.z = z;\n return this;\n }\n setComponent(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n default:\n throw new Error('index is out of range: ' + index);\n }\n return this;\n }\n getComponent(index) {\n switch (index) {\n case 0:\n return this.x;\n case 1:\n return this.y;\n case 2:\n return this.z;\n default:\n throw new Error('index is out of range: ' + index);\n }\n }\n clone() {\n return new Vector3(this.x, this.y, this.z);\n }\n copy(v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n return this;\n }\n add(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n return this;\n }\n addScalar(s) {\n this.x += s;\n this.y += s;\n this.z += s;\n return this;\n }\n addVectors(a, b) {\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n return this;\n }\n addScaledVector(v, s) {\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n return this;\n }\n sub(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n return this;\n }\n subScalar(s) {\n this.x -= s;\n this.y -= s;\n this.z -= s;\n return this;\n }\n subVectors(a, b) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n return this;\n }\n multiply(v) {\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n return this;\n }\n multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n }\n multiplyVectors(a, b) {\n this.x = a.x * b.x;\n this.y = a.y * b.y;\n this.z = a.z * b.z;\n return this;\n }\n applyEuler(euler) {\n return this.applyQuaternion(_quaternion$1.setFromEuler(euler));\n }\n applyAxisAngle(axis, angle) {\n return this.applyQuaternion(_quaternion$1.setFromAxisAngle(axis, angle));\n }\n applyMatrix3(m) {\n const x = this.x, y = this.y, z = this.z;\n const e = m.elements;\n this.x = e[0] * x + e[3] * y + e[6] * z;\n this.y = e[1] * x + e[4] * y + e[7] * z;\n this.z = e[2] * x + e[5] * y + e[8] * z;\n return this;\n }\n applyNormalMatrix(m) {\n return this.applyMatrix3(m).normalize();\n }\n applyMatrix4(m) {\n const x = this.x, y = this.y, z = this.z;\n const e = m.elements;\n const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\n this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\n this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\n this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\n return this;\n }\n applyQuaternion(q) {\n // quaternion q is assumed to have unit length\n const vx = this.x, vy = this.y, vz = this.z;\n const qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n // t = 2 * cross( q.xyz, v );\n const tx = 2 * (qy * vz - qz * vy);\n const ty = 2 * (qz * vx - qx * vz);\n const tz = 2 * (qx * vy - qy * vx);\n // v + q.w * t + cross( q.xyz, t );\n this.x = vx + qw * tx + qy * tz - qz * ty;\n this.y = vy + qw * ty + qz * tx - qx * tz;\n this.z = vz + qw * tz + qx * ty - qy * tx;\n return this;\n }\n /*project(camera: Camera) {\n return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);\n }\n\n unproject(camera: Camera) {\n return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);\n }*/\n transformDirection(m) {\n // input: ../math.Matrix4 affine matrix\n // vector interpreted as a direction\n const x = this.x, y = this.y, z = this.z;\n const e = m.elements;\n this.x = e[0] * x + e[4] * y + e[8] * z;\n this.y = e[1] * x + e[5] * y + e[9] * z;\n this.z = e[2] * x + e[6] * y + e[10] * z;\n return this.normalize();\n }\n divide(v) {\n this.x /= v.x;\n this.y /= v.y;\n this.z /= v.z;\n return this;\n }\n divideScalar(scalar) {\n return this.multiplyScalar(1 / scalar);\n }\n min(v) {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n return this;\n }\n max(v) {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n return this;\n }\n clamp(min, max) {\n // assumes min < max, componentwise\n this.x = Math.max(min.x, Math.min(max.x, this.x));\n this.y = Math.max(min.y, Math.min(max.y, this.y));\n this.z = Math.max(min.z, Math.min(max.z, this.z));\n return this;\n }\n clampScalar(minVal, maxVal) {\n this.x = Math.max(minVal, Math.min(maxVal, this.x));\n this.y = Math.max(minVal, Math.min(maxVal, this.y));\n this.z = Math.max(minVal, Math.min(maxVal, this.z));\n return this;\n }\n clampLength(min, max) {\n const length = this.length();\n return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n }\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n return this;\n }\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n return this;\n }\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n return this;\n }\n roundToZero() {\n this.x = Math.trunc(this.x);\n this.y = Math.trunc(this.y);\n this.z = Math.trunc(this.z);\n return this;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n dot(v) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n }\n // TODO lengthSquared?\n lengthSq() {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n manhattanLength() {\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n }\n normalize() {\n return this.divideScalar(this.length() || 1);\n }\n setLength(length) {\n return this.normalize().multiplyScalar(length);\n }\n lerp(v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n return this;\n }\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n return this;\n }\n cross(v) {\n return this.crossVectors(this, v);\n }\n crossVectors(a, b) {\n const ax = a.x, ay = a.y, az = a.z;\n const bx = b.x, by = b.y, bz = b.z;\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n return this;\n }\n projectOnVector(v) {\n const denominator = v.lengthSq();\n if (denominator === 0)\n return this.set(0, 0, 0);\n const scalar = v.dot(this) / denominator;\n return this.copy(v).multiplyScalar(scalar);\n }\n projectOnPlane(planeNormal) {\n _vector.copy(this).projectOnVector(planeNormal);\n return this.sub(_vector);\n }\n reflect(normal) {\n // reflect incident vector off plane orthogonal to normal\n // normal is assumed to have unit length\n return this.sub(_vector.copy(normal).multiplyScalar(2 * this.dot(normal)));\n }\n angleTo(v) {\n const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n if (denominator === 0)\n return Math.PI / 2;\n const theta = this.dot(v) / denominator;\n // clamp, to handle numerical problems\n return Math.acos(clamp(theta, -1, 1));\n }\n distanceTo(v) {\n return Math.sqrt(this.distanceToSquared(v));\n }\n distanceToSquared(v) {\n const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n return dx * dx + dy * dy + dz * dz;\n }\n manhattanDistanceTo(v) {\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\n }\n /*setFromSpherical(s) {\n return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\n }*/\n setFromSphericalCoords(radius, phi, theta) {\n const sinPhiRadius = Math.sin(phi) * radius;\n this.x = sinPhiRadius * Math.sin(theta);\n this.y = Math.cos(phi) * radius;\n this.z = sinPhiRadius * Math.cos(theta);\n return this;\n }\n /*setFromCylindrical(c) {\n return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\n }*/\n setFromCylindricalCoords(radius, theta, y) {\n this.x = radius * Math.sin(theta);\n this.y = y;\n this.z = radius * Math.cos(theta);\n return this;\n }\n setFromMatrixPosition(m) {\n const e = m.elements;\n this.x = e[12];\n this.y = e[13];\n this.z = e[14];\n return this;\n }\n setFromMatrixScale(m) {\n const sx = this.setFromMatrixColumn(m, 0).length();\n const sy = this.setFromMatrixColumn(m, 1).length();\n const sz = this.setFromMatrixColumn(m, 2).length();\n this.x = sx;\n this.y = sy;\n this.z = sz;\n return this;\n }\n setFromMatrixColumn(m, index) {\n return this.fromArray(m.elements, index * 4);\n }\n setFromMatrix3Column(m, index) {\n return this.fromArray(m.elements, index * 3);\n }\n setFromEuler(e) {\n this.x = e._x;\n this.y = e._y;\n this.z = e._z;\n return this;\n }\n /*setFromColor(c) {\n this.x = c.r;\n this.y = c.g;\n this.z = c.b;\n\n return this;\n }*/\n equals(v) {\n return v.x === this.x && v.y === this.y && v.z === this.z;\n }\n fromArray(array, offset = 0) {\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n return array;\n }\n /*fromBufferAttribute(attribute, index) {\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n this.z = attribute.getZ(index);\n\n return this;\n }*/\n random() {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n return this;\n }\n randomDirection() {\n // https://mathworld.wolfram.com/SpherePointPicking.html\n const theta = Math.random() * Math.PI * 2;\n const u = Math.random() * 2 - 1;\n const c = Math.sqrt(1 - u * u);\n this.x = c * Math.cos(theta);\n this.y = u;\n this.z = c * Math.sin(theta);\n return this;\n }\n abs() {\n this.x = Math.abs(this.x);\n this.y = Math.abs(this.y);\n this.z = Math.abs(this.z);\n return this;\n }\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n}\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\n\n//import {WebGLCoordinateSystem, WebGPUCoordinateSystem} from 'constants.js';\nconst WebGLCoordinateSystem = 2000;\nconst WebGPUCoordinateSystem = 2001;\nclass Matrix4 {\n constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\n this.isMatrix4 = true;\n Matrix4.prototype.isMatrix4 = true;\n this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n if (n11 !== undefined) {\n this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44);\n }\n }\n /**\n * @deprecated Use {@link Matrix4#copyPosition .copyPosition()} instead.\n */\n extractPosition(m) {\n console.warn('THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().');\n return this.copyPosition(m);\n }\n /**\n * Sets this matrix to a x b and stores the result into the flat array r.\n * r can be either a regular Array or a TypedArray.\n *\n * @deprecated This method has been removed completely.\n */\n multiplyToArray(a, b, r) {\n console.error('THREE.Matrix4: .multiplyToArray() has been removed.');\n return this;\n }\n /**\n * @deprecated Use {@link Matrix4#makeRotationFromQuaternion .makeRotationFromQuaternion()} instead.\n */\n setRotationFromQuaternion(q) {\n return this.makeRotationFromQuaternion(q);\n }\n set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\n const te = this.elements;\n te[0] = n11;\n te[4] = n12;\n te[8] = n13;\n te[12] = n14;\n te[1] = n21;\n te[5] = n22;\n te[9] = n23;\n te[13] = n24;\n te[2] = n31;\n te[6] = n32;\n te[10] = n33;\n te[14] = n34;\n te[3] = n41;\n te[7] = n42;\n te[11] = n43;\n te[15] = n44;\n return this;\n }\n identity() {\n this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n return this;\n }\n clone() {\n return new Matrix4().fromArray(this.elements);\n }\n copy(m) {\n const te = this.elements;\n const me = m.elements;\n te[0] = me[0];\n te[1] = me[1];\n te[2] = me[2];\n te[3] = me[3];\n te[4] = me[4];\n te[5] = me[5];\n te[6] = me[6];\n te[7] = me[7];\n te[8] = me[8];\n te[9] = me[9];\n te[10] = me[10];\n te[11] = me[11];\n te[12] = me[12];\n te[13] = me[13];\n te[14] = me[14];\n te[15] = me[15];\n return this;\n }\n copyPosition(m) {\n const te = this.elements, me = m.elements;\n te[12] = me[12];\n te[13] = me[13];\n te[14] = me[14];\n return this;\n }\n setFromMatrix3(m) {\n const me = m.elements;\n this.set(me[0], me[3], me[6], 0, me[1], me[4], me[7], 0, me[2], me[5], me[8], 0, 0, 0, 0, 1);\n return this;\n }\n extractBasis(xAxis, yAxis, zAxis) {\n xAxis.setFromMatrixColumn(this, 0);\n yAxis.setFromMatrixColumn(this, 1);\n zAxis.setFromMatrixColumn(this, 2);\n return this;\n }\n makeBasis(xAxis, yAxis, zAxis) {\n this.set(xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1);\n return this;\n }\n extractRotation(m) {\n // this method does not support reflection matrices\n const te = this.elements;\n const me = m.elements;\n const scaleX = 1 / _v1.setFromMatrixColumn(m, 0).length();\n const scaleY = 1 / _v1.setFromMatrixColumn(m, 1).length();\n const scaleZ = 1 / _v1.setFromMatrixColumn(m, 2).length();\n te[0] = me[0] * scaleX;\n te[1] = me[1] * scaleX;\n te[2] = me[2] * scaleX;\n te[3] = 0;\n te[4] = me[4] * scaleY;\n te[5] = me[5] * scaleY;\n te[6] = me[6] * scaleY;\n te[7] = 0;\n te[8] = me[8] * scaleZ;\n te[9] = me[9] * scaleZ;\n te[10] = me[10] * scaleZ;\n te[11] = 0;\n te[12] = 0;\n te[13] = 0;\n te[14] = 0;\n te[15] = 1;\n return this;\n }\n makeRotationFromEuler(euler) {\n const te = this.elements;\n const x = euler.x, y = euler.y, z = euler.z;\n const a = Math.cos(x), b = Math.sin(x);\n const c = Math.cos(y), d = Math.sin(y);\n const e = Math.cos(z), f = Math.sin(z);\n if (euler.order === 'XYZ') {\n const ae = a * e, af = a * f, be = b * e, bf = b * f;\n te[0] = c * e;\n te[4] = -c * f;\n te[8] = d;\n te[1] = af + be * d;\n te[5] = ae - bf * d;\n te[9] = -b * c;\n te[2] = bf - ae * d;\n te[6] = be + af * d;\n te[10] = a * c;\n }\n else if (euler.order === 'YXZ') {\n const ce = c * e, cf = c * f, de = d * e, df = d * f;\n te[0] = ce + df * b;\n te[4] = de * b - cf;\n te[8] = a * d;\n te[1] = a * f;\n te[5] = a * e;\n te[9] = -b;\n te[2] = cf * b - de;\n te[6] = df + ce * b;\n te[10] = a * c;\n }\n else if (euler.order === 'ZXY') {\n const ce = c * e, cf = c * f, de = d * e, df = d * f;\n te[0] = ce - df * b;\n te[4] = -a * f;\n te[8] = de + cf * b;\n te[1] = cf + de * b;\n te[5] = a * e;\n te[9] = df - ce * b;\n te[2] = -a * d;\n te[6] = b;\n te[10] = a * c;\n }\n else if (euler.order === 'ZYX') {\n const ae = a * e, af = a * f, be = b * e, bf = b * f;\n te[0] = c * e;\n te[4] = be * d - af;\n te[8] = ae * d + bf;\n te[1] = c * f;\n te[5] = bf * d + ae;\n te[9] = af * d - be;\n te[2] = -d;\n te[6] = b * c;\n te[10] = a * c;\n }\n else if (euler.order === 'YZX') {\n const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n te[0] = c * e;\n te[4] = bd - ac * f;\n te[8] = bc * f + ad;\n te[1] = f;\n te[5] = a * e;\n te[9] = -b * e;\n te[2] = -d * e;\n te[6] = ad * f + bc;\n te[10] = ac - bd * f;\n }\n else if (euler.order === 'XZY') {\n const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n te[0] = c * e;\n te[4] = -f;\n te[8] = d * e;\n te[1] = ac * f + bd;\n te[5] = a * e;\n te[9] = ad * f - bc;\n te[2] = bc * f - ad;\n te[6] = b * e;\n te[10] = bd * f + ac;\n }\n // bottom row\n te[3] = 0;\n te[7] = 0;\n te[11] = 0;\n // last column\n te[12] = 0;\n te[13] = 0;\n te[14] = 0;\n te[15] = 1;\n return this;\n }\n makeRotationFromQuaternion(q) {\n return this.compose(_zero, q, _one);\n }\n lookAt(eye, target, up) {\n const te = this.elements;\n _z.subVectors(eye, target);\n if (_z.lengthSq() === 0) {\n // eye and target are in the same position\n _z.z = 1;\n }\n _z.normalize();\n _x.crossVectors(up, _z);\n if (_x.lengthSq() === 0) {\n // up and z are parallel\n if (Math.abs(up.z) === 1) {\n _z.x += 0.0001;\n }\n else {\n _z.z += 0.0001;\n }\n _z.normalize();\n _x.crossVectors(up, _z);\n }\n _x.normalize();\n _y.crossVectors(_z, _x);\n te[0] = _x.x;\n te[4] = _y.x;\n te[8] = _z.x;\n te[1] = _x.y;\n te[5] = _y.y;\n te[9] = _z.y;\n te[2] = _x.z;\n te[6] = _y.z;\n te[10] = _z.z;\n return this;\n }\n multiply(m) {\n return this.multiplyMatrices(this, m);\n }\n premultiply(m) {\n return this.multiplyMatrices(m, this);\n }\n multiplyMatrices(a, b) {\n const ae = a.elements;\n const be = b.elements;\n const te = this.elements;\n const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12];\n const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13];\n const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14];\n const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15];\n const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12];\n const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13];\n const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14];\n const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n return this;\n }\n multiplyScalar(s) {\n const te = this.elements;\n te[0] *= s;\n te[4] *= s;\n te[8] *= s;\n te[12] *= s;\n te[1] *= s;\n te[5] *= s;\n te[9] *= s;\n te[13] *= s;\n te[2] *= s;\n te[6] *= s;\n te[10] *= s;\n te[14] *= s;\n te[3] *= s;\n te[7] *= s;\n te[11] *= s;\n te[15] *= s;\n return this;\n }\n determinant() {\n const te = this.elements;\n const n11 = te[0], n12 = te[4], n13 = te[8], n14 = te[12];\n const n21 = te[1], n22 = te[5], n23 = te[9], n24 = te[13];\n const n31 = te[2], n32 = te[6], n33 = te[10], n34 = te[14];\n const n41 = te[3], n42 = te[7], n43 = te[11], n44 = te[15];\n //TODO: make this more efficient\n //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n return (n41 *\n (+n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34) +\n n42 *\n (+n11 * n23 * n34 -\n n11 * n24 * n33 +\n n14 * n21 * n33 -\n n13 * n21 * n34 +\n n13 * n24 * n31 -\n n14 * n23 * n31) +\n n43 *\n (+n11 * n24 * n32 -\n n11 * n22 * n34 -\n n14 * n21 * n32 +\n n12 * n21 * n34 +\n n14 * n22 * n31 -\n n12 * n24 * n31) +\n n44 *\n (-n13 * n22 * n31 -\n n11 * n23 * n32 +\n n11 * n22 * n33 +\n n13 * n21 * n32 -\n n12 * n21 * n33 +\n n12 * n23 * n31));\n }\n transpose() {\n const te = this.elements;\n let tmp;\n tmp = te[1];\n te[1] = te[4];\n te[4] = tmp;\n tmp = te[2];\n te[2] = te[8];\n te[8] = tmp;\n tmp = te[6];\n te[6] = te[9];\n te[9] = tmp;\n tmp = te[3];\n te[3] = te[12];\n te[12] = tmp;\n tmp = te[7];\n te[7] = te[13];\n te[13] = tmp;\n tmp = te[11];\n te[11] = te[14];\n te[14] = tmp;\n return this;\n }\n setPosition(x, y, z) {\n const te = this.elements;\n if (x.isVector3) {\n te[12] = x.x;\n te[13] = x.y;\n te[14] = x.z;\n }\n else {\n te[12] = x;\n te[13] = y;\n te[14] = z;\n }\n return this;\n }\n invert() {\n // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n41 = te[3], n12 = te[4], n22 = te[5], n32 = te[6], n42 = te[7], n13 = te[8], n23 = te[9], n33 = te[10], n43 = te[11], n14 = te[12], n24 = te[13], n34 = te[14], n44 = te[15], t11 = n23 * n34 * n42 -\n n24 * n33 * n42 +\n n24 * n32 * n43 -\n n22 * n34 * n43 -\n n23 * n32 * n44 +\n n22 * n33 * n44, t12 = n14 * n33 * n42 -\n n13 * n34 * n42 -\n n14 * n32 * n43 +\n n12 * n34 * n43 +\n n13 * n32 * n44 -\n n12 * n33 * n44, t13 = n13 * n24 * n42 -\n n14 * n23 * n42 +\n n14 * n22 * n43 -\n n12 * n24 * n43 -\n n13 * n22 * n44 +\n n12 * n23 * n44, t14 = n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34;\n const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n if (det === 0)\n return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n const detInv = 1 / det;\n te[0] = t11 * detInv;\n te[1] =\n (n24 * n33 * n41 -\n n23 * n34 * n41 -\n n24 * n31 * n43 +\n n21 * n34 * n43 +\n n23 * n31 * n44 -\n n21 * n33 * n44) *\n detInv;\n te[2] =\n (n22 * n34 * n41 -\n n24 * n32 * n41 +\n n24 * n31 * n42 -\n n21 * n34 * n42 -\n n22 * n31 * n44 +\n n21 * n32 * n44) *\n detInv;\n te[3] =\n (n23 * n32 * n41 -\n n22 * n33 * n41 -\n n23 * n31 * n42 +\n n21 * n33 * n42 +\n n22 * n31 * n43 -\n n21 * n32 * n43) *\n detInv;\n te[4] = t12 * detInv;\n te[5] =\n (n13 * n34 * n41 -\n n14 * n33 * n41 +\n n14 * n31 * n43 -\n n11 * n34 * n43 -\n n13 * n31 * n44 +\n n11 * n33 * n44) *\n detInv;\n te[6] =\n (n14 * n32 * n41 -\n n12 * n34 * n41 -\n n14 * n31 * n42 +\n n11 * n34 * n42 +\n n12 * n31 * n44 -\n n11 * n32 * n44) *\n detInv;\n te[7] =\n (n12 * n33 * n41 -\n n13 * n32 * n41 +\n n13 * n31 * n42 -\n n11 * n33 * n42 -\n n12 * n31 * n43 +\n n11 * n32 * n43) *\n detInv;\n te[8] = t13 * detInv;\n te[9] =\n (n14 * n23 * n41 -\n n13 * n24 * n41 -\n n14 * n21 * n43 +\n n11 * n24 * n43 +\n n13 * n21 * n44 -\n n11 * n23 * n44) *\n detInv;\n te[10] =\n (n12 * n24 * n41 -\n n14 * n22 * n41 +\n n14 * n21 * n42 -\n n11 * n24 * n42 -\n n12 * n21 * n44 +\n n11 * n22 * n44) *\n detInv;\n te[11] =\n (n13 * n22 * n41 -\n n12 * n23 * n41 -\n n13 * n21 * n42 +\n n11 * n23 * n42 +\n n12 * n21 * n43 -\n n11 * n22 * n43) *\n detInv;\n te[12] = t14 * detInv;\n te[13] =\n (n13 * n24 * n31 -\n n14 * n23 * n31 +\n n14 * n21 * n33 -\n n11 * n24 * n33 -\n n13 * n21 * n34 +\n n11 * n23 * n34) *\n detInv;\n te[14] =\n (n14 * n22 * n31 -\n n12 * n24 * n31 -\n n14 * n21 * n32 +\n n11 * n24 * n32 +\n n12 * n21 * n34 -\n n11 * n22 * n34) *\n detInv;\n te[15] =\n (n12 * n23 * n31 -\n n13 * n22 * n31 +\n n13 * n21 * n32 -\n n11 * n23 * n32 -\n n12 * n21 * n33 +\n n11 * n22 * n33) *\n detInv;\n return this;\n }\n scale(v) {\n const te = this.elements;\n const x = v.x, y = v.y, z = v.z;\n te[0] *= x;\n te[4] *= y;\n te[8] *= z;\n te[1] *= x;\n te[5] *= y;\n te[9] *= z;\n te[2] *= x;\n te[6] *= y;\n te[10] *= z;\n te[3] *= x;\n te[7] *= y;\n te[11] *= z;\n return this;\n }\n getMaxScaleOnAxis() {\n const te = this.elements;\n const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\n const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\n const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\n return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\n }\n makeTranslation(x, y, z) {\n if (x.isVector3) {\n this.set(1, 0, 0, x.x, 0, 1, 0, x.y, 0, 0, 1, x.z, 0, 0, 0, 1);\n }\n else {\n this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);\n }\n return this;\n }\n makeRotationX(theta) {\n const c = Math.cos(theta), s = Math.sin(theta);\n this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);\n return this;\n }\n makeRotationY(theta) {\n const c = Math.cos(theta), s = Math.sin(theta);\n this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);\n return this;\n }\n makeRotationZ(theta) {\n const c = Math.cos(theta), s = Math.sin(theta);\n this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n return this;\n }\n makeRotationAxis(axis, angle) {\n // Based on http://www.gamedev.net/reference/articles/article1199.asp\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const t = 1 - c;\n const x = axis.x, y = axis.y, z = axis.z;\n const tx = t * x, ty = t * y;\n this.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1);\n return this;\n }\n makeScale(x, y, z) {\n this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);\n return this;\n }\n makeShear(xy, xz, yx, yz, zx, zy) {\n this.set(1, yx, zx, 0, xy, 1, zy, 0, xz, yz, 1, 0, 0, 0, 0, 1);\n return this;\n }\n compose(position, quaternion, scale) {\n const te = this.elements;\n const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n const x2 = x + x, y2 = y + y, z2 = z + z;\n const xx = x * x2, xy = x * y2, xz = x * z2;\n const yy = y * y2, yz = y * z2, zz = z * z2;\n const wx = w * x2, wy = w * y2, wz = w * z2;\n const sx = scale.x, sy = scale.y, sz = scale.z;\n te[0] = (1 - (yy + zz)) * sx;\n te[1] = (xy + wz) * sx;\n te[2] = (xz - wy) * sx;\n te[3] = 0;\n te[4] = (xy - wz) * sy;\n te[5] = (1 - (xx + zz)) * sy;\n te[6] = (yz + wx) * sy;\n te[7] = 0;\n te[8] = (xz + wy) * sz;\n te[9] = (yz - wx) * sz;\n te[10] = (1 - (xx + yy)) * sz;\n te[11] = 0;\n te[12] = position.x;\n te[13] = position.y;\n te[14] = position.z;\n te[15] = 1;\n return this;\n }\n decompose(position, quaternion, scale) {\n const te = this.elements;\n let sx = _v1.set(te[0], te[1], te[2]).length();\n const sy = _v1.set(te[4], te[5], te[6]).length();\n const sz = _v1.set(te[8], te[9], te[10]).length();\n // if determine is negative, we need to invert one scale\n const det = this.determinant();\n if (det < 0)\n sx = -sx;\n position.x = te[12];\n position.y = te[13];\n position.z = te[14];\n // scale the rotation part\n _m1.copy(this);\n const invSX = 1 / sx;\n const invSY = 1 / sy;\n const invSZ = 1 / sz;\n _m1.elements[0] *= invSX;\n _m1.elements[1] *= invSX;\n _m1.elements[2] *= invSX;\n _m1.elements[4] *= invSY;\n _m1.elements[5] *= invSY;\n _m1.elements[6] *= invSY;\n _m1.elements[8] *= invSZ;\n _m1.elements[9] *= invSZ;\n _m1.elements[10] *= invSZ;\n quaternion.setFromRotationMatrix(_m1);\n scale.x = sx;\n scale.y = sy;\n scale.z = sz;\n return this;\n }\n makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {\n const te = this.elements;\n const x = (2 * near) / (right - left);\n const y = (2 * near) / (top - bottom);\n const a = (right + left) / (right - left);\n const b = (top + bottom) / (top - bottom);\n let c, d;\n if (coordinateSystem === WebGLCoordinateSystem) {\n c = -(far + near) / (far - near);\n d = (-2 * far * near) / (far - near);\n }\n else if (coordinateSystem === WebGPUCoordinateSystem) {\n c = -far / (far - near);\n d = (-far * near) / (far - near);\n }\n else {\n throw new Error('Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem);\n }\n te[0] = x;\n te[4] = 0;\n te[8] = a;\n te[12] = 0;\n te[1] = 0;\n te[5] = y;\n te[9] = b;\n te[13] = 0;\n te[2] = 0;\n te[6] = 0;\n te[10] = c;\n te[14] = d;\n te[3] = 0;\n te[7] = 0;\n te[11] = -1;\n te[15] = 0;\n return this;\n }\n makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {\n const te = this.elements;\n const w = 1.0 / (right - left);\n const h = 1.0 / (top - bottom);\n const p = 1.0 / (far - near);\n const x = (right + left) * w;\n const y = (top + bottom) * h;\n let z, zInv;\n if (coordinateSystem === WebGLCoordinateSystem) {\n z = (far + near) * p;\n zInv = -2 * p;\n }\n else if (coordinateSystem === WebGPUCoordinateSystem) {\n z = near * p;\n zInv = -1 * p;\n }\n else {\n throw new Error('../math.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem);\n }\n te[0] = 2 * w;\n te[4] = 0;\n te[8] = 0;\n te[12] = -x;\n te[1] = 0;\n te[5] = 2 * h;\n te[9] = 0;\n te[13] = -y;\n te[2] = 0;\n te[6] = 0;\n te[10] = zInv;\n te[14] = -z;\n te[3] = 0;\n te[7] = 0;\n te[11] = 0;\n te[15] = 1;\n return this;\n }\n equals(matrix) {\n const te = this.elements;\n const me = matrix.elements;\n for (let i = 0; i < 16; i++) {\n if (te[i] !== me[i])\n return false;\n }\n return true;\n }\n fromArray(array, offset = 0) {\n for (let i = 0; i < 16; i++) {\n this.elements[i] = array[i + offset];\n }\n return this;\n }\n toArray(array = [], offset = 0) {\n const te = this.elements;\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n array[offset + 8] = te[8];\n array[offset + 9] = te[9];\n array[offset + 10] = te[10];\n array[offset + 11] = te[11];\n array[offset + 12] = te[12];\n array[offset + 13] = te[13];\n array[offset + 14] = te[14];\n array[offset + 15] = te[15];\n return array;\n }\n}\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3(0, 0, 0);\nconst _one = /*@__PURE__*/ new Vector3(1, 1, 1);\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nclass Euler {\n constructor(x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER) {\n this.isEuler = true;\n this._x = x;\n this._y = y;\n this._z = z;\n this._order = order;\n }\n get x() {\n return this._x;\n }\n set x(value) {\n this._x = value;\n this._onChangeCallback();\n }\n get y() {\n return this._y;\n }\n set y(value) {\n this._y = value;\n this._onChangeCallback();\n }\n get z() {\n return this._z;\n }\n set z(value) {\n this._z = value;\n this._onChangeCallback();\n }\n get order() {\n return this._order;\n }\n set order(value) {\n this._order = value;\n this._onChangeCallback();\n }\n set(x, y, z, order = this._order) {\n this._x = x;\n this._y = y;\n this._z = z;\n this._order = order;\n this._onChangeCallback();\n return this;\n }\n clone() {\n return new Euler(this._x, this._y, this._z, this._order);\n }\n copy(euler) {\n this._x = euler._x;\n this._y = euler._y;\n this._z = euler._z;\n this._order = euler._order;\n this._onChangeCallback();\n return this;\n }\n setFromRotationMatrix(m, order = this._order, update = true) {\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n const te = m.elements;\n const m11 = te[0], m12 = te[4], m13 = te[8];\n const m21 = te[1], m22 = te[5], m23 = te[9];\n const m31 = te[2], m32 = te[6], m33 = te[10];\n switch (order) {\n case 'XYZ':\n this._y = Math.asin(clamp(m13, -1, 1));\n if (Math.abs(m13) < 0.9999999) {\n this._x = Math.atan2(-m23, m33);\n this._z = Math.atan2(-m12, m11);\n }\n else {\n this._x = Math.atan2(m32, m22);\n this._z = 0;\n }\n break;\n case 'YXZ':\n this._x = Math.asin(-clamp(m23, -1, 1));\n if (Math.abs(m23) < 0.9999999) {\n this._y = Math.atan2(m13, m33);\n this._z = Math.atan2(m21, m22);\n }\n else {\n this._y = Math.atan2(-m31, m11);\n this._z = 0;\n }\n break;\n case 'ZXY':\n this._x = Math.asin(clamp(m32, -1, 1));\n if (Math.abs(m32) < 0.9999999) {\n this._y = Math.atan2(-m31, m33);\n this._z = Math.atan2(-m12, m22);\n }\n else {\n this._y = 0;\n this._z = Math.atan2(m21, m11);\n }\n break;\n case 'ZYX':\n this._y = Math.asin(-clamp(m31, -1, 1));\n if (Math.abs(m31) < 0.9999999) {\n this._x = Math.atan2(m32, m33);\n this._z = Math.atan2(m21, m11);\n }\n else {\n this._x = 0;\n this._z = Math.atan2(-m12, m22);\n }\n break;\n case 'YZX':\n this._z = Math.asin(clamp(m21, -1, 1));\n if (Math.abs(m21) < 0.9999999) {\n this._x = Math.atan2(-m23, m22);\n this._y = Math.atan2(-m31, m11);\n }\n else {\n this._x = 0;\n this._y = Math.atan2(m13, m33);\n }\n break;\n case 'XZY':\n this._z = Math.asin(-clamp(m12, -1, 1));\n if (Math.abs(m12) < 0.9999999) {\n this._x = Math.atan2(m32, m22);\n this._y = Math.atan2(m13, m11);\n }\n else {\n this._x = Math.atan2(-m23, m33);\n this._y = 0;\n }\n break;\n default:\n console.warn('../math.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order);\n }\n this._order = order;\n if (update === true)\n this._onChangeCallback();\n return this;\n }\n setFromQuaternion(q, order, update) {\n _matrix.makeRotationFromQuaternion(q);\n return this.setFromRotationMatrix(_matrix, order, update);\n }\n setFromVector3(v, order = this._order) {\n return this.set(v.x, v.y, v.z, order);\n }\n reorder(newOrder) {\n // WARNING: this discards revolution information -bhouston\n _quaternion.setFromEuler(this);\n return this.setFromQuaternion(_quaternion, newOrder);\n }\n equals(euler) {\n return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order;\n }\n fromArray(array) {\n this._x = array[0];\n this._y = array[1];\n this._z = array[2];\n if (array[3] !== undefined)\n this._order = array[3];\n this._onChangeCallback();\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this._x;\n array[offset + 1] = this._y;\n array[offset + 2] = this._z;\n array[offset + 3] = this._order;\n return array;\n }\n _onChange(callback) {\n this._onChangeCallback = callback;\n return this;\n }\n _onChangeCallback(euler) { }\n *[Symbol.iterator]() {\n yield this._x;\n yield this._y;\n yield this._z;\n yield this._order;\n }\n}\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Vector2 {\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n get width() {\n return this.x;\n }\n set width(value) {\n this.x = value;\n }\n get height() {\n return this.y;\n }\n set height(value) {\n this.y = value;\n }\n set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n setScalar(scalar) {\n this.x = scalar;\n this.y = scalar;\n return this;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n setComponent(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n default:\n throw new Error('index is out of range: ' + index);\n }\n return this;\n }\n getComponent(index) {\n switch (index) {\n case 0:\n return this.x;\n case 1:\n return this.y;\n default:\n throw new Error('index is out of range: ' + index);\n }\n }\n clone() {\n return new Vector2(this.x, this.y);\n }\n copy(v) {\n this.x = v.x;\n this.y = v.y;\n return this;\n }\n add(v) {\n this.x += v.x;\n this.y += v.y;\n return this;\n }\n addScalar(s) {\n this.x += s;\n this.y += s;\n return this;\n }\n addVectors(a, b) {\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n return this;\n }\n addScaledVector(v, s) {\n this.x += v.x * s;\n this.y += v.y * s;\n return this;\n }\n sub(v) {\n this.x -= v.x;\n this.y -= v.y;\n return this;\n }\n subScalar(s) {\n this.x -= s;\n this.y -= s;\n return this;\n }\n subVectors(a, b) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n return this;\n }\n multiply(v) {\n this.x *= v.x;\n this.y *= v.y;\n return this;\n }\n multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n }\n divide(v) {\n this.x /= v.x;\n this.y /= v.y;\n return this;\n }\n divideScalar(scalar) {\n return this.multiplyScalar(1 / scalar);\n }\n applyMatrix3(m) {\n const x = this.x, y = this.y;\n const e = m.elements;\n this.x = e[0] * x + e[3] * y + e[6];\n this.y = e[1] * x + e[4] * y + e[7];\n return this;\n }\n min(v) {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n return this;\n }\n max(v) {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n return this;\n }\n clamp(min, max) {\n // assumes min < max, componentwise\n this.x = Math.max(min.x, Math.min(max.x, this.x));\n this.y = Math.max(min.y, Math.min(max.y, this.y));\n return this;\n }\n clampScalar(minVal, maxVal) {\n this.x = Math.max(minVal, Math.min(maxVal, this.x));\n this.y = Math.max(minVal, Math.min(maxVal, this.y));\n return this;\n }\n clampLength(min, max) {\n const length = this.length();\n return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n }\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n return this;\n }\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n return this;\n }\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n roundToZero() {\n this.x = Math.trunc(this.x);\n this.y = Math.trunc(this.y);\n return this;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n dot(v) {\n return this.x * v.x + this.y * v.y;\n }\n cross(v) {\n return this.x * v.y - this.y * v.x;\n }\n lengthSq() {\n return this.x * this.x + this.y * this.y;\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n manhattanLength() {\n return Math.abs(this.x) + Math.abs(this.y);\n }\n normalize() {\n return this.divideScalar(this.length() || 1);\n }\n angle() {\n // computes the angle in radians with respect to the positive x-axis\n const angle = Math.atan2(-this.y, -this.x) + Math.PI;\n return angle;\n }\n angleTo(v) {\n const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n if (denominator === 0)\n return Math.PI / 2;\n const theta = this.dot(v) / denominator;\n // clamp, to handle numerical problems\n return Math.acos(clamp(theta, -1, 1));\n }\n distanceTo(v) {\n return Math.sqrt(this.distanceToSquared(v));\n }\n distanceToSquared(v) {\n const dx = this.x - v.x, dy = this.y - v.y;\n return dx * dx + dy * dy;\n }\n manhattanDistanceTo(v) {\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\n }\n setLength(length) {\n return this.normalize().multiplyScalar(length);\n }\n lerp(v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n return this;\n }\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n return this;\n }\n equals(v) {\n return v.x === this.x && v.y === this.y;\n }\n fromArray(array, offset = 0) {\n this.x = array[offset];\n this.y = array[offset + 1];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n return array;\n }\n /*fromBufferAttribute(attribute, index: number) {\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n\n return this;\n }*/\n rotateAround(center, angle) {\n const c = Math.cos(angle), s = Math.sin(angle);\n const x = this.x - center.x;\n const y = this.y - center.y;\n this.x = x * c - y * s + center.x;\n this.y = x * s + y * c + center.y;\n return this;\n }\n random() {\n this.x = Math.random();\n this.y = Math.random();\n return this;\n }\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n }\n}\nVector2.isVector2 = true;\n\nclass Vector4 {\n constructor(x = 0, y = 0, z = 0, w = 1) {\n Vector4.prototype.isVector4 = true;\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n get width() {\n return this.z;\n }\n set width(value) {\n this.z = value;\n }\n get height() {\n return this.w;\n }\n set height(value) {\n this.w = value;\n }\n set(x, y, z, w) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n return this;\n }\n setScalar(scalar) {\n this.x = scalar;\n this.y = scalar;\n this.z = scalar;\n this.w = scalar;\n return this;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n setZ(z) {\n this.z = z;\n return this;\n }\n setW(w) {\n this.w = w;\n return this;\n }\n setComponent(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n case 3:\n this.w = value;\n break;\n default:\n throw new Error('index is out of range: ' + index);\n }\n return this;\n }\n getComponent(index) {\n switch (index) {\n case 0:\n return this.x;\n case 1:\n return this.y;\n case 2:\n return this.z;\n case 3:\n return this.w;\n default:\n throw new Error('index is out of range: ' + index);\n }\n }\n clone() {\n return new Vector4(this.x, this.y, this.z, this.w);\n }\n copy(v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n this.w = v.w;\n return this;\n }\n add(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n this.w += v.w;\n return this;\n }\n addScalar(scalar) {\n this.x += scalar;\n this.y += scalar;\n this.z += scalar;\n this.w += scalar;\n return this;\n }\n addVectors(a, b) {\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n this.w = a.w + b.w;\n return this;\n }\n addScaledVector(v, s) {\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n this.w += v.w * s;\n return this;\n }\n sub(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n this.w -= v.w;\n return this;\n }\n subScalar(scalar) {\n this.x -= scalar;\n this.y -= scalar;\n this.z -= scalar;\n this.w -= scalar;\n return this;\n }\n subVectors(a, b) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n this.w = a.w - b.w;\n return this;\n }\n multiply(v) {\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n this.w *= v.w;\n return this;\n }\n multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n this.w *= scalar;\n return this;\n }\n applyMatrix4(m) {\n const x = this.x, y = this.y, z = this.z, w = this.w;\n const e = m.elements;\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;\n this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;\n return this;\n }\n divideScalar(scalar) {\n return this.multiplyScalar(1 / scalar);\n }\n setAxisAngleFromQuaternion(q) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n // q is assumed to be normalized\n this.w = 2 * Math.acos(q.w);\n const s = Math.sqrt(1 - q.w * q.w);\n if (s < 0.0001) {\n this.x = 1;\n this.y = 0;\n this.z = 0;\n }\n else {\n this.x = q.x / s;\n this.y = q.y / s;\n this.z = q.z / s;\n }\n return this;\n }\n setAxisAngleFromRotationMatrix(m) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n let angle, x, y, z; // variables for result\n const epsilon = 0.01, // margin to allow for rounding errors\n epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees\n te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10];\n if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) {\n // singularity found\n // first check for identity matrix which must have +1 for all terms\n // in leading diagonal and zero in other terms\n if (Math.abs(m12 + m21) < epsilon2 &&\n Math.abs(m13 + m31) < epsilon2 &&\n Math.abs(m23 + m32) < epsilon2 &&\n Math.abs(m11 + m22 + m33 - 3) < epsilon2) {\n // this singularity is identity matrix so angle = 0\n this.set(1, 0, 0, 0);\n return this; // zero angle, arbitrary axis\n }\n // otherwise this singularity is angle = 180\n angle = Math.PI;\n const xx = (m11 + 1) / 2;\n const yy = (m22 + 1) / 2;\n const zz = (m33 + 1) / 2;\n const xy = (m12 + m21) / 4;\n const xz = (m13 + m31) / 4;\n const yz = (m23 + m32) / 4;\n if (xx > yy && xx > zz) {\n // m11 is the largest diagonal term\n if (xx < epsilon) {\n x = 0;\n y = 0.707106781;\n z = 0.707106781;\n }\n else {\n x = Math.sqrt(xx);\n y = xy / x;\n z = xz / x;\n }\n }\n else if (yy > zz) {\n // m22 is the largest diagonal term\n if (yy < epsilon) {\n x = 0.707106781;\n y = 0;\n z = 0.707106781;\n }\n else {\n y = Math.sqrt(yy);\n x = xy / y;\n z = yz / y;\n }\n }\n else {\n // m33 is the largest diagonal term so base result on this\n if (zz < epsilon) {\n x = 0.707106781;\n y = 0.707106781;\n z = 0;\n }\n else {\n z = Math.sqrt(zz);\n x = xz / z;\n y = yz / z;\n }\n }\n this.set(x, y, z, angle);\n return this; // return 180 deg rotation\n }\n // as we have reached here there are no singularities so we can handle normally\n let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); // used to normalize\n if (Math.abs(s) < 0.001)\n s = 1;\n // prevent divide by zero, should not happen if matrix is orthogonal and should be\n // caught by singularity test above, but I've left it in just in case\n this.x = (m32 - m23) / s;\n this.y = (m13 - m31) / s;\n this.z = (m21 - m12) / s;\n this.w = Math.acos((m11 + m22 + m33 - 1) / 2);\n return this;\n }\n min(v) {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n this.w = Math.min(this.w, v.w);\n return this;\n }\n max(v) {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n this.w = Math.max(this.w, v.w);\n return this;\n }\n clamp(min, max) {\n // assumes min < max, componentwise\n this.x = Math.max(min.x, Math.min(max.x, this.x));\n this.y = Math.max(min.y, Math.min(max.y, this.y));\n this.z = Math.max(min.z, Math.min(max.z, this.z));\n this.w = Math.max(min.w, Math.min(max.w, this.w));\n return this;\n }\n clampScalar(minVal, maxVal) {\n this.x = Math.max(minVal, Math.min(maxVal, this.x));\n this.y = Math.max(minVal, Math.min(maxVal, this.y));\n this.z = Math.max(minVal, Math.min(maxVal, this.z));\n this.w = Math.max(minVal, Math.min(maxVal, this.w));\n return this;\n }\n clampLength(min, max) {\n const length = this.length();\n return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n }\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n this.w = Math.floor(this.w);\n return this;\n }\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n this.w = Math.ceil(this.w);\n return this;\n }\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n this.w = Math.round(this.w);\n return this;\n }\n roundToZero() {\n this.x = Math.trunc(this.x);\n this.y = Math.trunc(this.y);\n this.z = Math.trunc(this.z);\n this.w = Math.trunc(this.w);\n return this;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n this.w = -this.w;\n return this;\n }\n dot(v) {\n return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n }\n lengthSq() {\n return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n }\n manhattanLength() {\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w);\n }\n normalize() {\n return this.divideScalar(this.length() || 1);\n }\n setLength(length) {\n return this.normalize().multiplyScalar(length);\n }\n lerp(v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n this.w += (v.w - this.w) * alpha;\n return this;\n }\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n this.w = v1.w + (v2.w - v1.w) * alpha;\n return this;\n }\n equals(v) {\n return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w;\n }\n fromArray(array, offset = 0) {\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n this.w = array[offset + 3];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n array[offset + 3] = this.w;\n return array;\n }\n /*\n fromBufferAttribute(attribute, index) {\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n this.z = attribute.getZ(index);\n this.w = attribute.getW(index);\n\n return this;\n }*/\n random() {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n this.w = Math.random();\n return this;\n }\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n yield this.w;\n }\n}\n\nclass Matrix3 {\n constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n Matrix3.prototype.isMatrix3 = true;\n this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n if (n11 !== undefined) {\n this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33);\n }\n }\n set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n const te = this.elements;\n te[0] = n11;\n te[1] = n21;\n te[2] = n31;\n te[3] = n12;\n te[4] = n22;\n te[5] = n32;\n te[6] = n13;\n te[7] = n23;\n te[8] = n33;\n return this;\n }\n identity() {\n this.set(1, 0, 0, 0, 1, 0, 0, 0, 1);\n return this;\n }\n copy(m) {\n const te = this.elements;\n const me = m.elements;\n te[0] = me[0];\n te[1] = me[1];\n te[2] = me[2];\n te[3] = me[3];\n te[4] = me[4];\n te[5] = me[5];\n te[6] = me[6];\n te[7] = me[7];\n te[8] = me[8];\n return this;\n }\n extractBasis(xAxis, yAxis, zAxis) {\n xAxis.setFromMatrix3Column(this, 0);\n yAxis.setFromMatrix3Column(this, 1);\n zAxis.setFromMatrix3Column(this, 2);\n return this;\n }\n setFromMatrix4(m) {\n const me = m.elements;\n this.set(me[0], me[4], me[8], me[1], me[5], me[9], me[2], me[6], me[10]);\n return this;\n }\n multiply(m) {\n return this.multiplyMatrices(this, m);\n }\n premultiply(m) {\n return this.multiplyMatrices(m, this);\n }\n multiplyMatrices(a, b) {\n const ae = a.elements;\n const be = b.elements;\n const te = this.elements;\n const a11 = ae[0], a12 = ae[3], a13 = ae[6];\n const a21 = ae[1], a22 = ae[4], a23 = ae[7];\n const a31 = ae[2], a32 = ae[5], a33 = ae[8];\n const b11 = be[0], b12 = be[3], b13 = be[6];\n const b21 = be[1], b22 = be[4], b23 = be[7];\n const b31 = be[2], b32 = be[5], b33 = be[8];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31;\n te[3] = a11 * b12 + a12 * b22 + a13 * b32;\n te[6] = a11 * b13 + a12 * b23 + a13 * b33;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31;\n te[4] = a21 * b12 + a22 * b22 + a23 * b32;\n te[7] = a21 * b13 + a22 * b23 + a23 * b33;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31;\n te[5] = a31 * b12 + a32 * b22 + a33 * b32;\n te[8] = a31 * b13 + a32 * b23 + a33 * b33;\n return this;\n }\n multiplyScalar(s) {\n const te = this.elements;\n te[0] *= s;\n te[3] *= s;\n te[6] *= s;\n te[1] *= s;\n te[4] *= s;\n te[7] *= s;\n te[2] *= s;\n te[5] *= s;\n te[8] *= s;\n return this;\n }\n determinant() {\n const te = this.elements;\n const a = te[0], b = te[1], c = te[2], d = te[3], e = te[4], f = te[5], g = te[6], h = te[7], i = te[8];\n return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n }\n invert() {\n const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n12 = te[3], n22 = te[4], n32 = te[5], n13 = te[6], n23 = te[7], n33 = te[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13;\n if (det === 0)\n return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n const detInv = 1 / det;\n te[0] = t11 * detInv;\n te[1] = (n31 * n23 - n33 * n21) * detInv;\n te[2] = (n32 * n21 - n31 * n22) * detInv;\n te[3] = t12 * detInv;\n te[4] = (n33 * n11 - n31 * n13) * detInv;\n te[5] = (n31 * n12 - n32 * n11) * detInv;\n te[6] = t13 * detInv;\n te[7] = (n21 * n13 - n23 * n11) * detInv;\n te[8] = (n22 * n11 - n21 * n12) * detInv;\n return this;\n }\n transpose() {\n let tmp;\n const m = this.elements;\n tmp = m[1];\n m[1] = m[3];\n m[3] = tmp;\n tmp = m[2];\n m[2] = m[6];\n m[6] = tmp;\n tmp = m[5];\n m[5] = m[7];\n m[7] = tmp;\n return this;\n }\n getNormalMatrix(matrix4) {\n return this.setFromMatrix4(matrix4).invert().transpose();\n }\n transposeIntoArray(r) {\n const m = this.elements;\n r[0] = m[0];\n r[1] = m[3];\n r[2] = m[6];\n r[3] = m[1];\n r[4] = m[4];\n r[5] = m[7];\n r[6] = m[2];\n r[7] = m[5];\n r[8] = m[8];\n return this;\n }\n setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {\n const c = Math.cos(rotation);\n const s = Math.sin(rotation);\n this.set(sx * c, sx * s, -sx * (c * cx + s * cy) + cx + tx, -sy * s, sy * c, -sy * (-s * cx + c * cy) + cy + ty, 0, 0, 1);\n return this;\n }\n //\n scale(sx, sy) {\n this.premultiply(_m3.makeScale(sx, sy));\n return this;\n }\n rotate(theta) {\n this.premultiply(_m3.makeRotation(-theta));\n return this;\n }\n translate(tx, ty) {\n this.premultiply(_m3.makeTranslation(tx, ty));\n return this;\n }\n // for 2D Transforms\n makeTranslation(x, y) {\n if (x.isVector2) {\n this.set(1, 0, x.x, 0, 1, x.y, 0, 0, 1);\n }\n else {\n this.set(1, 0, x, 0, 1, y, 0, 0, 1);\n }\n return this;\n }\n makeRotation(theta) {\n // counterclockwise\n const c = Math.cos(theta);\n const s = Math.sin(theta);\n this.set(c, -s, 0, s, c, 0, 0, 0, 1);\n return this;\n }\n makeScale(x, y) {\n this.set(x, 0, 0, 0, y, 0, 0, 0, 1);\n return this;\n }\n //\n equals(matrix) {\n const te = this.elements;\n const me = matrix.elements;\n for (let i = 0; i < 9; i++) {\n if (te[i] !== me[i])\n return false;\n }\n return true;\n }\n fromArray(array, offset = 0) {\n for (let i = 0; i < 9; i++) {\n this.elements[i] = array[i + offset];\n }\n return this;\n }\n toArray(array = [], offset = 0) {\n const te = this.elements;\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n array[offset + 8] = te[8];\n return array;\n }\n clone() {\n return new Matrix3().fromArray(this.elements);\n }\n}\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\n/**\n * Enum representing the emitter modes for particles.\n */\nvar EmitterMode;\n(function (EmitterMode) {\n /**\n * Emit particles randomly over the specified duration.\n */\n EmitterMode[EmitterMode[\"Random\"] = 0] = \"Random\";\n /**\n * Emit particles in a continuous loop.\n */\n EmitterMode[EmitterMode[\"Loop\"] = 1] = \"Loop\";\n /**\n * Emit particles back and forth in a ping-pong manner.\n */\n EmitterMode[EmitterMode[\"PingPong\"] = 2] = \"PingPong\";\n /**\n * Emit particles in bursts.\n */\n EmitterMode[EmitterMode[\"Burst\"] = 3] = \"Burst\";\n})(EmitterMode || (EmitterMode = {}));\nfunction getValueFromEmitterMode(mode, currentValue, spread, emissionState) {\n let u;\n if (EmitterMode.Random === mode) {\n currentValue = Math.random();\n }\n else if (EmitterMode.Burst === mode && emissionState.isBursting) {\n currentValue = emissionState.burstParticleIndex / emissionState.burstParticleCount;\n }\n if (spread > 0) {\n u = Math.floor(currentValue / spread) * spread;\n }\n else {\n u = currentValue;\n }\n switch (mode) {\n case EmitterMode.Loop:\n u = u % 1;\n break;\n case EmitterMode.PingPong:\n u = Math.abs((u % 2) - 1);\n break;\n }\n return u;\n}\n\nclass Bezier {\n constructor(p1, p2, p3, p4) {\n this.p = [p1, p2, p3, p4];\n }\n genValue(t) {\n const t2 = t * t;\n const t3 = t * t * t;\n const mt = 1 - t;\n const mt2 = mt * mt;\n const mt3 = mt2 * mt;\n return this.p[0] * mt3 + this.p[1] * mt2 * t * 3 + this.p[2] * mt * t2 * 3 + this.p[3] * t3;\n }\n // get the coefficients of the polynomial's derivatives\n derivativeCoefficients(points) {\n const dpoints = [];\n for (let p = points, c = p.length - 1; c > 0; c--) {\n const list = [];\n for (let j = 0; j < c; j++) {\n const dpt = c * (p[j + 1] - p[j]);\n list.push(dpt);\n }\n dpoints.push(list);\n p = list;\n }\n return dpoints;\n }\n // calculate the slope\n getSlope(t) {\n const p = this.derivativeCoefficients(this.p)[0];\n const mt = 1 - t;\n const a = mt * mt;\n const b = mt * t * 2;\n const c = t * t;\n return a * p[0] + b * p[1] + c * p[2];\n //return a * (p[1] - p[0]) * 3 + b * (p[2] - p[1]) * 3 + c * (p[3] - p[2]) * 3;\n }\n // derivative(0) = (p[1] - p[0]) * 3\n // derivative(1) = (p[3] - p[2]) * 3\n controlCurve(d0, d1) {\n this.p[1] = d0 / 3 + this.p[0];\n this.p[2] = this.p[3] - d1 / 3;\n }\n hull(t) {\n let p = this.p;\n let _p = [], pt, idx = 0, i = 0, l = 0;\n const q = [];\n q[idx++] = p[0];\n q[idx++] = p[1];\n q[idx++] = p[2];\n q[idx++] = p[3];\n // we lerp between all points at each iteration, until we have 1 point left.\n while (p.length > 1) {\n _p = [];\n for (i = 0, l = p.length - 1; i < l; i++) {\n pt = t * p[i] + (1 - t) * p[i + 1];\n q[idx++] = pt;\n _p.push(pt);\n }\n p = _p;\n }\n return q;\n }\n split(t) {\n // no shortcut: use \"de Casteljau\" iteration.\n const q = this.hull(t);\n const result = {\n left: new Bezier(q[0], q[4], q[7], q[9]),\n right: new Bezier(q[9], q[8], q[6], q[3]),\n span: q\n };\n return result;\n }\n clone() {\n return new Bezier(this.p[0], this.p[1], this.p[2], this.p[3]);\n }\n toJSON() {\n return {\n p0: this.p[0],\n p1: this.p[1],\n p2: this.p[2],\n p3: this.p[3],\n };\n }\n static fromJSON(json) {\n return new Bezier(json.p0, json.p1, json.p2, json.p3);\n }\n}\n\nconst ColorToJSON = (color) => {\n return { r: color.x, g: color.y, b: color.z, a: color.w };\n};\nconst JSONToColor = (json) => {\n return new Vector4(json.r, json.g, json.b, json.a);\n};\nconst JSONToValue = (json, type) => {\n switch (type) {\n case 'Vector3':\n return new Vector3(json.x, json.y, json.z);\n case 'Vector4':\n return new Vector4(json.x, json.y, json.z, json.w);\n case 'Color':\n return new Vector3(json.r, json.g, json.b);\n case 'Number':\n return json;\n default:\n return json;\n }\n};\nconst ValueToJSON = (value, type) => {\n switch (type) {\n case 'Vector3':\n return { x: value.x, y: value.y, z: value.z };\n case 'Vector4':\n return { x: value.x, y: value.y, z: value.z, w: value.w };\n case 'Color':\n return { r: value.x, g: value.y, b: value.z };\n case 'Number':\n return value;\n default:\n return value;\n }\n};\n\nclass RandomColor {\n constructor(a, b) {\n this.a = a;\n this.b = b;\n this.type = 'value';\n }\n startGen(memory) { }\n genColor(memory, color) {\n const rand = Math.random();\n return color.copy(this.a).lerp(this.b, rand);\n }\n toJSON() {\n return {\n type: 'RandomColor',\n a: ColorToJSON(this.a),\n b: ColorToJSON(this.b),\n };\n }\n static fromJSON(json) {\n return new RandomColor(JSONToColor(json.a), JSONToColor(json.b));\n }\n clone() {\n return new RandomColor(this.a.clone(), this.b.clone());\n }\n}\n\nclass ColorRange {\n constructor(a, b) {\n this.a = a;\n this.b = b;\n this.indexCount = -1;\n this.type = 'value';\n }\n startGen(memory) {\n this.indexCount = memory.length;\n memory.push(Math.random());\n }\n genColor(memory, color) {\n if (this.indexCount === -1) {\n this.startGen(memory);\n }\n return color.copy(this.a).lerp(this.b, memory[this.indexCount]);\n }\n toJSON() {\n return {\n type: 'ColorRange',\n a: ColorToJSON(this.a),\n b: ColorToJSON(this.b),\n };\n }\n static fromJSON(json) {\n return new ColorRange(JSONToColor(json.a), JSONToColor(json.b));\n }\n clone() {\n return new ColorRange(this.a.clone(), this.b.clone());\n }\n}\n\nclass ContinuousLinearFunction {\n // default linear bezier\n constructor(keys, subType) {\n this.subType = subType;\n this.type = 'function';\n this.keys = keys;\n }\n findKey(t) {\n let mid = 0;\n let left = 0, right = this.keys.length - 1;\n while (left + 1 < right) {\n mid = Math.floor((left + right) / 2);\n if (t < this.getStartX(mid))\n right = mid - 1;\n else if (t > this.getEndX(mid))\n left = mid + 1;\n else\n return mid;\n }\n for (let i = left; i <= right; i++) {\n if (t >= this.getStartX(i) && t <= this.getEndX(i))\n return i;\n }\n return -1;\n }\n getStartX(index) {\n return this.keys[index][1];\n }\n getEndX(index) {\n if (index + 1 < this.keys.length)\n return this.keys[index + 1][1];\n return 1;\n }\n genValue(value, t) {\n const index = this.findKey(t);\n if (this.subType === 'Number') {\n if (index === -1) {\n return this.keys[0][0];\n }\n else if (index + 1 >= this.keys.length) {\n return this.keys[this.keys.length - 1][0];\n }\n return ((this.keys[index + 1][0] - this.keys[index][0]) *\n ((t - this.getStartX(index)) / (this.getEndX(index) - this.getStartX(index))) +\n this.keys[index][0]);\n }\n else {\n if (index === -1) {\n return value.copy(this.keys[0][0]);\n }\n if (index + 1 >= this.keys.length) {\n return value.copy(this.keys[this.keys.length - 1][0]);\n }\n return value\n .copy(this.keys[index][0])\n .lerp(this.keys[index + 1][0], (t - this.getStartX(index)) / (this.getEndX(index) - this.getStartX(index)));\n }\n }\n toJSON() {\n this.keys[0][0].constructor.name;\n return {\n type: 'CLinearFunction',\n subType: this.subType,\n keys: this.keys.map(([color, pos]) => ({ value: ValueToJSON(color, this.subType), pos: pos })),\n };\n }\n static fromJSON(json) {\n return new ContinuousLinearFunction(json.keys.map((pair) => [JSONToValue(pair.value, json.subType), pair.pos]), json.subType);\n }\n clone() {\n if (this.subType === 'Number') {\n return new ContinuousLinearFunction(this.keys.map(([value, pos]) => [value, pos]), this.subType);\n }\n else {\n return new ContinuousLinearFunction(this.keys.map(([value, pos]) => [value.clone(), pos]), this.subType);\n }\n }\n}\n\nconst tempVec3 = new Vector3();\nclass Gradient {\n // default linear bezier\n constructor(color = [\n [new Vector3(0, 0, 0), 0],\n [new Vector3(1, 1, 1), 0],\n ], alpha = [\n [1, 0],\n [1, 1],\n ]) {\n this.type = 'function';\n this.color = new ContinuousLinearFunction(color, 'Color');\n this.alpha = new ContinuousLinearFunction(alpha, 'Number');\n }\n genColor(memory, color, t) {\n this.color.genValue(tempVec3, t);\n return color.set(tempVec3.x, tempVec3.y, tempVec3.z, this.alpha.genValue(1, t));\n }\n toJSON() {\n return {\n type: 'Gradient',\n color: this.color.toJSON(),\n alpha: this.alpha.toJSON(),\n };\n }\n static fromJSON(json) {\n // compatibility\n if (json.functions) {\n const keys = json.functions.map((func) => [ColorRange.fromJSON(func.function).a, func.start]);\n if (json.functions.length > 0) {\n keys.push([ColorRange.fromJSON(json.functions[json.functions.length - 1].function).b, 1]);\n }\n return new Gradient(keys.map((key) => [new Vector3(key[0].x, key[0].y, key[0].z), key[1]]), keys.map((key) => [key[0].w, key[1]]));\n }\n else {\n const gradient = new Gradient();\n gradient.alpha = ContinuousLinearFunction.fromJSON(json.alpha);\n gradient.color = ContinuousLinearFunction.fromJSON(json.color);\n return gradient;\n }\n }\n clone() {\n const gradient = new Gradient();\n gradient.alpha = this.alpha.clone();\n gradient.color = this.color.clone();\n return gradient;\n }\n startGen(memory) { }\n}\n\nconst tempColor = new Vector4();\n// generate a random color from the start two gradients\nclass RandomColorBetweenGradient {\n constructor(gradient1, gradient2) {\n this.indexCount = 0;\n this.type = 'function';\n this.gradient1 = gradient1;\n this.gradient2 = gradient2;\n }\n startGen(memory) {\n this.indexCount = memory.length;\n memory.push(Math.random());\n }\n genColor(memory, color, t) {\n this.gradient1.genColor(memory, color, t);\n this.gradient2.genColor(memory, tempColor, t);\n if (memory && memory[this.indexCount] !== undefined) {\n color.lerp(tempColor, memory[this.indexCount]);\n }\n else {\n color.lerp(tempColor, Math.random());\n }\n return color;\n }\n toJSON() {\n return {\n type: 'RandomColorBetweenGradient',\n gradient1: this.gradient1.toJSON(),\n gradient2: this.gradient2.toJSON(),\n };\n }\n static fromJSON(json) {\n return new RandomColorBetweenGradient(Gradient.fromJSON(json.gradient1), Gradient.fromJSON(json.gradient2));\n }\n clone() {\n return new RandomColorBetweenGradient(this.gradient1.clone(), this.gradient2.clone());\n }\n}\n\nclass ConstantColor {\n constructor(color) {\n this.color = color;\n this.type = 'value';\n }\n startGen(memory) { }\n genColor(memoryGenerator, color) {\n return color.copy(this.color);\n }\n toJSON() {\n return {\n type: 'ConstantColor',\n color: ColorToJSON(this.color),\n };\n }\n static fromJSON(json) {\n return new ConstantColor(JSONToColor(json.color));\n }\n clone() {\n return new ConstantColor(this.color.clone());\n }\n}\nfunction ColorGeneratorFromJSON(json) {\n switch (json.type) {\n case 'ConstantColor':\n return ConstantColor.fromJSON(json);\n case 'ColorRange':\n return ColorRange.fromJSON(json);\n case 'RandomColor':\n return RandomColor.fromJSON(json);\n case 'Gradient':\n return Gradient.fromJSON(json);\n case 'RandomColorBetweenGradient':\n return RandomColorBetweenGradient.fromJSON(json);\n default:\n return new ConstantColor(new Vector4(1, 1, 1, 1));\n }\n}\n\nclass ConstantValue {\n constructor(value) {\n this.value = value;\n this.type = 'value';\n }\n startGen(memory) { }\n genValue(memory) {\n return this.value;\n }\n toJSON() {\n return {\n type: 'ConstantValue',\n value: this.value,\n };\n }\n static fromJSON(json) {\n return new ConstantValue(json.value);\n }\n clone() {\n return new ConstantValue(this.value);\n }\n}\n\nclass IntervalValue {\n constructor(a, b) {\n this.a = a;\n this.b = b;\n this.indexCount = -1;\n this.type = 'value';\n }\n // Roll a random sample once at spawn and remember the slot, so the\n // particle keeps the same lerp factor for its whole life. See\n // GeneratorMemory.ts for the slot-allocation pattern.\n startGen(memory) {\n this.indexCount = memory.length;\n memory.push(Math.random());\n }\n genValue(memory) {\n if (this.indexCount === -1) {\n this.startGen(memory);\n }\n return MathUtils.lerp(this.a, this.b, memory[this.indexCount]);\n }\n toJSON() {\n return {\n type: 'IntervalValue',\n a: this.a,\n b: this.b,\n };\n }\n static fromJSON(json) {\n return new IntervalValue(json.a, json.b);\n }\n clone() {\n return new IntervalValue(this.a, this.b);\n }\n}\n\nclass PiecewiseFunction {\n constructor() {\n this.functions = new Array();\n }\n findFunction(t) {\n let mid = 0;\n let left = 0, right = this.functions.length - 1;\n while (left + 1 < right) {\n mid = Math.floor((left + right) / 2);\n if (t < this.getStartX(mid))\n right = mid - 1;\n else if (t > this.getEndX(mid))\n left = mid + 1;\n else\n return mid;\n }\n for (let i = left; i <= right; i++) {\n if (t >= this.functions[i][1] && t <= this.getEndX(i))\n return i;\n }\n return -1;\n }\n getStartX(index) {\n return this.functions[index][1];\n }\n setStartX(index, x) {\n if (index > 0)\n this.functions[index][1] = x;\n }\n getEndX(index) {\n if (index + 1 < this.functions.length)\n return this.functions[index + 1][1];\n return 1;\n }\n setEndX(index, x) {\n if (index + 1 < this.functions.length)\n this.functions[index + 1][1] = x;\n }\n insertFunction(t, func) {\n const index = this.findFunction(t);\n this.functions.splice(index + 1, 0, [func, t]);\n }\n removeFunction(index) {\n return this.functions.splice(index, 1)[0][0];\n }\n getFunction(index) {\n return this.functions[index][0];\n }\n setFunction(index, func) {\n this.functions[index][0] = func;\n }\n get numOfFunctions() {\n return this.functions.length;\n }\n}\n\nclass PiecewiseBezier extends PiecewiseFunction {\n // default linear bezier\n constructor(curves = [[new Bezier(0, 1.0 / 3, (1.0 / 3) * 2, 1), 0]]) {\n super();\n this.type = 'function';\n this.functions = curves;\n }\n genValue(memory, t = 0) {\n const index = this.findFunction(t);\n if (index === -1) {\n return 0;\n }\n return this.functions[index][0].genValue((t - this.getStartX(index)) / (this.getEndX(index) - this.getStartX(index)));\n }\n toSVG(length, segments) {\n if (segments < 1)\n return '';\n let result = ['M', 0, this.functions[0][0].p[0]].join(' ');\n for (let i = 1.0 / segments; i <= 1; i += 1.0 / segments) {\n result = [result, 'L', i * length, this.genValue(undefined, i)].join(' ');\n }\n return result;\n }\n toJSON() {\n return {\n type: 'PiecewiseBezier',\n functions: this.functions.map(([bezier, start]) => ({ function: bezier.toJSON(), start: start })),\n };\n }\n static fromJSON(json) {\n return new PiecewiseBezier(json.functions.map((piecewiseFunction) => [\n Bezier.fromJSON(piecewiseFunction.function),\n piecewiseFunction.start,\n ]));\n }\n clone() {\n return new PiecewiseBezier(this.functions.map(([bezier, start]) => [bezier.clone(), start]));\n }\n startGen(memory) { }\n}\n\nfunction ValueGeneratorFromJSON(json) {\n switch (json.type) {\n case 'ConstantValue':\n return ConstantValue.fromJSON(json);\n case 'IntervalValue':\n return IntervalValue.fromJSON(json);\n case 'PiecewiseBezier':\n return PiecewiseBezier.fromJSON(json);\n default:\n return new ConstantValue(0);\n }\n}\n\nclass RandomQuatGenerator {\n constructor() {\n this.indexCount = 0;\n this.type = 'rotation';\n }\n startGen(memory) {\n this.indexCount = memory.length;\n memory.push(new Quaternion());\n let x, y, z, u, v, w;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n z = x * x + y * y;\n } while (z > 1);\n do {\n u = Math.random() * 2 - 1;\n v = Math.random() * 2 - 1;\n w = u * u + v * v;\n } while (w > 1);\n const s = Math.sqrt((1 - z) / w);\n memory[this.indexCount].set(x, y, s * u, s * v);\n }\n genValue(memory, quat, delta, t) {\n if (this.indexCount === -1) {\n this.startGen(memory);\n }\n quat.copy(memory[this.indexCount]);\n return quat;\n }\n toJSON() {\n return {\n type: 'RandomQuat',\n };\n }\n static fromJSON(json) {\n return new RandomQuatGenerator();\n }\n clone() {\n return new RandomQuatGenerator();\n }\n}\n\nclass AxisAngleGenerator {\n constructor(axis, angle) {\n this.axis = axis;\n this.angle = angle;\n this.type = 'rotation';\n }\n startGen(memory) {\n this.angle.startGen(memory);\n }\n genValue(memory, quat, delta, t) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return quat.setFromAxisAngle(this.axis, this.angle.genValue(memory, t) * delta);\n }\n toJSON() {\n return {\n type: 'AxisAngle',\n axis: { x: this.axis.x, y: this.axis.y, z: this.axis.z },\n angle: this.angle.toJSON(),\n };\n }\n static fromJSON(json) {\n return new AxisAngleGenerator(new Vector3(json.axis.x, json.axis.y, json.axis.z), ValueGeneratorFromJSON(json.angle));\n }\n clone() {\n return new AxisAngleGenerator(this.axis.clone(), this.angle.clone());\n }\n}\n\nclass EulerGenerator {\n constructor(angleX, angleY, angleZ, eulerOrder) {\n this.angleX = angleX;\n this.angleY = angleY;\n this.angleZ = angleZ;\n this.type = 'rotation';\n this.eular = new Euler(0, 0, 0, eulerOrder);\n }\n startGen(memory) {\n this.angleX.startGen(memory);\n this.angleY.startGen(memory);\n this.angleZ.startGen(memory);\n }\n genValue(memory, quat, delta, t) {\n this.eular.set(this.angleX.genValue(memory, t) * delta, this.angleY.genValue(memory, t) * delta, this.angleZ.genValue(memory, t) * delta);\n return quat.setFromEuler(this.eular);\n }\n toJSON() {\n return {\n type: 'Euler',\n angleX: this.angleX.toJSON(),\n angleY: this.angleY.toJSON(),\n angleZ: this.angleZ.toJSON(),\n eulerOrder: this.eular.order,\n };\n }\n static fromJSON(json) {\n return new EulerGenerator(ValueGeneratorFromJSON(json.angleX), ValueGeneratorFromJSON(json.angleY), ValueGeneratorFromJSON(json.angleZ), json.eulerOrder);\n }\n clone() {\n return new EulerGenerator(this.angleX, this.angleY, this.angleZ, this.eular.order);\n }\n}\n\nfunction RotationGeneratorFromJSON(json) {\n switch (json.type) {\n case 'AxisAngle':\n return AxisAngleGenerator.fromJSON(json);\n case 'Euler':\n return EulerGenerator.fromJSON(json);\n case 'RandomQuat':\n return RandomQuatGenerator.fromJSON(json);\n default:\n return new RandomQuatGenerator();\n }\n}\n\nclass Vector3Function {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.type = 'vec3function';\n }\n startGen(memory) {\n this.x.startGen(memory);\n this.y.startGen(memory);\n this.z.startGen(memory);\n }\n genValue(memory, vec, t) {\n return vec.set(this.x.genValue(memory, t), this.y.genValue(memory, t), this.z.genValue(memory, t));\n }\n toJSON() {\n return {\n type: 'Vector3Function',\n x: this.x.toJSON(),\n y: this.y.toJSON(),\n z: this.z.toJSON(),\n };\n }\n static fromJSON(json) {\n return new Vector3Function(ValueGeneratorFromJSON(json.x), ValueGeneratorFromJSON(json.y), ValueGeneratorFromJSON(json.z));\n }\n clone() {\n return new Vector3Function(this.x, this.y, this.z);\n }\n}\n\nfunction Vector3GeneratorFromJSON(json) {\n switch (json.type) {\n case 'Vector3Function':\n return Vector3Function.fromJSON(json);\n default:\n return new Vector3Function(new ConstantValue(0), new ConstantValue(0), new ConstantValue(0));\n }\n}\n\nfunction GeneratorFromJSON(json) {\n switch (json.type) {\n case 'ConstantValue':\n case 'IntervalValue':\n case 'PiecewiseBezier':\n return ValueGeneratorFromJSON(json);\n case 'AxisAngle':\n case 'RandomQuat':\n case 'Euler':\n return RotationGeneratorFromJSON(json);\n case 'Vector3Function':\n return Vector3GeneratorFromJSON(json);\n default:\n return new ConstantValue(0);\n }\n}\n\nclass ConeEmitter {\n constructor(parameters = {}) {\n this.type = 'cone';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.angle = parameters.angle ?? Math.PI / 6;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n }\n update(system, delta) {\n if (EmitterMode.Random != this.mode) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const rand = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n const r = Math.sqrt(rand);\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n p.position.x = r * cosTheta;\n p.position.y = r * sinTheta;\n p.position.z = 0;\n const angle = this.angle * r;\n p.velocity.set(0, 0, Math.cos(angle)).addScaledVector(p.position, Math.sin(angle)).multiplyScalar(p.startSpeed);\n //const v = Math.random();\n p.position.multiplyScalar(this.radius);\n }\n toJSON() {\n return {\n type: 'cone',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n angle: this.angle,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ConeEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n angle: json.angle,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new ConeEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n angle: this.angle,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\n/**\n * a particle emitter that emits particles from a circle.\n */\nclass CircleEmitter {\n constructor(parameters = {}) {\n this.type = 'circle';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n }\n update(system, delta) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const r = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n p.position.x = Math.cos(theta);\n p.position.y = Math.sin(theta);\n p.position.z = 0;\n p.velocity.copy(p.position).multiplyScalar(p.startSpeed);\n //const v = Math.random();\n p.position.multiplyScalar(this.radius * r);\n }\n toJSON() {\n return {\n type: 'circle',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new CircleEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new CircleEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\nfunction randomInt(a, b) {\n return Math.floor(Math.random() * (b - a)) + a;\n}\nconst UP_VEC3 = new Vector3(0, 1, 0);\nconst ZERO_VEC3 = new Vector3(0, 0, 0);\nconst ONE_VEC3 = new Vector3(1, 1, 1);\nconst Z_VEC3 = new Vector3(0, 0, 1);\n\nclass DonutEmitter {\n constructor(parameters = {}) {\n this.type = 'donut';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.donutRadius = parameters.donutRadius ?? this.radius * 0.2;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n this._m1 = new Matrix4();\n }\n update(system, delta) {\n if (EmitterMode.Random != this.mode) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const v = Math.random();\n const rand = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n const phi = v * Math.PI * 2;\n //const r = Math.sqrt(rand);\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n p.position.x = this.radius * cosTheta;\n p.position.y = this.radius * sinTheta;\n p.position.z = 0;\n p.velocity.z = this.donutRadius * rand * Math.sin(phi);\n p.velocity.x = this.donutRadius * rand * Math.cos(phi) * cosTheta;\n p.velocity.y = this.donutRadius * rand * Math.cos(phi) * sinTheta;\n p.position.add(p.velocity);\n p.velocity.normalize().multiplyScalar(p.startSpeed);\n //const angle = this.angle * r;\n //p.velocity.set(0, 0, Math.cos(angle)).addScaledVector(p.position, Math.sin(angle)).multiplyScalar(p.startSpeed);\n //const v = Math.random();\n //.multiplyScalar(this.radius);\n // Default facing-velocity orientation, but defer to startRotation if set.\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.velocity, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'donut',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n donutRadius: this.donutRadius,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new DonutEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n donutRadius: json.donutRadius,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new DonutEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n donutRadius: this.donutRadius,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\n/**\n * A point emitter emits particles from a single point.\n */\nclass PointEmitter {\n constructor() {\n this.type = 'point';\n this._m1 = new Matrix4();\n }\n update(system, delta) { }\n initialize(p) {\n const u = Math.random();\n const v = Math.random();\n const theta = u * Math.PI * 2;\n const phi = Math.acos(2.0 * v - 1.0);\n const r = Math.cbrt(Math.random());\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n p.velocity.x = r * sinPhi * cosTheta;\n p.velocity.y = r * sinPhi * sinTheta;\n p.velocity.z = r * cosPhi;\n p.velocity.multiplyScalar(p.startSpeed);\n p.position.setScalar(0);\n // Only set a default facing-along-velocity orientation if the user's\n // startRotation didn't already write a non-identity rotation.\n // (lookAt(ZERO, p.position, UP) would be degenerate here since\n // p.position is zero — use velocity instead.)\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.velocity, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'point',\n };\n }\n static fromJSON(json) {\n return new PointEmitter();\n }\n clone() {\n return new PointEmitter();\n }\n}\n\nclass SphereEmitter {\n constructor(parameters = {}) {\n this.type = 'sphere';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n this._m1 = new Matrix4();\n }\n update(system, delta) {\n if (EmitterMode.Random != this.mode) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const v = Math.random();\n const rand = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n const phi = Math.acos(2.0 * v - 1.0);\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n p.position.x = sinPhi * cosTheta;\n p.position.y = sinPhi * sinTheta;\n p.position.z = cosPhi;\n p.velocity.copy(p.position).multiplyScalar(p.startSpeed);\n p.position.multiplyScalar(this.radius * rand);\n // Default facing-outward orientation, but defer to startRotation if set.\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.position, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'sphere',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new SphereEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new SphereEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\nclass HemisphereEmitter {\n constructor(parameters = {}) {\n this.type = 'hemisphere';\n this.currentValue = 0;\n this.radius = parameters.radius ?? 10;\n this.arc = parameters.arc ?? 2.0 * Math.PI;\n this.thickness = parameters.thickness ?? 1;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n this._m1 = new Matrix4();\n }\n update(system, delta) {\n if (EmitterMode.Random != this.mode) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n const v = Math.random();\n const rand = MathUtils.lerp(1 - this.thickness, 1, Math.random());\n const theta = u * this.arc;\n const phi = Math.acos(v);\n //const r = Math.cbrt(rand);\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n p.position.x = sinPhi * cosTheta;\n p.position.y = sinPhi * sinTheta;\n p.position.z = cosPhi;\n p.velocity.copy(p.position).multiplyScalar(p.startSpeed);\n p.position.multiplyScalar(this.radius * rand);\n // Default facing-outward orientation, but defer to startRotation if set.\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.position, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'hemisphere',\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new HemisphereEmitter({\n radius: json.radius,\n arc: json.arc,\n thickness: json.thickness,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new HemisphereEmitter({\n radius: this.radius,\n arc: this.arc,\n thickness: this.thickness,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\nclass GridEmitter {\n constructor(parameters = {}) {\n this.type = 'grid';\n this.width = parameters.width ?? 1;\n this.height = parameters.height ?? 1;\n this.column = parameters.column ?? 10;\n this.row = parameters.row ?? 10;\n }\n initialize(p) {\n const r = Math.floor(Math.random() * this.row);\n const c = Math.floor(Math.random() * this.column);\n p.position.x = (c * this.width) / this.column - this.width / 2;\n p.position.y = (r * this.height) / this.row - this.height / 2;\n p.position.z = 0;\n p.velocity.set(0, 0, p.startSpeed);\n }\n toJSON() {\n return {\n type: 'grid',\n width: this.width,\n height: this.height,\n column: this.column,\n row: this.row,\n };\n }\n static fromJSON(json) {\n return new GridEmitter(json);\n }\n clone() {\n return new GridEmitter({\n width: this.width,\n height: this.height,\n column: this.column,\n row: this.row,\n });\n }\n update(system, delta) { }\n}\n\n/**\n * a particle emitter that emits particles from a rectangle.\n */\nclass RectangleEmitter {\n constructor(parameters = {}) {\n this.type = 'rectangle';\n this.currentValue = 0;\n this.width = parameters.width ?? 10;\n this.height = parameters.height ?? 10;\n this.thickness = parameters.thickness ?? 1;\n this.mode = parameters.mode ?? EmitterMode.Random;\n this.spread = parameters.spread ?? 0;\n this.speed = parameters.speed ?? new ConstantValue(1);\n this.memory = [];\n this._m1 = new Matrix4();\n }\n update(system, delta) {\n this.currentValue += this.speed.genValue(this.memory, system.emissionState.time / system.duration) * delta;\n }\n initialize(p, emissionState) {\n const u = getValueFromEmitterMode(this.mode, this.currentValue, this.spread, emissionState);\n // Calculate perimeter points\n const totalPerimeter = 2 * (this.width + this.height);\n const point = u * totalPerimeter;\n // Map perimeter position to x,y coordinates\n let x, y;\n if (point < this.width) {\n // Bottom edge\n x = point - this.width / 2;\n y = -this.height / 2;\n }\n else if (point < this.width + this.height) {\n // Right edge\n x = this.width / 2;\n y = point - this.width - this.height / 2;\n }\n else if (point < 2 * this.width + this.height) {\n // Top edge\n x = this.width / 2 - (point - this.width - this.height);\n y = this.height / 2;\n }\n else {\n // Left edge\n x = -this.width / 2;\n y = this.height / 2 - (point - 2 * this.width - this.height);\n }\n // Apply thickness - lerp from edge point toward center\n const rand = Math.random();\n const thicknessScale = 1 - this.thickness * rand;\n p.position.x = x * thicknessScale;\n p.position.y = y * thicknessScale;\n p.position.z = 0;\n // Set velocity outward from center\n p.velocity.x = x;\n p.velocity.y = y;\n p.velocity.z = 0;\n p.velocity.normalize().multiplyScalar(p.startSpeed);\n // Default facing-velocity orientation, but defer to startRotation if set.\n if (p.rotation instanceof Quaternion) {\n const r = p.rotation;\n if (r.x === 0 && r.y === 0 && r.z === 0 && r.w === 1) {\n this._m1.lookAt(ZERO_VEC3, p.velocity, UP_VEC3);\n p.rotation.setFromRotationMatrix(this._m1);\n }\n }\n }\n toJSON() {\n return {\n type: 'rectangle',\n width: this.width,\n height: this.height,\n thickness: this.thickness,\n mode: this.mode,\n spread: this.spread,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new RectangleEmitter({\n width: json.width,\n height: json.height,\n thickness: json.thickness,\n mode: json.mode,\n speed: json.speed ? ValueGeneratorFromJSON(json.speed) : undefined,\n spread: json.spread,\n });\n }\n clone() {\n return new RectangleEmitter({\n width: this.width,\n height: this.height,\n thickness: this.thickness,\n mode: this.mode,\n speed: this.speed.clone(),\n spread: this.spread,\n });\n }\n}\n\nconst EmitterShapes = {\n circle: {\n type: 'circle',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: CircleEmitter,\n loadJSON: CircleEmitter.fromJSON,\n },\n cone: {\n type: 'cone',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['angle', ['radian']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: ConeEmitter,\n loadJSON: ConeEmitter.fromJSON,\n },\n donut: {\n type: 'donut',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['donutRadius', ['number']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: DonutEmitter,\n loadJSON: DonutEmitter.fromJSON,\n },\n point: { type: 'point', params: [], constructor: PointEmitter, loadJSON: PointEmitter.fromJSON },\n sphere: {\n type: 'sphere',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['angle', ['radian']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: SphereEmitter,\n loadJSON: SphereEmitter.fromJSON,\n },\n hemisphere: {\n type: 'hemisphere',\n params: [\n ['radius', ['number']],\n ['arc', ['radian']],\n ['thickness', ['number']],\n ['angle', ['radian']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: HemisphereEmitter,\n loadJSON: HemisphereEmitter.fromJSON,\n },\n grid: {\n type: 'grid',\n params: [\n ['width', ['number']],\n ['height', ['number']],\n ['rows', ['number']],\n ['column', ['number']],\n ],\n constructor: GridEmitter,\n loadJSON: GridEmitter.fromJSON,\n },\n rectangle: {\n type: 'rectangle',\n params: [\n ['width', ['number']],\n ['height', ['number']],\n ['thickness', ['number']],\n ['mode', ['emitterMode']],\n ['spread', ['number']],\n ['speed', ['valueFunc', 'value']],\n ],\n constructor: RectangleEmitter,\n loadJSON: RectangleEmitter.fromJSON,\n },\n};\nfunction EmitterFromJSON(json, meta) {\n return EmitterShapes[json.type].loadJSON(json, meta);\n}\n\n/**\n * Color particles by their life.\n */\nclass ColorOverLife {\n constructor(color) {\n this.color = color;\n this.type = 'ColorOverLife';\n }\n initialize(particle) {\n this.color.startGen(particle.memory);\n }\n update(particle, delta) {\n this.color.genColor(particle.memory, particle.color, particle.age / particle.life);\n particle.color.x *= particle.startColor.x;\n particle.color.y *= particle.startColor.y;\n particle.color.z *= particle.startColor.z;\n particle.color.w *= particle.startColor.w;\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n color: this.color.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ColorOverLife(ColorGeneratorFromJSON(json.color));\n }\n clone() {\n return new ColorOverLife(this.color.clone());\n }\n reset() { }\n}\n\n/**\n * Apply rotation to particles over their life.\n */\nclass RotationOverLife {\n constructor(angularVelocity) {\n this.angularVelocity = angularVelocity;\n this.type = 'RotationOverLife';\n }\n initialize(particle) {\n if (typeof particle.rotation === 'number') {\n this.angularVelocity.startGen(particle.memory);\n }\n }\n update(particle, delta) {\n if (typeof particle.rotation === 'number') {\n particle.rotation +=\n delta *\n this.angularVelocity.genValue(particle.memory, particle.age / particle.life);\n }\n }\n toJSON() {\n return {\n type: this.type,\n angularVelocity: this.angularVelocity.toJSON(),\n };\n }\n static fromJSON(json) {\n return new RotationOverLife(ValueGeneratorFromJSON(json.angularVelocity));\n }\n frameUpdate(delta) { }\n clone() {\n return new RotationOverLife(this.angularVelocity.clone());\n }\n reset() { }\n}\n\n/**\n * Apply rotation to particles over their life.\n */\nclass Rotation3DOverLife {\n constructor(angularVelocity) {\n this.angularVelocity = angularVelocity;\n this.type = 'Rotation3DOverLife';\n this.tempQuat = new Quaternion();\n this.tempQuat2 = new Quaternion();\n }\n initialize(particle) {\n if (particle.rotation instanceof Quaternion) {\n particle.angularVelocity = new Quaternion();\n this.angularVelocity.startGen(particle.memory);\n }\n }\n update(particle, delta) {\n if (particle.rotation instanceof Quaternion) {\n this.angularVelocity.genValue(particle.memory, this.tempQuat, delta, particle.age / particle.life);\n particle.rotation.multiply(this.tempQuat);\n }\n }\n toJSON() {\n return {\n type: this.type,\n angularVelocity: this.angularVelocity.toJSON(),\n };\n }\n static fromJSON(json) {\n return new Rotation3DOverLife(RotationGeneratorFromJSON(json.angularVelocity));\n }\n frameUpdate(delta) { }\n clone() {\n return new Rotation3DOverLife(this.angularVelocity.clone());\n }\n reset() { }\n}\n\n/**\n * Apply a force to particles over their life.\n */\nclass ForceOverLife {\n initialize(particle, particleSystem) {\n this.ps = particleSystem;\n this.x.startGen(particle.memory);\n this.y.startGen(particle.memory);\n this.z.startGen(particle.memory);\n }\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.type = 'ForceOverLife';\n this._temp = new Vector3();\n this._tempScale = new Vector3();\n this._tempQ = new Quaternion();\n }\n update(particle, delta) {\n this._temp.set(this.x.genValue(particle.memory, particle.age / particle.life), this.y.genValue(particle.memory, particle.age / particle.life), this.z.genValue(particle.memory, particle.age / particle.life));\n if (this.ps.worldSpace) {\n particle.velocity.addScaledVector(this._temp, delta);\n }\n else {\n this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ);\n particle.velocity.addScaledVector(this._temp, delta);\n }\n }\n toJSON() {\n return {\n type: this.type,\n x: this.x.toJSON(),\n y: this.y.toJSON(),\n z: this.z.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ForceOverLife(ValueGeneratorFromJSON(json.x), ValueGeneratorFromJSON(json.y), ValueGeneratorFromJSON(json.z));\n }\n frameUpdate(delta) {\n if (this.ps && !this.ps.worldSpace) {\n const translation = this._temp;\n const quaternion = this._tempQ;\n const scale = this._tempScale;\n this.ps.emitter.matrixWorld.decompose(translation, quaternion, scale);\n quaternion.invert();\n scale.set(1 / scale.x, 1 / scale.y, 1 / scale.z);\n }\n }\n clone() {\n return new ForceOverLife(this.x.clone(), this.y.clone(), this.z.clone());\n }\n reset() { }\n}\n\nconst UNIT_X = new Vector3(1, 0, 0);\nconst UNIT_Y = new Vector3(0, 1, 0);\nconst UNIT_Z = new Vector3(0, 0, 1);\n/**\n * Move particles with a direct velocity over their life (Unity's \"Velocity over Lifetime\").\n * Applied as a positional displacement, so it is not affected by speed modifiers,\n * forces, or speed limits. Orbital speeds rotate particles around the emitter axes.\n */\nclass VelocityOverLife {\n constructor(linearX = new ConstantValue(0), linearY = new ConstantValue(0), linearZ = new ConstantValue(0), orbitalX = new ConstantValue(0), orbitalY = new ConstantValue(0), orbitalZ = new ConstantValue(0), space = 'local') {\n this.linearX = linearX;\n this.linearY = linearY;\n this.linearZ = linearZ;\n this.orbitalX = orbitalX;\n this.orbitalY = orbitalY;\n this.orbitalZ = orbitalZ;\n this.space = space;\n this.type = 'VelocityOverLife';\n this._temp = new Vector3();\n this._tempEmitterPos = new Vector3();\n this._tempQ = new Quaternion();\n this._tempQInv = new Quaternion();\n this._tempScale = new Vector3(1, 1, 1);\n this._tempScaleInv = new Vector3(1, 1, 1);\n this._tempRot = new Quaternion();\n this._tempAxis = new Vector3();\n }\n initialize(particle, particleSystem) {\n this.ps = particleSystem;\n this.linearX.startGen(particle.memory);\n this.linearY.startGen(particle.memory);\n this.linearZ.startGen(particle.memory);\n this.orbitalX.startGen(particle.memory);\n this.orbitalY.startGen(particle.memory);\n this.orbitalZ.startGen(particle.memory);\n }\n frameUpdate(delta) {\n if (this.ps) {\n this.ps.emitter.matrixWorld.decompose(this._tempEmitterPos, this._tempQ, this._tempScale);\n this._tempQInv.copy(this._tempQ).invert();\n this._tempScaleInv.set(1 / this._tempScale.x, 1 / this._tempScale.y, 1 / this._tempScale.z);\n }\n }\n update(particle, delta) {\n const t = particle.age / particle.life;\n this._temp.set(this.linearX.genValue(particle.memory, t), this.linearY.genValue(particle.memory, t), this.linearZ.genValue(particle.memory, t));\n // Convert the authored space into the particle simulation space.\n if (this.ps.worldSpace && this.space === 'local') {\n this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ);\n }\n else if (!this.ps.worldSpace && this.space === 'world') {\n this._temp.multiply(this._tempScaleInv).applyQuaternion(this._tempQInv);\n }\n particle.position.addScaledVector(this._temp, delta);\n const angleX = this.orbitalX.genValue(particle.memory, t) * delta;\n const angleY = this.orbitalY.genValue(particle.memory, t) * delta;\n const angleZ = this.orbitalZ.genValue(particle.memory, t) * delta;\n if (angleX !== 0 || angleY !== 0 || angleZ !== 0) {\n const worldPivot = this.ps.worldSpace;\n if (worldPivot) {\n particle.position.sub(this._tempEmitterPos);\n }\n this.orbit(particle.position, UNIT_X, angleX, worldPivot);\n this.orbit(particle.position, UNIT_Y, angleY, worldPivot);\n this.orbit(particle.position, UNIT_Z, angleZ, worldPivot);\n if (worldPivot) {\n particle.position.add(this._tempEmitterPos);\n }\n }\n }\n orbit(position, axis, angle, worldAxes) {\n if (angle === 0) {\n return;\n }\n this._tempAxis.copy(axis);\n if (worldAxes) {\n this._tempAxis.applyQuaternion(this._tempQ);\n }\n this._tempRot.setFromAxisAngle(this._tempAxis, angle);\n position.applyQuaternion(this._tempRot);\n }\n toJSON() {\n return {\n type: this.type,\n linearX: this.linearX.toJSON(),\n linearY: this.linearY.toJSON(),\n linearZ: this.linearZ.toJSON(),\n orbitalX: this.orbitalX.toJSON(),\n orbitalY: this.orbitalY.toJSON(),\n orbitalZ: this.orbitalZ.toJSON(),\n space: this.space,\n };\n }\n static fromJSON(json) {\n const readValue = (field) => field ? ValueGeneratorFromJSON(field) : new ConstantValue(0);\n return new VelocityOverLife(readValue(json.linearX), readValue(json.linearY), readValue(json.linearZ), readValue(json.orbitalX), readValue(json.orbitalY), readValue(json.orbitalZ), json.space === 'world' ? 'world' : 'local');\n }\n clone() {\n return new VelocityOverLife(this.linearX.clone(), this.linearY.clone(), this.linearZ.clone(), this.orbitalX.clone(), this.orbitalY.clone(), this.orbitalZ.clone(), this.space);\n }\n reset() { }\n}\n\n/**\n * Make particles inherit the emitter's movement velocity (Unity's \"Inherit Velocity\").\n * 'initial' adds the emitter velocity to the particle velocity once at spawn;\n * 'current' displaces particles by the current emitter velocity every frame.\n */\nclass InheritVelocity {\n constructor(multiplier = new ConstantValue(1), mode = 'initial') {\n this.multiplier = multiplier;\n this.mode = mode;\n this.type = 'InheritVelocity';\n this._temp = new Vector3();\n this._tempPos = new Vector3();\n this._tempQInv = new Quaternion();\n this._tempScaleInv = new Vector3(1, 1, 1);\n }\n initialize(particle, particleSystem) {\n this.ps = particleSystem;\n this.multiplier.startGen(particle.memory);\n if (this.mode === 'initial' && particleSystem.emitterVelocity) {\n this._temp.copy(particleSystem.emitterVelocity);\n if (!particleSystem.worldSpace) {\n // initialize runs during emit(), before this frame's frameUpdate cache\n // exists, so decompose the emitter matrix on demand.\n this.decomposeInverse(particleSystem);\n this._temp.multiply(this._tempScaleInv).applyQuaternion(this._tempQInv);\n }\n particle.velocity.addScaledVector(this._temp, this.multiplier.genValue(particle.memory, 0));\n }\n }\n frameUpdate(delta) {\n if (this.ps && !this.ps.worldSpace) {\n this.decomposeInverse(this.ps);\n }\n }\n update(particle, delta) {\n if (this.mode !== 'current' || !this.ps.emitterVelocity) {\n return;\n }\n this._temp.copy(this.ps.emitterVelocity);\n if (!this.ps.worldSpace) {\n this._temp.multiply(this._tempScaleInv).applyQuaternion(this._tempQInv);\n }\n particle.position.addScaledVector(this._temp, this.multiplier.genValue(particle.memory, particle.age / particle.life) * delta);\n }\n decomposeInverse(particleSystem) {\n particleSystem.emitter.matrixWorld.decompose(this._tempPos, this._tempQInv, this._tempScaleInv);\n this._tempQInv.invert();\n this._tempScaleInv.set(1 / this._tempScaleInv.x, 1 / this._tempScaleInv.y, 1 / this._tempScaleInv.z);\n }\n toJSON() {\n return {\n type: this.type,\n multiplier: this.multiplier.toJSON(),\n mode: this.mode,\n };\n }\n static fromJSON(json) {\n return new InheritVelocity(json.multiplier ? ValueGeneratorFromJSON(json.multiplier) : new ConstantValue(1), json.mode === 'current' ? 'current' : 'initial');\n }\n clone() {\n return new InheritVelocity(this.multiplier.clone(), this.mode);\n }\n reset() { }\n}\n\n/**\n * Apply size to particles based on their life.\n */\nclass SizeOverLife {\n initialize(particle) {\n this.size.startGen(particle.memory);\n }\n constructor(size) {\n this.size = size;\n this.type = 'SizeOverLife';\n }\n update(particle) {\n if (this.size instanceof Vector3Function) {\n this.size.genValue(particle.memory, particle.size, particle.age / particle.life).multiply(particle.startSize);\n }\n else {\n particle.size.copy(particle.startSize).multiplyScalar(this.size.genValue(particle.memory, particle.age / particle.life));\n }\n }\n toJSON() {\n return {\n type: this.type,\n size: this.size.toJSON(),\n };\n }\n static fromJSON(json) {\n return new SizeOverLife(GeneratorFromJSON(json.size));\n }\n frameUpdate(delta) { }\n clone() {\n return new SizeOverLife(this.size.clone());\n }\n reset() { }\n}\n\n/**\n * Apply speed to particles based on their life.\n */\nclass SpeedOverLife {\n initialize(particle) {\n this.speed.startGen(particle.memory);\n }\n constructor(speed) {\n this.speed = speed;\n this.type = 'SpeedOverLife';\n }\n update(particle) {\n particle.speedModifier = this.speed.genValue(particle.memory, particle.age / particle.life);\n }\n toJSON() {\n return {\n type: this.type,\n speed: this.speed.toJSON(),\n };\n }\n static fromJSON(json) {\n return new SpeedOverLife(ValueGeneratorFromJSON(json.speed));\n }\n frameUpdate(delta) { }\n clone() {\n return new SpeedOverLife(this.speed.clone());\n }\n reset() { }\n}\n\n/**\n * apply tile number of particle texture by particles' life.\n */\nclass FrameOverLife {\n constructor(frame) {\n this.frame = frame;\n this.type = 'FrameOverLife';\n }\n initialize(particle) {\n this.frame.startGen(particle.memory);\n }\n update(particle, delta) {\n if (this.frame instanceof PiecewiseBezier) {\n particle.uvTile = this.frame.genValue(particle.memory, particle.age / particle.life);\n }\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n frame: this.frame.toJSON(),\n };\n }\n static fromJSON(json) {\n return new FrameOverLife(ValueGeneratorFromJSON(json.frame));\n }\n clone() {\n return new FrameOverLife(this.frame.clone());\n }\n reset() { }\n}\n\n/**\n * Orbit particles around an axis over their life.\n */\nclass OrbitOverLife {\n constructor(orbitSpeed, axis = new Vector3(0, 1, 0)) {\n this.orbitSpeed = orbitSpeed;\n this.axis = axis;\n this.type = 'OrbitOverLife';\n this.temp = new Vector3();\n this.rotation = new Quaternion();\n }\n initialize(particle) {\n this.orbitSpeed.startGen(particle.memory);\n }\n update(particle, delta) {\n this.temp.copy(particle.position).projectOnVector(this.axis);\n this.rotation.setFromAxisAngle(this.axis, this.orbitSpeed.genValue(particle.memory, particle.age / particle.life) * delta);\n particle.position.sub(this.temp);\n particle.position.applyQuaternion(this.rotation);\n particle.position.add(this.temp);\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n orbitSpeed: this.orbitSpeed.toJSON(),\n axis: [this.axis.x, this.axis.y, this.axis.z],\n };\n }\n static fromJSON(json) {\n return new OrbitOverLife(ValueGeneratorFromJSON(json.orbitSpeed), json.axis ? new Vector3(json.axis[0], json.axis[1], json.axis[2]) : undefined);\n }\n clone() {\n return new OrbitOverLife(this.orbitSpeed.clone());\n }\n reset() { }\n}\n\nclass LinkedListNode {\n constructor(data) {\n this.data = data;\n this.next = null;\n this.prev = null;\n }\n hasPrev() {\n return this.prev !== null;\n }\n hasNext() {\n return this.next !== null;\n }\n}\nclass LinkedList {\n constructor() {\n this.length = 0;\n this.head = this.tail = null;\n }\n isEmpty() {\n return this.head === null;\n }\n clear() {\n this.length = 0;\n this.head = this.tail = null;\n }\n front() {\n if (this.head === null)\n return null;\n return this.head.data;\n }\n back() {\n if (this.tail === null)\n return null;\n return this.tail.data;\n }\n /**\n * remove at head in O(1)\n */\n dequeue() {\n if (this.head) {\n const value = this.head.data;\n this.head = this.head.next;\n if (!this.head) {\n this.tail = null;\n }\n else {\n this.head.prev = null;\n }\n this.length--;\n return value;\n }\n return undefined;\n }\n /**\n * remove at tail in O(1)\n */\n pop() {\n if (this.tail) {\n const value = this.tail.data;\n this.tail = this.tail.prev;\n if (!this.tail) {\n this.head = null;\n }\n else {\n this.tail.next = null;\n }\n this.length--;\n return value;\n }\n return undefined;\n }\n /**\n * add at head in O(1)\n */\n queue(data) {\n const node = new LinkedListNode(data);\n if (!this.tail) {\n this.tail = node;\n }\n if (this.head) {\n this.head.prev = node;\n node.next = this.head;\n }\n this.head = node;\n this.length++;\n }\n /**\n * add at tail in O(1)\n */\n push(data) {\n const node = new LinkedListNode(data);\n if (!this.head) {\n this.head = node;\n }\n if (this.tail) {\n this.tail.next = node;\n node.prev = this.tail;\n }\n this.tail = node;\n this.length++;\n }\n insertBefore(node, data) {\n const newNode = new LinkedListNode(data);\n newNode.next = node;\n newNode.prev = node.prev;\n if (newNode.prev !== null) {\n newNode.prev.next = newNode;\n }\n newNode.next.prev = newNode;\n if (node == this.head) {\n this.head = newNode;\n }\n this.length++;\n }\n remove(data) {\n if (this.head === null || this.tail === null) {\n return;\n }\n let tempNode = this.head;\n if (data === this.head.data) {\n this.head = this.head.next;\n }\n if (data === this.tail.data) {\n this.tail = this.tail.prev;\n }\n while (tempNode.next !== null && tempNode.data !== data) {\n tempNode = tempNode.next;\n }\n if (tempNode.data === data) {\n if (tempNode.prev !== null)\n tempNode.prev.next = tempNode.next;\n if (tempNode.next !== null)\n tempNode.next.prev = tempNode.prev;\n this.length--;\n }\n }\n /**\n * Returns an iterator over the values\n */\n *values() {\n let current = this.head;\n while (current !== null) {\n yield current.data;\n current = current.next;\n }\n }\n}\n\n/**\n * Particle implementation for node-based particle systems.\n */\nclass NodeParticle {\n constructor() {\n /**\n * Position of the particle.\n * @type {Vector3}\n */\n this.position = new Vector3();\n /**\n * Velocity of the particle.\n * @type {Vector3}\n */\n this.velocity = new Vector3();\n /**\n * Age of the particle.\n * @type {number}\n */\n this.age = 0;\n /**\n * Life duration of the particle.\n * @type {number}\n */\n this.life = 1;\n /**\n * Size of the particle.\n * @type {Vector3}\n */\n this.size = new Vector3();\n /**\n * Rotation of the particle.\n * @type {number | Quaternion}\n */\n this.rotation = 0;\n /**\n * Color of the particle.\n * @type {Vector4}\n */\n this.color = new Vector4(1, 1, 1, 1);\n /**\n * UV tile index.\n * @type {number}\n */\n this.uvTile = 0;\n this.memory = [];\n }\n /**\n * Indicates if the particle has died.\n * @type {boolean}\n */\n get died() {\n return this.age >= this.life;\n }\n /**\n * Resets the particle properties to initial values.\n */\n reset() {\n this.memory.length = 0;\n this.position.set(0, 0, 0);\n this.velocity.set(0, 0, 0);\n this.age = 0;\n this.life = 1;\n this.size.set(1, 1, 1);\n this.rotation = 0;\n this.color.set(1, 1, 1, 1);\n this.uvTile = 0;\n }\n}\n/**\n * Particle implementation for sprite-based particle.\n */\nclass SpriteParticle {\n constructor() {\n /**\n * Initial speed of the particle.\n * @type {number}\n */\n this.startSpeed = 0;\n /**\n * Initial color of the particle.\n * @type {Vector4}\n */\n this.startColor = new Vector4();\n /**\n * Initial size of the particle.\n * @type {Vector3}\n */\n this.startSize = new Vector3(1, 1, 1);\n /**\n * Position of the particle.\n * @type {Vector3}\n */\n this.position = new Vector3();\n /**\n * Velocity of the particle.\n * @type {Vector3}\n */\n this.velocity = new Vector3();\n /**\n * Age of the particle.\n * @type {number}\n */\n this.age = 0;\n /**\n * Life duration of the particle.\n * @type {number}\n */\n this.life = 1;\n /**\n * Size of the particle.\n * @type {Vector3}\n */\n this.size = new Vector3(1, 1, 1);\n /**\n * Speed modifier of the particle.\n * @type {number}\n */\n this.speedModifier = 1;\n // GPU properties\n /**\n * Rotation of the particle.\n * @type {number | Quaternion}\n */\n this.rotation = 0;\n /**\n * Color of the particle.\n * @type {Vector4}\n */\n this.color = new Vector4();\n /**\n * UV tile index.\n * @type {number}\n */\n this.uvTile = 0;\n this.memory = [];\n }\n /**\n * Indicates if the particle has died.\n * @type {boolean}\n */\n get died() {\n return this.age >= this.life;\n }\n reset() {\n this.memory.length = 0;\n }\n}\nclass RecordState {\n /**\n * Creates a new record state.\n * @param {Vector3} position - The position of the particle.\n * @param {number} size - The size of the particle.\n * @param {Vector4} color - The color of the particle.\n */\n constructor(position, size, color) {\n this.position = position;\n this.size = size;\n this.color = color;\n }\n}\n/**\n * Particle implementation for trail-based particles.\n */\nclass TrailParticle {\n constructor() {\n /**\n * Initial speed of the particle.\n * @type {number}\n */\n this.startSpeed = 0;\n /**\n * Initial color of the particle.\n * @type {Vector4}\n */\n this.startColor = new Vector4();\n /**\n * Initial size of the particle.\n * @type {Vector3}\n */\n this.startSize = new Vector3(1, 1, 1);\n /**\n * Position of the particle.\n * @type {Vector3}\n */\n this.position = new Vector3();\n /**\n * Velocity of the particle.\n * @type {Vector3}\n */\n this.velocity = new Vector3();\n /**\n * Age of the particle.\n * @type {number}\n */\n this.age = 0;\n /**\n * Life duration of the particle.\n * @type {number}\n */\n this.life = 1;\n /**\n * Size of the particle.\n * @type {Vector3}\n */\n this.size = new Vector3(1, 1, 1);\n /**\n * Length of the trail.\n * @type {number}\n */\n this.length = 100;\n /**\n * Speed modifier of the particle.\n * @type {number}\n */\n this.speedModifier = 1;\n // GPU properties\n /**\n * Color of the particle.\n * @type {Vector4}\n */\n this.color = new Vector4();\n /**\n * Previous states of the particle.\n * @type {LinkedList<RecordState>}\n */\n this.previous = new LinkedList();\n /**\n * UV tile index.\n * @type {number}\n */\n this.uvTile = 0;\n this.memory = [];\n }\n /**\n * Updates the particle state.\n */\n update() {\n if (this.age <= this.life) {\n this.previous.push(new RecordState(this.position.clone(), this.size.x, this.color.clone()));\n }\n else {\n if (this.previous.length > 0) {\n this.previous.dequeue();\n }\n }\n while (this.previous.length > this.length) {\n this.previous.dequeue();\n }\n }\n /**\n * Indicates if the particle has died.\n * @type {boolean}\n */\n get died() {\n return this.age >= this.life;\n }\n /**\n * Resets the particle properties and clears the previous states.\n */\n reset() {\n this.memory.length = 0;\n this.previous.clear();\n }\n}\n\n/**\n * Apply width to particles based on their length.\n */\nclass WidthOverLength {\n initialize(particle) {\n this.width.startGen(particle.memory);\n }\n constructor(width) {\n this.width = width;\n this.type = 'WidthOverLength';\n }\n update(particle) {\n if (particle instanceof TrailParticle) {\n const iter = particle.previous.values();\n for (let i = 0; i < particle.previous.length; i++) {\n const cur = iter.next();\n cur.value.size = this.width.genValue(particle.memory, (particle.previous.length - i) / particle.length);\n }\n }\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n width: this.width.toJSON(),\n };\n }\n static fromJSON(json) {\n return new WidthOverLength(ValueGeneratorFromJSON(json.width));\n }\n clone() {\n return new WidthOverLength(this.width.clone());\n }\n reset() { }\n}\n\n/**\n * Apply a global force to particles.\n */\nclass ApplyForce {\n constructor(direction, magnitude) {\n this.direction = direction;\n this.magnitude = magnitude;\n this.type = 'ApplyForce';\n this.memory = {\n data: [],\n dataCount: 0,\n };\n this.magnitudeValue = this.magnitude.genValue(this.memory);\n }\n initialize(particle) { }\n update(particle, delta) {\n particle.velocity.addScaledVector(this.direction, this.magnitudeValue * delta);\n }\n frameUpdate(delta) {\n this.magnitudeValue = this.magnitude.genValue(this.memory);\n }\n toJSON() {\n return {\n type: this.type,\n direction: [this.direction.x, this.direction.y, this.direction.z],\n magnitude: this.magnitude.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ApplyForce(new Vector3(json.direction[0], json.direction[1], json.direction[2]), ValueGeneratorFromJSON(json.magnitude ?? json.force));\n }\n clone() {\n return new ApplyForce(this.direction.clone(), this.magnitude.clone());\n }\n reset() { }\n}\n\n/**\n * Apply a gravity force to particles.\n * the gravity force is calculated as:\n * F = G * m1 * m2 / r^2\n */\nclass GravityForce {\n constructor(center, magnitude) {\n this.center = center;\n this.magnitude = magnitude;\n this.type = 'GravityForce';\n this.temp = new Vector3();\n }\n initialize(particle) { }\n update(particle, delta) {\n this.temp.copy(this.center).sub(particle.position).normalize();\n particle.velocity.addScaledVector(this.temp, (this.magnitude / particle.position.distanceToSquared(this.center)) * delta);\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n center: [this.center.x, this.center.y, this.center.z],\n magnitude: this.magnitude,\n };\n }\n static fromJSON(json) {\n return new GravityForce(new Vector3(json.center[0], json.center[1], json.center[2]), json.magnitude);\n }\n clone() {\n return new GravityForce(this.center.clone(), this.magnitude);\n }\n reset() { }\n}\n\n/**\n * Change the emit direction of particles.\n */\nclass ChangeEmitDirection {\n constructor(angle) {\n this.angle = angle;\n this.type = 'ChangeEmitDirection';\n this._temp = new Vector3();\n this._q = new Quaternion();\n this.memory = { data: [], dataCount: 0 };\n }\n initialize(particle) {\n const len = particle.velocity.length();\n if (len == 0)\n return;\n particle.velocity.normalize();\n if (particle.velocity.x === 0 && particle.velocity.y === 0) {\n this._temp.set(0, particle.velocity.z, 0);\n }\n else {\n this._temp.set(-particle.velocity.y, particle.velocity.x, 0);\n }\n this.angle.startGen(this.memory);\n this._q.setFromAxisAngle(this._temp.normalize(), this.angle.genValue(this.memory));\n this._temp.copy(particle.velocity);\n particle.velocity.applyQuaternion(this._q);\n this._q.setFromAxisAngle(this._temp, Math.random() * Math.PI * 2);\n particle.velocity.applyQuaternion(this._q);\n particle.velocity.setLength(len);\n }\n update(particle, delta) { }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n angle: this.angle.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ChangeEmitDirection(ValueGeneratorFromJSON(json.angle));\n }\n clone() {\n return new ChangeEmitDirection(this.angle);\n }\n reset() { }\n}\n\nvar SubParticleEmitMode;\n(function (SubParticleEmitMode) {\n SubParticleEmitMode[SubParticleEmitMode[\"Death\"] = 0] = \"Death\";\n SubParticleEmitMode[SubParticleEmitMode[\"Birth\"] = 1] = \"Birth\";\n SubParticleEmitMode[SubParticleEmitMode[\"Frame\"] = 2] = \"Frame\";\n})(SubParticleEmitMode || (SubParticleEmitMode = {}));\n/**\n * Emit a sub particle system from particles.\n */\nclass EmitSubParticleSystem {\n constructor(particleSystem, useVelocityAsBasis, subParticleSystem, mode = SubParticleEmitMode.Frame, emitProbability = 1) {\n this.particleSystem = particleSystem;\n this.useVelocityAsBasis = useVelocityAsBasis;\n this.subParticleSystem = subParticleSystem;\n this.mode = mode;\n this.emitProbability = emitProbability;\n this.type = 'EmitSubParticleSystem';\n //private matrix_ = new Matrix4();\n this.q_ = new Quaternion();\n this.v_ = new Vector3();\n this.v2_ = new Vector3();\n this.subEmissions = new Array();\n if (this.subParticleSystem && this.subParticleSystem.system) {\n this.subParticleSystem.system.onlyUsedByOther = true;\n }\n }\n initialize(particle) {\n /*particle.emissionState = {\n burstIndex: 0,\n burstWaveIndex: 0,\n time: 0,\n waitEmiting: 0,\n matrix: new Matrix4(),\n } as EmissionState;*/\n }\n update(particle, delta) {\n if (this.mode === SubParticleEmitMode.Frame) {\n this.emit(particle, delta);\n }\n else if (this.mode === SubParticleEmitMode.Birth && particle.age === 0) {\n this.emit(particle, delta);\n }\n else if (this.mode === SubParticleEmitMode.Death && particle.age + delta >= particle.life) {\n this.emit(particle, delta);\n }\n }\n emit(particle, delta) {\n if (!this.subParticleSystem)\n return;\n if (Math.random() > this.emitProbability) {\n return;\n }\n const m = new Matrix4();\n this.setMatrixFromParticle(m, particle);\n this.subEmissions.push({\n burstParticleCount: 0,\n burstParticleIndex: 0,\n isBursting: false,\n burstIndex: 0,\n burstWaveIndex: 0,\n time: 0,\n waitEmiting: 0,\n matrix: m,\n travelDistance: 0,\n particle: particle,\n });\n //(this.subParticleSystem.system as ParticleSystem).emit(delta, particle.emissionState, m);\n }\n frameUpdate(delta) {\n if (!this.subParticleSystem)\n return;\n for (let i = 0; i < this.subEmissions.length; i++) {\n if (this.subEmissions[i].time >= this.subParticleSystem.system.duration) {\n this.subEmissions[i] = this.subEmissions[this.subEmissions.length - 1];\n this.subEmissions.length = this.subEmissions.length - 1;\n i--;\n }\n else {\n const subEmissionState = this.subEmissions[i];\n if (subEmissionState.particle && subEmissionState.particle.age < subEmissionState.particle.life) {\n this.setMatrixFromParticle(subEmissionState.matrix, subEmissionState.particle);\n }\n else {\n subEmissionState.particle = undefined;\n }\n this.subParticleSystem.system.emit(delta, subEmissionState, subEmissionState.matrix);\n }\n }\n }\n toJSON() {\n return {\n type: this.type,\n subParticleSystem: this.subParticleSystem ? this.subParticleSystem.uuid : '',\n useVelocityAsBasis: this.useVelocityAsBasis,\n mode: this.mode,\n emitProbability: this.emitProbability,\n };\n }\n static fromJSON(json, particleSystem) {\n return new EmitSubParticleSystem(particleSystem, json.useVelocityAsBasis, json.subParticleSystem, json.mode, json.emitProbability);\n }\n clone() {\n return new EmitSubParticleSystem(this.particleSystem, this.useVelocityAsBasis, this.subParticleSystem, this.mode, this.emitProbability);\n }\n reset() { }\n setMatrixFromParticle(m, particle) {\n let rotation;\n if (particle.rotation === undefined || this.useVelocityAsBasis) {\n if (particle.velocity.x === 0 &&\n particle.velocity.y === 0 &&\n (particle.velocity.z === 1 || particle.velocity.z === 0)) {\n m.set(1, 0, 0, particle.position.x, 0, 1, 0, particle.position.y, 0, 0, 1, particle.position.z, 0, 0, 0, 1);\n }\n else {\n this.v_.copy(Z_VEC3).cross(particle.velocity);\n this.v2_.copy(particle.velocity).cross(this.v_);\n const len = this.v_.length();\n const len2 = this.v2_.length();\n m.set(this.v_.x / len, this.v2_.x / len2, particle.velocity.x, particle.position.x, this.v_.y / len, this.v2_.y / len2, particle.velocity.y, particle.position.y, this.v_.z / len, this.v2_.z / len2, particle.velocity.z, particle.position.z, 0, 0, 0, 1);\n }\n }\n else {\n if (particle.rotation instanceof Quaternion) {\n rotation = particle.rotation;\n }\n else {\n this.q_.setFromAxisAngle(Z_VEC3, particle.rotation);\n rotation = this.q_;\n }\n m.compose(particle.position, rotation, ONE_VEC3);\n }\n if (!this.particleSystem.worldSpace) {\n m.multiplyMatrices(this.particleSystem.emitter.matrixWorld, m);\n }\n }\n}\n\n/*\n * A fast javascript implementation of simplex noise by Jonas Wagner\nBased on a speed-improved simplex noise algorithm for 2D, 3D and 4D in Java.\nWhich is based on example code by Stefan Gustavson (stegu@itn.liu.se).\nWith Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).\nBetter rank ordering method by Stefan Gustavson in 2012.\n Copyright (c) 2021 Jonas Wagner\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\nconst F2 = 0.5 * (Math.sqrt(3.0) - 1.0);\nconst G2 = (3.0 - Math.sqrt(3.0)) / 6.0;\nconst F3 = 1.0 / 3.0;\nconst G3 = 1.0 / 6.0;\nconst F4 = (Math.sqrt(5.0) - 1.0) / 4.0;\nconst G4 = (5.0 - Math.sqrt(5.0)) / 20.0;\nconst grad3 = new Float32Array([1, 1, 0,\n -1, 1, 0,\n 1, -1, 0,\n -1, -1, 0,\n 1, 0, 1,\n -1, 0, 1,\n 1, 0, -1,\n -1, 0, -1,\n 0, 1, 1,\n 0, -1, 1,\n 0, 1, -1,\n 0, -1, -1]);\nconst grad4 = new Float32Array([0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1,\n 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1,\n 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, 0, -1, -1,\n -1, 0, 1, 1, -1, 0, 1, -1, -1, 0, -1, 1, -1, 0, -1, -1,\n 1, 1, 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1,\n -1, 1, 0, 1, -1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, -1,\n 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0,\n -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0]);\n/** Deterministic simplex noise generator suitable for 2D, 3D and 4D spaces. */\nclass SimplexNoise {\n /**\n * Creates a new `SimplexNoise` instance.\n * This involves some setup. You can save a few cpu cycles by reusing the same instance.\n * @param randomOrSeed A random number generator or a seed (string|number).\n * Defaults to Math.random (random irreproducible initialization).\n */\n constructor(randomOrSeed = Math.random) {\n const random = typeof randomOrSeed == 'function' ? randomOrSeed : alea(randomOrSeed);\n this.p = buildPermutationTable(random);\n this.perm = new Uint8Array(512);\n this.permMod12 = new Uint8Array(512);\n for (let i = 0; i < 512; i++) {\n this.perm[i] = this.p[i & 255];\n this.permMod12[i] = this.perm[i] % 12;\n }\n }\n /**\n * Samples the noise field in 2 dimensions\n * @param x\n * @param y\n * @returns a number in the interval [-1, 1]\n */\n noise2D(x, y) {\n const permMod12 = this.permMod12;\n const perm = this.perm;\n let n0 = 0; // Noise contributions from the ../math corners\n let n1 = 0;\n let n2 = 0;\n // Skew the input space to determine which simplex cell we're in\n const s = (x + y) * F2; // Hairy factor for 2D\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const t = (i + j) * G2;\n const X0 = i - t; // Unskew the cell origin back to (x,y) space\n const Y0 = j - t;\n const x0 = x - X0; // The x,y distances from the cell origin\n const y0 = y - Y0;\n // For the 2D case, the simplex shape is an equilateral triangle.\n // Determine which simplex we are in.\n let i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords\n if (x0 > y0) {\n i1 = 1;\n j1 = 0;\n } // lower triangle, XY order: (0,0)->(1,0)->(1,1)\n else {\n i1 = 0;\n j1 = 1;\n } // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n // c = (3-sqrt(3))/6\n const x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n const y1 = y0 - j1 + G2;\n const x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n const y2 = y0 - 1.0 + 2.0 * G2;\n // Work out the hashed gradient indices of the ../math simplex corners\n const ii = i & 255;\n const jj = j & 255;\n // Calculate the contribution from the ../math corners\n let t0 = 0.5 - x0 * x0 - y0 * y0;\n if (t0 >= 0) {\n const gi0 = permMod12[ii + perm[jj]] * 3;\n t0 *= t0;\n n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0); // (x,y) of grad3 used for 2D gradient\n }\n let t1 = 0.5 - x1 * x1 - y1 * y1;\n if (t1 >= 0) {\n const gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3;\n t1 *= t1;\n n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1);\n }\n let t2 = 0.5 - x2 * x2 - y2 * y2;\n if (t2 >= 0) {\n const gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3;\n t2 *= t2;\n n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2);\n }\n // Add contributions from each corner to get the final noise value.\n // The result is scaled to return values in the interval [-1,1].\n return 70.0 * (n0 + n1 + n2);\n }\n /**\n * Samples the noise field in 3 dimensions\n * @param x\n * @param y\n * @param z\n * @returns a number in the interval [-1, 1]\n */\n noise3D(x, y, z) {\n const permMod12 = this.permMod12;\n const perm = this.perm;\n let n0, n1, n2, n3; // Noise contributions from the four corners\n // Skew the input space to determine which simplex cell we're in\n const s = (x + y + z) * F3; // Very nice and simple skew factor for 3D\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const k = Math.floor(z + s);\n const t = (i + j + k) * G3;\n const X0 = i - t; // Unskew the cell origin back to (x,y,z) space\n const Y0 = j - t;\n const Z0 = k - t;\n const x0 = x - X0; // The x,y,z distances from the cell origin\n const y0 = y - Y0;\n const z0 = z - Z0;\n // For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n // Determine which simplex we are in.\n let i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords\n let i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } // X Y Z order\n else if (x0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } // X Z Y order\n else {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } // Z X Y order\n }\n else { // x0<y0\n if (y0 < z0) {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } // Z Y X order\n else if (x0 < z0) {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } // Y Z X order\n else {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } // Y X Z order\n }\n // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),\n // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and\n // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where\n // c = 1/6.\n const x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords\n const y1 = y0 - j1 + G3;\n const z1 = z0 - k1 + G3;\n const x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords\n const y2 = y0 - j2 + 2.0 * G3;\n const z2 = z0 - k2 + 2.0 * G3;\n const x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords\n const y3 = y0 - 1.0 + 3.0 * G3;\n const z3 = z0 - 1.0 + 3.0 * G3;\n // Work out the hashed gradient indices of the four simplex corners\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n // Calculate the contribution from the four corners\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n if (t0 < 0)\n n0 = 0.0;\n else {\n const gi0 = permMod12[ii + perm[jj + perm[kk]]] * 3;\n t0 *= t0;\n n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0 + grad3[gi0 + 2] * z0);\n }\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n if (t1 < 0)\n n1 = 0.0;\n else {\n const gi1 = permMod12[ii + i1 + perm[jj + j1 + perm[kk + k1]]] * 3;\n t1 *= t1;\n n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1 + grad3[gi1 + 2] * z1);\n }\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n if (t2 < 0)\n n2 = 0.0;\n else {\n const gi2 = permMod12[ii + i2 + perm[jj + j2 + perm[kk + k2]]] * 3;\n t2 *= t2;\n n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2 + grad3[gi2 + 2] * z2);\n }\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n if (t3 < 0)\n n3 = 0.0;\n else {\n const gi3 = permMod12[ii + 1 + perm[jj + 1 + perm[kk + 1]]] * 3;\n t3 *= t3;\n n3 = t3 * t3 * (grad3[gi3] * x3 + grad3[gi3 + 1] * y3 + grad3[gi3 + 2] * z3);\n }\n // Add contributions from each corner to get the final noise value.\n // The result is scaled to stay just inside [-1,1]\n return 32.0 * (n0 + n1 + n2 + n3);\n }\n /**\n * Samples the noise field in 4 dimensions\n * @param x\n * @param y\n * @param z\n * @returns a number in the interval [-1, 1]\n */\n noise4D(x, y, z, w) {\n const perm = this.perm;\n let n0, n1, n2, n3, n4; // Noise contributions from the five corners\n // Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in\n const s = (x + y + z + w) * F4; // Factor for 4D skewing\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const k = Math.floor(z + s);\n const l = Math.floor(w + s);\n const t = (i + j + k + l) * G4; // Factor for 4D unskewing\n const X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space\n const Y0 = j - t;\n const Z0 = k - t;\n const W0 = l - t;\n const x0 = x - X0; // The x,y,z,w distances from the cell origin\n const y0 = y - Y0;\n const z0 = z - Z0;\n const w0 = w - W0;\n // For the 4D case, the simplex is a 4D shape I won't even try to describe.\n // To find out which of the 24 possible simplices we're in, we need to\n // determine the magnitude ordering of x0, y0, z0 and w0.\n // Six pair-wise comparisons are performed between each possible pair\n // of the four coordinates, and the results are used to rank the numbers.\n let rankx = 0;\n let ranky = 0;\n let rankz = 0;\n let rankw = 0;\n if (x0 > y0)\n rankx++;\n else\n ranky++;\n if (x0 > z0)\n rankx++;\n else\n rankz++;\n if (x0 > w0)\n rankx++;\n else\n rankw++;\n if (y0 > z0)\n ranky++;\n else\n rankz++;\n if (y0 > w0)\n ranky++;\n else\n rankw++;\n if (z0 > w0)\n rankz++;\n else\n rankw++;\n // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.\n // Many values of c will never occur, since e.g. x>y>z>w makes x<z, y<w and x<w\n // impossible. Only the 24 indices which have non-zero entries make any sense.\n // We use a thresholding to set the coordinates in turn from the largest magnitude.\n // Rank 3 denotes the largest coordinate.\n // Rank 2 denotes the second largest coordinate.\n // Rank 1 denotes the second smallest coordinate.\n // The integer offsets for the second simplex corner\n const i1 = rankx >= 3 ? 1 : 0;\n const j1 = ranky >= 3 ? 1 : 0;\n const k1 = rankz >= 3 ? 1 : 0;\n const l1 = rankw >= 3 ? 1 : 0;\n // The integer offsets for the third simplex corner\n const i2 = rankx >= 2 ? 1 : 0;\n const j2 = ranky >= 2 ? 1 : 0;\n const k2 = rankz >= 2 ? 1 : 0;\n const l2 = rankw >= 2 ? 1 : 0;\n // The integer offsets for the fourth simplex corner\n const i3 = rankx >= 1 ? 1 : 0;\n const j3 = ranky >= 1 ? 1 : 0;\n const k3 = rankz >= 1 ? 1 : 0;\n const l3 = rankw >= 1 ? 1 : 0;\n // The fifth corner has all coordinate offsets = 1, so no need to compute that.\n const x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords\n const y1 = y0 - j1 + G4;\n const z1 = z0 - k1 + G4;\n const w1 = w0 - l1 + G4;\n const x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords\n const y2 = y0 - j2 + 2.0 * G4;\n const z2 = z0 - k2 + 2.0 * G4;\n const w2 = w0 - l2 + 2.0 * G4;\n const x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords\n const y3 = y0 - j3 + 3.0 * G4;\n const z3 = z0 - k3 + 3.0 * G4;\n const w3 = w0 - l3 + 3.0 * G4;\n const x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords\n const y4 = y0 - 1.0 + 4.0 * G4;\n const z4 = z0 - 1.0 + 4.0 * G4;\n const w4 = w0 - 1.0 + 4.0 * G4;\n // Work out the hashed gradient indices of the five simplex corners\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n const ll = l & 255;\n // Calculate the contribution from the five corners\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n if (t0 < 0)\n n0 = 0.0;\n else {\n const gi0 = (perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32) * 4;\n t0 *= t0;\n n0 = t0 * t0 * (grad4[gi0] * x0 + grad4[gi0 + 1] * y0 + grad4[gi0 + 2] * z0 + grad4[gi0 + 3] * w0);\n }\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n if (t1 < 0)\n n1 = 0.0;\n else {\n const gi1 = (perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32) * 4;\n t1 *= t1;\n n1 = t1 * t1 * (grad4[gi1] * x1 + grad4[gi1 + 1] * y1 + grad4[gi1 + 2] * z1 + grad4[gi1 + 3] * w1);\n }\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n if (t2 < 0)\n n2 = 0.0;\n else {\n const gi2 = (perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32) * 4;\n t2 *= t2;\n n2 = t2 * t2 * (grad4[gi2] * x2 + grad4[gi2 + 1] * y2 + grad4[gi2 + 2] * z2 + grad4[gi2 + 3] * w2);\n }\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n if (t3 < 0)\n n3 = 0.0;\n else {\n const gi3 = (perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32) * 4;\n t3 *= t3;\n n3 = t3 * t3 * (grad4[gi3] * x3 + grad4[gi3 + 1] * y3 + grad4[gi3 + 2] * z3 + grad4[gi3 + 3] * w3);\n }\n let t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n if (t4 < 0)\n n4 = 0.0;\n else {\n const gi4 = (perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32) * 4;\n t4 *= t4;\n n4 = t4 * t4 * (grad4[gi4] * x4 + grad4[gi4 + 1] * y4 + grad4[gi4 + 2] * z4 + grad4[gi4 + 3] * w4);\n }\n // Sum up and scale the result to cover the range [-1,1]\n return 27.0 * (n0 + n1 + n2 + n3 + n4);\n }\n}\n/**\n * Builds a random permutation table.\n * This is exported only for (internal) testing purposes.\n * Do not rely on this export.\n * @private\n */\nfunction buildPermutationTable(random) {\n const p = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n p[i] = i;\n }\n for (let i = 0; i < 255; i++) {\n const r = i + ~~(random() * (256 - i));\n const aux = p[i];\n p[i] = p[r];\n p[r] = aux;\n }\n return p;\n}\n/*\nThe ALEA PRNG and masher code used by simplex-noise.js\nis based on code by Johannes Baagøe, modified by Jonas Wagner.\nSee alea.md for the full license.\n*/\nfunction alea(seed) {\n let s0 = 0;\n let s1 = 0;\n let s2 = 0;\n let c = 1;\n const mash = masher();\n s0 = mash(' ');\n s1 = mash(' ');\n s2 = mash(' ');\n s0 -= mash(seed);\n if (s0 < 0) {\n s0 += 1;\n }\n s1 -= mash(seed);\n if (s1 < 0) {\n s1 += 1;\n }\n s2 -= mash(seed);\n if (s2 < 0) {\n s2 += 1;\n }\n return function () {\n const t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\n s0 = s1;\n s1 = s2;\n return s2 = t - (c = t | 0);\n };\n}\nfunction masher() {\n let n = 0xefc8249d;\n return function (data) {\n data = data.toString();\n for (let i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n let h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n}\n\n/**\n * Apply turbulence to particles.\n */\nclass TurbulenceField {\n constructor(scale, octaves, velocityMultiplier, timeScale) {\n this.scale = scale;\n this.octaves = octaves;\n this.velocityMultiplier = velocityMultiplier;\n this.timeScale = timeScale;\n this.type = 'TurbulenceField';\n this.generator = new SimplexNoise();\n this.timeOffset = new Vector3();\n this.temp = new Vector3();\n this.temp2 = new Vector3();\n this.timeOffset.x = (Math.random() / this.scale.x) * this.timeScale.x;\n this.timeOffset.y = (Math.random() / this.scale.y) * this.timeScale.y;\n this.timeOffset.z = (Math.random() / this.scale.z) * this.timeScale.z;\n }\n initialize(particle) { }\n update(particle, delta) {\n const x = particle.position.x / this.scale.x;\n const y = particle.position.y / this.scale.y;\n const z = particle.position.z / this.scale.z;\n this.temp.set(0, 0, 0);\n let lvl = 1;\n for (let i = 0; i < this.octaves; i++) {\n this.temp2.set(this.generator.noise4D(x * lvl, y * lvl, z * lvl, this.timeOffset.x * lvl) / lvl, this.generator.noise4D(x * lvl, y * lvl, z * lvl, this.timeOffset.y * lvl) / lvl, this.generator.noise4D(x * lvl, y * lvl, z * lvl, this.timeOffset.z * lvl) / lvl);\n this.temp.add(this.temp2);\n lvl *= 2;\n }\n this.temp.multiply(this.velocityMultiplier);\n particle.velocity.addScaledVector(this.temp, delta);\n }\n toJSON() {\n return {\n type: this.type,\n scale: [this.scale.x, this.scale.y, this.scale.z],\n octaves: this.octaves,\n velocityMultiplier: [this.velocityMultiplier.x, this.velocityMultiplier.y, this.velocityMultiplier.z],\n timeScale: [this.timeScale.x, this.timeScale.y, this.timeScale.z],\n };\n }\n frameUpdate(delta) {\n this.timeOffset.x += delta * this.timeScale.x;\n this.timeOffset.y += delta * this.timeScale.y;\n this.timeOffset.z += delta * this.timeScale.z;\n }\n static fromJSON(json) {\n return new TurbulenceField(new Vector3(json.scale[0], json.scale[1], json.scale[2]), json.octaves, new Vector3(json.velocityMultiplier[0], json.velocityMultiplier[1], json.velocityMultiplier[2]), new Vector3(json.timeScale[0], json.timeScale[1], json.timeScale[2]));\n }\n clone() {\n return new TurbulenceField(this.scale.clone(), this.octaves, this.velocityMultiplier.clone(), this.timeScale.clone());\n }\n reset() { }\n}\n\nconst generators = [];\nconst tempV = new Vector3();\nconst tempQ = new Quaternion();\n/**\n * Apply noise to particles.\n */\nclass Noise {\n constructor(frequency, power, positionAmount = new ConstantValue(1), rotationAmount = new ConstantValue(0)) {\n this.frequency = frequency;\n this.power = power;\n this.positionAmount = positionAmount;\n this.rotationAmount = rotationAmount;\n this.type = 'Noise';\n this.duration = 0;\n if (generators.length === 0) {\n for (let i = 0; i < 100; i++) {\n generators.push(new SimplexNoise());\n }\n }\n }\n initialize(particle) {\n particle.lastPosNoise = new Vector3();\n if (typeof particle.rotation === 'number') {\n particle.lastRotNoise = 0;\n }\n else {\n particle.lastRotNoise = new Quaternion();\n }\n particle.generatorIndex = [randomInt(0, 100), randomInt(0, 100), randomInt(0, 100), randomInt(0, 100)];\n this.positionAmount.startGen(particle.memory);\n this.rotationAmount.startGen(particle.memory);\n this.frequency.startGen(particle.memory);\n this.power.startGen(particle.memory);\n }\n update(particle, _) {\n let frequency = this.frequency.genValue(particle.memory, particle.age / particle.life);\n let power = this.power.genValue(particle.memory, particle.age / particle.life);\n let positionAmount = this.positionAmount.genValue(particle.memory, particle.age / particle.life);\n let rotationAmount = this.rotationAmount.genValue(particle.memory, particle.age / particle.life);\n if (positionAmount > 0 && particle.lastPosNoise !== undefined) {\n particle.position.sub(particle.lastPosNoise);\n tempV.set(generators[particle.generatorIndex[0]].noise2D(0, particle.age * frequency) *\n power *\n positionAmount, generators[particle.generatorIndex[1]].noise2D(0, particle.age * frequency) *\n power *\n positionAmount, generators[particle.generatorIndex[2]].noise2D(0, particle.age * frequency) *\n power *\n positionAmount);\n particle.position.add(tempV);\n particle.lastPosNoise.copy(tempV);\n }\n if (rotationAmount > 0 && particle.lastRotNoise !== undefined) {\n if (typeof particle.rotation === 'number') {\n particle.rotation -= particle.lastRotNoise;\n particle.rotation +=\n generators[particle.generatorIndex[3]].noise2D(0, particle.age * frequency) *\n Math.PI *\n power *\n rotationAmount;\n }\n else {\n particle.lastRotNoise.invert();\n particle.rotation.multiply(particle.lastRotNoise);\n tempQ\n .set(generators[particle.generatorIndex[0]].noise2D(0, particle.age * frequency) *\n power *\n rotationAmount, generators[particle.generatorIndex[1]].noise2D(0, particle.age * frequency) *\n power *\n rotationAmount, generators[particle.generatorIndex[2]].noise2D(0, particle.age * frequency) *\n power *\n rotationAmount, generators[particle.generatorIndex[3]].noise2D(0, particle.age * frequency) *\n power *\n rotationAmount)\n .normalize();\n particle.rotation.multiply(tempQ);\n particle.lastRotNoise.copy(tempQ);\n }\n }\n }\n toJSON() {\n return {\n type: this.type,\n frequency: this.frequency.toJSON(),\n power: this.power.toJSON(),\n positionAmount: this.positionAmount.toJSON(),\n rotationAmount: this.rotationAmount.toJSON(),\n };\n }\n frameUpdate(delta) {\n this.duration += delta;\n }\n static fromJSON(json) {\n return new Noise(ValueGeneratorFromJSON(json.frequency), ValueGeneratorFromJSON(json.power), ValueGeneratorFromJSON(json.positionAmount), ValueGeneratorFromJSON(json.rotationAmount));\n }\n clone() {\n return new Noise(this.frequency.clone(), this.power.clone(), this.positionAmount.clone(), this.rotationAmount.clone());\n }\n reset() { }\n}\n\nclass TextureSequencer {\n constructor(scaleX = 0, scaleY = 0, position = new Vector3()) {\n this.scaleX = scaleX;\n this.scaleY = scaleY;\n this.position = position;\n this.locations = [];\n }\n transform(position, index) {\n position.x = this.locations[index % this.locations.length].x * this.scaleX + this.position.x;\n position.y = this.locations[index % this.locations.length].y * this.scaleY + this.position.y;\n position.z = this.position.z;\n }\n static fromJSON(json) {\n const textureSequencer = new TextureSequencer(json.scaleX, json.scaleY, new Vector3(json.position[0], json.position[1], json.position[2]));\n textureSequencer.locations = json.locations.map((loc) => new Vector2(loc.x, loc.y));\n return textureSequencer;\n }\n clone() {\n const textureSequencer = new TextureSequencer(this.scaleX, this.scaleY, this.position.clone());\n textureSequencer.locations = this.locations.map((loc) => loc.clone());\n return textureSequencer;\n }\n toJSON() {\n return {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n position: this.position,\n locations: this.locations.map((loc) => ({\n x: loc.x,\n y: loc.y,\n })),\n };\n }\n fromImage(img, threshold) {\n // Create an empty canvas element\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n // Copy the image contents to the canvas\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.drawImage(img, 0, 0);\n const data = ctx.getImageData(0, 0, canvas.width, canvas.height, { colorSpace: 'srgb' });\n canvas.remove();\n this.locations.length = 0;\n for (let i = 0; i < data.height; i++) {\n for (let j = 0; j < data.width; j++) {\n if (data.data[(i * data.width + j) * 4 + 3] > threshold) {\n this.locations.push(new Vector2(j, data.height - i));\n }\n }\n }\n //return data;\n // Get the data-URL formatted image\n // Firefox supports PNG and JPEG. You could check img.src to\n // guess the original format, but be aware the using \"image/jpg\"\n // will re-encode the image.\n //var dataURL = canvas.toDataURL(\"image/png\");\n //return dataURL.replace(/^data:image\\/(png|jpg);base64,/, \"\");\n }\n}\n\nfunction SequencerFromJSON(json) {\n switch (json.type) {\n case 'TextureSequencer':\n return TextureSequencer.fromJSON(json);\n default:\n return new TextureSequencer();\n }\n}\n\n/**\n * Apply sequences to particles.\n * {@link Sequencer}\n */\nclass ApplySequences {\n constructor(delayBetweenParticles) {\n this.type = 'ApplySequences';\n this.sequencers = [];\n this.time = 0;\n this.index = 0;\n this.pCount = 0;\n this.tempV = new Vector3();\n this.delay = delayBetweenParticles;\n }\n initialize(particle) {\n particle.id = this.pCount;\n particle.dst = new Vector3();\n particle.begin = new Vector3();\n particle.inMotion = false;\n this.pCount++;\n }\n reset() {\n this.time = 0;\n this.index = 0;\n this.pCount = 0;\n }\n update(particle, delta) {\n const sequencer = this.sequencers[this.index];\n const delay = particle.id * this.delay;\n if (this.time >= sequencer[0].a + delay && this.time <= sequencer[0].b + delay) {\n if (!particle.inMotion) {\n particle.inMotion = true;\n particle.begin.copy(particle.position);\n sequencer[1].transform(particle.dst, particle.id);\n }\n particle.position.lerpVectors(particle.begin, particle.dst, ApplySequences.BEZIER.genValue((this.time - sequencer[0].a - delay) / (sequencer[0].b - sequencer[0].a)));\n }\n else if (this.time > sequencer[0].b + delay) {\n particle.inMotion = false;\n }\n }\n frameUpdate(delta) {\n while (this.index + 1 < this.sequencers.length && this.time >= this.sequencers[this.index + 1][0].a) {\n this.index++;\n }\n this.time += delta;\n }\n appendSequencer(range, sequencer) {\n this.sequencers.push([range, sequencer]);\n }\n toJSON() {\n return {\n type: this.type,\n delay: this.delay,\n sequencers: this.sequencers.map(([range, sequencer]) => ({\n range: range.toJSON(),\n sequencer: sequencer.toJSON(),\n })),\n };\n }\n static fromJSON(json) {\n const seq = new ApplySequences(json.delay);\n json.sequencers.forEach((sequencerJson) => {\n seq.sequencers.push([\n ValueGeneratorFromJSON(sequencerJson.range),\n SequencerFromJSON(sequencerJson.sequencer),\n ]);\n });\n return seq;\n }\n clone() {\n const applySequences = new ApplySequences(this.delay);\n applySequences.sequencers = this.sequencers.map((seq) => [seq[0].clone(), seq[1].clone()]);\n return applySequences;\n }\n}\nApplySequences.BEZIER = new Bezier(0, 0, 1, 1);\n\nlet physicsResolver;\nfunction setPhysicsResolver(resolver) {\n physicsResolver = resolver;\n}\nfunction getPhysicsResolver() {\n return physicsResolver;\n}\n/**\n * Apply collision to particles from a physics resolver.\n */\nclass ApplyCollision {\n constructor(resolver, bounce) {\n this.resolver = resolver;\n this.bounce = bounce;\n this.type = 'ApplyCollision';\n this.tempV = new Vector3();\n }\n initialize(particle) { }\n update(particle, delta) {\n // No-op when no collider is registered (getPhysicsResolver() was undefined at load time),\n // so a collision-bearing effect loads and renders anywhere — a host that wants actual\n // collisions registers a resolver via setPhysicsResolver.\n if (this.resolver && this.resolver.resolve(particle.position, this.tempV)) {\n particle.velocity.reflect(this.tempV).multiplyScalar(this.bounce);\n }\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n bounce: this.bounce,\n };\n }\n static fromJSON(json) {\n return new ApplyCollision(getPhysicsResolver(), json.bounce);\n }\n clone() {\n return new ApplyCollision(this.resolver, this.bounce);\n }\n reset() { }\n}\n\n/**\n * Color particles by their speed.\n */\nclass ColorBySpeed {\n constructor(color, speedRange) {\n this.color = color;\n this.speedRange = speedRange;\n this.type = 'ColorBySpeed';\n }\n initialize(particle) {\n this.color.startGen(particle.memory);\n }\n update(particle, delta) {\n const t = (particle.startSpeed - this.speedRange.a) / (this.speedRange.b - this.speedRange.a);\n this.color.genColor(particle.memory, particle.color, t);\n particle.color.x *= particle.startColor.x;\n particle.color.y *= particle.startColor.y;\n particle.color.z *= particle.startColor.z;\n particle.color.w *= particle.startColor.w;\n }\n frameUpdate(delta) { }\n toJSON() {\n return {\n type: this.type,\n color: this.color.toJSON(),\n speedRange: this.speedRange.toJSON(),\n };\n }\n static fromJSON(json) {\n return new ColorBySpeed(ColorGeneratorFromJSON(json.color), IntervalValue.fromJSON(json.speedRange));\n }\n clone() {\n return new ColorBySpeed(this.color.clone(), this.speedRange.clone());\n }\n reset() { }\n}\n\n/**\n * Apply size to particles based on their speed.\n */\nclass SizeBySpeed {\n initialize(particle) {\n this.size.startGen(particle.memory);\n }\n constructor(size, speedRange) {\n this.size = size;\n this.speedRange = speedRange;\n this.type = 'SizeBySpeed';\n }\n update(particle) {\n const t = (particle.startSpeed - this.speedRange.a) / (this.speedRange.b - this.speedRange.a);\n if (this.size instanceof Vector3Function) {\n this.size.genValue(particle.memory, particle.size, t).multiply(particle.startSize);\n }\n else {\n particle.size.copy(particle.startSize).multiplyScalar(this.size.genValue(particle.memory, t));\n }\n }\n toJSON() {\n return {\n type: this.type,\n size: this.size.toJSON(),\n speedRange: this.speedRange.toJSON(),\n };\n }\n static fromJSON(json) {\n return new SizeBySpeed(GeneratorFromJSON(json.size), IntervalValue.fromJSON(json.speedRange));\n }\n frameUpdate(delta) { }\n clone() {\n return new SizeBySpeed(this.size.clone(), this.speedRange.clone());\n }\n reset() { }\n}\n\n/**\n * Apply rotation to particles based on their speed.\n */\nclass RotationBySpeed {\n constructor(angularVelocity, speedRange) {\n this.angularVelocity = angularVelocity;\n this.speedRange = speedRange;\n this.type = 'RotationBySpeed';\n this.tempQuat = new Quaternion();\n }\n initialize(particle) {\n if (typeof particle.rotation === 'number') {\n this.angularVelocity.startGen(particle.memory);\n }\n }\n update(particle, delta) {\n if (typeof particle.rotation === 'number') {\n const t = (particle.startSpeed - this.speedRange.a) / (this.speedRange.b - this.speedRange.a);\n particle.rotation +=\n delta * this.angularVelocity.genValue(particle.memory, t);\n }\n }\n toJSON() {\n return {\n type: this.type,\n angularVelocity: this.angularVelocity.toJSON(),\n speedRange: this.speedRange.toJSON(),\n };\n }\n static fromJSON(json) {\n return new RotationBySpeed(ValueGeneratorFromJSON(json.angularVelocity), IntervalValue.fromJSON(json.speedRange));\n }\n frameUpdate(delta) { }\n clone() {\n return new RotationBySpeed(this.angularVelocity.clone(), this.speedRange.clone());\n }\n reset() { }\n}\n\n/**\n * Limit the speed of particles over their life.\n */\nclass LimitSpeedOverLife {\n initialize(particle) {\n this.speed.startGen(particle.memory);\n }\n constructor(speed, dampen) {\n this.speed = speed;\n this.dampen = dampen;\n this.type = 'LimitSpeedOverLife';\n }\n update(particle, delta) {\n let speed = particle.velocity.length();\n let limit = this.speed.genValue(particle.memory, particle.age / particle.life);\n if (speed > limit) {\n const percent = (speed - limit) / speed;\n particle.velocity.multiplyScalar(1 - percent * this.dampen * delta * 20);\n }\n }\n toJSON() {\n return {\n type: this.type,\n speed: this.speed.toJSON(),\n dampen: this.dampen,\n };\n }\n static fromJSON(json) {\n return new LimitSpeedOverLife(ValueGeneratorFromJSON(json.speed), json.dampen);\n }\n frameUpdate(delta) { }\n clone() {\n return new LimitSpeedOverLife(this.speed.clone(), this.dampen);\n }\n reset() { }\n}\n\nconst BehaviorTypes = {\n ApplyForce: {\n type: 'ApplyForce',\n constructor: ApplyForce,\n params: [\n ['direction', ['vec3']],\n ['magnitude', ['value']],\n ],\n loadJSON: ApplyForce.fromJSON,\n },\n Noise: {\n type: 'Noise',\n constructor: Noise,\n params: [\n ['frequency', ['value']],\n ['power', ['value']],\n ['positionAmount', ['value']],\n ['rotationAmount', ['value']],\n ],\n loadJSON: Noise.fromJSON,\n },\n TurbulenceField: {\n type: 'TurbulenceField',\n constructor: TurbulenceField,\n params: [\n ['scale', ['vec3']],\n ['octaves', ['number']],\n ['velocityMultiplier', ['vec3']],\n ['timeScale', ['vec3']],\n ],\n loadJSON: TurbulenceField.fromJSON,\n },\n GravityForce: {\n type: 'GravityForce',\n constructor: GravityForce,\n params: [\n ['center', ['vec3']],\n ['magnitude', ['number']],\n ],\n loadJSON: GravityForce.fromJSON,\n },\n ColorOverLife: {\n type: 'ColorOverLife',\n constructor: ColorOverLife,\n params: [['color', ['colorFunc']]],\n loadJSON: ColorOverLife.fromJSON,\n },\n RotationOverLife: {\n type: 'RotationOverLife',\n constructor: RotationOverLife,\n params: [['angularVelocity', ['value', 'valueFunc']]],\n loadJSON: RotationOverLife.fromJSON,\n },\n Rotation3DOverLife: {\n type: 'Rotation3DOverLife',\n constructor: Rotation3DOverLife,\n params: [['angularVelocity', ['rotationFunc']]],\n loadJSON: Rotation3DOverLife.fromJSON,\n },\n SizeOverLife: {\n type: 'SizeOverLife',\n constructor: SizeOverLife,\n params: [['size', ['value', 'valueFunc', 'vec3Func']]],\n loadJSON: SizeOverLife.fromJSON,\n },\n ColorBySpeed: {\n type: 'ColorBySpeed',\n constructor: ColorBySpeed,\n params: [\n ['color', ['colorFunc']],\n ['speedRange', ['range']],\n ],\n loadJSON: ColorBySpeed.fromJSON,\n },\n RotationBySpeed: {\n type: 'RotationBySpeed',\n constructor: RotationBySpeed,\n params: [\n ['angularVelocity', ['value', 'valueFunc']],\n ['speedRange', ['range']],\n ],\n loadJSON: RotationBySpeed.fromJSON,\n },\n SizeBySpeed: {\n type: 'SizeBySpeed',\n constructor: SizeBySpeed,\n params: [\n ['size', ['value', 'valueFunc', 'vec3Func']],\n ['speedRange', ['range']],\n ],\n loadJSON: SizeBySpeed.fromJSON,\n },\n SpeedOverLife: {\n type: 'SpeedOverLife',\n constructor: SpeedOverLife,\n params: [['speed', ['value', 'valueFunc']]],\n loadJSON: SpeedOverLife.fromJSON,\n },\n FrameOverLife: {\n type: 'FrameOverLife',\n constructor: FrameOverLife,\n params: [['frame', ['value', 'valueFunc']]],\n loadJSON: FrameOverLife.fromJSON,\n },\n ForceOverLife: {\n type: 'ForceOverLife',\n constructor: ForceOverLife,\n params: [\n ['x', ['value', 'valueFunc']],\n ['y', ['value', 'valueFunc']],\n ['z', ['value', 'valueFunc']],\n ],\n loadJSON: ForceOverLife.fromJSON,\n },\n VelocityOverLife: {\n type: 'VelocityOverLife',\n constructor: VelocityOverLife,\n params: [\n ['linearX', ['value', 'valueFunc']],\n ['linearY', ['value', 'valueFunc']],\n ['linearZ', ['value', 'valueFunc']],\n ['orbitalX', ['value', 'valueFunc']],\n ['orbitalY', ['value', 'valueFunc']],\n ['orbitalZ', ['value', 'valueFunc']],\n ['space', ['string']],\n ],\n loadJSON: VelocityOverLife.fromJSON,\n },\n InheritVelocity: {\n type: 'InheritVelocity',\n constructor: InheritVelocity,\n params: [\n ['multiplier', ['value', 'valueFunc']],\n ['mode', ['string']],\n ],\n loadJSON: InheritVelocity.fromJSON,\n },\n OrbitOverLife: {\n type: 'OrbitOverLife',\n constructor: OrbitOverLife,\n params: [\n ['orbitSpeed', ['value', 'valueFunc']],\n ['axis', ['vec3']],\n ],\n loadJSON: OrbitOverLife.fromJSON,\n },\n WidthOverLength: {\n type: 'WidthOverLength',\n constructor: WidthOverLength,\n params: [['width', ['value', 'valueFunc']]],\n loadJSON: WidthOverLength.fromJSON,\n },\n ChangeEmitDirection: {\n type: 'ChangeEmitDirection',\n constructor: ChangeEmitDirection,\n params: [['angle', ['value']]],\n loadJSON: ChangeEmitDirection.fromJSON,\n },\n EmitSubParticleSystem: {\n type: 'EmitSubParticleSystem',\n constructor: EmitSubParticleSystem,\n params: [\n ['particleSystem', ['self']],\n ['useVelocityAsBasis', ['boolean']],\n ['subParticleSystem', ['particleSystem']],\n ['mode', ['number']],\n ['emitProbability', ['number']],\n ],\n loadJSON: EmitSubParticleSystem.fromJSON,\n },\n LimitSpeedOverLife: {\n type: 'LimitSpeedOverLife',\n constructor: LimitSpeedOverLife,\n params: [\n ['speed', ['value', 'valueFunc']],\n ['dampen', ['number']],\n ],\n loadJSON: LimitSpeedOverLife.fromJSON,\n },\n ApplyCollision: {\n type: 'ApplyCollision',\n constructor: ApplyCollision,\n // The resolver is host-provided (getPhysicsResolver), not serialized; only bounce round-trips.\n params: [['bounce', ['number']]],\n loadJSON: ApplyCollision.fromJSON,\n },\n};\nfunction BehaviorFromJSON(json, particleSystem) {\n if (BehaviorTypes[json.type]) {\n return BehaviorTypes[json.type].loadJSON(json, particleSystem);\n }\n return null;\n}\n\nconst Plugins = [];\nfunction loadPlugin(plugin) {\n const existing = Plugins.find((item) => item.id === plugin.id);\n if (!existing) {\n plugin.initialize();\n for (const emitterShape of plugin.emitterShapes) {\n if (!EmitterShapes[emitterShape.type]) {\n EmitterShapes[emitterShape.type] = emitterShape;\n }\n }\n for (const behavior of plugin.behaviors) {\n if (!BehaviorTypes[behavior.type]) {\n BehaviorTypes[behavior.type] = behavior;\n }\n }\n }\n}\nfunction unloadPlugin(pluginId) {\n const plugin = Plugins.find((item) => item.id === pluginId);\n if (plugin) {\n for (const emitterShape of plugin.emitterShapes) {\n if (EmitterShapes[emitterShape.type]) {\n delete EmitterShapes[emitterShape.type];\n }\n }\n for (const behavior of plugin.behaviors) {\n if (BehaviorTypes[behavior.type]) {\n delete BehaviorTypes[behavior.type];\n }\n }\n }\n}\n\nexport { ApplyCollision, ApplyForce, ApplySequences, AxisAngleGenerator, BehaviorFromJSON, BehaviorTypes, Bezier, ChangeEmitDirection, CircleEmitter, ColorBySpeed, ColorGeneratorFromJSON, ColorOverLife, ColorRange, ConeEmitter, ConstantColor, ConstantValue, DEG2RAD, DonutEmitter, EmitSubParticleSystem, EmitterFromJSON, EmitterMode, EmitterShapes, Euler, EulerGenerator, ForceOverLife, FrameOverLife, GeneratorFromJSON, Gradient, GravityForce, GridEmitter, HemisphereEmitter, InheritVelocity, IntervalValue, LimitSpeedOverLife, MathUtils, Matrix3, Matrix4, NodeParticle, Noise, OrbitOverLife, PiecewiseBezier, PiecewiseFunction, Plugins, PointEmitter, Quaternion, RAD2DEG, RandomColor, RandomColorBetweenGradient, RandomQuatGenerator, RecordState, RectangleEmitter, Rotation3DOverLife, RotationBySpeed, RotationGeneratorFromJSON, RotationOverLife, SequencerFromJSON, SizeBySpeed, SizeOverLife, SpeedOverLife, SphereEmitter, SpriteParticle, SubParticleEmitMode, TextureSequencer, TrailParticle, TurbulenceField, ValueGeneratorFromJSON, Vector2, Vector3, Vector3Function, Vector3GeneratorFromJSON, Vector4, VelocityOverLife, WebGLCoordinateSystem, WebGPUCoordinateSystem, WidthOverLength, ceilPowerOfTwo, clamp, damp, degToRad, denormalize, euclideanModulo, floorPowerOfTwo, generateUUID, getPhysicsResolver, getValueFromEmitterMode, inverseLerp, isPowerOfTwo, lerp, loadPlugin, mapLinear, normalize, pingpong, radToDeg, randFloat, randFloatSpread, randInt, seededRandom, setPhysicsResolver, setQuaternionFromProperEuler, smootherstep, smoothstep, unloadPlugin };\n","import {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {VertexBuffer} from '@babylonjs/core/Buffers/buffer';\nimport {\n Particle,\n EmitterShape,\n ShapeJSON,\n IParticleSystem,\n Vector3,\n Plugin,\n} from 'quarks.core';\n\nexport class MeshSurfaceEmitter implements EmitterShape {\n type = 'mesh_surface';\n\n private _triangleIndexToArea: number[] = [];\n private _mesh?: Mesh;\n private _positions?: Float32Array;\n private _indices?: Uint32Array | Int32Array;\n private _meshReferenceId?: string;\n\n get mesh() {\n return this._mesh;\n }\n\n set mesh(mesh: Mesh | undefined) {\n this._mesh = mesh;\n if (!mesh) return;\n\n const positions = mesh.getVerticesData(VertexBuffer.PositionKind);\n const indices = mesh.getIndices();\n if (!positions || !indices) return;\n\n this._positions = new Float32Array(positions);\n this._indices = new Int32Array(indices);\n\n this._triangleIndexToArea.length = 0;\n let area = 0;\n const triCount = indices.length / 3;\n this._triangleIndexToArea.push(0);\n\n const a = new Vector3();\n const b = new Vector3();\n const c = new Vector3();\n\n for (let i = 0; i < triCount; i++) {\n const i0 = indices[i * 3];\n const i1 = indices[i * 3 + 1];\n const i2 = indices[i * 3 + 2];\n\n a.set(positions[i0 * 3], positions[i0 * 3 + 1], positions[i0 * 3 + 2]);\n b.set(positions[i1 * 3], positions[i1 * 3 + 1], positions[i1 * 3 + 2]);\n c.set(positions[i2 * 3], positions[i2 * 3 + 1], positions[i2 * 3 + 2]);\n\n b.sub(a);\n c.sub(a);\n const cross = new Vector3();\n cross.crossVectors(b, c);\n area += cross.length() * 0.5;\n this._triangleIndexToArea.push(area);\n }\n }\n\n constructor(mesh?: Mesh, meshReferenceId?: string) {\n this._meshReferenceId = meshReferenceId;\n if (mesh) this.mesh = mesh;\n }\n\n initialize(p: Particle) {\n if (!this._positions || !this._indices) {\n p.position.set(0, 0, 0);\n p.velocity.set(0, 0, 1).multiplyScalar(p.startSpeed);\n return;\n }\n\n const triCount = this._triangleIndexToArea.length - 1;\n let left = 0, right = triCount;\n const target = Math.random() * this._triangleIndexToArea[triCount];\n\n while (left + 1 < right) {\n const mid = Math.floor((left + right) / 2);\n if (target < this._triangleIndexToArea[mid]) {\n right = mid;\n } else {\n left = mid;\n }\n }\n\n let u1 = Math.random();\n let u2 = Math.random();\n if (u1 + u2 > 1) {\n u1 = 1 - u1;\n u2 = 1 - u2;\n }\n\n const idx0 = this._indices[left * 3];\n const idx1 = this._indices[left * 3 + 1];\n const idx2 = this._indices[left * 3 + 2];\n\n const ax = this._positions[idx0 * 3], ay = this._positions[idx0 * 3 + 1], az = this._positions[idx0 * 3 + 2];\n const bx = this._positions[idx1 * 3] - ax, by = this._positions[idx1 * 3 + 1] - ay, bz = this._positions[idx1 * 3 + 2] - az;\n const cx = this._positions[idx2 * 3] - ax, cy = this._positions[idx2 * 3 + 1] - ay, cz = this._positions[idx2 * 3 + 2] - az;\n\n p.position.set(ax + bx * u1 + cx * u2, ay + by * u1 + cy * u2, az + bz * u1 + cz * u2);\n\n const nx = by * cz - bz * cy;\n const ny = bz * cx - bx * cz;\n const nz = bx * cy - by * cx;\n const len = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n p.velocity.set(nx / len, ny / len, nz / len).multiplyScalar(p.startSpeed);\n }\n\n toJSON(): ShapeJSON {\n return {type: 'mesh_surface', mesh: this._mesh ? (this._mesh as any).uniqueId?.toString() : this._meshReferenceId ?? ''};\n }\n\n static fromJSON(json: any): MeshSurfaceEmitter {\n return new MeshSurfaceEmitter(undefined, json?.mesh);\n }\n\n clone(): EmitterShape {\n return new MeshSurfaceEmitter(this._mesh, this._meshReferenceId);\n }\n\n update(_system: IParticleSystem, _delta: number): void {}\n}\n\nexport const MeshSurfaceEmitterPlugin: Plugin = {\n id: 'babylon.quarks',\n initialize: () => {},\n emitterShapes: [{\n type: 'mesh_surface',\n params: [['mesh', ['mesh']]],\n constructor: MeshSurfaceEmitter,\n loadJSON: (json: any) => MeshSurfaceEmitter.fromJSON(json),\n }],\n behaviors: [],\n};\n","import softFragment from './soft_fragment.glsl';\nimport softParsFragment from './soft_pars_fragment.glsl';\nimport softParsVertex from './soft_pars_vertex.glsl';\nimport softVertex from './soft_vertex.glsl';\nimport tileFragment from './tile_fragment.glsl';\nimport tileParsFragment from './tile_pars_fragment.glsl';\nimport tileParsVertex from './tile_pars_vertex.glsl';\nimport tileVertex from './tile_vertex.glsl';\n\nconst shaderChunks: Record<string, string> = {};\nlet registered = false;\n\nexport function registerShaderChunks(): void {\n if (registered) return;\n shaderChunks.tile_pars_vertex = tileParsVertex;\n shaderChunks.tile_vertex = tileVertex;\n shaderChunks.tile_pars_fragment = tileParsFragment;\n shaderChunks.tile_fragment = tileFragment;\n shaderChunks.soft_pars_vertex = softParsVertex;\n shaderChunks.soft_vertex = softVertex;\n shaderChunks.soft_pars_fragment = softParsFragment;\n shaderChunks.soft_fragment = softFragment;\n registered = true;\n}\n\nexport function getShaderChunk(chunkName: string): string | undefined {\n return shaderChunks[chunkName];\n}\n\nexport function getRegisteredShaderChunks(): Readonly<Record<string, string>> {\n return shaderChunks;\n}\n","export default /* glsl */ `\n#ifdef UV_TILE\n attribute float uvTile;\n uniform vec2 tileCount;\n\n mat3 makeTileTransform(float tileIndex) {\n float col = mod(tileIndex, tileCount.x);\n float row = (tileCount.y - floor(tileIndex / tileCount.x) - 1.0);\n return mat3(\n 1.0 / tileCount.x, 0.0, 0.0,\n 0.0, 1.0 / tileCount.y, 0.0,\n col / tileCount.x, row / tileCount.y, 1.0\n );\n }\n#else\n mat3 makeTileTransform(float tileIndex) {\n return mat3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0);\n }\n#endif\n\n#if defined(USE_UV)\n varying vec2 vUv;\n #ifdef TILE_BLEND\n varying vec2 vUvNext;\n varying float vUvBlend;\n #endif\n#endif\n`;\n","export default /* glsl */ `\n#ifdef UV_TILE\n mat3 tileTransform = makeTileTransform(floor(uvTile));\n #ifdef TILE_BLEND\n mat3 nextTileTransform = makeTileTransform(ceil(uvTile));\n vUvBlend = fract(uvTile);\n #endif\n#else\n mat3 tileTransform = makeTileTransform(0.0);\n#endif\n\n#if defined(USE_UV)\n vUv = (tileTransform * vec3(uv, 1.0)).xy;\n #if defined(TILE_BLEND) && defined(UV_TILE)\n vUvNext = (nextTileTransform * vec3(uv, 1.0)).xy;\n #endif\n#endif\n`;\n","export default /* glsl */ `\n#if defined(USE_UV)\n varying vec2 vUv;\n #ifdef TILE_BLEND\n varying vec2 vUvNext;\n varying float vUvBlend;\n #endif\n#endif\n`;\n","export default /* glsl */ `\n#ifdef USE_MAP\n vec4 texelColor = texture2D(map, vUv);\n #ifdef TILE_BLEND\n texelColor = mix(texelColor, texture2D(map, vUvNext), vUvBlend);\n #endif\n diffuseColor *= texelColor;\n#endif\n`;\n","export default /* glsl */ `\n#ifdef SOFT_PARTICLES\n varying vec4 projPosition;\n varying float linearDepth;\n#endif\n`;\n","export default /* glsl */ `\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -mvPosition.z;\n#endif\n`;\n","export default /* glsl */ `\n#ifdef SOFT_PARTICLES\n uniform sampler2D depthTexture;\n uniform vec4 projParams;\n uniform vec2 softParams;\n\n varying vec4 projPosition;\n varying float linearDepth;\n\n #define SOFT_NEAR_FADE softParams.x\n #define SOFT_INV_FADE_DISTANCE softParams.y\n\n #define zNear projParams.x\n #define zFar projParams.y\n\n float linearize_depth(float d) {\n return (zFar * zNear) / (zFar - d * (zFar - zNear));\n }\n#endif\n`;\n","export default /* glsl */ `\n#ifdef SOFT_PARTICLES\n\n vec2 p2 = projPosition.xy / projPosition.w;\n p2 = 0.5 * p2 + 0.5;\n\n float readDepth = texture2D(depthTexture, p2.xy).r;\n float viewDepth = linearize_depth(readDepth);\n float softParticlesFade = saturate(SOFT_INV_FADE_DISTANCE * ((viewDepth - SOFT_NEAR_FADE) - linearDepth));\n\n gl_FragColor *= softParticlesFade;\n#endif\n`;\n","export default /* glsl */ `\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute float rotation;\nattribute float uvTile;\n\n// Uniforms\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\nuniform mat4 worldViewProjection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvoid main() {\n float c = cos(rotation);\n float s = sin(rotation);\n\n vec2 alignedPosition = position.xy * size.xy;\n vec2 rotatedPosition;\n rotatedPosition.x = c * alignedPosition.x - s * alignedPosition.y;\n rotatedPosition.y = s * alignedPosition.x + c * alignedPosition.y;\n\n#ifdef HORIZONTAL\n vec4 mvPosition = world * vec4(offset, 1.0);\n mvPosition.x += rotatedPosition.x;\n mvPosition.z -= rotatedPosition.y;\n mvPosition = view * mvPosition;\n#elif defined(VERTICAL)\n vec4 mvPosition = world * vec4(offset, 1.0);\n mvPosition.y += rotatedPosition.y;\n mvPosition = view * mvPosition;\n mvPosition.x += rotatedPosition.x;\n#else\n vec4 mvPosition = view * world * vec4(offset, 1.0);\n mvPosition.xy += rotatedPosition;\n#endif\n\n gl_Position = projection * mvPosition;\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -mvPosition.z;\n#endif\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n`;\n","import {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {Scene} from '@babylonjs/core/scene';\nimport {BaseTexture} from '@babylonjs/core/Materials/Textures/baseTexture';\nimport {ShaderMaterial} from '@babylonjs/core/Materials/shaderMaterial';\nimport {IParticleSystem} from 'quarks.core';\nimport {VFXBatchSettings} from './BatchedRenderer';\n\nexport enum RenderMode {\n BillBoard = 0,\n StretchedBillBoard = 1,\n Mesh = 2,\n Trail = 3,\n HorizontalBillBoard = 4,\n VerticalBillBoard = 5,\n}\n\nexport interface StoredBatchSettings {\n instancingGeometry: Float32Array;\n instancingIndices: Uint32Array | Uint16Array;\n instancingUVs?: Float32Array;\n instancingNormals?: Float32Array;\n renderMode: RenderMode;\n renderOrder: number;\n uTileCount: number;\n vTileCount: number;\n blendTiles: boolean;\n softParticles: boolean;\n softNearFade: number;\n softFarFade: number;\n materialBlendMode: number;\n materialTransparent: boolean;\n materialDepthTest: boolean;\n materialDepthWrite: boolean;\n materialAlphaTest: number;\n texture: any;\n layerMask: number;\n}\n\nexport abstract class VFXBatch {\n mesh: Mesh;\n systems: Set<IParticleSystem>;\n settings: StoredBatchSettings;\n protected maxParticles: number;\n protected scene: Scene;\n\n protected constructor(settings: VFXBatchSettings, scene: Scene) {\n this.scene = scene;\n this.maxParticles = 1000;\n this.systems = new Set<IParticleSystem>();\n this.settings = {\n instancingGeometry: settings.instancingGeometry,\n instancingIndices: settings.instancingIndices,\n instancingUVs: settings.instancingUVs,\n instancingNormals: settings.instancingNormals,\n renderMode: settings.renderMode,\n renderOrder: settings.renderOrder,\n uTileCount: settings.uTileCount,\n vTileCount: settings.vTileCount,\n blendTiles: settings.blendTiles,\n softParticles: settings.softParticles,\n softNearFade: settings.softNearFade,\n softFarFade: settings.softFarFade,\n materialBlendMode: settings.materialBlendMode,\n materialTransparent: settings.materialTransparent,\n materialDepthTest: settings.materialDepthTest,\n materialDepthWrite: settings.materialDepthWrite,\n materialAlphaTest: settings.materialAlphaTest,\n texture: settings.texture,\n layerMask: settings.layerMask,\n };\n this.mesh = new Mesh('vfxBatch', scene);\n this.mesh.alwaysSelectAsActiveMesh = true;\n }\n\n addSystem(system: IParticleSystem) {\n this.systems.add(system);\n }\n\n removeSystem(system: IParticleSystem) {\n this.systems.delete(system);\n }\n\n getVisibleSystems(): IParticleSystem[] {\n const visibleSystems: IParticleSystem[] = [];\n for (const system of this.systems) {\n if (system.emitter.visible) {\n visibleSystems.push(system);\n }\n }\n return visibleSystems;\n }\n\n applyDepthTexture(depthTexture: BaseTexture | null): void {\n const material = this.mesh.material;\n if (material && material instanceof ShaderMaterial) {\n material.setTexture('depthTexture', depthTexture);\n }\n }\n\n abstract setupBuffers(): void;\n abstract expandBuffers(target: number): void;\n abstract rebuildMaterial(): void;\n abstract update(): void;\n\n dispose(): void {\n this.mesh.dispose();\n }\n}\n","export default /* glsl */ `\nvarying vec2 vUV;\nvarying vec4 vColor;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\n#ifdef SOFT_PARTICLES\nuniform sampler2D depthTexture;\nuniform vec2 softParams;\nuniform vec4 projParams;\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\n#ifdef USE_ALPHATEST\nuniform float alphaTest;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n #ifdef TILE_BLEND\n vec4 texColor2 = texture2D(map, vUV2);\n texColor = mix(texColor, texColor2, vTileBlend);\n #endif\n baseColor *= texColor;\n#endif\n\n#ifdef USE_COLOR_AS_ALPHA\n baseColor.a *= (baseColor.r + baseColor.g + baseColor.b) / 3.0;\n#endif\n\n#ifdef USE_ALPHATEST\n if (baseColor.a < alphaTest) discard;\n#else\n if (baseColor.a < 0.01) discard;\n#endif\n\n gl_FragColor = baseColor;\n\n#ifdef SOFT_PARTICLES\n vec2 p2 = projPosition.xy / projPosition.w;\n p2 = 0.5 * p2 + 0.5;\n float readDepth = texture2D(depthTexture, p2.xy).r;\n float zNear = projParams.x;\n float zFar = projParams.y;\n float viewDepth = (zFar * zNear) / (zFar - readDepth * (zFar - zNear));\n float fade = clamp(softParams.y * ((viewDepth - softParams.x) - linearDepth), 0.0, 1.0);\n gl_FragColor *= fade;\n#endif\n}\n`;\n","export default /* glsl */ `\nattribute vec3 position;\nattribute vec2 uv;\nattribute vec3 normal;\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute vec4 rotation;\nattribute float uvTile;\n\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\nvarying vec2 vUV;\nvarying vec4 vColor;\nvarying vec3 vNormal;\nvarying vec3 vWorldPos;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvec3 applyQuaternion(vec3 v, vec4 q) {\n vec3 qVec = q.xyz;\n float qW = q.w;\n vec3 t = 2.0 * cross(qVec, v);\n return v + qW * t + cross(qVec, t);\n}\n\nvoid main() {\n vec3 scaledPosition = position * size;\n vec3 rotatedPosition = applyQuaternion(scaledPosition, rotation);\n vec3 rotatedNormal = normalize(applyQuaternion(normal, rotation));\n vec3 localPos = rotatedPosition + offset;\n\n vec4 worldPos = world * vec4(localPos, 1.0);\n vec4 viewPos = view * worldPos;\n gl_Position = projection * viewPos;\n\n vWorldPos = worldPos.xyz;\n vNormal = normalize((world * vec4(rotatedNormal, 0.0)).xyz);\n\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -viewPos.z;\n#endif\n\n#ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n#else\n vUV = uv;\n#endif\n\n vColor = color;\n}\n`;\n","export default /* glsl */ `\nvarying vec2 vUV;\nvarying vec4 vColor;\nvarying vec3 vNormal;\n\nuniform vec3 lightDirection;\nuniform vec3 lightColor;\nuniform vec3 ambientColor;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\n#ifdef SOFT_PARTICLES\nuniform sampler2D depthTexture;\nuniform vec2 softParams;\nuniform vec4 projParams;\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\n#ifdef USE_ALPHATEST\nuniform float alphaTest;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n #ifdef TILE_BLEND\n vec4 texColor2 = texture2D(map, vUV2);\n texColor = mix(texColor, texColor2, vTileBlend);\n #endif\n baseColor *= texColor;\n#endif\n\n#ifdef USE_ALPHATEST\n if (baseColor.a < alphaTest) discard;\n#else\n if (baseColor.a < 0.01) discard;\n#endif\n\n vec3 N = normalize(vNormal);\n vec3 L = normalize(-lightDirection);\n float NdotL = max(dot(N, L), 0.0);\n vec3 litColor = ambientColor + lightColor * NdotL;\n\n gl_FragColor = vec4(baseColor.rgb * litColor, baseColor.a);\n\n#ifdef SOFT_PARTICLES\n vec2 p2 = projPosition.xy / projPosition.w;\n p2 = 0.5 * p2 + 0.5;\n float readDepth = texture2D(depthTexture, p2.xy).r;\n float zNear = projParams.x;\n float zFar = projParams.y;\n float viewDepth = (zFar * zNear) / (zFar - readDepth * (zFar - zNear));\n float fade = clamp(softParams.y * ((viewDepth - softParams.x) - linearDepth), 0.0, 1.0);\n gl_FragColor *= fade;\n#endif\n}\n`;\n","export default /* glsl */ `\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute float rotation;\nattribute float uvTile;\nattribute vec4 velocity;\n\n// Uniforms\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\nuniform float speedFactor;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvoid main() {\n float lengthFactor = velocity.w;\n float avgSize = (size.x + size.y) * 0.5;\n vec4 mvPosition = view * world * vec4(offset, 1.0);\n vec3 viewVelocity = mat3(view * world) * velocity.xyz;\n float vlength = length(viewVelocity);\n // Stretch direction is the velocity direction; only a genuinely motionless particle has none.\n // Deriving it via normalize keeps the stretch aligned even when the speed contribution is ~0\n // (e.g. speedFactor 0), instead of collapsing the whole burst onto a fixed screen axis.\n vec3 vdir = vlength > 0.000001 ? viewVelocity / vlength : vec3(0.0, 0.0, 1.0);\n mvPosition.xyz += position.y * normalize(cross(mvPosition.xyz, vdir)) * avgSize;\n // Equivalent to viewVelocity * (1.0 + lengthFactor / vlength) for moving particles, but the\n // size-based term (vdir * lengthFactor) survives when the velocity contribution vanishes.\n mvPosition.xyz -= (position.x + 0.5) * (viewVelocity + vdir * lengthFactor) * avgSize;\n gl_Position = projection * mvPosition;\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -mvPosition.z;\n#endif\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n`;\n","export default /* glsl */ `\nattribute vec3 position;\nattribute vec3 previous;\nattribute vec3 next;\nattribute float side;\nattribute float width;\nattribute vec2 uv;\nattribute vec4 color;\n\nuniform mat4 view;\nuniform mat4 projection;\nuniform float lineWidth;\nuniform vec2 resolution;\nuniform float sizeAttenuation;\n\nvarying vec2 vUV;\nvarying vec4 vColor;\n\nvec2 fix(vec4 i, float aspect) {\n vec2 res = i.xy / i.w;\n res.x *= aspect;\n return res;\n}\n\nvoid main() {\n float aspect = resolution.x / resolution.y;\n vec4 finalPosition = projection * view * vec4(position, 1.0);\n vec4 prevPos = projection * view * vec4(previous, 1.0);\n vec4 nextPos = projection * view * vec4(next, 1.0);\n\n vec2 currentP = fix(finalPosition, aspect);\n vec2 prevP = fix(prevPos, aspect);\n vec2 nextP = fix(nextPos, aspect);\n\n float w = lineWidth * width;\n vec2 dir;\n if (distance(nextP, currentP) < 0.0001) {\n dir = normalize(currentP - prevP);\n } else if (distance(prevP, currentP) < 0.0001) {\n dir = normalize(nextP - currentP);\n } else {\n vec2 dir1 = normalize(currentP - prevP);\n vec2 dir2 = normalize(nextP - currentP);\n dir = normalize(dir1 + dir2);\n }\n vec4 normal = vec4(-dir.y, dir.x, 0.0, 1.0);\n normal.xy *= 0.5 * w;\n normal *= projection;\n if (sizeAttenuation == 0.0) {\n normal.xy *= finalPosition.w;\n normal.xy /= (vec4(resolution, 0.0, 1.0) * projection).xy;\n }\n finalPosition.xy += normal.xy * side;\n gl_Position = finalPosition;\n vUV = uv;\n vColor = color;\n}\n`;\n","export default /* glsl */ `\nvarying vec2 vUV;\nvarying vec4 vColor;\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n baseColor *= texColor;\n#endif\n\n if (baseColor.a < 0.01) discard;\n\n gl_FragColor = baseColor;\n}\n`;\n","import {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {VertexData} from '@babylonjs/core/Meshes/mesh.vertexData';\nimport {VertexBuffer} from '@babylonjs/core/Buffers/buffer';\nimport {Effect} from '@babylonjs/core/Materials/effect';\nimport {ShaderMaterial} from '@babylonjs/core/Materials/shaderMaterial';\nimport {Scene} from '@babylonjs/core/scene';\nimport {Constants} from '@babylonjs/core/Engines/constants';\nimport {Vector2 as BVector2, Vector3 as BVector3, Vector4 as BVector4} from '@babylonjs/core/Maths/math.vector';\nimport {\n Vector3,\n Vector4,\n Quaternion,\n Matrix3,\n SpriteParticle,\n StretchedBillBoardSettings,\n} from 'quarks.core';\nimport {VFXBatch, RenderMode} from './VFXBatch';\nimport {VFXBatchSettings} from './BatchedRenderer';\nimport particle_vert from './shaders/particle_vert.glsl';\nimport particle_frag from './shaders/particle_frag.glsl';\nimport particle_physics_frag from './shaders/particle_physics_frag.glsl';\nimport stretched_bb_particle_vert from './shaders/stretched_bb_particle_vert.glsl';\nimport local_particle_physics_vert from './shaders/local_particle_physics_vert.glsl';\n\nexport class SpriteBatch extends VFXBatch {\n private offsetBuffer!: Float32Array;\n private rotationBuffer!: Float32Array;\n private sizeBuffer!: Float32Array;\n private colorBuffer!: Float32Array;\n private uvTileBuffer!: Float32Array;\n private velocityBuffer?: Float32Array;\n\n private offsetVB!: VertexBuffer;\n private rotationVB!: VertexBuffer;\n private sizeVB!: VertexBuffer;\n private colorVB!: VertexBuffer;\n private uvTileVB!: VertexBuffer;\n private velocityVB?: VertexBuffer;\n\n constructor(settings: VFXBatchSettings, scene: Scene) {\n super(settings, scene);\n this.maxParticles = 1000;\n this.setupBuffers();\n this.rebuildMaterial();\n }\n\n setupBuffers(): void {\n this.mesh.dispose();\n this.mesh = new Mesh('spriteBatch', this.scene);\n this.mesh.alwaysSelectAsActiveMesh = true;\n\n const vertexData = new VertexData();\n vertexData.positions = this.settings.instancingGeometry;\n vertexData.indices = this.settings.instancingIndices;\n if (this.settings.instancingUVs) {\n vertexData.uvs = this.settings.instancingUVs;\n }\n if (this.settings.instancingNormals) {\n vertexData.normals = this.settings.instancingNormals;\n }\n vertexData.applyToMesh(this.mesh, false);\n\n this.buildExpandableBuffers();\n }\n\n private buildExpandableBuffers(): void {\n const engine = this.scene.getEngine();\n\n this.offsetBuffer = new Float32Array(this.maxParticles * 3);\n this.offsetVB = new VertexBuffer(engine, this.offsetBuffer, 'offset', true, false, 3, true);\n this.mesh.setVerticesBuffer(this.offsetVB);\n\n this.colorBuffer = new Float32Array(this.maxParticles * 4);\n this.colorVB = new VertexBuffer(engine, this.colorBuffer, 'color', true, false, 4, true);\n this.mesh.setVerticesBuffer(this.colorVB);\n\n this.sizeBuffer = new Float32Array(this.maxParticles * 3);\n this.sizeVB = new VertexBuffer(engine, this.sizeBuffer, 'size', true, false, 3, true);\n this.mesh.setVerticesBuffer(this.sizeVB);\n\n this.uvTileBuffer = new Float32Array(this.maxParticles);\n this.uvTileVB = new VertexBuffer(engine, this.uvTileBuffer, 'uvTile', true, false, 1, true);\n this.mesh.setVerticesBuffer(this.uvTileVB);\n\n if (this.settings.renderMode === RenderMode.Mesh) {\n this.rotationBuffer = new Float32Array(this.maxParticles * 4);\n this.rotationVB = new VertexBuffer(engine, this.rotationBuffer, 'rotation', true, false, 4, true);\n } else {\n this.rotationBuffer = new Float32Array(this.maxParticles);\n this.rotationVB = new VertexBuffer(engine, this.rotationBuffer, 'rotation', true, false, 1, true);\n }\n this.mesh.setVerticesBuffer(this.rotationVB);\n\n if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n this.velocityBuffer = new Float32Array(this.maxParticles * 4);\n this.velocityVB = new VertexBuffer(engine, this.velocityBuffer, 'velocity', true, false, 4, true);\n this.mesh.setVerticesBuffer(this.velocityVB);\n }\n\n this.mesh.forcedInstanceCount = 0;\n this.mesh.doNotSyncBoundingInfo = true;\n }\n\n expandBuffers(target: number): void {\n while (target >= this.maxParticles) {\n this.maxParticles *= 2;\n }\n this.buildExpandableBuffers();\n }\n\n rebuildMaterial(): void {\n const shaderName = `quarksParticle_${this.settings.renderMode}_${Date.now()}`;\n this.lastStretchedSpeedFactor = Number.NaN;\n let vertexShader: string;\n let fragmentShader: string;\n const defines: string[] = [];\n\n if (this.settings.renderMode === RenderMode.Mesh) {\n vertexShader = local_particle_physics_vert;\n fragmentShader = particle_physics_frag;\n } else if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n vertexShader = stretched_bb_particle_vert;\n fragmentShader = particle_frag;\n } else {\n vertexShader = particle_vert;\n fragmentShader = particle_frag;\n }\n\n if (this.settings.texture) {\n defines.push('USE_MAP');\n }\n if (this.settings.uTileCount > 1 || this.settings.vTileCount > 1) {\n defines.push('UV_TILE');\n }\n if (this.settings.blendTiles) {\n defines.push('TILE_BLEND');\n }\n if (this.settings.softParticles) {\n defines.push('SOFT_PARTICLES');\n }\n if (this.settings.materialAlphaTest > 0) {\n defines.push('USE_ALPHATEST');\n }\n if (this.settings.renderMode === RenderMode.VerticalBillBoard) {\n defines.push('VERTICAL');\n }\n if (this.settings.renderMode === RenderMode.HorizontalBillBoard) {\n defines.push('HORIZONTAL');\n }\n\n Effect.ShadersStore[shaderName + 'VertexShader'] = vertexShader;\n Effect.ShadersStore[shaderName + 'FragmentShader'] = fragmentShader;\n\n const attributes = ['position', 'uv', 'offset', 'color', 'size', 'rotation', 'uvTile'];\n if (this.settings.renderMode === RenderMode.Mesh) {\n attributes.push('normal');\n }\n if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n attributes.push('velocity');\n }\n\n const uniforms = ['world', 'view', 'projection', 'worldView', 'worldViewProjection'];\n const samplers: string[] = [];\n\n if (this.settings.uTileCount > 1 || this.settings.vTileCount > 1) {\n uniforms.push('tileCountX');\n uniforms.push('tileCountY');\n }\n if (this.settings.texture) {\n samplers.push('map');\n }\n if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n uniforms.push('speedFactor');\n }\n if (this.settings.softParticles) {\n uniforms.push('softParams');\n uniforms.push('projParams');\n samplers.push('depthTexture');\n }\n if (this.settings.materialAlphaTest > 0) {\n uniforms.push('alphaTest');\n }\n if (this.settings.renderMode === RenderMode.Mesh) {\n uniforms.push('lightDirection');\n uniforms.push('lightColor');\n uniforms.push('ambientColor');\n }\n\n const mat = new ShaderMaterial(shaderName, this.scene,\n {vertex: shaderName, fragment: shaderName},\n {\n attributes,\n uniforms,\n samplers,\n defines,\n needAlphaBlending: this.settings.materialTransparent,\n }\n );\n\n if (this.settings.texture) {\n mat.setTexture('map', this.settings.texture);\n }\n if (this.settings.uTileCount > 1 || this.settings.vTileCount > 1) {\n mat.setFloat('tileCountX', this.settings.uTileCount);\n mat.setFloat('tileCountY', this.settings.vTileCount);\n }\n if (this.settings.renderMode === RenderMode.StretchedBillBoard) {\n mat.setFloat('speedFactor', this.settings.softNearFade > 0 ? this.settings.softNearFade : 1.0);\n }\n if (this.settings.softParticles) {\n mat.setVector2('softParams', new BVector2(this.settings.softNearFade, 1.0 / Math.max(this.settings.softFarFade - this.settings.softNearFade, 0.0001)));\n mat.onBindObservable.add(() => {\n const camera = this.scene.activeCamera;\n if (camera) {\n mat.setVector4('projParams', new BVector4(camera.minZ, camera.maxZ, 0, 0));\n }\n });\n }\n if (this.settings.materialAlphaTest > 0) {\n mat.setFloat('alphaTest', this.settings.materialAlphaTest);\n }\n if (this.settings.renderMode === RenderMode.Mesh) {\n mat.setVector3('lightDirection', new BVector3(0.4, -1, 0.6));\n mat.setVector3('lightColor', new BVector3(1, 1, 1));\n mat.setVector3('ambientColor', new BVector3(0.35, 0.35, 0.35));\n }\n\n mat.backFaceCulling = false;\n\n if (this.settings.materialTransparent) {\n mat.alphaMode = this.settings.materialBlendMode;\n } else {\n mat.alphaMode = Constants.ALPHA_DISABLE;\n }\n mat.needDepthPrePass = this.settings.materialDepthWrite;\n mat.forceDepthWrite = this.settings.materialDepthWrite;\n mat.disableDepthWrite = !this.settings.materialDepthWrite;\n\n this.mesh.material = mat;\n }\n\n private vector_ = new Vector3();\n private vector2_ = new Vector3();\n private vector3_ = new Vector3();\n private quaternion_ = new Quaternion();\n private quaternion2_ = new Quaternion();\n private quaternion3_ = new Quaternion();\n private rotationMat_ = new Matrix3();\n private rotationMat2_ = new Matrix3();\n private lastStretchedSpeedFactor = Number.NaN;\n\n update(): void {\n let index = 0;\n let particleCount = 0;\n const renderMode = this.settings.renderMode;\n const isMeshRender = renderMode === RenderMode.Mesh;\n const isStretchedRender = renderMode === RenderMode.StretchedBillBoard;\n\n const visibleSystems = this.getVisibleSystems();\n for (const system of visibleSystems) {\n particleCount += system.particleNum;\n }\n if (particleCount > this.maxParticles) {\n this.expandBuffers(particleCount);\n }\n\n for (const system of visibleSystems) {\n const particles = system.particles;\n const particleNum = system.particleNum;\n const rotation = this.quaternion2_;\n const translation = this.vector2_;\n const scale = this.vector3_;\n const systemWorldSpace = system.worldSpace;\n system.emitter.matrixWorld.decompose(translation, rotation, scale);\n this.rotationMat_.setFromMatrix4(system.emitter.matrixWorld);\n const absScaleX = Math.abs(scale.x);\n const absScaleY = Math.abs(scale.y);\n const absScaleZ = Math.abs(scale.z);\n\n for (let j = 0; j < particleNum; j++, index++) {\n const particle = particles[j] as SpriteParticle;\n\n if (isMeshRender) {\n let q: Quaternion;\n if (systemWorldSpace) {\n q = particle.rotation as Quaternion;\n } else {\n let parentQ: Quaternion;\n if (particle.parentMatrix) {\n parentQ = this.quaternion3_.setFromRotationMatrix(particle.parentMatrix);\n } else {\n parentQ = rotation;\n }\n q = this.quaternion_;\n q.copy(parentQ).multiply(particle.rotation as Quaternion);\n }\n const ri = index * 4;\n this.rotationBuffer[ri] = q.x;\n this.rotationBuffer[ri + 1] = q.y;\n this.rotationBuffer[ri + 2] = q.z;\n this.rotationBuffer[ri + 3] = q.w;\n } else {\n this.rotationBuffer[index] = particle.rotation as number;\n }\n\n let vec: Vector3;\n if (systemWorldSpace) {\n vec = particle.position;\n } else {\n vec = this.vector_;\n if (particle.parentMatrix) {\n vec.copy(particle.position).applyMatrix4(particle.parentMatrix);\n } else {\n vec.copy(particle.position).applyMatrix4(system.emitter.matrixWorld);\n }\n }\n\n const oi = index * 3;\n this.offsetBuffer[oi] = vec.x;\n this.offsetBuffer[oi + 1] = vec.y;\n this.offsetBuffer[oi + 2] = vec.z;\n\n const ci = index * 4;\n this.colorBuffer[ci] = particle.color.x;\n this.colorBuffer[ci + 1] = particle.color.y;\n this.colorBuffer[ci + 2] = particle.color.z;\n this.colorBuffer[ci + 3] = particle.color.w;\n\n const si = index * 3;\n if (systemWorldSpace) {\n this.sizeBuffer[si] = particle.size.x;\n this.sizeBuffer[si + 1] = particle.size.y;\n this.sizeBuffer[si + 2] = particle.size.z;\n } else {\n if (particle.parentMatrix) {\n this.sizeBuffer[si] = particle.size.x;\n this.sizeBuffer[si + 1] = particle.size.y;\n this.sizeBuffer[si + 2] = particle.size.z;\n } else {\n this.sizeBuffer[si] = particle.size.x * absScaleX;\n this.sizeBuffer[si + 1] = particle.size.y * absScaleY;\n this.sizeBuffer[si + 2] = particle.size.z * absScaleZ;\n }\n }\n\n this.uvTileBuffer[index] = particle.uvTile;\n\n if (isStretchedRender && this.velocityBuffer) {\n let speedFactor = (system.rendererEmitterSettings as StretchedBillBoardSettings).speedFactor;\n if (speedFactor === 0) speedFactor = 0.001;\n const lengthFactor = (system.rendererEmitterSettings as StretchedBillBoardSettings).lengthFactor;\n let vel: Vector3;\n if (systemWorldSpace) {\n vel = particle.velocity;\n } else {\n vel = this.vector_;\n if (particle.parentMatrix) {\n this.rotationMat2_.setFromMatrix4(particle.parentMatrix);\n vel.copy(particle.velocity).applyMatrix3(this.rotationMat2_);\n } else {\n vel.copy(particle.velocity).applyMatrix3(this.rotationMat_);\n }\n }\n const vi = index * 4;\n this.velocityBuffer[vi] = vel.x * speedFactor;\n this.velocityBuffer[vi + 1] = vel.y * speedFactor;\n this.velocityBuffer[vi + 2] = vel.z * speedFactor;\n this.velocityBuffer[vi + 3] = lengthFactor;\n }\n }\n }\n\n if (isStretchedRender && this.mesh.material instanceof ShaderMaterial && visibleSystems.length > 0) {\n const speedFactor = (visibleSystems[0].rendererEmitterSettings as StretchedBillBoardSettings).speedFactor ?? 1.0;\n const clampedSpeedFactor = speedFactor === 0 ? 0.001 : speedFactor;\n if (clampedSpeedFactor !== this.lastStretchedSpeedFactor) {\n this.mesh.material.setFloat('speedFactor', clampedSpeedFactor);\n this.lastStretchedSpeedFactor = clampedSpeedFactor;\n }\n }\n\n this.mesh.forcedInstanceCount = index;\n this.mesh.setEnabled(index > 0);\n\n if (index > 0) {\n this.offsetVB.update(this.offsetBuffer);\n this.sizeVB.update(this.sizeBuffer);\n this.colorVB.update(this.colorBuffer);\n this.uvTileVB.update(this.uvTileBuffer);\n this.rotationVB.update(this.rotationBuffer);\n if (isStretchedRender && this.velocityVB && this.velocityBuffer) {\n this.velocityVB.update(this.velocityBuffer);\n }\n }\n }\n\n dispose(): void {\n if (this.mesh.material) {\n this.mesh.material.dispose();\n }\n super.dispose();\n }\n}\n","import {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {VertexBuffer} from '@babylonjs/core/Buffers/buffer';\nimport {Effect} from '@babylonjs/core/Materials/effect';\nimport {ShaderMaterial} from '@babylonjs/core/Materials/shaderMaterial';\nimport {Scene} from '@babylonjs/core/scene';\nimport {BoundingInfo} from '@babylonjs/core/Culling/boundingInfo';\nimport {Vector3 as BVector3} from '@babylonjs/core/Maths/math.vector';\nimport {Vector2 as BVector2} from '@babylonjs/core/Maths/math.vector';\nimport {Constants} from '@babylonjs/core/Engines/constants';\nimport {Matrix4, Quaternion, RecordState, TrailParticle, Vector3} from 'quarks.core';\nimport {VFXBatch, RenderMode} from './VFXBatch';\nimport {VFXBatchSettings} from './BatchedRenderer';\nimport trail_vert from './shaders/trail_vert.glsl';\nimport trail_frag from './shaders/trail_frag.glsl';\n\nexport class TrailBatch extends VFXBatch {\n private positionBuffer!: Float32Array;\n private previousBuffer!: Float32Array;\n private nextBuffer!: Float32Array;\n private uvBuffer!: Float32Array;\n private sideBuffer!: Float32Array;\n private widthBuffer!: Float32Array;\n private colorBuffer!: Float32Array;\n private indexBuffer!: Uint32Array;\n private previousVB!: VertexBuffer;\n private nextVB!: VertexBuffer;\n private sideVB!: VertexBuffer;\n private widthVB!: VertexBuffer;\n\n private getTrailHistoryCount(particle: TrailParticle): number {\n const trailAny = particle as any;\n const fastHistoryCount = trailAny._trailHistoryCount;\n if (typeof fastHistoryCount === 'number') {\n return fastHistoryCount;\n }\n return particle.previous.length;\n }\n\n constructor(settings: VFXBatchSettings, scene: Scene) {\n super(settings, scene);\n this.maxParticles = 10000;\n this.setupBuffers();\n this.rebuildMaterial();\n this.mesh.setEnabled(false);\n }\n\n setupBuffers(): void {\n this.mesh.dispose();\n this.mesh = new Mesh('trailBatch', this.scene);\n this.mesh.alwaysSelectAsActiveMesh = true;\n this.buildGeometryBuffers();\n }\n\n private buildGeometryBuffers(): void {\n this.positionBuffer = new Float32Array(this.maxParticles * 6);\n this.previousBuffer = new Float32Array(this.maxParticles * 6);\n this.nextBuffer = new Float32Array(this.maxParticles * 6);\n this.uvBuffer = new Float32Array(this.maxParticles * 4);\n this.sideBuffer = new Float32Array(this.maxParticles * 2);\n this.widthBuffer = new Float32Array(this.maxParticles * 2);\n this.colorBuffer = new Float32Array(this.maxParticles * 8);\n this.indexBuffer = new Uint32Array(this.maxParticles * 6);\n\n // Initialize with full-capacity buffers (updatable) and a dummy triangle\n this.positionBuffer[0] = 0; this.positionBuffer[1] = 0; this.positionBuffer[2] = 0;\n this.positionBuffer[3] = 1; this.positionBuffer[4] = 0; this.positionBuffer[5] = 0;\n this.positionBuffer[6] = 0; this.positionBuffer[7] = 1; this.positionBuffer[8] = 0;\n this.positionBuffer[9] = 1; this.positionBuffer[10] = 1; this.positionBuffer[11] = 0;\n this.indexBuffer[0] = 0; this.indexBuffer[1] = 1; this.indexBuffer[2] = 2;\n this.indexBuffer[3] = 1; this.indexBuffer[4] = 3; this.indexBuffer[5] = 2;\n\n // Set standard vertex data with full buffer capacity (updatable)\n this.mesh.setVerticesData(VertexBuffer.PositionKind, this.positionBuffer, true);\n this.mesh.setVerticesData(VertexBuffer.UVKind, this.uvBuffer, true);\n this.mesh.setVerticesData(VertexBuffer.ColorKind, this.colorBuffer, true, 4);\n this.mesh.setIndices(this.indexBuffer.subarray(0, 6), null, true);\n const engine = this.scene.getEngine();\n this.previousVB = new VertexBuffer(engine, this.previousBuffer, 'previous', true, false, 3, false);\n this.nextVB = new VertexBuffer(engine, this.nextBuffer, 'next', true, false, 3, false);\n this.sideVB = new VertexBuffer(engine, this.sideBuffer, 'side', true, false, 1, false);\n this.widthVB = new VertexBuffer(engine, this.widthBuffer, 'width', true, false, 1, false);\n this.mesh.setVerticesBuffer(this.previousVB);\n this.mesh.setVerticesBuffer(this.nextVB);\n this.mesh.setVerticesBuffer(this.sideVB);\n this.mesh.setVerticesBuffer(this.widthVB);\n\n // Disable bounding info recomputation\n this.mesh.doNotSyncBoundingInfo = true;\n const min = new BVector3(-10000, -10000, -10000);\n const max = new BVector3(10000, 10000, 10000);\n this.mesh.setBoundingInfo(new BoundingInfo(min, max));\n if (this.mesh.subMeshes) {\n for (const sub of this.mesh.subMeshes) {\n (sub as any)._boundingInfo = this.mesh.getBoundingInfo();\n }\n }\n }\n\n expandBuffers(target: number): void {\n while (target >= this.maxParticles) {\n this.maxParticles *= 2;\n }\n this.buildGeometryBuffers();\n }\n\n rebuildMaterial(): void {\n const shaderName = `quarksTrail_${Date.now()}`;\n const defines: string[] = [];\n\n if (this.settings.texture) {\n defines.push('USE_MAP');\n }\n\n Effect.ShadersStore[shaderName + 'VertexShader'] = trail_vert;\n Effect.ShadersStore[shaderName + 'FragmentShader'] = trail_frag;\n\n const attributes = ['position', 'previous', 'next', 'side', 'width', 'uv', 'color'];\n const uniforms = ['world', 'view', 'projection', 'worldViewProjection', 'lineWidth', 'resolution', 'sizeAttenuation'];\n const samplers: string[] = [];\n\n if (this.settings.texture) {\n samplers.push('map');\n }\n\n const mat = new ShaderMaterial(shaderName, this.scene,\n {vertex: shaderName, fragment: shaderName},\n {\n attributes,\n uniforms,\n samplers,\n defines,\n needAlphaBlending: this.settings.materialTransparent,\n }\n );\n\n if (this.settings.texture) {\n mat.setTexture('map', this.settings.texture);\n }\n const engine = this.scene.getEngine();\n mat.setFloat('lineWidth', 1);\n mat.setVector2('resolution', new BVector2(engine.getRenderWidth(), engine.getRenderHeight()));\n mat.setFloat('sizeAttenuation', 1);\n mat.onBindObservable.add(() => {\n const renderEngine = this.scene.getEngine();\n mat.setVector2('resolution', new BVector2(renderEngine.getRenderWidth(), renderEngine.getRenderHeight()));\n });\n\n mat.backFaceCulling = false;\n\n if (this.settings.materialTransparent) {\n mat.alphaMode = this.settings.materialBlendMode;\n } else {\n mat.alphaMode = Constants.ALPHA_DISABLE;\n }\n mat.needDepthPrePass = this.settings.materialDepthWrite;\n mat.forceDepthWrite = this.settings.materialDepthWrite;\n mat.disableDepthWrite = !this.settings.materialDepthWrite;\n\n this.mesh.material = mat;\n }\n\n private vector_ = new Vector3();\n private vector2_ = new Vector3();\n private vector3_ = new Vector3();\n private quaternion_ = new Quaternion();\n\n update(): void {\n let index = 0;\n let triangles = 0;\n\n let particleCount = 0;\n const visibleSystems = this.getVisibleSystems();\n for (const system of visibleSystems) {\n for (let j = 0; j < system.particleNum; j++) {\n particleCount += this.getTrailHistoryCount(system.particles[j] as TrailParticle) * 2;\n }\n }\n if (particleCount > this.maxParticles) {\n this.expandBuffers(particleCount);\n }\n\n for (const system of visibleSystems) {\n // Ensure world matrix is up to date\n if ((system.emitter as any).computeWorldMatrix) {\n (system.emitter as any).computeWorldMatrix(true);\n }\n const rotation = this.quaternion_;\n const translation = this.vector2_;\n const scale = this.vector3_;\n system.emitter.matrixWorld.decompose(translation, rotation, scale);\n\n const particles = system.particles;\n const particleNum = system.particleNum;\n const uTileCount = this.settings.uTileCount;\n const vTileCount = this.settings.vTileCount;\n const tileWidth = 1 / uTileCount;\n const tileHeight = 1 / vTileCount;\n const systemWorldSpace = system.worldSpace;\n const objectScale = (Math.abs(scale.x) + Math.abs(scale.y) + Math.abs(scale.z)) / 3;\n\n for (let j = 0; j < particleNum; j++) {\n const particle = particles[j] as TrailParticle;\n const particleAny = particle as any;\n const fastHistoryCount = particleAny._trailHistoryCount as number | undefined;\n const fastHistoryCapacity = particleAny._trailHistoryCapacity as number | undefined;\n const fastHistoryHead = particleAny._trailHistoryHead as number | undefined;\n const fastHistoryPositions = particleAny._trailHistoryPositions as Float32Array | undefined;\n const fastHistorySizes = particleAny._trailHistorySizes as Float32Array | undefined;\n const fastHistoryColors = particleAny._trailHistoryColors as Float32Array | undefined;\n const hasFastHistory =\n typeof fastHistoryCount === 'number' &&\n fastHistoryCount > 0 &&\n typeof fastHistoryCapacity === 'number' &&\n typeof fastHistoryHead === 'number' &&\n fastHistoryPositions instanceof Float32Array &&\n fastHistorySizes instanceof Float32Array &&\n fastHistoryColors instanceof Float32Array;\n const historyCapacity = hasFastHistory ? (fastHistoryCapacity as number) : 0;\n const historyHead = hasFastHistory ? (fastHistoryHead as number) : 0;\n const historyPositions = fastHistoryPositions as Float32Array;\n const historySizes = fastHistorySizes as Float32Array;\n const historyColors = fastHistoryColors as Float32Array;\n const particleHistory = particle.previous;\n const particleHistoryLength = hasFastHistory ? fastHistoryCount : particleHistory.length;\n if (particleHistoryLength === 0) {\n continue;\n }\n const col = particle.uvTile % vTileCount;\n const row = Math.floor(particle.uvTile / vTileCount + 0.001);\n const particleMatrix = particle.parentMatrix as unknown as Matrix4 | undefined;\n const matrixToUse = particleMatrix ?? system.emitter.matrixWorld;\n\n let previousNode = particleHistory.head;\n let currentNode = previousNode;\n let nextNode = currentNode?.next ?? currentNode;\n const oldestFastHistoryIndex = hasFastHistory\n ? (historyHead - particleHistoryLength + historyCapacity) % historyCapacity\n : 0;\n\n for (let i = 0; i < particleHistoryLength; i++, index += 2) {\n let currentX: number;\n let currentY: number;\n let currentZ: number;\n let currentSize: number;\n let currentColorX: number;\n let currentColorY: number;\n let currentColorZ: number;\n let currentColorW: number;\n let previousX: number;\n let previousY: number;\n let previousZ: number;\n let nextX: number;\n let nextY: number;\n let nextZ: number;\n\n if (hasFastHistory) {\n const currentHistoryIndex = (oldestFastHistoryIndex + i) % historyCapacity;\n const previousHistoryIndex = i === 0 ? currentHistoryIndex : (oldestFastHistoryIndex + i - 1) % historyCapacity;\n const nextHistoryIndex =\n i + 1 < particleHistoryLength\n ? (oldestFastHistoryIndex + i + 1) % historyCapacity\n : currentHistoryIndex;\n\n const currentPosIndex = currentHistoryIndex * 3;\n const previousPosIndex = previousHistoryIndex * 3;\n const nextPosIndex = nextHistoryIndex * 3;\n\n currentX = historyPositions[currentPosIndex];\n currentY = historyPositions[currentPosIndex + 1];\n currentZ = historyPositions[currentPosIndex + 2];\n previousX = historyPositions[previousPosIndex];\n previousY = historyPositions[previousPosIndex + 1];\n previousZ = historyPositions[previousPosIndex + 2];\n nextX = historyPositions[nextPosIndex];\n nextY = historyPositions[nextPosIndex + 1];\n nextZ = historyPositions[nextPosIndex + 2];\n\n currentSize = historySizes[currentHistoryIndex];\n const currentColorIndex = currentHistoryIndex * 4;\n currentColorX = historyColors[currentColorIndex];\n currentColorY = historyColors[currentColorIndex + 1];\n currentColorZ = historyColors[currentColorIndex + 2];\n currentColorW = historyColors[currentColorIndex + 3];\n } else {\n const previous = previousNode!.data as RecordState;\n const current = currentNode!.data as RecordState;\n const next = nextNode!.data as RecordState;\n currentX = current.position.x;\n currentY = current.position.y;\n currentZ = current.position.z;\n previousX = previous.position.x;\n previousY = previous.position.y;\n previousZ = previous.position.z;\n nextX = next.position.x;\n nextY = next.position.y;\n nextZ = next.position.z;\n currentSize = current.size;\n currentColorX = current.color.x;\n currentColorY = current.color.y;\n currentColorZ = current.color.z;\n currentColorW = current.color.w;\n }\n\n if (!systemWorldSpace) {\n this.vector_.set(currentX, currentY, currentZ).applyMatrix4(matrixToUse);\n currentX = this.vector_.x;\n currentY = this.vector_.y;\n currentZ = this.vector_.z;\n this.vector_.set(previousX, previousY, previousZ).applyMatrix4(matrixToUse);\n previousX = this.vector_.x;\n previousY = this.vector_.y;\n previousZ = this.vector_.z;\n this.vector_.set(nextX, nextY, nextZ).applyMatrix4(matrixToUse);\n nextX = this.vector_.x;\n nextY = this.vector_.y;\n nextZ = this.vector_.z;\n }\n\n const pi = index * 3;\n this.positionBuffer[pi] = currentX;\n this.positionBuffer[pi + 1] = currentY;\n this.positionBuffer[pi + 2] = currentZ;\n this.positionBuffer[pi + 3] = currentX;\n this.positionBuffer[pi + 4] = currentY;\n this.positionBuffer[pi + 5] = currentZ;\n\n this.previousBuffer[pi] = previousX;\n this.previousBuffer[pi + 1] = previousY;\n this.previousBuffer[pi + 2] = previousZ;\n this.previousBuffer[pi + 3] = previousX;\n this.previousBuffer[pi + 4] = previousY;\n this.previousBuffer[pi + 5] = previousZ;\n\n this.nextBuffer[pi] = nextX;\n this.nextBuffer[pi + 1] = nextY;\n this.nextBuffer[pi + 2] = nextZ;\n this.nextBuffer[pi + 3] = nextX;\n this.nextBuffer[pi + 4] = nextY;\n this.nextBuffer[pi + 5] = nextZ;\n\n this.sideBuffer[index] = 1;\n this.sideBuffer[index + 1] = -1;\n\n if (systemWorldSpace || particle.parentMatrix) {\n this.widthBuffer[index] = currentSize;\n this.widthBuffer[index + 1] = currentSize;\n } else {\n this.widthBuffer[index] = currentSize * objectScale;\n this.widthBuffer[index + 1] = currentSize * objectScale;\n }\n\n const ui = index * 2;\n this.uvBuffer[ui] = (i / particleHistoryLength + col) * tileWidth;\n this.uvBuffer[ui + 1] = (vTileCount - row - 1) * tileHeight;\n this.uvBuffer[ui + 2] = (i / particleHistoryLength + col) * tileWidth;\n this.uvBuffer[ui + 3] = (vTileCount - row) * tileHeight;\n\n const cci = index * 4;\n this.colorBuffer[cci] = currentColorX;\n this.colorBuffer[cci + 1] = currentColorY;\n this.colorBuffer[cci + 2] = currentColorZ;\n this.colorBuffer[cci + 3] = currentColorW;\n this.colorBuffer[cci + 4] = currentColorX;\n this.colorBuffer[cci + 5] = currentColorY;\n this.colorBuffer[cci + 6] = currentColorZ;\n this.colorBuffer[cci + 7] = currentColorW;\n\n if (i + 1 < particleHistoryLength) {\n this.indexBuffer[triangles * 3] = index;\n this.indexBuffer[triangles * 3 + 1] = index + 1;\n this.indexBuffer[triangles * 3 + 2] = index + 2;\n triangles++;\n this.indexBuffer[triangles * 3] = index + 2;\n this.indexBuffer[triangles * 3 + 1] = index + 1;\n this.indexBuffer[triangles * 3 + 2] = index + 3;\n triangles++;\n }\n\n if (!hasFastHistory) {\n previousNode = currentNode;\n currentNode = nextNode;\n nextNode = nextNode?.next ?? nextNode;\n }\n }\n }\n }\n\n if (index > 0 && triangles > 0) {\n this.mesh.updateVerticesData(VertexBuffer.PositionKind, this.positionBuffer);\n this.mesh.updateVerticesData(VertexBuffer.UVKind, this.uvBuffer);\n this.mesh.updateIndices(this.indexBuffer.subarray(0, triangles * 3));\n this.previousVB.update(this.previousBuffer);\n this.nextVB.update(this.nextBuffer);\n this.sideVB.update(this.sideBuffer);\n this.widthVB.update(this.widthBuffer);\n\n const colorVB = this.mesh.getVertexBuffer(VertexBuffer.ColorKind);\n if (colorVB) colorVB.update(this.colorBuffer);\n\n this.mesh.setEnabled(true);\n if (this.mesh.subMeshes && this.mesh.subMeshes.length > 0) {\n const meshBoundingInfo = this.mesh.getBoundingInfo();\n for (const subMesh of this.mesh.subMeshes) {\n (subMesh as any)._boundingInfo = meshBoundingInfo;\n }\n this.mesh.subMeshes[0].indexCount = triangles * 3;\n this.mesh.subMeshes[0].verticesCount = index;\n }\n } else {\n this.mesh.setEnabled(false);\n }\n }\n\n dispose(): void {\n if (this.mesh.material) {\n this.mesh.material.dispose();\n }\n super.dispose();\n }\n}\n","import {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {Scene} from '@babylonjs/core/scene';\nimport {Texture} from '@babylonjs/core/Materials/Textures/texture';\nimport {BaseTexture} from '@babylonjs/core/Materials/Textures/baseTexture';\nimport {IParticleSystem} from 'quarks.core';\nimport {VFXBatch, RenderMode, StoredBatchSettings} from './VFXBatch';\nimport {SpriteBatch} from './SpriteBatch';\nimport {TrailBatch} from './TrailBatch';\nimport {ParticleSystem} from './ParticleSystem';\n\nexport interface VFXBatchSettings {\n instancingGeometry: Float32Array;\n instancingIndices: Uint32Array | Uint16Array;\n instancingUVs?: Float32Array;\n instancingNormals?: Float32Array;\n renderMode: RenderMode;\n renderOrder: number;\n uTileCount: number;\n vTileCount: number;\n blendTiles: boolean;\n softParticles: boolean;\n softNearFade: number;\n softFarFade: number;\n materialBlendMode: number;\n materialTransparent: boolean;\n materialDepthTest: boolean;\n materialDepthWrite: boolean;\n materialAlphaTest: number;\n texture: Texture | null;\n layerMask: number;\n}\n\nexport interface AdaptivePerformanceOptions {\n targetFrameMs: number;\n minQuality: number;\n maxQuality: number;\n decreaseStep: number;\n increaseStep: number;\n}\n\nexport interface AdaptivePerformanceState extends AdaptivePerformanceOptions {\n enabled: boolean;\n currentQuality: number;\n lastFrameCpuMs: number;\n}\n\nexport class BatchedRenderer extends TransformNode {\n batches: Array<VFXBatch> = [];\n systemToBatchIndex: Map<IParticleSystem, number> = new Map<IParticleSystem, number>();\n depthTexture: BaseTexture | null = null;\n private adaptivePerformanceState: AdaptivePerformanceState = {\n enabled: false,\n targetFrameMs: 16.7,\n minQuality: 0.35,\n maxQuality: 1,\n decreaseStep: 0.08,\n increaseStep: 0.02,\n currentQuality: 1,\n lastFrameCpuMs: 0,\n };\n private lastAppliedQuality = Number.NaN;\n\n constructor(name: string, scene: Scene) {\n super(name, scene);\n }\n\n private static clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n }\n\n private static equals(a: StoredBatchSettings, b: VFXBatchSettings): boolean {\n return (\n a.materialBlendMode === b.materialBlendMode &&\n a.materialTransparent === b.materialTransparent &&\n a.materialDepthTest === b.materialDepthTest &&\n a.materialDepthWrite === b.materialDepthWrite &&\n a.materialAlphaTest === b.materialAlphaTest &&\n a.texture === b.texture &&\n a.renderMode === b.renderMode &&\n a.blendTiles === b.blendTiles &&\n a.softParticles === b.softParticles &&\n a.softFarFade === b.softFarFade &&\n a.softNearFade === b.softNearFade &&\n a.uTileCount === b.uTileCount &&\n a.vTileCount === b.vTileCount &&\n a.instancingGeometry === b.instancingGeometry &&\n a.renderOrder === b.renderOrder &&\n a.layerMask === b.layerMask\n );\n }\n\n addSystem(system: IParticleSystem) {\n const particleSystem = system as ParticleSystem;\n particleSystem._renderer = this;\n if (this.adaptivePerformanceState.enabled) {\n particleSystem.setQualityFactor(this.adaptivePerformanceState.currentQuality);\n }\n const settings = particleSystem.getRendererSettings();\n for (let i = 0; i < this.batches.length; i++) {\n if (BatchedRenderer.equals(this.batches[i].settings, settings)) {\n this.batches[i].addSystem(system);\n this.systemToBatchIndex.set(system, i);\n return;\n }\n }\n let batch: VFXBatch;\n const scene = this.getScene();\n switch (settings.renderMode) {\n case RenderMode.Trail:\n batch = new TrailBatch(settings, scene);\n break;\n case RenderMode.Mesh:\n case RenderMode.BillBoard:\n case RenderMode.VerticalBillBoard:\n case RenderMode.HorizontalBillBoard:\n case RenderMode.StretchedBillBoard:\n batch = new SpriteBatch(settings, scene);\n break;\n default:\n throw new Error(`Unsupported render mode: ${settings.renderMode}`);\n }\n batch.mesh.parent = this;\n if (this.depthTexture) {\n batch.applyDepthTexture(this.depthTexture);\n }\n batch.addSystem(system);\n this.batches.push(batch);\n this.systemToBatchIndex.set(system, this.batches.length - 1);\n }\n\n deleteSystem(system: IParticleSystem) {\n const batchIndex = this.systemToBatchIndex.get(system);\n if (batchIndex !== undefined) {\n this.batches[batchIndex].removeSystem(system);\n this.systemToBatchIndex.delete(system);\n }\n }\n\n updateSystem(system: IParticleSystem) {\n this.deleteSystem(system);\n this.addSystem(system);\n }\n\n setDepthTexture(depthTexture: BaseTexture | null) {\n this.depthTexture = depthTexture;\n for (const batch of this.batches) {\n batch.applyDepthTexture(depthTexture);\n }\n }\n\n configureAdaptivePerformance(options: Partial<AdaptivePerformanceOptions> = {}) {\n const state = this.adaptivePerformanceState;\n const minQuality = BatchedRenderer.clamp(options.minQuality ?? state.minQuality, 0.05, 1);\n const maxQuality = BatchedRenderer.clamp(options.maxQuality ?? state.maxQuality, minQuality, 1);\n state.targetFrameMs = Math.max(options.targetFrameMs ?? state.targetFrameMs, 0.1);\n state.minQuality = minQuality;\n state.maxQuality = maxQuality;\n state.decreaseStep = Math.max(options.decreaseStep ?? state.decreaseStep, 0.001);\n state.increaseStep = Math.max(options.increaseStep ?? state.increaseStep, 0.001);\n state.currentQuality = BatchedRenderer.clamp(state.currentQuality, state.minQuality, state.maxQuality);\n state.enabled = true;\n this.lastAppliedQuality = Number.NaN;\n }\n\n disableAdaptivePerformance(resetQuality = true) {\n this.adaptivePerformanceState.enabled = false;\n if (resetQuality) {\n this.adaptivePerformanceState.currentQuality = this.adaptivePerformanceState.maxQuality;\n this.applyAdaptiveQuality();\n }\n }\n\n getAdaptivePerformanceState(): AdaptivePerformanceState {\n return {...this.adaptivePerformanceState};\n }\n\n private applyAdaptiveQuality() {\n const quality = this.adaptivePerformanceState.currentQuality;\n if (quality === this.lastAppliedQuality) {\n return;\n }\n for (const ps of this.systemToBatchIndex.keys()) {\n (ps as ParticleSystem).setQualityFactor(quality);\n }\n this.lastAppliedQuality = quality;\n }\n\n update(delta: number) {\n const adaptiveState = this.adaptivePerformanceState;\n const frameStart = adaptiveState.enabled ? performance.now() : 0;\n if (adaptiveState.enabled) {\n this.applyAdaptiveQuality();\n }\n for (const ps of this.systemToBatchIndex.keys()) {\n (ps as ParticleSystem).update(delta);\n }\n for (let i = 0; i < this.batches.length; i++) {\n this.batches[i].update();\n }\n if (!adaptiveState.enabled) {\n return;\n }\n\n adaptiveState.lastFrameCpuMs = performance.now() - frameStart;\n if (adaptiveState.lastFrameCpuMs > adaptiveState.targetFrameMs) {\n adaptiveState.currentQuality = BatchedRenderer.clamp(\n adaptiveState.currentQuality - adaptiveState.decreaseStep,\n adaptiveState.minQuality,\n adaptiveState.maxQuality\n );\n } else {\n adaptiveState.currentQuality = BatchedRenderer.clamp(\n adaptiveState.currentQuality + adaptiveState.increaseStep,\n adaptiveState.minQuality,\n adaptiveState.maxQuality\n );\n }\n }\n\n dispose(): void {\n for (const batch of this.batches) {\n batch.dispose();\n }\n this.batches = [];\n this.systemToBatchIndex.clear();\n super.dispose();\n }\n}\n","import {BatchedRenderer} from './BatchedRenderer';\n\nexport const BatchedParticleRenderer = BatchedRenderer;\n","import {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {Scene} from '@babylonjs/core/scene';\nimport {Matrix4, IParticleSystem, SerializationOptions} from 'quarks.core';\n\nexport class ParticleEmitter extends TransformNode {\n system: IParticleSystem;\n private _matrixWorld: Matrix4 = new Matrix4();\n\n get matrixWorld(): Matrix4 {\n const m = this.getWorldMatrix();\n const e = this._matrixWorld.elements;\n e[0] = m.m[0]; e[1] = m.m[1]; e[2] = m.m[2]; e[3] = m.m[3];\n e[4] = m.m[4]; e[5] = m.m[5]; e[6] = m.m[6]; e[7] = m.m[7];\n e[8] = m.m[8]; e[9] = m.m[9]; e[10] = m.m[10]; e[11] = m.m[11];\n e[12] = m.m[12]; e[13] = m.m[13]; e[14] = m.m[14]; e[15] = m.m[15];\n return this._matrixWorld;\n }\n\n get visible(): boolean {\n return this.isEnabled();\n }\n\n set visible(value: boolean) {\n this.setEnabled(value);\n }\n\n get uuid(): string {\n return this.uniqueId.toString();\n }\n\n constructor(system: IParticleSystem, scene?: Scene) {\n super('particleEmitter', scene || undefined);\n this.system = system;\n }\n\n dispose(): void {\n super.dispose();\n }\n\n extractFromCache(cache: any): any[] {\n const values: any[] = [];\n for (const key in cache) {\n const data = cache[key];\n if (data && typeof data === 'object') {\n delete data.metadata;\n }\n values.push(data);\n }\n return values;\n }\n\n clone(name?: string): ParticleEmitter {\n const clonedSystem = this.system.clone();\n const clonedEmitter = clonedSystem.emitter as ParticleEmitter;\n clonedEmitter.name = name ?? this.name;\n clonedEmitter.position.copyFrom(this.position);\n clonedEmitter.rotation.copyFrom(this.rotation);\n clonedEmitter.scaling.copyFrom(this.scaling);\n if (this.rotationQuaternion) {\n clonedEmitter.rotationQuaternion = this.rotationQuaternion.clone();\n }\n clonedEmitter.setEnabled(this.isEnabled());\n return clonedEmitter;\n }\n\n toJSON(meta?: any, options: SerializationOptions = {}): any {\n return {\n uuid: (this as any)._quarksUUID ?? this.uniqueId.toString(),\n type: 'ParticleEmitter',\n name: this.name,\n position: [this.position.x, this.position.y, this.position.z],\n rotation: [this.rotation.x, this.rotation.y, this.rotation.z],\n quaternion: this.rotationQuaternion\n ? [\n this.rotationQuaternion.x,\n this.rotationQuaternion.y,\n this.rotationQuaternion.z,\n this.rotationQuaternion.w,\n ]\n : undefined,\n scale: [this.scaling.x, this.scaling.y, this.scaling.z],\n visible: this.isEnabled(),\n ps: this.system.toJSON(meta, options),\n };\n }\n}\n","/** Sequential 0..N-1 indices for non-indexed triangle-list BufferGeometry (Three.js drawArrays). */\nexport function ensureTriangleIndices(\n positions: Float32Array,\n indices?: Uint32Array | Uint16Array\n): Uint32Array | Uint16Array {\n if (indices && indices.length > 0) {\n return indices;\n }\n const vertexCount = positions.length / 3;\n const out = new Uint32Array(vertexCount);\n for (let i = 0; i < vertexCount; i++) {\n out[i] = i;\n }\n return out;\n}\n","import {Scene} from '@babylonjs/core/scene';\nimport {Texture} from '@babylonjs/core/Materials/Textures/texture';\nimport {Constants} from '@babylonjs/core/Engines/constants';\nimport {\n AxisAngleGenerator,\n ColorGenerator,\n ColorGeneratorFromJSON,\n ConstantColor,\n ConstantValue,\n FunctionColorGenerator,\n FunctionJSON,\n FunctionValueGenerator,\n GeneratorFromJSON,\n ValueGenerator,\n ValueGeneratorFromJSON,\n Behavior,\n BehaviorFromJSON,\n Particle,\n SpriteParticle,\n TrailParticle,\n EmitterFromJSON,\n EmitterShape,\n SphereEmitter,\n RendererEmitterSettings,\n RotationGenerator,\n IParticleSystem,\n EmissionState,\n GeneratorMemory,\n TrailSettings,\n StretchedBillBoardSettings,\n SerializationOptions,\n Vector3,\n Vector4,\n Matrix3,\n Matrix4,\n Quaternion,\n Vector3Generator,\n ParticleSystemEvent,\n ParticleSystemEventType,\n} from 'quarks.core';\nimport {ParticleEmitter} from './ParticleEmitter';\nimport {RenderMode} from './VFXBatch';\nimport {BatchedRenderer, VFXBatchSettings} from './BatchedRenderer';\nimport {ensureTriangleIndices} from './geometryUtil';\n\nexport interface BurstParameters {\n time: number;\n count: ValueGenerator | FunctionValueGenerator;\n cycle: number;\n interval: number;\n probability: number;\n}\n\nconst UP = new Vector3(0, 0, 1);\nconst tempQ = new Quaternion();\nconst tempV = new Vector3();\nconst tempV2 = new Vector3();\nconst PREWARM_FPS = 60;\n\nconst DEFAULT_POSITIONS = new Float32Array([\n -0.5, -0.5, 0,\n 0.5, -0.5, 0,\n 0.5, 0.5, 0,\n -0.5, 0.5, 0,\n]);\nconst DEFAULT_UVS = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);\nconst DEFAULT_INDICES = new Uint32Array([0, 1, 2, 0, 2, 3]);\n\nexport interface ParticleSystemParameters {\n autoDestroy?: boolean;\n looping?: boolean;\n prewarm?: boolean;\n duration?: number;\n startDelay?: ValueGenerator | FunctionValueGenerator;\n shape?: EmitterShape;\n startLife?: ValueGenerator | FunctionValueGenerator;\n startSpeed?: ValueGenerator | FunctionValueGenerator;\n startRotation?: ValueGenerator | FunctionValueGenerator | RotationGenerator;\n startSize?: ValueGenerator | FunctionValueGenerator | Vector3Generator;\n startLength?: ValueGenerator | FunctionValueGenerator;\n startColor?: ColorGenerator | FunctionColorGenerator;\n emissionOverTime?: ValueGenerator | FunctionValueGenerator;\n emissionOverDistance?: ValueGenerator | FunctionValueGenerator;\n emissionBursts?: Array<BurstParameters>;\n onlyUsedByOther?: boolean;\n behaviors?: Array<Behavior>;\n instancingGeometry?: Float32Array;\n instancingIndices?: Uint32Array | Uint16Array;\n instancingUVs?: Float32Array;\n instancingNormals?: Float32Array;\n renderMode?: RenderMode;\n rendererEmitterSettings?: RendererEmitterSettings;\n speedFactor?: number;\n material?: any;\n texture?: Texture | null;\n startTileIndex?: ValueGenerator;\n uTileCount?: number;\n vTileCount?: number;\n blendTiles?: boolean;\n softParticles?: boolean;\n softFarFade?: number;\n softNearFade?: number;\n renderOrder?: number;\n worldSpace?: boolean;\n blendMode?: number;\n transparent?: boolean;\n depthTest?: boolean;\n depthWrite?: boolean;\n alphaTest?: number;\n layerMask?: number;\n scene?: Scene;\n}\n\nexport interface BurstParametersJSON {\n time: number;\n count: FunctionJSON | number;\n cycle: number;\n interval: number;\n probability: number;\n}\n\nexport interface ParticleSystemJSONParameters {\n version: string;\n autoDestroy: boolean;\n looping: boolean;\n prewarm: boolean;\n duration: number;\n startDelay?: FunctionJSON;\n shape: any;\n startLife: FunctionJSON;\n startSpeed: FunctionJSON;\n startRotation: FunctionJSON;\n startSize: FunctionJSON;\n startColor: FunctionJSON;\n emissionOverTime: FunctionJSON;\n emissionOverDistance: FunctionJSON;\n emissionBursts?: Array<BurstParametersJSON>;\n onlyUsedByOther: boolean;\n rendererEmitterSettings: RendererEmitterSettings;\n instancingGeometry?: any;\n renderMode: number;\n renderOrder?: number;\n speedFactor?: number;\n texture?: string;\n material?: string;\n layers?: number;\n startTileIndex: FunctionJSON | number;\n uTileCount: number;\n vTileCount: number;\n blendTiles?: boolean;\n softParticles?: boolean;\n softFarFade?: number;\n softNearFade?: number;\n blending?: number;\n transparent?: boolean;\n depthTest?: boolean;\n depthWrite?: boolean;\n alphaTest?: number;\n behaviors: Array<any>;\n worldSpace: boolean;\n}\n\nexport interface BabylonMetaData {\n textures: {[uuid: string]: Texture | null};\n materials: {[uuid: string]: any};\n geometries: {[uuid: string]: any};\n images?: {[uuid: string]: any};\n shapes?: {[uuid: string]: any};\n skeletons?: {[uuid: string]: any};\n animations?: {[uuid: string]: any};\n nodes?: {[uuid: string]: any};\n}\n\nexport class ParticleSystem implements IParticleSystem {\n private static serializationCounter = 0;\n\n autoDestroy: boolean;\n prewarm: boolean;\n looping: boolean;\n duration: number;\n startDelay: ValueGenerator | FunctionValueGenerator;\n startLife: ValueGenerator | FunctionValueGenerator;\n startSpeed: ValueGenerator | FunctionValueGenerator;\n startRotation: ValueGenerator | FunctionValueGenerator | RotationGenerator;\n startSize: ValueGenerator | FunctionValueGenerator | Vector3Generator;\n startColor: ColorGenerator | FunctionColorGenerator;\n startTileIndex: ValueGenerator;\n rendererEmitterSettings: RendererEmitterSettings;\n emissionOverTime: ValueGenerator | FunctionValueGenerator;\n emissionOverDistance: ValueGenerator | FunctionValueGenerator;\n emissionBursts: Array<BurstParameters>;\n onlyUsedByOther: boolean;\n worldSpace: boolean;\n particleNum: number;\n paused: boolean;\n particles: Array<Particle>;\n emitterShape: EmitterShape;\n emitter: ParticleEmitter;\n rendererSettings: VFXBatchSettings;\n neededToUpdateRender: boolean;\n behaviors: Array<Behavior>;\n emissionState: EmissionState;\n emitterVelocity: Vector3 = new Vector3();\n\n private prewarmed: boolean;\n private emitEnded: boolean;\n private markForDestroy: boolean;\n private startDelayTimeLeft = 0;\n private previousEmitterPos?: Vector3;\n private tempEmitterPos: Vector3 = new Vector3();\n private temp: Vector3 = new Vector3();\n private normalMatrix: Matrix3 = new Matrix3();\n private memory: GeneratorMemory = [];\n private listeners: {[event: string]: Array<(event: ParticleSystemEvent) => void>} = {};\n private readonly layerMaskProxy: {mask: number};\n private materialRef: any = null;\n private qualityFactor = 1;\n private useFastTrailHistory = true;\n /** @internal **/\n _renderer?: BatchedRenderer;\n\n set time(time: number) {\n this.emissionState.time = time;\n }\n\n get time(): number {\n return this.emissionState.time;\n }\n\n get layers() {\n return this.layerMaskProxy;\n }\n\n get texture() {\n return this.rendererSettings.texture;\n }\n\n set texture(texture: Texture | null) {\n this.rendererSettings.texture = texture;\n this.neededToUpdateRender = true;\n }\n\n get material() {\n return this.materialRef;\n }\n\n set material(material: any) {\n this.materialRef = material;\n this.applyMaterialSettings(material);\n }\n\n get uTileCount() {\n return this.rendererSettings.uTileCount;\n }\n\n set uTileCount(u: number) {\n this.rendererSettings.uTileCount = u;\n this.neededToUpdateRender = true;\n }\n\n get vTileCount() {\n return this.rendererSettings.vTileCount;\n }\n\n set vTileCount(v: number) {\n this.rendererSettings.vTileCount = v;\n this.neededToUpdateRender = true;\n }\n\n get blendTiles() {\n return this.rendererSettings.blendTiles;\n }\n\n set blendTiles(v: boolean) {\n this.rendererSettings.blendTiles = v;\n this.neededToUpdateRender = true;\n }\n\n get softParticles() {\n return this.rendererSettings.softParticles;\n }\n\n set softParticles(v: boolean) {\n this.rendererSettings.softParticles = v;\n this.neededToUpdateRender = true;\n }\n\n get softNearFade() {\n return this.rendererSettings.softNearFade;\n }\n\n set softNearFade(v: number) {\n this.rendererSettings.softNearFade = v;\n this.neededToUpdateRender = true;\n }\n\n get softFarFade() {\n return this.rendererSettings.softFarFade;\n }\n\n set softFarFade(v: number) {\n this.rendererSettings.softFarFade = v;\n this.neededToUpdateRender = true;\n }\n\n get instancingGeometry(): Float32Array {\n return this.rendererSettings.instancingGeometry;\n }\n\n set instancingGeometry(geometry: Float32Array) {\n this.restart();\n this.particles.length = 0;\n this.rendererSettings.instancingGeometry = geometry;\n this.neededToUpdateRender = true;\n }\n\n get blending() {\n return this.rendererSettings.materialBlendMode;\n }\n\n set blending(blending: number) {\n this.rendererSettings.materialBlendMode = blending;\n this.neededToUpdateRender = true;\n }\n\n get renderMode(): RenderMode {\n return this.rendererSettings.renderMode;\n }\n\n set renderMode(renderMode: RenderMode) {\n if (this.rendererSettings.renderMode !== renderMode) {\n let needRestart = false;\n if (this.rendererSettings.renderMode === RenderMode.Trail) {\n needRestart = true;\n }\n if (this.rendererSettings.renderMode === RenderMode.Mesh) {\n this.startRotation = new ConstantValue(0);\n }\n switch (renderMode) {\n case RenderMode.Trail:\n this.rendererEmitterSettings = {startLength: new ConstantValue(30), followLocalOrigin: false};\n needRestart = true;\n break;\n case RenderMode.Mesh:\n this.rendererEmitterSettings = {};\n this.startRotation = new AxisAngleGenerator(new Vector3(0, 1, 0), new ConstantValue(0));\n break;\n case RenderMode.StretchedBillBoard:\n this.rendererEmitterSettings = {speedFactor: 0, lengthFactor: 2};\n break;\n case RenderMode.BillBoard:\n case RenderMode.VerticalBillBoard:\n case RenderMode.HorizontalBillBoard:\n this.rendererEmitterSettings = {};\n break;\n }\n this.rendererSettings.renderMode = renderMode;\n if (needRestart) {\n this.restart();\n this.particles.length = 0;\n }\n this.neededToUpdateRender = true;\n }\n }\n\n get renderOrder(): number {\n return this.rendererSettings.renderOrder;\n }\n\n set renderOrder(renderOrder: number) {\n this.rendererSettings.renderOrder = renderOrder;\n this.neededToUpdateRender = true;\n }\n\n constructor(parameters: ParticleSystemParameters) {\n this.layerMaskProxy = {mask: parameters.layerMask ?? 0x0FFFFFFF};\n Object.defineProperty(this.layerMaskProxy, 'mask', {\n enumerable: true,\n get: () => this.rendererSettings.layerMask,\n set: (mask: number) => {\n this.rendererSettings.layerMask = mask;\n this.neededToUpdateRender = true;\n },\n });\n\n this.autoDestroy = parameters.autoDestroy ?? false;\n this.duration = parameters.duration ?? 1;\n this.startDelay = parameters.startDelay ?? new ConstantValue(0);\n this.looping = parameters.looping ?? true;\n this.prewarm = parameters.prewarm ?? false;\n this.startLife = parameters.startLife ?? new ConstantValue(5);\n this.startSpeed = parameters.startSpeed ?? new ConstantValue(0);\n this.startRotation = parameters.startRotation ?? new ConstantValue(0);\n this.startSize = parameters.startSize ?? new ConstantValue(1);\n this.startColor = parameters.startColor ?? new ConstantColor(new Vector4(1, 1, 1, 1));\n this.emissionOverTime = parameters.emissionOverTime ?? new ConstantValue(10);\n this.emissionOverDistance = parameters.emissionOverDistance ?? new ConstantValue(0);\n this.emissionBursts = parameters.emissionBursts ?? [];\n this.onlyUsedByOther = parameters.onlyUsedByOther ?? false;\n this.emitterShape = parameters.shape ?? new SphereEmitter();\n this.behaviors = parameters.behaviors ?? [];\n this.worldSpace = parameters.worldSpace ?? false;\n this.rendererEmitterSettings = parameters.rendererEmitterSettings ?? {};\n\n if (parameters.renderMode === RenderMode.StretchedBillBoard) {\n const settings = this.rendererEmitterSettings as StretchedBillBoardSettings;\n if (parameters.speedFactor !== undefined) {\n settings.speedFactor = parameters.speedFactor;\n }\n settings.speedFactor = settings.speedFactor ?? 0;\n settings.lengthFactor = settings.lengthFactor ?? 0;\n }\n\n this.rendererSettings = {\n instancingGeometry: parameters.instancingGeometry ?? DEFAULT_POSITIONS,\n instancingIndices: parameters.instancingIndices ?? DEFAULT_INDICES,\n instancingUVs: parameters.instancingUVs ?? DEFAULT_UVS,\n instancingNormals: parameters.instancingNormals,\n renderMode: parameters.renderMode ?? RenderMode.BillBoard,\n renderOrder: parameters.renderOrder ?? 0,\n uTileCount: parameters.uTileCount ?? 1,\n vTileCount: parameters.vTileCount ?? 1,\n blendTiles: parameters.blendTiles ?? false,\n softParticles: parameters.softParticles ?? false,\n softNearFade: parameters.softNearFade ?? 0,\n softFarFade: parameters.softFarFade ?? 0,\n materialBlendMode: parameters.blendMode ?? Constants.ALPHA_ADD,\n materialTransparent: parameters.transparent ?? true,\n materialDepthTest: parameters.depthTest ?? true,\n materialDepthWrite: parameters.depthWrite ?? false,\n materialAlphaTest: parameters.alphaTest ?? 0,\n texture: parameters.texture ?? null,\n layerMask: parameters.layerMask ?? 0x0FFFFFFF,\n };\n if (this.rendererSettings.renderMode === RenderMode.Mesh && !this.rendererSettings.instancingNormals) {\n this.rendererSettings.instancingNormals = ParticleSystem.createFallbackNormals(this.rendererSettings.instancingGeometry);\n }\n\n this.materialRef = parameters.material ?? null;\n this.applyMaterialSettings(this.materialRef, {\n blendMode: parameters.blendMode,\n transparent: parameters.transparent,\n depthTest: parameters.depthTest,\n depthWrite: parameters.depthWrite,\n alphaTest: parameters.alphaTest,\n texture: parameters.texture,\n layerMask: parameters.layerMask,\n });\n this.neededToUpdateRender = true;\n\n this.particles = [];\n this.startTileIndex = parameters.startTileIndex || new ConstantValue(0);\n this.emitter = new ParticleEmitter(this, parameters.scene);\n\n this.paused = false;\n this.particleNum = 0;\n this.emissionState = {\n isBursting: false,\n burstParticleIndex: 0,\n burstParticleCount: 0,\n burstIndex: 0,\n burstWaveIndex: 0,\n time: 0,\n waitEmiting: 0,\n travelDistance: 0,\n };\n\n this.emissionBursts.forEach((burst) => burst.count.startGen(this.memory));\n this.emissionOverDistance.startGen(this.memory);\n this.startDelay.startGen(this.memory);\n this.startDelayTimeLeft = this.startDelay.genValue(this.memory, 0);\n this.refreshTrailHistoryMode();\n\n this.emitEnded = false;\n this.markForDestroy = false;\n this.prewarmed = false;\n }\n\n private applyMaterialSettings(\n material: any,\n overrides: {\n blendMode?: number;\n transparent?: boolean;\n depthTest?: boolean;\n depthWrite?: boolean;\n alphaTest?: number;\n texture?: Texture | null;\n layerMask?: number;\n } = {}\n ) {\n /* istanbul ignore if -- rendererSettings is always assigned in the constructor before any code path can call this private method */\n if (!this.rendererSettings) {\n return;\n }\n\n const resolvedTexture =\n overrides.texture !== undefined\n ? overrides.texture\n : (material?.albedoTexture ??\n material?.diffuseTexture ??\n material?.emissiveTexture ??\n material?.opacityTexture ??\n material?.baseTexture ??\n this.rendererSettings.texture ??\n null);\n const resolvedBlendMode =\n overrides.blendMode ??\n (typeof material?.alphaMode === 'number' ? material.alphaMode : this.rendererSettings.materialBlendMode);\n const resolvedTransparent =\n overrides.transparent ??\n (typeof material?.needAlphaBlending === 'function'\n ? material.needAlphaBlending()\n : typeof material?.alpha === 'number'\n ? material.alpha < 1\n : this.rendererSettings.materialTransparent);\n const resolvedDepthTest =\n overrides.depthTest ??\n (typeof material?.disableDepthTest === 'boolean'\n ? !material.disableDepthTest\n : this.rendererSettings.materialDepthTest);\n const resolvedDepthWrite =\n overrides.depthWrite ??\n (typeof material?.disableDepthWrite === 'boolean'\n ? !material.disableDepthWrite\n : typeof material?.forceDepthWrite === 'boolean'\n ? material.forceDepthWrite\n : this.rendererSettings.materialDepthWrite);\n const resolvedAlphaTest =\n overrides.alphaTest ??\n (typeof material?.alphaCutOff === 'number'\n ? material.alphaCutOff\n : typeof material?.alphaCutOffValue === 'number'\n ? material.alphaCutOffValue\n : this.rendererSettings.materialAlphaTest);\n\n this.rendererSettings.texture = resolvedTexture;\n this.rendererSettings.materialBlendMode = resolvedBlendMode;\n this.rendererSettings.materialTransparent = resolvedTransparent;\n this.rendererSettings.materialDepthTest = resolvedDepthTest;\n this.rendererSettings.materialDepthWrite = resolvedDepthWrite;\n this.rendererSettings.materialAlphaTest = resolvedAlphaTest;\n if (overrides.layerMask !== undefined) {\n this.rendererSettings.layerMask = overrides.layerMask;\n }\n this.neededToUpdateRender = true;\n }\n\n pause() { this.paused = true; }\n play() { this.paused = false; }\n stop() { this.restart(); this.pause(); }\n\n private refreshTrailHistoryMode() {\n this.useFastTrailHistory = !this.behaviors.some((behavior) => (behavior as any).type === 'WidthOverLength');\n }\n\n private ensureTrailHistoryCapacity(particle: TrailParticle, capacity: number) {\n const trailAny = particle as any;\n if (trailAny._trailHistoryCapacity === capacity && trailAny._trailHistoryPositions) {\n return;\n }\n trailAny._trailHistoryCapacity = capacity;\n trailAny._trailHistoryPositions = new Float32Array(capacity * 3);\n trailAny._trailHistorySizes = new Float32Array(capacity);\n trailAny._trailHistoryColors = new Float32Array(capacity * 4);\n trailAny._trailHistoryHead = 0;\n trailAny._trailHistoryCount = 0;\n }\n\n private resetTrailHistory(particle: TrailParticle) {\n const trailAny = particle as any;\n trailAny._trailHistoryHead = 0;\n trailAny._trailHistoryCount = 0;\n }\n\n private getTrailHistoryCount(particle: TrailParticle): number {\n const trailAny = particle as any;\n const fastHistoryCount = trailAny._trailHistoryCount;\n if (typeof fastHistoryCount === 'number') {\n return fastHistoryCount;\n }\n return particle.previous.length;\n }\n\n private updateFastTrailHistory(particle: TrailParticle) {\n const trailAny = particle as any;\n const capacity = Math.max(1, Math.ceil(particle.length));\n this.ensureTrailHistoryCapacity(particle, capacity);\n let head = trailAny._trailHistoryHead as number;\n let count = trailAny._trailHistoryCount as number;\n const positions = trailAny._trailHistoryPositions as Float32Array;\n const sizes = trailAny._trailHistorySizes as Float32Array;\n const colors = trailAny._trailHistoryColors as Float32Array;\n\n if (particle.age <= particle.life) {\n const posIndex = head * 3;\n positions[posIndex] = particle.position.x;\n positions[posIndex + 1] = particle.position.y;\n positions[posIndex + 2] = particle.position.z;\n sizes[head] = particle.size.x;\n const colorIndex = head * 4;\n colors[colorIndex] = particle.color.x;\n colors[colorIndex + 1] = particle.color.y;\n colors[colorIndex + 2] = particle.color.z;\n colors[colorIndex + 3] = particle.color.w;\n head = (head + 1) % capacity;\n if (count < capacity) {\n count++;\n }\n } else if (count > 0) {\n count--;\n }\n\n trailAny._trailHistoryHead = head;\n trailAny._trailHistoryCount = count;\n }\n\n setQualityFactor(qualityFactor: number) {\n this.qualityFactor = Math.max(0.1, Math.min(1, qualityFactor));\n }\n\n private spawn(count: number, emissionState: EmissionState, matrix: Matrix4) {\n tempQ.setFromRotationMatrix(matrix);\n const translation = tempV;\n const scale = tempV2;\n matrix.decompose(translation, tempQ, scale);\n const behaviors = this.behaviors;\n const behaviorCount = behaviors.length;\n const renderMode = this.rendererSettings.renderMode;\n const isTrailMode = renderMode === RenderMode.Trail;\n const timeRatio = emissionState.time / this.duration;\n const trailSettings = isTrailMode ? (this.rendererEmitterSettings as TrailSettings) : undefined;\n const followLocalOrigin = Boolean(trailSettings?.followLocalOrigin);\n\n for (let i = 0; i < count; i++) {\n emissionState.burstParticleIndex = i;\n this.particleNum++;\n if (this.particles.length < this.particleNum) {\n if (isTrailMode) {\n this.particles.push(new TrailParticle());\n } else {\n this.particles.push(new SpriteParticle());\n }\n }\n const particle = this.particles[this.particleNum - 1];\n particle.reset();\n particle.speedModifier = 1;\n this.startColor.startGen(particle.memory);\n this.startColor.genColor(particle.memory, particle.startColor, this.emissionState.time);\n particle.color.copy(particle.startColor);\n this.startSpeed.startGen(particle.memory);\n particle.startSpeed = this.startSpeed.genValue(particle.memory, timeRatio);\n this.startLife.startGen(particle.memory);\n particle.life = this.startLife.genValue(particle.memory, timeRatio);\n particle.age = 0;\n this.startSize.startGen(particle.memory);\n if (this.startSize.type === 'vec3function') {\n (this.startSize as Vector3Generator).genValue(particle.memory, particle.startSize, timeRatio);\n } else {\n const size = (this.startSize as FunctionValueGenerator).genValue(particle.memory, timeRatio);\n particle.startSize.set(size, size, size);\n }\n this.startTileIndex.startGen(particle.memory);\n particle.uvTile = this.startTileIndex.genValue(particle.memory);\n particle.size.copy(particle.startSize);\n\n if (\n this.rendererSettings.renderMode === RenderMode.Mesh ||\n this.rendererSettings.renderMode === RenderMode.BillBoard ||\n this.rendererSettings.renderMode === RenderMode.VerticalBillBoard ||\n this.rendererSettings.renderMode === RenderMode.HorizontalBillBoard ||\n this.rendererSettings.renderMode === RenderMode.StretchedBillBoard\n ) {\n const sprite = particle as SpriteParticle;\n this.startRotation.startGen(particle.memory);\n if (renderMode === RenderMode.Mesh) {\n if (!(sprite.rotation instanceof Quaternion)) {\n sprite.rotation = new Quaternion();\n }\n if (this.startRotation.type === 'rotation') {\n this.startRotation.genValue(particle.memory, sprite.rotation as Quaternion, 1, timeRatio);\n } else {\n (sprite.rotation as Quaternion).setFromAxisAngle(UP, this.startRotation.genValue(sprite.memory, timeRatio));\n }\n } else {\n if (this.startRotation.type === 'rotation') {\n sprite.rotation = 0;\n } else {\n sprite.rotation = this.startRotation.genValue(sprite.memory, timeRatio);\n }\n }\n } else if (isTrailMode && trailSettings) {\n const trail = particle as TrailParticle;\n trailSettings.startLength.startGen(trail.memory);\n trail.length = trailSettings.startLength.genValue(trail.memory, timeRatio);\n if (this.useFastTrailHistory) {\n this.ensureTrailHistoryCapacity(trail, Math.max(1, Math.ceil(trail.length)));\n this.resetTrailHistory(trail);\n }\n }\n\n this.emitterShape.initialize(particle, emissionState);\n\n if (isTrailMode && followLocalOrigin) {\n const trail = particle as TrailParticle;\n if (!trail.localPosition) {\n trail.localPosition = new Vector3();\n }\n trail.localPosition.copy(trail.position);\n }\n\n if (this.worldSpace) {\n particle.position.applyMatrix4(matrix);\n particle.startSize.multiply(scale).abs();\n particle.size.copy(particle.startSize);\n particle.velocity.multiply(scale).applyMatrix3(this.normalMatrix);\n if (particle.rotation && particle.rotation instanceof Quaternion) {\n particle.rotation.multiplyQuaternions(tempQ, particle.rotation);\n }\n } else {\n if (this.onlyUsedByOther) {\n particle.parentMatrix = matrix;\n }\n }\n\n for (let j = 0; j < behaviorCount; j++) {\n behaviors[j].initialize(particle, this);\n }\n }\n }\n\n endEmit() {\n this.emitEnded = true;\n if (this.autoDestroy) {\n this.markForDestroy = true;\n }\n this.fire({type: 'emitEnd', particleSystem: this});\n }\n\n dispose() {\n if (this._renderer) this._renderer.deleteSystem(this);\n this.emitter.dispose();\n this.fire({type: 'destroy', particleSystem: this});\n }\n\n restart() {\n this.memory.length = 0;\n this.paused = false;\n this.particleNum = 0;\n this.emissionState.isBursting = false;\n this.emissionState.burstIndex = 0;\n this.emissionState.burstWaveIndex = 0;\n this.emissionState.time = 0;\n this.emissionState.waitEmiting = 0;\n this.behaviors.forEach((behavior) => behavior.reset());\n this.emitEnded = false;\n this.markForDestroy = false;\n this.prewarmed = false;\n this.emissionBursts.forEach((burst) => burst.count.startGen(this.memory));\n this.emissionOverDistance.startGen(this.memory);\n this.startDelay.startGen(this.memory);\n this.startDelayTimeLeft = this.startDelay.genValue(this.memory, 0);\n this.previousEmitterPos = undefined;\n this.emitterVelocity.set(0, 0, 0);\n }\n\n private firstTimeUpdate = true;\n\n /** @internal */\n update(delta: number) {\n if (this.paused) return;\n\n if (this.firstTimeUpdate) {\n this.firstTimeUpdate = false;\n this.emitter.computeWorldMatrix(true);\n }\n\n if (this.emitEnded && this.particleNum === 0) {\n if (this.markForDestroy) this.dispose();\n return;\n }\n\n if (this.looping && this.prewarm && !this.prewarmed) {\n this.prewarmed = true;\n for (let i = 0; i < this.duration * PREWARM_FPS; i++) {\n this.update(1.0 / PREWARM_FPS);\n }\n }\n\n if (delta > 0.1) {\n delta = 0.1;\n }\n\n if (this.neededToUpdateRender) {\n if (this._renderer) this._renderer.updateSystem(this);\n this.neededToUpdateRender = false;\n }\n\n const emitterElements = this.emitter.matrixWorld.elements;\n this.tempEmitterPos.set(emitterElements[12], emitterElements[13], emitterElements[14]);\n if (this.previousEmitterPos !== undefined && delta > 0) {\n this.emitterVelocity\n .copy(this.tempEmitterPos)\n .sub(this.previousEmitterPos)\n .divideScalar(delta);\n }\n (this.previousEmitterPos ??= new Vector3()).copy(this.tempEmitterPos);\n\n // Start delay holds back emission once per play/restart (ignored with\n // prewarm, matching Unity). Carry the remainder so a large frame does\n // not lose time.\n if (this.startDelayTimeLeft > 0 && !(this.prewarm && this.looping)) {\n this.startDelayTimeLeft -= delta;\n if (this.startDelayTimeLeft >= 0) return;\n delta = Math.min(-this.startDelayTimeLeft, 0.1);\n this.startDelayTimeLeft = 0;\n }\n\n if (!this.onlyUsedByOther) {\n this.emit(delta, this.emissionState, this.emitter.matrixWorld);\n }\n\n const particles = this.particles;\n const behaviorCount = this.behaviors.length;\n const particleCount = this.particleNum;\n this.emitterShape.update(this, delta);\n for (let j = 0; j < behaviorCount; j++) {\n const behavior = this.behaviors[j];\n behavior.frameUpdate(delta);\n for (let i = 0; i < particleCount; i++) {\n const particle = particles[i];\n if (!particle.died) {\n behavior.update(particle, delta);\n }\n }\n }\n\n const followLocalOrigin =\n this.rendererSettings.renderMode === RenderMode.Trail &&\n (this.rendererEmitterSettings as TrailSettings).followLocalOrigin;\n const emitterMatrix = this.emitter.matrixWorld;\n for (let i = 0; i < particleCount; i++) {\n const particle = particles[i];\n if (followLocalOrigin && (particle as TrailParticle).localPosition) {\n particle.position.copy((particle as TrailParticle).localPosition!);\n if (particle.parentMatrix) {\n particle.position.applyMatrix4(particle.parentMatrix);\n } else {\n particle.position.applyMatrix4(emitterMatrix);\n }\n } else {\n particle.position.addScaledVector(particle.velocity, delta * particle.speedModifier);\n }\n particle.age += delta;\n }\n\n if (this.rendererSettings.renderMode === RenderMode.Trail) {\n for (let i = 0; i < particleCount; i++) {\n const trailParticle = particles[i] as TrailParticle;\n if (this.useFastTrailHistory) {\n this.updateFastTrailHistory(trailParticle);\n } else {\n trailParticle.update();\n }\n }\n }\n\n let liveParticleCount = this.particleNum;\n for (let i = 0; i < liveParticleCount; i++) {\n const particle = particles[i];\n if (\n particle.died &&\n (!(particle instanceof TrailParticle) || this.getTrailHistoryCount(particle as TrailParticle) === 0)\n ) {\n particles[i] = particles[liveParticleCount - 1];\n particles[liveParticleCount - 1] = particle;\n liveParticleCount--;\n i--;\n this.fire({type: 'particleDied', particleSystem: this, particle: particle});\n }\n }\n this.particleNum = liveParticleCount;\n }\n\n emit(delta: number, emissionState: EmissionState, emitterMatrix: Matrix4) {\n if (emissionState.time > this.duration) {\n if (this.looping) {\n emissionState.time -= this.duration;\n emissionState.burstIndex = 0;\n this.behaviors.forEach((behavior) => behavior.reset());\n } else {\n if (!this.emitEnded && !this.onlyUsedByOther) {\n this.endEmit();\n }\n }\n }\n\n this.normalMatrix.getNormalMatrix(emitterMatrix);\n const emissionBursts = this.emissionBursts;\n const emissionBurstCount = emissionBursts.length;\n const qualityFactor = this.qualityFactor;\n\n const totalSpawn = Math.ceil(emissionState.waitEmiting);\n this.spawn(totalSpawn, emissionState, emitterMatrix);\n emissionState.waitEmiting -= totalSpawn;\n\n while (\n emissionState.burstIndex < emissionBurstCount &&\n emissionBursts[emissionState.burstIndex].time <= emissionState.time\n ) {\n const burst = emissionBursts[emissionState.burstIndex];\n if (Math.random() < burst.probability) {\n const rawCount = burst.count.genValue(this.memory, this.time);\n const count = qualityFactor >= 0.999 ? rawCount : Math.floor(rawCount * qualityFactor);\n emissionState.isBursting = true;\n emissionState.burstParticleCount = count;\n this.spawn(count, emissionState, emitterMatrix);\n emissionState.isBursting = false;\n }\n emissionState.burstIndex++;\n }\n\n if (!this.emitEnded) {\n const timeRatio = emissionState.time / this.duration;\n emissionState.waitEmiting += delta * this.emissionOverTime.genValue(this.memory, timeRatio) * qualityFactor;\n\n const previousWorldPos = emissionState.previousWorldPos;\n if (previousWorldPos !== undefined) {\n this.temp.set(emitterMatrix.elements[12], emitterMatrix.elements[13], emitterMatrix.elements[14]);\n emissionState.travelDistance += previousWorldPos.distanceTo(this.temp);\n const emitPerMeter = this.emissionOverDistance.genValue(this.memory, timeRatio) * qualityFactor;\n if (emissionState.travelDistance * emitPerMeter > 0) {\n const count = Math.floor(emissionState.travelDistance * emitPerMeter);\n emissionState.travelDistance -= count / emitPerMeter;\n emissionState.waitEmiting += count;\n }\n }\n }\n if (emissionState.previousWorldPos === undefined) emissionState.previousWorldPos = new Vector3();\n emissionState.previousWorldPos.set(emitterMatrix.elements[12], emitterMatrix.elements[13], emitterMatrix.elements[14]);\n emissionState.time += delta;\n }\n\n toJSON(metaData?: BabylonMetaData | string, _options: SerializationOptions = {}): ParticleSystemJSONParameters {\n const isRootObject = metaData === undefined || typeof metaData === 'string';\n const meta: BabylonMetaData = isRootObject\n ? {\n geometries: {},\n materials: {},\n textures: {},\n images: {},\n shapes: {},\n skeletons: {},\n animations: {},\n nodes: {},\n }\n : metaData;\n\n const geometryUUID = this.ensureGeometryMeta(meta);\n const materialUUID = this.ensureMaterialMeta(meta);\n const rendererEmitterSettingsJSON = this.toRendererSettingsJSON();\n\n return {\n version: '3.0',\n autoDestroy: this.autoDestroy,\n looping: this.looping,\n prewarm: this.prewarm,\n duration: this.duration,\n startDelay: this.startDelay.toJSON(),\n shape: this.emitterShape.toJSON(),\n startLife: this.startLife.toJSON(),\n startSpeed: this.startSpeed.toJSON(),\n startRotation: this.startRotation.toJSON(),\n startSize: this.startSize.toJSON(),\n startColor: this.startColor.toJSON(),\n emissionOverTime: this.emissionOverTime.toJSON(),\n emissionOverDistance: this.emissionOverDistance.toJSON(),\n emissionBursts: this.emissionBursts.map((burst) => ({\n time: burst.time,\n count: burst.count.toJSON(),\n probability: burst.probability,\n interval: burst.interval,\n cycle: burst.cycle,\n })),\n onlyUsedByOther: this.onlyUsedByOther,\n instancingGeometry: geometryUUID,\n renderMode: this.renderMode,\n renderOrder: this.renderOrder,\n rendererEmitterSettings: rendererEmitterSettingsJSON,\n material: materialUUID,\n layers: this.rendererSettings.layerMask,\n startTileIndex: this.startTileIndex.toJSON(),\n uTileCount: this.rendererSettings.uTileCount,\n vTileCount: this.rendererSettings.vTileCount,\n blendTiles: this.rendererSettings.blendTiles,\n softParticles: this.rendererSettings.softParticles,\n softFarFade: this.rendererSettings.softFarFade,\n softNearFade: this.rendererSettings.softNearFade,\n blending: this.rendererSettings.materialBlendMode,\n transparent: this.rendererSettings.materialTransparent,\n depthTest: this.rendererSettings.materialDepthTest,\n depthWrite: this.rendererSettings.materialDepthWrite,\n alphaTest: this.rendererSettings.materialAlphaTest,\n behaviors: this.behaviors.map((b) => b.toJSON()),\n worldSpace: this.worldSpace,\n };\n }\n\n static fromJSON(\n json: ParticleSystemJSONParameters,\n meta: BabylonMetaData,\n dependencies: {[uuid: string]: Behavior} = {},\n scene?: Scene\n ): ParticleSystem {\n const shape = EmitterFromJSON(json.shape, meta as any);\n let rendererEmitterSettings: RendererEmitterSettings;\n if (json.renderMode === RenderMode.Trail) {\n const trailSettings = json.rendererEmitterSettings as TrailSettings;\n rendererEmitterSettings = {\n startLength:\n trailSettings?.startLength !== undefined\n ? ValueGeneratorFromJSON(trailSettings.startLength)\n : new ConstantValue(30),\n followLocalOrigin: trailSettings?.followLocalOrigin ?? false,\n };\n } else if (json.renderMode === RenderMode.StretchedBillBoard) {\n rendererEmitterSettings = {...(json.rendererEmitterSettings ?? {})};\n if (json.speedFactor !== undefined) {\n (rendererEmitterSettings as StretchedBillBoardSettings).speedFactor = json.speedFactor;\n }\n } else {\n rendererEmitterSettings = {};\n }\n\n const materialMeta = json.material ? meta.materials?.[json.material] : undefined;\n const materialTextureRef = materialMeta?.texture ?? json.texture;\n const texture =\n typeof materialTextureRef === 'string'\n ? meta.textures?.[materialTextureRef] ?? null\n : materialTextureRef ?? null;\n const resolvedGeometryEntry =\n typeof json.instancingGeometry === 'string'\n ? meta.geometries?.[json.instancingGeometry]\n : json.instancingGeometry;\n const resolvedGeometry = ParticleSystem.resolveGeometryData(resolvedGeometryEntry);\n\n const ps = new ParticleSystem({\n scene,\n autoDestroy: json.autoDestroy,\n looping: json.looping,\n prewarm: json.prewarm,\n duration: json.duration,\n startDelay: json.startDelay ? ValueGeneratorFromJSON(json.startDelay) : undefined,\n shape,\n startLife: ValueGeneratorFromJSON(json.startLife),\n startSpeed: ValueGeneratorFromJSON(json.startSpeed),\n startRotation: GeneratorFromJSON(json.startRotation) as RotationGenerator | ValueGenerator | FunctionValueGenerator,\n startSize: GeneratorFromJSON(json.startSize) as Vector3Generator | ValueGenerator | FunctionValueGenerator,\n startColor: ColorGeneratorFromJSON(json.startColor) as ColorGenerator,\n emissionOverTime: ValueGeneratorFromJSON(json.emissionOverTime),\n emissionOverDistance: ValueGeneratorFromJSON(json.emissionOverDistance),\n emissionBursts: json.emissionBursts?.map((burst: any) => ({\n time: burst.time,\n count: typeof burst.count === 'number' ? new ConstantValue(burst.count) : ValueGeneratorFromJSON(burst.count),\n probability: burst.probability ?? 1,\n interval: burst.interval ?? 0.1,\n cycle: burst.cycle ?? burst.cycleCount ?? 1,\n })),\n onlyUsedByOther: json.onlyUsedByOther,\n instancingGeometry: resolvedGeometry.positions,\n instancingIndices: resolvedGeometry.indices,\n instancingUVs: resolvedGeometry.uvs,\n instancingNormals: resolvedGeometry.normals,\n renderMode: json.renderMode,\n rendererEmitterSettings,\n renderOrder: json.renderOrder,\n texture,\n material: materialMeta?.sourceMaterial,\n blendMode: materialMeta?.alphaMode ?? json.blending ?? Constants.ALPHA_ADD,\n transparent: materialMeta?.transparent ?? json.transparent ?? true,\n depthTest: materialMeta?.depthTest ?? json.depthTest ?? true,\n depthWrite: materialMeta?.depthWrite ?? json.depthWrite ?? false,\n alphaTest: materialMeta?.alphaTest ?? json.alphaTest ?? 0,\n startTileIndex:\n typeof json.startTileIndex === 'number'\n ? new ConstantValue(json.startTileIndex)\n : (ValueGeneratorFromJSON(json.startTileIndex) as ValueGenerator),\n uTileCount: json.uTileCount,\n vTileCount: json.vTileCount,\n blendTiles: json.blendTiles,\n softParticles: json.softParticles,\n softFarFade: json.softFarFade,\n softNearFade: json.softNearFade,\n behaviors: [],\n worldSpace: json.worldSpace,\n layerMask: json.layers,\n });\n ps.behaviors = (json.behaviors ?? [])\n .map((behaviorJson) => {\n const behavior = BehaviorFromJSON(behaviorJson, ps);\n if (behavior && behavior.type === 'EmitSubParticleSystem') {\n dependencies[(behaviorJson as any).subParticleSystem] = behavior;\n }\n return behavior;\n })\n .filter((behavior) => behavior !== null) as Behavior[];\n return ps;\n }\n\n private static nextSerializationId(prefix: string): string {\n ParticleSystem.serializationCounter += 1;\n return `${prefix}_${ParticleSystem.serializationCounter}`;\n }\n\n private static createFallbackNormals(positions: Float32Array): Float32Array {\n const normals = new Float32Array(positions.length);\n for (let i = 0; i < normals.length; i += 3) {\n normals[i] = 0;\n normals[i + 1] = 0;\n normals[i + 2] = 1;\n }\n return normals;\n }\n\n private toRendererSettingsJSON(): RendererEmitterSettings {\n if (this.renderMode === RenderMode.Trail) {\n return {\n startLength: (this.rendererEmitterSettings as TrailSettings).startLength.toJSON(),\n followLocalOrigin: (this.rendererEmitterSettings as TrailSettings).followLocalOrigin,\n };\n }\n if (this.renderMode === RenderMode.StretchedBillBoard) {\n return {\n speedFactor: (this.rendererEmitterSettings as StretchedBillBoardSettings).speedFactor,\n lengthFactor: (this.rendererEmitterSettings as StretchedBillBoardSettings).lengthFactor,\n };\n }\n return {};\n }\n\n private ensureGeometryMeta(meta: BabylonMetaData): string {\n const geometryUUID = ParticleSystem.nextSerializationId('quarks_geometry');\n meta.geometries[geometryUUID] = {\n uuid: geometryUUID,\n type: 'QuarksGeometry',\n positions: Array.from(this.rendererSettings.instancingGeometry),\n indices: Array.from(this.rendererSettings.instancingIndices),\n uvs: this.rendererSettings.instancingUVs ? Array.from(this.rendererSettings.instancingUVs) : undefined,\n normals: this.rendererSettings.instancingNormals ? Array.from(this.rendererSettings.instancingNormals) : undefined,\n };\n return geometryUUID;\n }\n\n private ensureMaterialMeta(meta: BabylonMetaData): string {\n const texture = this.rendererSettings.texture;\n let textureUUID: string | undefined;\n if (texture) {\n textureUUID = ParticleSystem.nextSerializationId('quarks_texture');\n meta.textures[textureUUID] = texture;\n }\n\n const materialUUID = ParticleSystem.nextSerializationId('quarks_material');\n meta.materials[materialUUID] = {\n uuid: materialUUID,\n type: 'QuarksMaterial',\n transparent: this.rendererSettings.materialTransparent,\n alphaMode: this.rendererSettings.materialBlendMode,\n depthTest: this.rendererSettings.materialDepthTest,\n depthWrite: this.rendererSettings.materialDepthWrite,\n alphaTest: this.rendererSettings.materialAlphaTest,\n texture: textureUUID,\n sourceMaterial: this.materialRef ?? undefined,\n };\n return materialUUID;\n }\n\n private static resolveGeometryData(entry: any): {\n positions: Float32Array;\n indices: Uint32Array | Uint16Array;\n uvs?: Float32Array;\n normals?: Float32Array;\n } {\n if (entry?.positions) {\n const positions =\n entry.positions instanceof Float32Array ? entry.positions : new Float32Array(entry.positions);\n const rawIndices =\n entry.indices instanceof Uint16Array || entry.indices instanceof Uint32Array\n ? entry.indices\n : entry.indices\n ? new Uint32Array(entry.indices)\n : undefined;\n return {\n positions,\n indices: ensureTriangleIndices(positions, rawIndices),\n uvs: entry.uvs\n ? entry.uvs instanceof Float32Array\n ? entry.uvs\n : new Float32Array(entry.uvs)\n : undefined,\n normals: entry.normals\n ? entry.normals instanceof Float32Array\n ? entry.normals\n : new Float32Array(entry.normals)\n : undefined,\n };\n }\n\n const data = entry?.data ?? entry;\n if (data?.attributes?.position?.array) {\n const positions = new Float32Array(data.attributes.position.array);\n let indices: Uint32Array | Uint16Array | undefined;\n if (data.index?.array) {\n const indexType = data.index.type === 'Uint16Array' ? Uint16Array : Uint32Array;\n indices = new indexType(data.index.array);\n }\n return {\n positions,\n indices: ensureTriangleIndices(positions, indices),\n uvs: data.attributes.uv?.array ? new Float32Array(data.attributes.uv.array) : undefined,\n normals: data.attributes.normal?.array ? new Float32Array(data.attributes.normal.array) : undefined,\n };\n }\n\n return {\n positions: DEFAULT_POSITIONS,\n indices: DEFAULT_INDICES,\n uvs: DEFAULT_UVS,\n };\n }\n\n addBehavior(behavior: Behavior) {\n this.behaviors.push(behavior);\n this.refreshTrailHistoryMode();\n }\n\n getRendererSettings(): VFXBatchSettings {\n return this.rendererSettings;\n }\n\n addEventListener(event: ParticleSystemEventType, callback: (event: ParticleSystemEvent) => void): void {\n if (!this.listeners[event]) this.listeners[event] = [];\n this.listeners[event].push(callback);\n }\n\n removeAllEventListeners(event: ParticleSystemEventType): void {\n if (this.listeners[event]) this.listeners[event] = [];\n }\n\n removeEventListener(event: ParticleSystemEventType, callback: (event: ParticleSystemEvent) => void): void {\n if (this.listeners[event]) {\n const index = this.listeners[event].indexOf(callback);\n if (index !== -1) this.listeners[event].splice(index, 1);\n }\n }\n\n private fire(event: ParticleSystemEvent) {\n if (this.listeners[event.type]) {\n this.listeners[event.type].forEach((callback) => callback(event));\n }\n }\n\n clone(): ParticleSystem {\n const newBehaviors: Array<Behavior> = this.behaviors.map((b) => b.clone());\n let rendererEmitterSettings: RendererEmitterSettings;\n\n if (this.renderMode === RenderMode.Trail) {\n rendererEmitterSettings = {\n startLength: (this.rendererEmitterSettings as TrailSettings).startLength.clone(),\n followLocalOrigin: (this.rendererEmitterSettings as TrailSettings).followLocalOrigin,\n };\n } else if (this.renderMode === RenderMode.StretchedBillBoard) {\n rendererEmitterSettings = {\n lengthFactor: (this.rendererEmitterSettings as StretchedBillBoardSettings).lengthFactor,\n speedFactor: (this.rendererEmitterSettings as StretchedBillBoardSettings).speedFactor,\n };\n } else {\n rendererEmitterSettings = {};\n }\n\n return new ParticleSystem({\n autoDestroy: this.autoDestroy,\n looping: this.looping,\n prewarm: this.prewarm,\n duration: this.duration,\n startDelay: this.startDelay.clone(),\n shape: this.emitterShape.clone(),\n startLife: this.startLife.clone(),\n startSpeed: this.startSpeed.clone(),\n startRotation: this.startRotation.clone(),\n startSize: this.startSize.clone(),\n startColor: this.startColor.clone(),\n emissionOverTime: this.emissionOverTime.clone(),\n emissionOverDistance: this.emissionOverDistance.clone(),\n emissionBursts: this.emissionBursts.map((b) => ({...b})),\n onlyUsedByOther: this.onlyUsedByOther,\n instancingGeometry: this.rendererSettings.instancingGeometry,\n instancingIndices: this.rendererSettings.instancingIndices,\n instancingUVs: this.rendererSettings.instancingUVs,\n instancingNormals: this.rendererSettings.instancingNormals,\n renderMode: this.renderMode,\n renderOrder: this.renderOrder,\n rendererEmitterSettings,\n material: this.materialRef,\n texture: this.rendererSettings.texture,\n startTileIndex: this.startTileIndex,\n uTileCount: this.rendererSettings.uTileCount,\n vTileCount: this.rendererSettings.vTileCount,\n blendTiles: this.rendererSettings.blendTiles,\n softParticles: this.rendererSettings.softParticles,\n softFarFade: this.rendererSettings.softFarFade,\n softNearFade: this.rendererSettings.softNearFade,\n behaviors: newBehaviors,\n worldSpace: this.worldSpace,\n blendMode: this.rendererSettings.materialBlendMode,\n transparent: this.rendererSettings.materialTransparent,\n depthTest: this.rendererSettings.materialDepthTest,\n depthWrite: this.rendererSettings.materialDepthWrite,\n alphaTest: this.rendererSettings.materialAlphaTest,\n layerMask: this.rendererSettings.layerMask,\n scene: this.emitter.getScene(),\n });\n }\n}\n","import {Node} from '@babylonjs/core/node';\nimport {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {ParticleEmitter} from './ParticleEmitter';\nimport {ParticleSystem} from './ParticleSystem';\nimport {BatchedRenderer} from './BatchedRenderer';\nimport {IParticleSystem} from 'quarks.core';\n\nexport class QuarksUtil {\n static runOnAllParticleEmitters(root: Node, callback: (emitter: ParticleEmitter) => void): void {\n QuarksUtil.traverseNode(root, (node) => {\n if (node instanceof ParticleEmitter) {\n callback(node);\n }\n });\n }\n\n static addToBatchRenderer(root: Node, batchRenderer: BatchedRenderer): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n batchRenderer.addSystem(emitter.system);\n });\n }\n\n static play(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).play();\n });\n }\n\n static stop(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).stop();\n });\n }\n\n static pause(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).pause();\n });\n }\n\n static restart(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).restart();\n });\n }\n\n static setAutoDestroy(root: Node, autoDestroy: boolean): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).autoDestroy = autoDestroy;\n });\n }\n\n static endEmit(root: Node): void {\n QuarksUtil.runOnAllParticleEmitters(root, (emitter) => {\n (emitter.system as unknown as ParticleSystem).endEmit();\n });\n }\n\n private static traverseNode(node: Node, callback: (node: Node) => void): void {\n callback(node);\n const children = node.getChildren();\n for (const child of children) {\n QuarksUtil.traverseNode(child, callback);\n }\n }\n}\n","import {IAnimationData, IPrefab} from 'quarks.core';\nimport {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {Scene} from '@babylonjs/core/scene';\nimport {ParticleEmitter} from './ParticleEmitter';\nimport {BatchedRenderer} from './BatchedRenderer';\n\nexport interface QuarksTimelineClip {\n uuid?: string;\n duration?: number;\n play?: () => void;\n pause?: () => void;\n stop?: () => void;\n setTime?: (time: number) => void;\n}\n\nexport interface AnimationData extends IAnimationData {\n type: 'three' | 'ps';\n target: TransformNode;\n loop: boolean;\n clip?: QuarksTimelineClip;\n clipUUID?: string;\n}\n\ninterface AnimationJSON {\n startTime: number;\n duration: number;\n type: 'three' | 'ps';\n targetUUID: string;\n clipUUID?: string;\n loop: boolean;\n}\n\nexport class QuarksPrefab extends TransformNode implements IPrefab {\n type = 'QuarksPrefab';\n animationData: Array<AnimationData> = [];\n isPlaying = false;\n currentTime = -0.00001;\n timeScale = 1;\n duration = 0;\n\n private _lastUpdateTimeMs = Date.now();\n private _batchedRenderer?: BatchedRenderer;\n private _tempAnimationJSON: Array<AnimationJSON> = [];\n\n constructor(name = 'QuarksPrefab', scene?: Scene) {\n super(name, scene);\n }\n\n registerBatchedRenderer(renderer: BatchedRenderer): void {\n this._batchedRenderer = renderer;\n }\n\n addParticleSystemAnimation(\n emitter: ParticleEmitter,\n startTime = 0,\n duration = 0,\n loop = false\n ): AnimationData {\n const animationDuration = duration > 0 ? duration : emitter.system.duration;\n const data: AnimationData = {\n startTime,\n duration: animationDuration,\n type: 'ps',\n loop,\n target: emitter,\n };\n this.animationData.push(data);\n this.pause();\n this.updateDuration();\n return data;\n }\n\n addThreeAnimation(\n target: TransformNode,\n clip?: QuarksTimelineClip,\n startTime = 0,\n duration = clip?.duration ?? 0,\n loop = false,\n clipUUID?: string\n ): AnimationData {\n const animationDuration = duration > 0 ? duration : clip?.duration ?? 0;\n const data: AnimationData = {\n startTime,\n duration: animationDuration,\n type: 'three',\n loop,\n target,\n clip,\n clipUUID: clipUUID ?? clip?.uuid,\n };\n this.animationData.push(data);\n this.updateDuration();\n return data;\n }\n\n removeAnimation(index: number): void {\n this.animationData.splice(index, 1);\n this.updateDuration();\n }\n\n play(): void {\n if (this.isPlaying) return;\n this.isPlaying = true;\n this._lastUpdateTimeMs = Date.now();\n }\n\n pause(): void {\n if (!this.isPlaying) return;\n this.isPlaying = false;\n this.animationData.forEach((animation) => {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.pause();\n return;\n }\n animation.clip?.pause?.();\n });\n }\n\n stop(): void {\n this.pause();\n this.currentTime = -0.00001;\n this.animationData.forEach((animation) => {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.stop();\n return;\n }\n animation.clip?.stop?.();\n });\n }\n\n update(forceDelta?: number): void {\n if (!this.isPlaying) return;\n const now = Date.now();\n const delta = forceDelta ?? Math.max((now - this._lastUpdateTimeMs) / 1000, 0);\n this._lastUpdateTimeMs = now;\n const previousTime = this.currentTime;\n this.currentTime += delta * this.timeScale;\n\n if (this.currentTime > this.duration) {\n this.stop();\n return;\n }\n\n this.animationData.forEach((animation) => {\n const startTime = animation.startTime;\n const endTime = animation.startTime + animation.duration;\n const isActive = this.currentTime >= startTime && this.currentTime <= endTime;\n const wasActive = previousTime >= startTime && previousTime <= endTime;\n if (isActive && !wasActive) {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.restart();\n if (this._batchedRenderer) {\n this._batchedRenderer.addSystem(animation.target.system);\n }\n } else {\n animation.clip?.play?.();\n }\n return;\n }\n\n if (!isActive && wasActive) {\n if (animation.loop && animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.restart();\n return;\n }\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.endEmit();\n } else if (animation.loop) {\n animation.clip?.play?.();\n } else {\n animation.clip?.stop?.();\n }\n }\n });\n }\n\n setTime(time: number): void {\n const previousTime = this.currentTime;\n this.currentTime = time;\n this.animationData.forEach((animation) => {\n const startTime = animation.startTime;\n const endTime = animation.startTime + animation.duration;\n const isActive = this.currentTime >= startTime && this.currentTime < endTime;\n const wasActive = previousTime >= startTime && previousTime < endTime;\n if (isActive && !wasActive) {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.restart();\n } else {\n animation.clip?.play?.();\n }\n return;\n }\n if (!isActive && wasActive) {\n if (animation.type === 'ps' && animation.target instanceof ParticleEmitter) {\n animation.target.system.endEmit();\n } else {\n animation.clip?.stop?.();\n }\n return;\n }\n if (isActive && animation.type === 'three') {\n animation.clip?.setTime?.(Math.max(time - startTime, 0));\n }\n });\n }\n\n getDuration(): number {\n return this.duration;\n }\n\n resolveReferences(root: TransformNode): void {\n const nodesMap: {[uuid: string]: TransformNode} = {};\n const traverse = (node: TransformNode) => {\n if ((node as any)._quarksUUID) {\n nodesMap[(node as any)._quarksUUID] = node;\n }\n nodesMap[node.uniqueId.toString()] = node;\n const children = node.getChildren();\n for (const child of children) {\n if (child instanceof TransformNode) {\n traverse(child);\n }\n }\n };\n traverse(root);\n\n this._tempAnimationJSON.forEach((animationJSON) => {\n const target = nodesMap[animationJSON.targetUUID];\n if (animationJSON.type === 'ps' && target instanceof ParticleEmitter) {\n this.addParticleSystemAnimation(\n target,\n animationJSON.startTime,\n animationJSON.duration,\n animationJSON.loop\n );\n return;\n }\n if (animationJSON.type === 'three' && target) {\n const clip = this.resolveTimelineClip(target, animationJSON.clipUUID);\n this.addThreeAnimation(\n target,\n clip,\n animationJSON.startTime,\n animationJSON.duration,\n animationJSON.loop,\n animationJSON.clipUUID\n );\n }\n });\n this.updateDuration();\n this._tempAnimationJSON = [];\n }\n\n toJSON(): any {\n return {\n type: this.type,\n name: this.name,\n animationData: this.animationData.map((animation) => ({\n startTime: animation.startTime,\n duration: animation.duration,\n type: animation.type,\n targetUUID: (animation.target as any)._quarksUUID ?? animation.target.uniqueId.toString(),\n clipUUID: animation.type === 'three' ? animation.clipUUID ?? animation.clip?.uuid : undefined,\n loop: animation.loop,\n })),\n };\n }\n\n static fromJSON(json: any, scene?: Scene): QuarksPrefab {\n const prefab = new QuarksPrefab(json.name || 'QuarksPrefab', scene);\n if (Array.isArray(json.animationData)) {\n prefab._tempAnimationJSON = json.animationData.filter((item: any) => item?.type === 'ps' || item?.type === 'three');\n }\n return prefab;\n }\n\n private resolveTimelineClip(target: TransformNode, clipUUID?: string): QuarksTimelineClip | undefined {\n const animationSources = [\n (target as any).animations,\n (target as any).animationGroups,\n (target.metadata as any)?.animations,\n (target.metadata as any)?.animationGroups,\n ];\n for (const source of animationSources) {\n if (!Array.isArray(source)) continue;\n if (!clipUUID) {\n return source[0];\n }\n const found = source.find((item: any) => item?.uuid === clipUUID);\n if (found) {\n return found;\n }\n }\n return undefined;\n }\n\n private updateDuration(): void {\n let maxDuration = 0;\n this.animationData.forEach((animation) => {\n const endTime = animation.startTime + animation.duration;\n if (endTime > maxDuration) {\n maxDuration = endTime;\n }\n });\n this.duration = maxDuration;\n }\n}\n","import {Scene} from '@babylonjs/core/scene';\nimport {PBRMaterial} from '@babylonjs/core/Materials/PBR/pbrMaterial';\nimport {StandardMaterial} from '@babylonjs/core/Materials/standardMaterial';\n\nexport type BabylonParticleMaterialParameters = Record<string, any>;\n\nexport class ParticleMeshStandardMaterial extends StandardMaterial {\n readonly isParticleMeshStandardMaterial = true;\n\n constructor(name: string, scene?: Scene, parameters: BabylonParticleMaterialParameters = {}) {\n super(name, scene);\n Object.assign(this, parameters);\n }\n}\n\nexport class ParticleMeshPhysicsMaterial extends PBRMaterial {\n readonly isParticleMeshPhysicsMaterial = true;\n\n constructor(name: string, scene?: Scene, parameters: BabylonParticleMaterialParameters = {}) {\n super(name, scene);\n Object.assign(this, parameters);\n }\n}\n","import {loadPlugin} from 'quarks.core';\nimport {MeshSurfaceEmitterPlugin} from './MeshSurfaceEmitter';\nimport {registerShaderChunks} from './shaders';\n\nexport {BatchedRenderer} from './BatchedRenderer';\nexport type {VFXBatchSettings, AdaptivePerformanceOptions, AdaptivePerformanceState} from './BatchedRenderer';\nexport {BatchedParticleRenderer} from './BatchedParticleRenderer';\nexport {VFXBatch, RenderMode} from './VFXBatch';\nexport type {StoredBatchSettings} from './VFXBatch';\nexport {SpriteBatch} from './SpriteBatch';\nexport {TrailBatch} from './TrailBatch';\nexport {ParticleSystem} from './ParticleSystem';\nexport type {\n ParticleSystemParameters,\n BurstParameters,\n BurstParametersJSON,\n ParticleSystemJSONParameters,\n BabylonMetaData,\n} from './ParticleSystem';\nexport {ParticleEmitter} from './ParticleEmitter';\nexport {QuarksUtil} from './QuarksUtil';\nexport {QuarksLoader} from './QuarksLoader';\nexport type {QuarksLoaderOptions} from './QuarksLoader';\nexport {QuarksPrefab} from './QuarksPrefab';\nexport type {AnimationData, QuarksTimelineClip} from './QuarksPrefab';\nexport {MeshSurfaceEmitter, MeshSurfaceEmitterPlugin} from './MeshSurfaceEmitter';\nexport * from './shaders/';\nexport * from './materials/';\nexport * from 'quarks.core';\n\n\n// Re-export quarks.core types (interfaces - type-only)\nexport type {\n IParticleSystem,\n IParticle,\n Particle,\n EmissionState,\n RendererEmitterSettings,\n TrailSettings,\n StretchedBillBoardSettings,\n BillBoardSettings,\n MeshSettings,\n IEmitter,\n ParticleSystemEvent,\n ParticleSystemEventType,\n SerializationOptions,\n Behavior,\n EmitterShape,\n ValueGenerator,\n FunctionValueGenerator,\n ColorGenerator,\n FunctionColorGenerator,\n RotationGenerator,\n Vector3Generator,\n} from 'quarks.core';\n\nregisterShaderChunks();\nloadPlugin(MeshSurfaceEmitterPlugin);\n\n","import {Scene} from '@babylonjs/core/scene';\nimport {TransformNode} from '@babylonjs/core/Meshes/transformNode';\nimport {Mesh} from '@babylonjs/core/Meshes/mesh';\nimport {VertexData} from '@babylonjs/core/Meshes/mesh.vertexData';\nimport {Texture} from '@babylonjs/core/Materials/Textures/texture';\nimport {StandardMaterial} from '@babylonjs/core/Materials/standardMaterial';\nimport {Constants} from '@babylonjs/core/Engines/constants';\nimport {Matrix, Quaternion, Vector3} from '@babylonjs/core/Maths/math.vector';\nimport {\n Behavior,\n EmitSubParticleSystem,\n} from 'quarks.core';\nimport {ParticleSystem} from './ParticleSystem';\nimport {ParticleEmitter} from './ParticleEmitter';\nimport {QuarksPrefab} from './QuarksPrefab';\nimport {ensureTriangleIndices} from './geometryUtil';\n\nexport interface QuarksLoaderOptions {\n baseUrl?: string;\n}\n\ninterface ParsedGeometry {\n positions: Float32Array;\n indices: Uint32Array | Uint16Array;\n uvs?: Float32Array;\n normals?: Float32Array;\n}\n\ninterface LoadedMeta {\n textures: {[uuid: string]: Texture | null};\n geometries: {[uuid: string]: ParsedGeometry};\n materials: {[uuid: string]: any};\n}\n\nexport class QuarksLoader {\n private scene: Scene;\n private options: QuarksLoaderOptions;\n\n constructor(scene: Scene, options: QuarksLoaderOptions = {}) {\n this.scene = scene;\n this.options = options;\n }\n\n async load(url: string): Promise<TransformNode> {\n const baseUrl = this.options.baseUrl || url.substring(0, url.lastIndexOf('/') + 1);\n const response = await fetch(url);\n const json = await response.json();\n return this.parse(json, baseUrl);\n }\n\n parse(json: any, baseUrl: string = ''): TransformNode {\n const meta: LoadedMeta = {\n textures: {},\n geometries: {},\n materials: {},\n };\n\n if (json.geometries) {\n this.parseGeometries(json.geometries, meta);\n }\n if (json.images) {\n this.parseImages(json.images, baseUrl, meta);\n }\n if (json.textures) {\n this.parseTextures(json.textures, meta);\n }\n if (json.materials) {\n this.parseMaterials(json.materials, meta);\n }\n\n const root = this.parseObject(json.object, meta);\n this.linkReferences(root);\n return root;\n }\n\n private parseGeometries(geometries: any[], meta: LoadedMeta): void {\n for (const geom of geometries) {\n if (geom.type === 'PlaneGeometry') {\n const w = geom.width || 1;\n const h = geom.height || 1;\n const hw = w / 2;\n const hh = h / 2;\n meta.geometries[geom.uuid] = {\n positions: new Float32Array([-hw, -hh, 0, hw, -hh, 0, hw, hh, 0, -hw, hh, 0]),\n indices: new Uint32Array([0, 1, 2, 0, 2, 3]),\n uvs: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]),\n normals: new Float32Array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]),\n };\n } else if (geom.type === 'SphereGeometry') {\n meta.geometries[geom.uuid] = this.parseSphereGeometry(geom);\n } else if (geom.type === 'BufferGeometry' && geom.data) {\n const parsed = this.parseBufferGeometry(geom.data);\n meta.geometries[geom.uuid] = parsed;\n } else if (geom.type === 'QuarksGeometry') {\n meta.geometries[geom.uuid] = {\n positions: new Float32Array(geom.positions ?? []),\n indices: geom.indices ? new Uint32Array(geom.indices) : new Uint32Array(0),\n uvs: geom.uvs ? new Float32Array(geom.uvs) : undefined,\n normals: geom.normals ? new Float32Array(geom.normals) : undefined,\n };\n }\n }\n }\n\n private parseSphereGeometry(geom: any): ParsedGeometry {\n const radius = geom.radius ?? 0.5;\n const widthSegments = Math.max(3, Math.floor(geom.widthSegments ?? 16));\n const heightSegments = Math.max(2, Math.floor(geom.heightSegments ?? 8));\n const phiStart = geom.phiStart ?? 0;\n const phiLength = geom.phiLength ?? Math.PI * 2;\n const thetaStart = geom.thetaStart ?? 0;\n const thetaLength = geom.thetaLength ?? Math.PI;\n\n const positions: number[] = [];\n const normals: number[] = [];\n const uvs: number[] = [];\n const indices: number[] = [];\n const grid: number[][] = [];\n\n let index = 0;\n\n for (let iy = 0; iy <= heightSegments; iy++) {\n const verticesRow: number[] = [];\n const v = iy / heightSegments;\n const theta = thetaStart + v * thetaLength;\n\n for (let ix = 0; ix <= widthSegments; ix++) {\n const u = ix / widthSegments;\n const phi = phiStart + u * phiLength;\n\n const x = -radius * Math.cos(phi) * Math.sin(theta);\n const y = radius * Math.cos(theta);\n const z = radius * Math.sin(phi) * Math.sin(theta);\n\n positions.push(x, y, z);\n const length = Math.hypot(x, y, z) || 1;\n normals.push(x / length, y / length, z / length);\n uvs.push(u, 1 - v);\n\n verticesRow.push(index++);\n }\n\n grid.push(verticesRow);\n }\n\n const thetaEnd = thetaStart + thetaLength;\n const isTopFull = thetaStart <= 0;\n const isBottomFull = thetaEnd >= Math.PI;\n\n for (let iy = 0; iy < heightSegments; iy++) {\n for (let ix = 0; ix < widthSegments; ix++) {\n const a = grid[iy][ix + 1];\n const b = grid[iy][ix];\n const c = grid[iy + 1][ix];\n const d = grid[iy + 1][ix + 1];\n\n if (iy !== 0 || !isTopFull) {\n indices.push(a, b, d);\n }\n if (iy !== heightSegments - 1 || !isBottomFull) {\n indices.push(b, c, d);\n }\n }\n }\n\n const typedIndices = positions.length / 3 > 65535 ? new Uint32Array(indices) : new Uint16Array(indices);\n return {\n positions: new Float32Array(positions),\n indices: typedIndices,\n uvs: new Float32Array(uvs),\n normals: new Float32Array(normals),\n };\n }\n\n private parseBufferGeometry(data: any): ParsedGeometry {\n let positions = new Float32Array(0);\n let indices: Uint32Array | Uint16Array = new Uint32Array(0);\n let uvs: Float32Array | undefined;\n let normals: Float32Array | undefined;\n\n if (data.interleavedBuffers && data.arrayBuffers) {\n const buffers: {[uuid: string]: {data: Float32Array; stride: number}} = {};\n for (const [uuid, ibDef] of Object.entries(data.interleavedBuffers) as any[]) {\n const arrayBuffer = data.arrayBuffers[ibDef.buffer];\n if (arrayBuffer) {\n const floatArray = new Float32Array(\n Array.isArray(arrayBuffer) ? this.int32ArrayToFloat32(arrayBuffer) : arrayBuffer\n );\n buffers[uuid] = {data: floatArray, stride: ibDef.stride};\n }\n }\n\n if (data.attributes) {\n if (data.attributes.position?.isInterleavedBufferAttribute) {\n const attr = data.attributes.position;\n const buf = buffers[attr.data];\n if (buf) positions = this.extractInterleavedAttribute(buf.data, buf.stride, attr.offset, attr.itemSize);\n }\n if (data.attributes.uv?.isInterleavedBufferAttribute) {\n const attr = data.attributes.uv;\n const buf = buffers[attr.data];\n if (buf) uvs = this.extractInterleavedAttribute(buf.data, buf.stride, attr.offset, attr.itemSize);\n }\n if (data.attributes.normal?.isInterleavedBufferAttribute) {\n const attr = data.attributes.normal;\n const buf = buffers[attr.data];\n if (buf) normals = this.extractInterleavedAttribute(buf.data, buf.stride, attr.offset, attr.itemSize);\n }\n }\n } else if (data.attributes) {\n if (data.attributes.position?.array) {\n positions = new Float32Array(data.attributes.position.array);\n }\n if (data.attributes.uv?.array) {\n uvs = new Float32Array(data.attributes.uv.array);\n }\n if (data.attributes.normal?.array) {\n normals = new Float32Array(data.attributes.normal.array);\n }\n }\n\n if (data.index) {\n if (data.index.type === 'Uint16Array') {\n indices = new Uint16Array(data.index.array);\n } else {\n indices = new Uint32Array(data.index.array);\n }\n }\n\n indices = ensureTriangleIndices(positions, indices);\n\n return {positions, indices, uvs, normals};\n }\n\n private extractInterleavedAttribute(buffer: Float32Array, stride: number, offset: number, itemSize: number): any {\n const count = Math.floor(buffer.length / stride);\n const result = new Float32Array(count * itemSize);\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < itemSize; j++) {\n result[i * itemSize + j] = buffer[i * stride + offset + j];\n }\n }\n return result;\n }\n\n private int32ArrayToFloat32(intArray: number[]): Float32Array {\n const buffer = new ArrayBuffer(intArray.length * 4);\n const int32View = new Int32Array(buffer);\n for (let i = 0; i < intArray.length; i++) {\n int32View[i] = intArray[i];\n }\n return new Float32Array(buffer) as any;\n }\n\n private parseImages(images: any[], baseUrl: string, _meta: LoadedMeta): void {\n (this as any)._images = {};\n for (const img of images) {\n (this as any)._images[img.uuid] = img.url ? baseUrl + img.url : null;\n }\n }\n\n private parseTextures(textures: any[], meta: LoadedMeta): void {\n const images = (this as any)._images || {};\n for (const texDef of textures) {\n const imageUrl = images[texDef.image];\n if (imageUrl) {\n const texture = new Texture(imageUrl, this.scene);\n if (Array.isArray(texDef.wrap)) {\n texture.wrapU = this.mapWrapMode(texDef.wrap[0]);\n texture.wrapV = this.mapWrapMode(texDef.wrap[1] ?? texDef.wrap[0]);\n }\n if (Array.isArray(texDef.repeat)) {\n texture.uScale = texDef.repeat[0] ?? 1;\n texture.vScale = texDef.repeat[1] ?? 1;\n }\n if (Array.isArray(texDef.offset)) {\n texture.uOffset = texDef.offset[0] ?? 0;\n texture.vOffset = texDef.offset[1] ?? 0;\n }\n if (typeof texDef.rotation === 'number') {\n texture.wAng = texDef.rotation;\n }\n meta.textures[texDef.uuid] = texture;\n } else {\n meta.textures[texDef.uuid] = null;\n }\n }\n }\n\n private mapWrapMode(wrapMode?: number): number {\n switch (wrapMode) {\n case 1001: // ClampToEdgeWrapping (three.js)\n return Texture.CLAMP_ADDRESSMODE;\n case 1002: // MirroredRepeatWrapping (three.js)\n return Texture.MIRROR_ADDRESSMODE;\n case 1000: // RepeatWrapping (three.js)\n default:\n return Texture.WRAP_ADDRESSMODE;\n }\n }\n\n private parseMaterials(materials: any[], meta: LoadedMeta): void {\n for (const matDef of materials) {\n const matInfo: any = {\n uuid: matDef.uuid,\n transparent: matDef.transparent ?? true,\n blending: matDef.blending ?? 1,\n side: matDef.side ?? 2,\n depthTest: matDef.depthTest ?? true,\n depthWrite: matDef.depthWrite ?? false,\n alphaTest: matDef.alphaTest ?? 0,\n texture: null,\n };\n\n // three.js MeshBasicMaterial uses `map`; QuarksMaterial (what ParticleSystem.toJSON\n // emits) uses `texture`. Accept both so library-exported effects round-trip.\n const textureRef = matDef.map ?? matDef.texture;\n if (textureRef) {\n matInfo.texture = meta.textures[textureRef] || null;\n }\n\n // QuarksMaterial (what ParticleSystem.ensureMaterialMeta emits) writes `alphaMode`\n // directly as a Babylon alpha-mode constant; three.js materials (MeshBasicMaterial\n // etc.) instead use `blending` with three.js's own 1..4 numbering, which does NOT\n // line up with Babylon's constants (e.g. three.js Additive=2 vs Babylon ALPHA_ADD=1)\n // — only convert through the table when there's no native alphaMode to trust.\n if (typeof matDef.alphaMode === 'number') {\n matInfo.alphaMode = matDef.alphaMode;\n } else {\n const blendingToAlphaMode: {[key: number]: number} = {\n 1: Constants.ALPHA_COMBINE,\n 2: Constants.ALPHA_ADD,\n 3: Constants.ALPHA_SUBTRACT,\n 4: Constants.ALPHA_MULTIPLY,\n };\n matInfo.alphaMode = blendingToAlphaMode[matDef.blending] || Constants.ALPHA_COMBINE;\n }\n\n meta.materials[matDef.uuid] = matInfo;\n }\n }\n\n private getGeometry(meta: LoadedMeta, geometryId: string | undefined): ParsedGeometry | undefined {\n if (!geometryId) return undefined;\n return meta.geometries[geometryId];\n }\n\n private getMaterial(meta: LoadedMeta, materialId: string | string[] | undefined): any | undefined {\n if (!materialId) return undefined;\n const selectedId = Array.isArray(materialId) ? materialId[0] : materialId;\n return meta.materials[selectedId];\n }\n\n private createPlaceholderNode(type: string, name?: string): TransformNode {\n const node = new TransformNode(name || type || 'node', this.scene);\n (node as any).quarksOriginalType = type;\n return node;\n }\n\n private createMeshNode(data: any, meta: LoadedMeta): Mesh {\n const mesh = new Mesh(data.name || data.type || 'mesh', this.scene);\n const geometry = this.getGeometry(meta, data.geometry);\n if (geometry && geometry.positions.length > 0 && geometry.indices.length > 0) {\n const vertexData = new VertexData();\n vertexData.positions = geometry.positions;\n vertexData.indices = geometry.indices;\n if (geometry.uvs && geometry.uvs.length > 0) {\n vertexData.uvs = geometry.uvs;\n }\n if (geometry.normals && geometry.normals.length > 0) {\n vertexData.normals = geometry.normals;\n }\n vertexData.applyToMesh(mesh, true);\n }\n\n const materialInfo = this.getMaterial(meta, data.material);\n if (materialInfo) {\n const material = new StandardMaterial(`quarks_loader_material_${materialInfo.uuid}`, this.scene);\n material.alphaMode = materialInfo.alphaMode ?? Constants.ALPHA_COMBINE;\n material.backFaceCulling = materialInfo.side !== 2;\n material.alphaCutOff = materialInfo.alphaTest ?? 0;\n material.disableDepthWrite = !(materialInfo.depthWrite ?? false);\n if (materialInfo.texture) {\n material.diffuseTexture = materialInfo.texture;\n material.opacityTexture = materialInfo.texture;\n }\n mesh.material = material;\n }\n return mesh;\n }\n\n private parseObject(data: any, meta: LoadedMeta): TransformNode {\n let node: TransformNode;\n switch (data.type) {\n case 'QuarksPrefab':\n node = QuarksPrefab.fromJSON(data, this.scene);\n break;\n case 'ParticleEmitter':\n if (data.ps) {\n const ps = this.parseParticleSystem(data.ps, meta);\n node = ps.emitter;\n break;\n }\n node = this.createPlaceholderNode(data.type, data.name);\n break;\n case 'Mesh':\n case 'SkinnedMesh':\n case 'InstancedMesh':\n case 'BatchedMesh':\n node = this.createMeshNode(data, meta);\n break;\n case 'Scene':\n case 'Group':\n case 'Object3D':\n case 'PerspectiveCamera':\n case 'OrthographicCamera':\n case 'AmbientLight':\n case 'DirectionalLight':\n case 'PointLight':\n case 'RectAreaLight':\n case 'SpotLight':\n case 'HemisphereLight':\n case 'LightProbe':\n case 'LOD':\n case 'Line':\n case 'LineSegments':\n case 'LineLoop':\n case 'PointCloud':\n case 'Points':\n case 'Sprite':\n case 'Bone':\n node = this.createPlaceholderNode(data.type, data.name);\n break;\n default:\n node = new TransformNode(data.name || data.type || 'node', this.scene);\n }\n\n if (data.uuid) (node as any)._quarksUUID = data.uuid;\n if (data.name) node.name = data.name;\n\n if (data.matrix) {\n const matrix = Matrix.FromArray(data.matrix);\n const scaling = new Vector3(1, 1, 1);\n const rotation = Quaternion.Identity();\n const translation = new Vector3(0, 0, 0);\n matrix.decompose(scaling, rotation, translation);\n node.position.copyFrom(translation);\n node.scaling.copyFrom(scaling);\n node.rotationQuaternion = rotation;\n } else {\n if (data.position) node.position.set(data.position[0], data.position[1], data.position[2]);\n if (data.scale) node.scaling.set(data.scale[0], data.scale[1], data.scale[2]);\n if (data.quaternion) {\n node.rotationQuaternion = new Quaternion(data.quaternion[0], data.quaternion[1], data.quaternion[2], data.quaternion[3]);\n } else if (data.rotation) {\n node.rotation.set(data.rotation[0], data.rotation[1], data.rotation[2]);\n }\n }\n\n if (data.visible !== undefined) node.setEnabled(data.visible);\n\n if (data.children) {\n for (const childData of data.children) {\n const child = this.parseObject(childData, meta);\n child.parent = node;\n }\n }\n\n return node;\n }\n\n private parseParticleSystem(json: any, meta: LoadedMeta): ParticleSystem {\n const dependencies: {[uuid: string]: Behavior} = {};\n const ps = ParticleSystem.fromJSON(json, meta as any, dependencies, this.scene);\n (ps as any)._meshSurfaceReferenceUUID = json?.shape?.type === 'mesh_surface' ? json?.shape?.mesh : undefined;\n return ps;\n }\n\n private linkReferences(root: TransformNode): void {\n const nodesMap: {[uuid: string]: TransformNode} = {};\n\n const traverse = (node: TransformNode) => {\n if ((node as any)._quarksUUID) {\n nodesMap[(node as any)._quarksUUID] = node;\n }\n for (const child of node.getChildren()) {\n if (child instanceof TransformNode) {\n traverse(child);\n }\n }\n };\n traverse(root);\n\n const linkNode = (node: TransformNode) => {\n if (node instanceof QuarksPrefab) {\n node.resolveReferences(root);\n }\n if (node instanceof ParticleEmitter) {\n const system = node.system as ParticleSystem;\n const meshSurfaceUUID = (system as any)._meshSurfaceReferenceUUID;\n if (meshSurfaceUUID && (system.emitterShape as any).type === 'mesh_surface') {\n const targetNode = nodesMap[meshSurfaceUUID];\n if (targetNode instanceof Mesh) {\n (system.emitterShape as any).mesh = targetNode;\n }\n }\n for (let i = 0; i < system.behaviors.length; i++) {\n if (system.behaviors[i] instanceof EmitSubParticleSystem) {\n const subEmitter = system.behaviors[i] as EmitSubParticleSystem;\n const targetUUID = subEmitter.subParticleSystem as any;\n if (typeof targetUUID === 'string' && nodesMap[targetUUID]) {\n const resolved = nodesMap[targetUUID];\n (subEmitter as any).subParticleSystem = resolved;\n if (resolved instanceof ParticleEmitter) {\n (resolved.system as ParticleSystem).onlyUsedByOther = true;\n }\n }\n }\n }\n }\n for (const child of node.getChildren()) {\n if (child instanceof TransformNode) {\n linkNode(child);\n }\n }\n };\n linkNode(root);\n }\n}\n","export default /* glsl */ `\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute vec4 rotation;\nattribute float uvTile;\n\n// Uniforms\nuniform mat4 worldViewProjection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n\nvec3 applyQuaternion(vec3 v, vec4 q) {\n vec3 qVec = q.xyz;\n float qW = q.w;\n vec3 t = 2.0 * cross(qVec, v);\n return v + qW * t + cross(qVec, t);\n}\n\nvoid main() {\n vec3 rotatedPosition = applyQuaternion(position * size, rotation);\n vec3 worldPos = rotatedPosition + offset;\n\n gl_Position = worldViewProjection * vec4(worldPos, 1.0);\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n`;\n"],"names":["_lut","_seed","DEG2RAD","Math","PI","RAD2DEG","generateUUID","d0","random","d1","d2","d3","toLowerCase","clamp","value","min","max","euclideanModulo","n","m","mapLinear","x","a1","a2","b1","b2","inverseLerp","y","lerp","t","damp","lambda","dt","exp","pingpong","length","abs","smoothstep","smootherstep","randInt","low","high","floor","randFloat","randFloatSpread","range","seededRandom","s","undefined","imul","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","pow","ceil","log","LN2","floorPowerOfTwo","setQuaternionFromProperEuler","q","a","b","c","order","cos","sin","c2","s2","c13","s13","c1_3","s1_3","c3_1","s3_1","set","console","warn","denormalize","array","constructor","Float32Array","Uint32Array","Uint16Array","Uint8Array","Int32Array","Int16Array","Int8Array","Error","normalize","round","MathUtils","Quaternion","z","w","this","isQuaternion","_x","_y","_z","_w","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","Number","EPSILON","sqrt","len","atan2","tDir","f","multiplyQuaternionsFlat","_onChangeCallback","clone","copy","quaternion","setFromEuler","euler","update","_order","c1","c3","s1","s3","setFromAxisAngle","axis","angle","halfAngle","setFromRotationMatrix","te","elements","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","vFrom","vTo","r","dot","angleTo","acos","rotateTowards","step","slerp","identity","invert","conjugate","v","lengthSq","l","multiply","multiplyQuaternions","premultiply","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","slerpQuaternions","qa","theta1","theta2","r1","r2","equals","fromArray","offset","toArray","toJSON","_onChange","callback","Symbol","iterator","Vector3","isVector3","prototype","setScalar","scalar","setX","setY","setZ","setComponent","index","getComponent","add","addScalar","addVectors","addScaledVector","sub","subScalar","subVectors","multiplyScalar","multiplyVectors","applyEuler","applyQuaternion","_quaternion$1","applyAxisAngle","applyMatrix3","e","applyNormalMatrix","applyMatrix4","vx","vy","vz","qx","qy","qz","qw","tx","ty","tz","transformDirection","divide","divideScalar","clampScalar","minVal","maxVal","clampLength","roundToZero","trunc","negate","manhattanLength","setLength","alpha","lerpVectors","v1","v2","cross","crossVectors","ax","ay","az","bx","by","bz","projectOnVector","denominator","projectOnPlane","planeNormal","_vector","reflect","normal","theta","distanceTo","distanceToSquared","dx","dy","dz","manhattanDistanceTo","setFromSphericalCoords","radius","phi","sinPhiRadius","setFromCylindricalCoords","setFromMatrixPosition","setFromMatrixScale","sx","setFromMatrixColumn","sy","sz","setFromMatrix3Column","randomDirection","u","WebGLCoordinateSystem","WebGPUCoordinateSystem","Matrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","isMatrix4","extractPosition","copyPosition","multiplyToArray","error","setRotationFromQuaternion","makeRotationFromQuaternion","me","setFromMatrix3","extractBasis","xAxis","yAxis","zAxis","makeBasis","extractRotation","scaleX","_v1","scaleY","scaleZ","makeRotationFromEuler","d","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","compose","_zero","_one","lookAt","eye","target","up","multiplyMatrices","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","determinant","transpose","tmp","setPosition","t11","t12","t13","t14","det","detInv","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","makeScale","makeShear","xy","xz","yx","yz","zx","zy","position","x2","y2","z2","xx","yy","zz","wx","wy","wz","decompose","_m1","invSX","invSY","invSZ","makePerspective","left","right","top","bottom","near","far","coordinateSystem","makeOrthographic","h","p","zInv","matrix","i","_matrix","_quaternion","Euler","DEFAULT_ORDER","isEuler","asin","setFromQuaternion","setFromVector3","reorder","newOrder","Vector2","width","height","rotateAround","center","isVector2","Vector4","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","epsilon","epsilon2","Matrix3","isMatrix3","setFromMatrix4","g","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","_m3","rotate","makeRotation","translate","EmitterMode","getValueFromEmitterMode","mode","currentValue","spread","emissionState","Random","Burst","isBursting","burstParticleIndex","burstParticleCount","Loop","PingPong","Bezier","p1","p2","p3","p4","genValue","t2","t3","mt","mt2","mt3","derivativeCoefficients","points","dpoints","list","j","dpt","push","getSlope","controlCurve","hull","pt","_p","idx","split","span","p0","fromJSON","json","ColorToJSON","color","JSONToColor","JSONToValue","type","ValueToJSON","RandomColor","startGen","memory","genColor","rand","ColorRange","indexCount","ContinuousLinearFunction","keys","subType","findKey","mid","getStartX","getEndX","name","map","pos","pair","tempVec3","Gradient","functions","func","function","start","key","gradient","tempColor","RandomColorBetweenGradient","gradient1","gradient2","ConstantColor","memoryGenerator","ColorGeneratorFromJSON","ConstantValue","IntervalValue","PiecewiseFunction","Array","findFunction","setStartX","setEndX","insertFunction","splice","removeFunction","getFunction","setFunction","numOfFunctions","PiecewiseBezier","curves","super","toSVG","segments","result","join","bezier","piecewiseFunction","ValueGeneratorFromJSON","RandomQuatGenerator","quat","delta","AxisAngleGenerator","EulerGenerator","angleX","angleY","angleZ","eulerOrder","eular","RotationGeneratorFromJSON","Vector3Function","vec","Vector3GeneratorFromJSON","GeneratorFromJSON","ConeEmitter","parameters","arc","thickness","speed","system","time","duration","initialize","sinTheta","cosTheta","velocity","startSpeed","CircleEmitter","randomInt","UP_VEC3","ZERO_VEC3","ONE_VEC3","Z_VEC3","DonutEmitter","donutRadius","PointEmitter","cbrt","sinPhi","cosPhi","SphereEmitter","HemisphereEmitter","GridEmitter","column","row","RectangleEmitter","point","thicknessScale","EmitterShapes","circle","params","loadJSON","cone","donut","sphere","hemisphere","grid","rectangle","EmitterFromJSON","meta","ColorOverLife","particle","age","life","startColor","frameUpdate","reset","RotationOverLife","angularVelocity","Rotation3DOverLife","tempQuat","tempQuat2","ForceOverLife","particleSystem","ps","_temp","_tempScale","_tempQ","worldSpace","translation","emitter","matrixWorld","UNIT_X","UNIT_Y","UNIT_Z","VelocityOverLife","linearX","linearY","linearZ","orbitalX","orbitalY","orbitalZ","space","_tempEmitterPos","_tempQInv","_tempScaleInv","_tempRot","_tempAxis","worldPivot","orbit","worldAxes","readValue","field","InheritVelocity","multiplier","_tempPos","emitterVelocity","decomposeInverse","SizeOverLife","size","startSize","SpeedOverLife","speedModifier","FrameOverLife","frame","uvTile","OrbitOverLife","orbitSpeed","temp","LinkedListNode","data","next","prev","hasPrev","hasNext","LinkedList","head","tail","isEmpty","clear","front","back","dequeue","pop","queue","node","insertBefore","newNode","remove","tempNode","values","current","SpriteParticle","died","RecordState","TrailParticle","previous","WidthOverLength","iter","ApplyForce","direction","magnitude","dataCount","magnitudeValue","force","GravityForce","ChangeEmitDirection","_q","SubParticleEmitMode","EmitSubParticleSystem","useVelocityAsBasis","subParticleSystem","Frame","emitProbability","q_","v_","v2_","subEmissions","onlyUsedByOther","Birth","Death","emit","setMatrixFromParticle","burstIndex","burstWaveIndex","waitEmiting","travelDistance","subEmissionState","uuid","len2","F2","G2","F3","G3","F4","G4","grad3","grad4","SimplexNoise","randomOrSeed","seed","s0","mash","toString","charCodeAt","masher","alea","aux","buildPermutationTable","perm","permMod12","noise2D","n0","n1","n2","i1","j1","ii","jj","t0","gi0","t1","gi1","gi2","noise3D","n3","k","k1","i2","j2","k2","x3","y3","z3","kk","gi3","noise4D","n4","rankx","ranky","rankz","rankw","l1","l2","i3","j3","k3","l3","w2","w3","x4","y4","z4","w4","ll","t4","gi4","TurbulenceField","octaves","velocityMultiplier","timeScale","generator","timeOffset","temp2","lvl","generators","tempV","tempQ","Noise","frequency","power","positionAmount","rotationAmount","lastPosNoise","lastRotNoise","generatorIndex","_","TextureSequencer","locations","transform","textureSequencer","loc","fromImage","img","threshold","canvas","document","createElement","ctx","getContext","drawImage","getImageData","colorSpace","SequencerFromJSON","ApplySequences","delayBetweenParticles","sequencers","pCount","delay","id","begin","inMotion","sequencer","BEZIER","appendSequencer","seq","forEach","sequencerJson","applySequences","physicsResolver","getPhysicsResolver","ApplyCollision","resolver","bounce","resolve","ColorBySpeed","speedRange","SizeBySpeed","RotationBySpeed","LimitSpeedOverLife","dampen","limit","percent","BehaviorTypes","BehaviorFromJSON","Plugins","loadPlugin","plugin","find","item","emitterShape","emitterShapes","behavior","behaviors","MeshSurfaceEmitter","mesh","_mesh","positions","getVerticesData","VertexBuffer","PositionKind","indices","getIndices","_positions","_indices","_triangleIndexToArea","area","triCount","i0","meshReferenceId","_meshReferenceId","u1","u2","idx0","idx1","idx2","cz","nx","ny","nz","uniqueId","_system","_delta","MeshSurfaceEmitterPlugin","shaderChunks","registered","registerShaderChunks","tile_pars_vertex","tile_vertex","tile_pars_fragment","tile_fragment","soft_pars_vertex","soft_vertex","soft_pars_fragment","soft_fragment","RenderMode","particle_vert","particle_frag","local_particle_physics_vert","particle_physics_frag","stretched_bb_particle_vert","trail_vert","trail_frag","VFXBatch","settings","scene","maxParticles","systems","Set","instancingGeometry","instancingIndices","instancingUVs","instancingNormals","renderMode","renderOrder","uTileCount","vTileCount","blendTiles","softParticles","softNearFade","softFarFade","materialBlendMode","materialTransparent","materialDepthTest","materialDepthWrite","materialAlphaTest","texture","layerMask","Mesh","alwaysSelectAsActiveMesh","addSystem","removeSystem","delete","getVisibleSystems","visibleSystems","visible","applyDepthTexture","depthTexture","material","ShaderMaterial","setTexture","dispose","SpriteBatch","vector_","vector2_","vector3_","quaternion_","quaternion2_","quaternion3_","rotationMat_","rotationMat2_","lastStretchedSpeedFactor","NaN","setupBuffers","rebuildMaterial","vertexData","VertexData","uvs","normals","applyToMesh","buildExpandableBuffers","engine","getEngine","offsetBuffer","offsetVB","setVerticesBuffer","colorBuffer","colorVB","sizeBuffer","sizeVB","uvTileBuffer","uvTileVB","rotationBuffer","rotationVB","StretchedBillBoard","velocityBuffer","velocityVB","forcedInstanceCount","doNotSyncBoundingInfo","expandBuffers","shaderName","Date","now","vertexShader","fragmentShader","defines","VerticalBillBoard","HorizontalBillBoard","Effect","ShadersStore","attributes","uniforms","samplers","mat","vertex","fragment","needAlphaBlending","setFloat","setVector2","BVector2","onBindObservable","camera","activeCamera","setVector4","BVector4","minZ","maxZ","setVector3","BVector3","backFaceCulling","alphaMode","Constants","ALPHA_DISABLE","needDepthPrePass","forceDepthWrite","disableDepthWrite","particleCount","isMeshRender","isStretchedRender","particleNum","particles","systemWorldSpace","absScaleX","absScaleY","absScaleZ","parentQ","parentMatrix","ri","oi","ci","si","speedFactor","rendererEmitterSettings","lengthFactor","vel","vi","clampedSpeedFactor","setEnabled","TrailBatch","getTrailHistoryCount","fastHistoryCount","_trailHistoryCount","buildGeometryBuffers","positionBuffer","previousBuffer","nextBuffer","uvBuffer","sideBuffer","widthBuffer","indexBuffer","setVerticesData","UVKind","ColorKind","setIndices","subarray","previousVB","nextVB","sideVB","widthVB","setBoundingInfo","BoundingInfo","subMeshes","_boundingInfo","getBoundingInfo","getRenderWidth","getRenderHeight","renderEngine","triangles","computeWorldMatrix","tileWidth","tileHeight","objectScale","particleAny","fastHistoryCapacity","_trailHistoryCapacity","fastHistoryHead","_trailHistoryHead","fastHistoryPositions","_trailHistoryPositions","fastHistorySizes","_trailHistorySizes","fastHistoryColors","_trailHistoryColors","hasFastHistory","historyCapacity","historyHead","historyPositions","historySizes","historyColors","particleHistory","particleHistoryLength","col","matrixToUse","previousNode","currentNode","nextNode","oldestFastHistoryIndex","currentX","currentY","currentZ","currentSize","currentColorX","currentColorY","currentColorZ","currentColorW","previousX","previousY","previousZ","nextX","nextY","nextZ","currentHistoryIndex","currentPosIndex","previousPosIndex","nextPosIndex","currentColorIndex","pi","ui","cci","updateVerticesData","updateIndices","getVertexBuffer","meshBoundingInfo","subMesh","verticesCount","BatchedRenderer","TransformNode","batches","systemToBatchIndex","Map","adaptivePerformanceState","enabled","targetFrameMs","minQuality","maxQuality","decreaseStep","increaseStep","currentQuality","lastFrameCpuMs","lastAppliedQuality","_renderer","setQualityFactor","getRendererSettings","batch","getScene","Trail","BillBoard","parent","deleteSystem","batchIndex","get","updateSystem","setDepthTexture","configureAdaptivePerformance","options","state","disableAdaptivePerformance","resetQuality","applyAdaptiveQuality","getAdaptivePerformanceState","quality","adaptiveState","frameStart","performance","BatchedParticleRenderer","ParticleEmitter","getWorldMatrix","_matrixWorld","isEnabled","extractFromCache","cache","metadata","clonedEmitter","copyFrom","scaling","rotationQuaternion","_quarksUUID","ensureTriangleIndices","vertexCount","out","UP","tempV2","DEFAULT_POSITIONS","DEFAULT_UVS","DEFAULT_INDICES","ParticleSystem","layers","layerMaskProxy","rendererSettings","neededToUpdateRender","materialRef","applyMaterialSettings","geometry","restart","blending","needRestart","startRotation","startLength","followLocalOrigin","startDelayTimeLeft","tempEmitterPos","normalMatrix","listeners","qualityFactor","useFastTrailHistory","firstTimeUpdate","mask","Object","defineProperty","enumerable","autoDestroy","startDelay","looping","prewarm","startLife","emissionOverTime","emissionOverDistance","emissionBursts","shape","blendMode","ALPHA_ADD","transparent","depthTest","depthWrite","alphaTest","createFallbackNormals","startTileIndex","paused","burst","count","refreshTrailHistoryMode","emitEnded","markForDestroy","prewarmed","overrides","resolvedTexture","albedoTexture","diffuseTexture","emissiveTexture","opacityTexture","baseTexture","resolvedBlendMode","resolvedTransparent","resolvedDepthTest","disableDepthTest","resolvedDepthWrite","resolvedAlphaTest","alphaCutOff","alphaCutOffValue","pause","play","stop","some","ensureTrailHistoryCapacity","capacity","trailAny","resetTrailHistory","updateFastTrailHistory","sizes","colors","posIndex","colorIndex","spawn","behaviorCount","isTrailMode","timeRatio","trailSettings","Boolean","sprite","trail","localPosition","endEmit","fire","previousEmitterPos","emitterElements","emitterMatrix","trailParticle","liveParticleCount","emissionBurstCount","totalSpawn","probability","rawCount","previousWorldPos","emitPerMeter","metaData","_options","geometries","materials","textures","images","shapes","skeletons","animations","nodes","geometryUUID","ensureGeometryMeta","materialUUID","ensureMaterialMeta","rendererEmitterSettingsJSON","toRendererSettingsJSON","version","interval","cycle","dependencies","materialMeta","materialTextureRef","resolvedGeometryEntry","resolvedGeometry","resolveGeometryData","cycleCount","sourceMaterial","behaviorJson","filter","nextSerializationId","prefix","serializationCounter","from","textureUUID","entry","uv","addBehavior","addEventListener","event","removeAllEventListeners","removeEventListener","indexOf","newBehaviors","QuarksUtil","runOnAllParticleEmitters","root","traverseNode","addToBatchRenderer","batchRenderer","setAutoDestroy","children","getChildren","child","QuarksPrefab","animationData","isPlaying","currentTime","_lastUpdateTimeMs","_tempAnimationJSON","registerBatchedRenderer","renderer","_batchedRenderer","addParticleSystemAnimation","startTime","loop","updateDuration","addThreeAnimation","clip","clipUUID","removeAnimation","animation","forceDelta","previousTime","endTime","isActive","wasActive","setTime","getDuration","resolveReferences","nodesMap","traverse","animationJSON","targetUUID","resolveTimelineClip","prefab","isArray","animationSources","animationGroups","source","found","maxDuration","ParticleMeshStandardMaterial","StandardMaterial","isParticleMeshStandardMaterial","assign","ParticleMeshPhysicsMaterial","PBRMaterial","isParticleMeshPhysicsMaterial","load","url","baseUrl","substring","lastIndexOf","response","fetch","parse","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","object","linkReferences","geom","hw","hh","parseSphereGeometry","parsed","parseBufferGeometry","widthSegments","heightSegments","phiStart","phiLength","thetaStart","thetaLength","iy","verticesRow","ix","hypot","isTopFull","isBottomFull","typedIndices","interleavedBuffers","arrayBuffers","buffers","ibDef","entries","arrayBuffer","buffer","floatArray","int32ArrayToFloat32","stride","isInterleavedBufferAttribute","attr","buf","extractInterleavedAttribute","itemSize","intArray","ArrayBuffer","int32View","_meta","_images","texDef","imageUrl","image","Texture","wrap","wrapU","mapWrapMode","wrapV","repeat","uScale","vScale","uOffset","vOffset","wAng","wrapMode","CLAMP_ADDRESSMODE","MIRROR_ADDRESSMODE","WRAP_ADDRESSMODE","matDef","matInfo","side","textureRef","blendingToAlphaMode","ALPHA_COMBINE","ALPHA_SUBTRACT","ALPHA_MULTIPLY","getGeometry","geometryId","getMaterial","materialId","selectedId","createPlaceholderNode","quarksOriginalType","createMeshNode","materialInfo","parseParticleSystem","Matrix","FromArray","Identity","childData","_meshSurfaceReferenceUUID","linkNode","meshSurfaceUUID","targetNode","subEmitter","resolved","chunkName","pluginId"],"mappings":"umBAKA,MAAMA,EAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KA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"}