@dcl/sdk 7.0.0-3532389879.commit-c89c80c → 7.0.0-3548419522.commit-ddcf4b7

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":"index.min.js","sources":["../node_modules/@dcl/ecs-math/dist/types.js","../node_modules/@dcl/ecs-math/dist/Scalar.js","../node_modules/@dcl/ecs-math/dist/Vector3.js","../node_modules/@dcl/ecs-math/dist/Plane.js","../node_modules/@dcl/ecs-math/dist/Matrix.js","../node_modules/@dcl/ecs-math/dist/Quaternion.js","../node_modules/@dcl/ecs-math/dist/Color4.js","../node_modules/@dcl/ecs-math/dist/Color3.js","../node_modules/@dcl/ecs-math/dist/index.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/inquire/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/util/minimal.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/roots.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/protobufjs/minimal.js","../src/components/generated/pb/decentraland/sdk/components/animator.gen.ts","../src/components/generated/Animator.gen.ts","../src/components/generated/pb/decentraland/sdk/components/audio_source.gen.ts","../src/components/generated/AudioSource.gen.ts","../src/components/generated/pb/decentraland/sdk/components/audio_stream.gen.ts","../src/components/generated/AudioStream.gen.ts","../src/components/generated/pb/decentraland/sdk/components/avatar_attach.gen.ts","../src/components/generated/AvatarAttach.gen.ts","../src/components/generated/pb/decentraland/common/vectors.gen.ts","../src/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.ts","../src/components/generated/AvatarModifierArea.gen.ts","../node_modules/long/src/long.js","../src/components/generated/pb/decentraland/common/colors.gen.ts","../src/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.ts","../src/components/generated/AvatarShape.gen.ts","../src/components/generated/pb/decentraland/sdk/components/billboard.gen.ts","../src/components/generated/Billboard.gen.ts","../src/components/generated/pb/decentraland/sdk/components/camera_mode.gen.ts","../src/components/generated/CameraMode.gen.ts","../src/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.ts","../src/components/generated/CameraModeArea.gen.ts","../src/components/generated/pb/decentraland/sdk/components/gltf_container.gen.ts","../src/components/generated/GltfContainer.gen.ts","../src/components/generated/pb/decentraland/common/texture.gen.ts","../src/components/generated/pb/decentraland/sdk/components/material.gen.ts","../src/components/generated/Material.gen.ts","../src/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.ts","../src/components/generated/MeshCollider.gen.ts","../src/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.ts","../src/components/generated/MeshRenderer.gen.ts","../src/components/generated/pb/decentraland/sdk/components/nft_shape.gen.ts","../src/components/generated/NftShape.gen.ts","../src/components/generated/pb/decentraland/sdk/components/raycast_result.gen.ts","../src/components/generated/pb/decentraland/sdk/components/pointer_events_result.gen.ts","../src/components/generated/PointerEventsResult.gen.ts","../src/components/generated/pb/decentraland/sdk/components/pointer_hover_feedback.gen.ts","../src/components/generated/PointerHoverFeedback.gen.ts","../src/components/generated/pb/decentraland/sdk/components/pointer_lock.gen.ts","../src/components/generated/PointerLock.gen.ts","../src/components/generated/pb/decentraland/sdk/components/raycast.gen.ts","../src/components/generated/Raycast.gen.ts","../src/components/generated/RaycastResult.gen.ts","../src/components/generated/pb/decentraland/sdk/components/text_shape.gen.ts","../src/components/generated/TextShape.gen.ts","../src/components/generated/pb/decentraland/sdk/components/ui_background.gen.ts","../src/components/generated/UiBackground.gen.ts","../src/components/generated/pb/decentraland/sdk/components/ui_text.gen.ts","../src/components/generated/UiText.gen.ts","../src/components/generated/pb/decentraland/sdk/components/ui_transform.gen.ts","../src/components/generated/UiTransform.gen.ts","../src/components/generated/pb/decentraland/sdk/components/visibility_component.gen.ts","../src/components/generated/VisibilityComponent.gen.ts","../src/components/generated/index.gen.ts","../src/components/legacy/Transform.ts","../src/components/extended/Animator.ts","../src/components/extended/MeshCollider.ts","../src/components/extended/MeshRenderer.ts","../src/components/extended/Material.ts","../src/components/index.ts","../src/schemas/Array.ts","../src/schemas/basic/Boolean.ts","../src/schemas/basic/Enum.ts","../src/schemas/basic/Float.ts","../src/schemas/basic/Integer.ts","../src/schemas/basic/String.ts","../src/schemas/custom/Color3.ts","../src/schemas/custom/Color4.ts","../src/schemas/custom/Entity.ts","../src/schemas/custom/Quaternion.ts","../src/schemas/custom/Vector3.ts","../src/schemas/Map.ts","../src/schemas/Optional.ts","../src/schemas/index.ts","../node_modules/@dcl/crdt/dist/types.js","../node_modules/@dcl/crdt/dist/index.js","../src/serialization/ByteBuffer/index.ts","../src/serialization/wireMessage.ts","../src/serialization/crdt/componentOperation.ts","../src/engine/entity-utils.ts","../src/systems/crdt/index.ts","../src/engine/readonly.ts","../src/engine/component.ts","../src/engine/entity.ts","../src/engine/systems.ts","../src/engine/index.ts","../src/systems/async-task.ts","../src/components/generated/ids.gen.ts","../src/systems/crdt/transports/rendererTransport.ts","../src/systems/events.ts","../src/engine/input.ts","../src/runtime/temp-fp/Observable.ts","../src/runtime/observables.ts","../src/runtime/initialization/dcl.ts","../src/runtime/initialization/index.ts","../src/systems/cyclicParentingChecker.ts","../src/components/generated/global.gen.ts","../src/components/generated/global.namespace.gen.ts","../src/runtime/messageBus.ts","../src/components/generated/pb/decentraland/sdk/components/common/camera_type.gen.ts","../src/components/generated/pb/decentraland/sdk/components/common/input_action.gen.ts","../src/components/generated/pb/decentraland/sdk/components/common/texts.gen.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RAD2DEG = exports.DEG2RAD = exports.Epsilon = exports.ToLinearSpace = exports.ToGammaSpace = void 0;\n/**\n * Constant used to convert a value to gamma space\n * @public\n */\nexports.ToGammaSpace = 1 / 2.2;\n/**\n * Constant used to convert a value to linear space\n * @public\n */\nexports.ToLinearSpace = 2.2;\n/**\n * Constant used to define the minimal number value in Babylon.js\n * @public\n */\nexports.Epsilon = 0.000001;\n/**\n * Constant used to convert from Euler degrees to radians\n * @public\n */\nexports.DEG2RAD = Math.PI / 180;\n/**\n * Constant used to convert from radians to Euler degrees\n * @public\n */\nexports.RAD2DEG = 360 / (Math.PI * 2);\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scalar = void 0;\n/**\n * Scalar computation library\n * @public\n */\nvar Scalar;\n(function (Scalar) {\n /**\n * Two pi constants convenient for computation.\n */\n Scalar.TwoPi = Math.PI * 2;\n /**\n * Boolean : true if the absolute difference between a and b is lower than epsilon (default = 1.401298E-45)\n * @param a - number\n * @param b - number\n * @param epsilon - (default = 1.401298E-45)\n * @returns true if the absolute difference between a and b is lower than epsilon (default = 1.401298E-45)\n */\n function withinEpsilon(a, b, epsilon = 1.401298e-45) {\n const num = a - b;\n return -epsilon <= num && num <= epsilon;\n }\n Scalar.withinEpsilon = withinEpsilon;\n /**\n * Returns a string : the upper case translation of the number i to hexadecimal.\n * @param i - number\n * @returns the upper case translation of the number i to hexadecimal.\n */\n function toHex(i) {\n const str = i.toString(16);\n if (i <= 15) {\n return ('0' + str).toUpperCase();\n }\n return str.toUpperCase();\n }\n Scalar.toHex = toHex;\n /**\n * Returns -1 if value is negative and +1 is value is positive.\n * @param _value - the value\n * @returns the value itself if it's equal to zero.\n */\n function sign(value) {\n const _value = +value; // convert to a number\n if (_value === 0 || isNaN(_value)) {\n return _value;\n }\n return _value > 0 ? 1 : -1;\n }\n Scalar.sign = sign;\n /**\n * Returns the value itself if it's between min and max.\n * Returns min if the value is lower than min.\n * Returns max if the value is greater than max.\n * @param value - the value to clmap\n * @param min - the min value to clamp to (default: 0)\n * @param max - the max value to clamp to (default: 1)\n * @returns the clamped value\n */\n function clamp(value, min = 0, max = 1) {\n return Math.min(max, Math.max(min, value));\n }\n Scalar.clamp = clamp;\n /**\n * the log2 of value.\n * @param value - the value to compute log2 of\n * @returns the log2 of value.\n */\n function log2(value) {\n return Math.log(value) * Math.LOG2E;\n }\n Scalar.log2 = log2;\n /**\n * Loops the value, so that it is never larger than length and never smaller than 0.\n *\n * This is similar to the modulo operator but it works with floating point numbers.\n * For example, using 3.0 for t and 2.5 for length, the result would be 0.5.\n * With t = 5 and length = 2.5, the result would be 0.0.\n * Note, however, that the behaviour is not defined for negative numbers as it is for the modulo operator\n * @param value - the value\n * @param length - the length\n * @returns the looped value\n */\n function repeat(value, length) {\n return value - Math.floor(value / length) * length;\n }\n Scalar.repeat = repeat;\n /**\n * Normalize the value between 0.0 and 1.0 using min and max values\n * @param value - value to normalize\n * @param min - max to normalize between\n * @param max - min to normalize between\n * @returns the normalized value\n */\n function normalize(value, min, max) {\n return (value - min) / (max - min);\n }\n Scalar.normalize = normalize;\n /**\n * Denormalize the value from 0.0 and 1.0 using min and max values\n * @param normalized - value to denormalize\n * @param min - max to denormalize between\n * @param max - min to denormalize between\n * @returns the denormalized value\n */\n function denormalize(normalized, min, max) {\n return normalized * (max - min) + min;\n }\n Scalar.denormalize = denormalize;\n /**\n * Calculates the shortest difference between two given angles given in degrees.\n * @param current - current angle in degrees\n * @param target - target angle in degrees\n * @returns the delta\n */\n function deltaAngle(current, target) {\n let num = repeat(target - current, 360.0);\n if (num > 180.0) {\n num -= 360.0;\n }\n return num;\n }\n Scalar.deltaAngle = deltaAngle;\n /**\n * PingPongs the value t, so that it is never larger than length and never smaller than 0.\n * @param tx - value\n * @param length - length\n * @returns The returned value will move back and forth between 0 and length\n */\n function pingPong(tx, length) {\n const t = repeat(tx, length * 2.0);\n return length - Math.abs(t - length);\n }\n Scalar.pingPong = pingPong;\n /**\n * Interpolates between min and max with smoothing at the limits.\n *\n * This export function interpolates between min and max in a similar way to Lerp. However, the interpolation will gradually speed up\n * from the start and slow down toward the end. This is useful for creating natural-looking animation, fading and other transitions.\n * @param from - from\n * @param to - to\n * @param tx - value\n * @returns the smooth stepped value\n */\n function smoothStep(from, to, tx) {\n let t = clamp(tx);\n t = -2.0 * t * t * t + 3.0 * t * t;\n return to * t + from * (1.0 - t);\n }\n Scalar.smoothStep = smoothStep;\n /**\n * Moves a value current towards target.\n *\n * This is essentially the same as Mathf.Lerp but instead the export function will ensure that the speed never exceeds maxDelta.\n * Negative values of maxDelta pushes the value away from target.\n * @param current - current value\n * @param target - target value\n * @param maxDelta - max distance to move\n * @returns resulting value\n */\n function moveTowards(current, target, maxDelta) {\n let result = 0;\n if (Math.abs(target - current) <= maxDelta) {\n result = target;\n }\n else {\n result = current + sign(target - current) * maxDelta;\n }\n return result;\n }\n Scalar.moveTowards = moveTowards;\n /**\n * Same as MoveTowards but makes sure the values interpolate correctly when they wrap around 360 degrees.\n *\n * Variables current and target are assumed to be in degrees. For optimization reasons, negative values of maxDelta\n * are not supported and may cause oscillation. To push current away from a target angle, add 180 to that angle instead.\n * @param current - current value\n * @param target - target value\n * @param maxDelta - max distance to move\n * @returns resulting angle\n */\n function moveTowardsAngle(current, target, maxDelta) {\n const num = deltaAngle(current, target);\n let result = 0;\n if (-maxDelta < num && num < maxDelta) {\n result = target;\n }\n else {\n result = moveTowards(current, current + num, maxDelta);\n }\n return result;\n }\n Scalar.moveTowardsAngle = moveTowardsAngle;\n /**\n * Creates a new scalar with values linearly interpolated of \"amount\" between the start scalar and the end scalar\n * @param start - start value\n * @param end - target value\n * @param amount - amount to lerp between\n * @returns the lerped value\n */\n function lerp(start, end, amount) {\n return start + (end - start) * amount;\n }\n Scalar.lerp = lerp;\n /**\n * Same as Lerp but makes sure the values interpolate correctly when they wrap around 360 degrees.\n * The parameter t is clamped to the range [0, 1]. Variables a and b are assumed to be in degrees.\n * @param start - start value\n * @param end - target value\n * @param amount - amount to lerp between\n * @returns the lerped value\n */\n function lerpAngle(start, end, amount) {\n let num = repeat(end - start, 360.0);\n if (num > 180.0) {\n num -= 360.0;\n }\n return start + num * clamp(amount);\n }\n Scalar.lerpAngle = lerpAngle;\n /**\n * Calculates the linear parameter t that produces the interpolant value within the range [a, b].\n * @param a - start value\n * @param b - target value\n * @param value - value between a and b\n * @returns the inverseLerp value\n */\n function inverseLerp(a, b, value) {\n let result = 0;\n if (a !== b) {\n result = clamp((value - a) / (b - a));\n }\n else {\n result = 0.0;\n }\n return result;\n }\n Scalar.inverseLerp = inverseLerp;\n /**\n * Returns a new scalar located for \"amount\" (float) on the Hermite spline defined by the scalars \"value1\", \"value3\", \"tangent1\", \"tangent2\".\n * {@link http://mathworld.wolfram.com/HermitePolynomial.html}\n * @param value1 - spline value\n * @param tangent1 - spline value\n * @param value2 - spline value\n * @param tangent2 - spline value\n * @param amount - input value\n * @returns hermite result\n */\n function hermite(value1, tangent1, value2, tangent2, amount) {\n const squared = amount * amount;\n const cubed = amount * squared;\n const part1 = 2.0 * cubed - 3.0 * squared + 1.0;\n const part2 = -2.0 * cubed + 3.0 * squared;\n const part3 = cubed - 2.0 * squared + amount;\n const part4 = cubed - squared;\n return value1 * part1 + value2 * part2 + tangent1 * part3 + tangent2 * part4;\n }\n Scalar.hermite = hermite;\n /**\n * Returns a random float number between and min and max values\n * @param min - min value of random\n * @param max - max value of random\n * @returns random value\n */\n function randomRange(min, max) {\n if (min === max) {\n return min;\n }\n return Math.random() * (max - min) + min;\n }\n Scalar.randomRange = randomRange;\n /**\n * This export function returns percentage of a number in a given range.\n *\n * RangeToPercent(40,20,60) will return 0.5 (50%)\n * RangeToPercent(34,0,100) will return 0.34 (34%)\n * @param num - to convert to percentage\n * @param min - min range\n * @param max - max range\n * @returns the percentage\n */\n function rangeToPercent(num, min, max) {\n return (num - min) / (max - min);\n }\n Scalar.rangeToPercent = rangeToPercent;\n /**\n * This export function returns number that corresponds to the percentage in a given range.\n *\n * PercentToRange(0.34,0,100) will return 34.\n * @param percent - to convert to number\n * @param min - min range\n * @param max - max range\n * @returns the number\n */\n function percentToRange(percent, min, max) {\n return (max - min) * percent + min;\n }\n Scalar.percentToRange = percentToRange;\n /**\n * Returns the angle converted to equivalent value between -Math.PI and Math.PI radians.\n * @param angle - The angle to normalize in radian.\n * @returns The converted angle.\n */\n function normalizeRadians(angle) {\n // More precise but slower version kept for reference.\n // tslint:disable:no-commented-out-code\n /*\n // angle = angle % Tools.TwoPi;\n // angle = (angle + Tools.TwoPi) % Tools.TwoPi;\n \n //if (angle > Math.PI) {\n //\tangle -= Tools.TwoPi;\n //}\n */\n return angle - Scalar.TwoPi * Math.floor((angle + Math.PI) / Scalar.TwoPi);\n }\n Scalar.normalizeRadians = normalizeRadians;\n})(Scalar = exports.Scalar || (exports.Scalar = {}));\n//# sourceMappingURL=Scalar.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vector3 = void 0;\nconst types_1 = require(\"./types\");\nconst Quaternion_1 = require(\"./Quaternion\");\nconst Scalar_1 = require(\"./Scalar\");\n/**\n * @public\n * Vector3 is a type and a namespace.\n * ```\n * // The namespace contains all types and functions to operates with Vector3\n * const next = Vector3.add(pointA, velocityA)\n * // The type Vector3 is an alias to Vector3.ReadonlyVector3\n * const readonlyPosition: Vector3 = Vector3.Zero()\n * readonlyPosition.x = 0.1 // this FAILS\n *\n * // For mutable usage, use `Vector3.Mutable`\n * const position: Vector3.Mutable = Vector3.One()\n * position.x = 3.0 // this WORKS\n * ```\n */\nvar Vector3;\n(function (Vector3) {\n /**\n * Gets a boolean indicating that the vector is non uniform meaning x, y or z are not all the same\n * @param vector - vector to check\n */\n function isNonUniform(vector) {\n const absX = Math.abs(vector.x);\n const absY = Math.abs(vector.y);\n if (absX !== absY) {\n return true;\n }\n const absZ = Math.abs(vector.z);\n if (absX !== absZ) {\n return true;\n }\n return false;\n }\n Vector3.isNonUniform = isNonUniform;\n /**\n * Creates a new Vector3 object from the given x, y, z (floats) coordinates.\n * @param x - defines the first coordinates (on X axis)\n * @param y - defines the second coordinates (on Y axis)\n * @param z - defines the third coordinates (on Z axis)\n */\n function create(\n /**\n * Defines the first coordinates (on X axis)\n */\n x = 0, \n /**\n * Defines the second coordinates (on Y axis)\n */\n y = 0, \n /**\n * Defines the third coordinates (on Z axis)\n */\n z = 0) {\n return { x, y, z };\n }\n Vector3.create = create;\n /**\n * Returns a new Vector3 as the result of the addition of the two given vectors.\n * @param vector1 - the first vector\n * @param vector2 - the second vector\n * @returns the resulting vector\n */\n function add(vector1, vector2) {\n return {\n x: vector1.x + vector2.x,\n y: vector1.y + vector2.y,\n z: vector1.z + vector2.z\n };\n }\n Vector3.add = add;\n /**\n * Add component by component the vector2 into dest\n * @param dest - the first vector and destination of addition\n * @param vector2 - the second vector\n */\n function addToRef(vector1, vector2, result) {\n result.x = vector1.x + vector2.x;\n result.y = vector1.y + vector2.y;\n result.z = vector1.z + vector2.z;\n }\n Vector3.addToRef = addToRef;\n /**\n * Returns a new Vector3 as the result of the substraction of the two given vectors.\n * @returns the resulting vector\n */\n function subtract(vector1, vector2) {\n return {\n x: vector1.x - vector2.x,\n y: vector1.y - vector2.y,\n z: vector1.z - vector2.z\n };\n }\n Vector3.subtract = subtract;\n /**\n * Returns a new Vector3 as the result of the substraction of the two given vectors.\n * @returns the resulting vector\n */\n function subtractToRef(vector1, vector2, result) {\n result.x = vector1.x - vector2.x;\n result.y = vector1.y - vector2.y;\n result.z = vector1.z - vector2.z;\n }\n Vector3.subtractToRef = subtractToRef;\n /**\n * Subtracts the given floats from the current Vector3 coordinates and set the given vector \"result\" with this result\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @param result - defines the Vector3 object where to store the result\n */\n function subtractFromFloatsToRef(vector1, x, y, z, result) {\n result.x = vector1.x - x;\n result.y = vector1.y - y;\n result.z = vector1.z - z;\n }\n Vector3.subtractFromFloatsToRef = subtractFromFloatsToRef;\n /**\n * Returns a new Vector3 with the other sign\n * @returns the resulting vector\n */\n function negate(value) {\n return { x: -value.x, y: -value.y, z: -value.z };\n }\n Vector3.negate = negate;\n /**\n * Copy source into dest\n *\n */\n function copyFrom(source, dest) {\n dest.x = source.x;\n dest.y = source.y;\n dest.z = source.z;\n }\n Vector3.copyFrom = copyFrom;\n /**\n * Sets the given vector \"dest\" with the given floats.\n * @param x - defines the x coordinate of the source\n * @param y - defines the y coordinate of the source\n * @param z - defines the z coordinate of the source\n * @param dest - defines the Vector3 where to store the result\n */\n function copyFromFloats(x, y, z, dest) {\n dest.x = x;\n dest.y = y;\n dest.z = z;\n }\n Vector3.copyFromFloats = copyFromFloats;\n /**\n * Returns a new Vector3 with the same value\n * @returns the resulting vector\n */\n function clone(source) {\n return create(source.x, source.y, source.z);\n }\n Vector3.clone = clone;\n /**\n * Get the clip factor between two vectors\n * @param vector0 - defines the first operand\n * @param vector1 - defines the second operand\n * @param axis - defines the axis to use\n * @param size - defines the size along the axis\n * @returns the clip factor\n */\n function getClipFactor(vector0, vector1, axis, size) {\n const d0 = dot(vector0, axis) - size;\n const d1 = dot(vector1, axis) - size;\n const s = d0 / (d0 - d1);\n return s;\n }\n Vector3.getClipFactor = getClipFactor;\n /**\n * Get angle between two vectors\n * @param vector0 - angle between vector0 and vector1\n * @param vector1 - angle between vector0 and vector1\n * @param normal - direction of the normal\n * @returns the angle between vector0 and vector1\n */\n function getAngleBetweenVectors(vector0, vector1, normal) {\n const v0 = normalize(vector0);\n const v1 = normalize(vector1);\n const v0v1dot = dot(v0, v1);\n const n = create();\n crossToRef(v0, v1, n);\n if (dot(n, normal) > 0) {\n return Math.acos(v0v1dot);\n }\n return -Math.acos(v0v1dot);\n }\n Vector3.getAngleBetweenVectors = getAngleBetweenVectors;\n /**\n * Returns a new Vector3 set from the index \"offset\" of the given array\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @returns the new Vector3\n */\n function fromArray(array, offset = 0) {\n return create(array[offset], array[offset + 1], array[offset + 2]);\n }\n Vector3.fromArray = fromArray;\n /**\n * Returns a new Vector3 set from the index \"offset\" of the given FloatArray\n * This function is deprecated. Use FromArray instead\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @returns the new Vector3\n */\n function fromFloatArray(array, offset) {\n return fromArray(array, offset);\n }\n Vector3.fromFloatArray = fromFloatArray;\n /**\n * Sets the given vector \"result\" with the element values from the index \"offset\" of the given array\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @param result - defines the Vector3 where to store the result\n */\n function fromArrayToRef(array, offset, result) {\n result.x = array[offset];\n result.y = array[offset + 1];\n result.z = array[offset + 2];\n }\n Vector3.fromArrayToRef = fromArrayToRef;\n /**\n * Sets the given vector \"result\" with the element values from the index \"offset\" of the given FloatArray\n * This function is deprecated. Use FromArrayToRef instead.\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @param result - defines the Vector3 where to store the result\n */\n function fromFloatArrayToRef(array, offset, result) {\n return fromArrayToRef(array, offset, result);\n }\n Vector3.fromFloatArrayToRef = fromFloatArrayToRef;\n // Properties\n /**\n * Gets the length of the Vector3\n * @returns the length of the Vector3\n */\n function length(vector) {\n return Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z);\n }\n Vector3.length = length;\n /**\n * Gets the squared length of the Vector3\n * @returns squared length of the Vector3\n */\n function lengthSquared(vector) {\n return vector.x * vector.x + vector.y * vector.y + vector.z * vector.z;\n }\n Vector3.lengthSquared = lengthSquared;\n /**\n * Returns a new Vector3 set with the current Vector3 coordinates multiplied by the float \"scale\"\n * @param scale - defines the multiplier factor\n * @returns a new Vector3\n */\n function scaleToRef(vector, scale, result) {\n result.x = vector.x * scale;\n result.y = vector.y * scale;\n result.z = vector.z * scale;\n }\n Vector3.scaleToRef = scaleToRef;\n /**\n * Returns a new Vector3 set with the current Vector3 coordinates multiplied by the float \"scale\"\n * @param scale - defines the multiplier factor\n * @returns a new Vector3\n */\n function scale(vector, scale) {\n return create(vector.x * scale, vector.y * scale, vector.z * scale);\n }\n Vector3.scale = scale;\n /**\n * Normalize the current Vector3 with the given input length.\n * Please note that this is an in place operation.\n * @param len - the length of the vector\n * @returns the current updated Vector3\n */\n function normalizeFromLength(vector, len) {\n const result = create(0, 0, 0);\n normalizeFromLengthToRef(vector, len, result);\n return result;\n }\n Vector3.normalizeFromLength = normalizeFromLength;\n /**\n * Normalize the current Vector3 with the given input length.\n * Please note that this is an in place operation.\n * @param len - the length of the vector\n * @returns the current updated Vector3\n */\n function normalizeFromLengthToRef(vector, len, result) {\n if (len === 0 || len === 1.0) {\n copyFrom(vector, result);\n return;\n }\n scaleToRef(vector, 1.0 / len, result);\n }\n Vector3.normalizeFromLengthToRef = normalizeFromLengthToRef;\n /**\n * Normalize the current Vector3.\n * Please note that this is an in place operation.\n * @returns the current updated Vector3\n */\n function normalize(vector) {\n return normalizeFromLength(vector, length(vector));\n }\n Vector3.normalize = normalize;\n /**\n * Normalize the current Vector3.\n * Please note that this is an in place operation.\n * @returns the current updated Vector3\n */\n function normalizeToRef(vector, result) {\n normalizeFromLengthToRef(vector, length(vector), result);\n }\n Vector3.normalizeToRef = normalizeToRef;\n /**\n * Returns the dot product (float) between the vectors \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the dot product\n */\n function dot(left, right) {\n return left.x * right.x + left.y * right.y + left.z * right.z;\n }\n Vector3.dot = dot;\n /**\n * Multiplies this vector (with an implicit 1 in the 4th dimension) and m, and divides by perspective\n * @param matrix - The transformation matrix\n * @returns result Vector3\n */\n function applyMatrix4(vector, matrix) {\n const result = clone(vector);\n applyMatrix4ToRef(vector, matrix, result);\n return result;\n }\n Vector3.applyMatrix4 = applyMatrix4;\n /**\n * Multiplies this vector (with an implicit 1 in the 4th dimension) and m, and divides by perspective and set the given vector \"result\" with this result\n * @param matrix - The transformation matrix\n * @param result - defines the Vector3 object where to store the result\n */\n function applyMatrix4ToRef(vector, matrix, result) {\n const { x, y, z } = vector;\n const m = matrix._m;\n const w = 1 / (m[3] * x + m[7] * y + m[11] * z + m[15]);\n result.x = (m[0] * x + m[4] * y + m[8] * z + m[12]) * w;\n result.y = (m[1] * x + m[5] * y + m[9] * z + m[13]) * w;\n result.z = (m[2] * x + m[6] * y + m[10] * z + m[14]) * w;\n }\n Vector3.applyMatrix4ToRef = applyMatrix4ToRef;\n /**\n * Rotates the current Vector3 based on the given quaternion\n * @param q - defines the Quaternion\n * @returns the current Vector3\n */\n function rotate(vector, q) {\n const result = create();\n rotateToRef(vector, q, result);\n return result;\n }\n Vector3.rotate = rotate;\n /**\n * Rotates current Vector3 based on the given quaternion, but applies the rotation to target Vector3.\n * @param q - defines the Quaternion\n * @param result - defines the target Vector3\n * @returns the current Vector3\n */\n function rotateToRef(vector, q, result) {\n const { x, y, z } = vector;\n const { x: qx, y: qy, z: qz, w: qw } = q;\n // calculate quat * vector\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n // calculate result * inverse quat\n result.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n result.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n result.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n }\n Vector3.rotateToRef = rotateToRef;\n /**\n * Returns a new Vector3 located for \"amount\" (float) on the linear interpolation between the vectors \"start\" and \"end\"\n * @param start - defines the start value\n * @param end - defines the end value\n * @param amount - max defines amount between both (between 0 and 1)\n * @returns the new Vector3\n */\n function lerp(start, end, amount) {\n const result = create(0, 0, 0);\n lerpToRef(start, end, amount, result);\n return result;\n }\n Vector3.lerp = lerp;\n /**\n * Sets the given vector \"result\" with the result of the linear interpolation from the vector \"start\" for \"amount\" to the vector \"end\"\n * @param start - defines the start value\n * @param end - defines the end value\n * @param amount - max defines amount between both (between 0 and 1)\n * @param result - defines the Vector3 where to store the result\n */\n function lerpToRef(start, end, amount, result) {\n result.x = start.x + (end.x - start.x) * amount;\n result.y = start.y + (end.y - start.y) * amount;\n result.z = start.z + (end.z - start.z) * amount;\n }\n Vector3.lerpToRef = lerpToRef;\n /**\n * Returns a new Vector3 as the cross product of the vectors \"left\" and \"right\"\n * The cross product is then orthogonal to both \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the cross product\n */\n function cross(left, right) {\n const result = Zero();\n crossToRef(left, right, result);\n return result;\n }\n Vector3.cross = cross;\n /**\n * Sets the given vector \"result\" with the cross product of \"left\" and \"right\"\n * The cross product is then orthogonal to both \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @param result - defines the Vector3 where to store the result\n */\n function crossToRef(left, right, result) {\n result.x = left.y * right.z - left.z * right.y;\n result.y = left.z * right.x - left.x * right.z;\n result.z = left.x * right.y - left.y * right.x;\n }\n Vector3.crossToRef = crossToRef;\n /**\n * Returns a new Vector3 set with the result of the transformation by the given matrix of the given vector.\n * This method computes tranformed coordinates only, not transformed direction vectors (ie. it takes translation in account)\n * @param vector - defines the Vector3 to transform\n * @param transformation - defines the transformation matrix\n * @returns the transformed Vector3\n */\n function transformCoordinates(vector, transformation) {\n const result = Zero();\n transformCoordinatesToRef(vector, transformation, result);\n return result;\n }\n Vector3.transformCoordinates = transformCoordinates;\n /**\n * Sets the given vector \"result\" coordinates with the result of the transformation by the given matrix of the given vector\n * This method computes tranformed coordinates only, not transformed direction vectors (ie. it takes translation in account)\n * @param vector - defines the Vector3 to transform\n * @param transformation - defines the transformation matrix\n * @param result - defines the Vector3 where to store the result\n */\n function transformCoordinatesToRef(vector, transformation, result) {\n return transformCoordinatesFromFloatsToRef(vector.x, vector.y, vector.z, transformation, result);\n }\n Vector3.transformCoordinatesToRef = transformCoordinatesToRef;\n /**\n * Sets the given vector \"result\" coordinates with the result of the transformation by the given matrix of the given floats (x, y, z)\n * This method computes tranformed coordinates only, not transformed direction vectors\n * @param x - define the x coordinate of the source vector\n * @param y - define the y coordinate of the source vector\n * @param z - define the z coordinate of the source vector\n * @param transformation - defines the transformation matrix\n * @param result - defines the Vector3 where to store the result\n */\n function transformCoordinatesFromFloatsToRef(x, y, z, transformation, result) {\n const m = transformation._m;\n const rx = x * m[0] + y * m[4] + z * m[8] + m[12];\n const ry = x * m[1] + y * m[5] + z * m[9] + m[13];\n const rz = x * m[2] + y * m[6] + z * m[10] + m[14];\n const rw = 1 / (x * m[3] + y * m[7] + z * m[11] + m[15]);\n result.x = rx * rw;\n result.y = ry * rw;\n result.z = rz * rw;\n }\n Vector3.transformCoordinatesFromFloatsToRef = transformCoordinatesFromFloatsToRef;\n /**\n * Returns a new Vector3 set with the result of the normal transformation by the given matrix of the given vector\n * This methods computes transformed normalized direction vectors only (ie. it does not apply translation)\n * @param vector - defines the Vector3 to transform\n * @param transformation - defines the transformation matrix\n * @returns the new Vector3\n */\n function transformNormal(vector, transformation) {\n const result = Zero();\n transformNormalToRef(vector, transformation, result);\n return result;\n }\n Vector3.transformNormal = transformNormal;\n /**\n * Sets the given vector \"result\" with the result of the normal transformation by the given matrix of the given vector\n * This methods computes transformed normalized direction vectors only (ie. it does not apply translation)\n * @param vector - defines the Vector3 to transform\n * @param transformation - defines the transformation matrix\n * @param result - defines the Vector3 where to store the result\n */\n function transformNormalToRef(vector, transformation, result) {\n transformNormalFromFloatsToRef(vector.x, vector.y, vector.z, transformation, result);\n }\n Vector3.transformNormalToRef = transformNormalToRef;\n /**\n * Sets the given vector \"result\" with the result of the normal transformation by the given matrix of the given floats (x, y, z)\n * This methods computes transformed normalized direction vectors only (ie. it does not apply translation)\n * @param x - define the x coordinate of the source vector\n * @param y - define the y coordinate of the source vector\n * @param z - define the z coordinate of the source vector\n * @param transformation - defines the transformation matrix\n * @param result - defines the Vector3 where to store the result\n */\n function transformNormalFromFloatsToRef(x, y, z, transformation, result) {\n const m = transformation._m;\n result.x = x * m[0] + y * m[4] + z * m[8];\n result.y = x * m[1] + y * m[5] + z * m[9];\n result.z = x * m[2] + y * m[6] + z * m[10];\n }\n Vector3.transformNormalFromFloatsToRef = transformNormalFromFloatsToRef;\n /**\n * Returns a new Vector3 located for \"amount\" on the CatmullRom interpolation spline defined by the vectors \"value1\", \"value2\", \"value3\", \"value4\"\n * @param value1 - defines the first control point\n * @param value2 - defines the second control point\n * @param value3 - defines the third control point\n * @param value4 - defines the fourth control point\n * @param amount - defines the amount on the spline to use\n * @returns the new Vector3\n */\n function catmullRom(value1, value2, value3, value4, amount) {\n const squared = amount * amount;\n const cubed = amount * squared;\n const x = 0.5 *\n (2.0 * value2.x +\n (-value1.x + value3.x) * amount +\n (2.0 * value1.x - 5.0 * value2.x + 4.0 * value3.x - value4.x) *\n squared +\n (-value1.x + 3.0 * value2.x - 3.0 * value3.x + value4.x) * cubed);\n const y = 0.5 *\n (2.0 * value2.y +\n (-value1.y + value3.y) * amount +\n (2.0 * value1.y - 5.0 * value2.y + 4.0 * value3.y - value4.y) *\n squared +\n (-value1.y + 3.0 * value2.y - 3.0 * value3.y + value4.y) * cubed);\n const z = 0.5 *\n (2.0 * value2.z +\n (-value1.z + value3.z) * amount +\n (2.0 * value1.z - 5.0 * value2.z + 4.0 * value3.z - value4.z) *\n squared +\n (-value1.z + 3.0 * value2.z - 3.0 * value3.z + value4.z) * cubed);\n return create(x, y, z);\n }\n Vector3.catmullRom = catmullRom;\n /**\n * Returns a new Vector3 set with the coordinates of \"value\", if the vector \"value\" is in the cube defined by the vectors \"min\" and \"max\"\n * If a coordinate value of \"value\" is lower than one of the \"min\" coordinate, then this \"value\" coordinate is set with the \"min\" one\n * If a coordinate value of \"value\" is greater than one of the \"max\" coordinate, then this \"value\" coordinate is set with the \"max\" one\n * @param value - defines the current value\n * @param min - defines the lower range value\n * @param max - defines the upper range value\n * @returns the new Vector3\n */\n function clamp(value, min, max) {\n const v = create();\n clampToRef(value, min, max, v);\n return v;\n }\n Vector3.clamp = clamp;\n /**\n * Sets the given vector \"result\" with the coordinates of \"value\", if the vector \"value\" is in the cube defined by the vectors \"min\" and \"max\"\n * If a coordinate value of \"value\" is lower than one of the \"min\" coordinate, then this \"value\" coordinate is set with the \"min\" one\n * If a coordinate value of \"value\" is greater than one of the \"max\" coordinate, then this \"value\" coordinate is set with the \"max\" one\n * @param value - defines the current value\n * @param min - defines the lower range value\n * @param max - defines the upper range value\n * @param result - defines the Vector3 where to store the result\n */\n function clampToRef(value, min, max, result) {\n let x = value.x;\n x = x > max.x ? max.x : x;\n x = x < min.x ? min.x : x;\n let y = value.y;\n y = y > max.y ? max.y : y;\n y = y < min.y ? min.y : y;\n let z = value.z;\n z = z > max.z ? max.z : z;\n z = z < min.z ? min.z : z;\n copyFromFloats(x, y, z, result);\n }\n Vector3.clampToRef = clampToRef;\n /**\n * Returns a new Vector3 located for \"amount\" (float) on the Hermite interpolation spline defined by the vectors \"value1\", \"tangent1\", \"value2\", \"tangent2\"\n * @param value1 - defines the first control point\n * @param tangent1 - defines the first tangent vector\n * @param value2 - defines the second control point\n * @param tangent2 - defines the second tangent vector\n * @param amount - defines the amount on the interpolation spline (between 0 and 1)\n * @returns the new Vector3\n */\n function hermite(value1, tangent1, value2, tangent2, amount) {\n const squared = amount * amount;\n const cubed = amount * squared;\n const part1 = 2.0 * cubed - 3.0 * squared + 1.0;\n const part2 = -2.0 * cubed + 3.0 * squared;\n const part3 = cubed - 2.0 * squared + amount;\n const part4 = cubed - squared;\n const x = value1.x * part1 +\n value2.x * part2 +\n tangent1.x * part3 +\n tangent2.x * part4;\n const y = value1.y * part1 +\n value2.y * part2 +\n tangent1.y * part3 +\n tangent2.y * part4;\n const z = value1.z * part1 +\n value2.z * part2 +\n tangent1.z * part3 +\n tangent2.z * part4;\n return create(x, y, z);\n }\n Vector3.hermite = hermite;\n /**\n * Gets the minimal coordinate values between two Vector3\n * @param left - defines the first operand\n * @param right - defines the second operand\n * @returns the new Vector3\n */\n function minimize(left, right) {\n const min = create();\n minimizeInPlaceFromFloatsToRef(right, left.x, left.y, left.z, min);\n return min;\n }\n Vector3.minimize = minimize;\n /**\n * Gets the maximal coordinate values between two Vector3\n * @param left - defines the first operand\n * @param right - defines the second operand\n * @returns the new Vector3\n */\n function maximize(left, right) {\n const max = create();\n maximizeInPlaceFromFloatsToRef(left, right.x, right.y, right.z, max);\n return max;\n }\n Vector3.maximize = maximize;\n /**\n * Returns the distance between the vectors \"value1\" and \"value2\"\n * @param value1 - defines the first operand\n * @param value2 - defines the second operand\n * @returns the distance\n */\n function distance(value1, value2) {\n return Math.sqrt(distanceSquared(value1, value2));\n }\n Vector3.distance = distance;\n /**\n * Returns the squared distance between the vectors \"value1\" and \"value2\"\n * @param value1 - defines the first operand\n * @param value2 - defines the second operand\n * @returns the squared distance\n */\n function distanceSquared(value1, value2) {\n const x = value1.x - value2.x;\n const y = value1.y - value2.y;\n const z = value1.z - value2.z;\n return x * x + y * y + z * z;\n }\n Vector3.distanceSquared = distanceSquared;\n /**\n * Returns a new Vector3 located at the center between \"value1\" and \"value2\"\n * @param value1 - defines the first operand\n * @param value2 - defines the second operand\n * @returns the new Vector3\n */\n function center(value1, value2) {\n const center = add(value1, value2);\n scaleToRef(center, 0.5, center);\n return center;\n }\n Vector3.center = center;\n /**\n * Given three orthogonal normalized left-handed oriented Vector3 axis in space (target system),\n * RotationFromAxis() returns the rotation Euler angles (ex : rotation.x, rotation.y, rotation.z) to apply\n * to something in order to rotate it from its local system to the given target system\n * Note: axis1, axis2 and axis3 are normalized during this operation\n * @param axis1 - defines the first axis\n * @param axis2 - defines the second axis\n * @param axis3 - defines the third axis\n * @returns a new Vector3\n */\n function rotationFromAxis(axis1, axis2, axis3) {\n const rotation = Zero();\n rotationFromAxisToRef(axis1, axis2, axis3, rotation);\n return rotation;\n }\n Vector3.rotationFromAxis = rotationFromAxis;\n /**\n * The same than RotationFromAxis but updates the given ref Vector3 parameter instead of returning a new Vector3\n * @param axis1 - defines the first axis\n * @param axis2 - defines the second axis\n * @param axis3 - defines the third axis\n * @param ref - defines the Vector3 where to store the result\n */\n function rotationFromAxisToRef(axis1, axis2, axis3, result) {\n const quat = Quaternion_1.Quaternion.create();\n Quaternion_1.Quaternion.fromAxisToRotationQuaternionToRef(axis1, axis2, axis3, quat);\n copyFrom(Quaternion_1.Quaternion.toEulerAngles(quat), result);\n }\n Vector3.rotationFromAxisToRef = rotationFromAxisToRef;\n /**\n * Creates a string representation of the Vector3\n * @returns a string with the Vector3 coordinates.\n */\n function toString(vector) {\n return `(${vector.x}, ${vector.y}, ${vector.z})`;\n }\n Vector3.toString = toString;\n /**\n * Creates the Vector3 hash code\n * @returns a number which tends to be unique between Vector3 instances\n */\n function getHashCode(vector) {\n let hash = vector.x || 0;\n hash = (hash * 397) ^ (vector.y || 0);\n hash = (hash * 397) ^ (vector.z || 0);\n return hash;\n }\n Vector3.getHashCode = getHashCode;\n /**\n * Returns true if the vector1 and the vector2 coordinates are strictly equal\n * @param vector1 - defines the first operand\n * @param vector2 - defines the second operand\n * @returns true if both vectors are equals\n */\n function equals(vector1, vector2) {\n return (vector1.x === vector2.x &&\n vector1.y === vector2.y &&\n vector1.z === vector2.z);\n }\n Vector3.equals = equals;\n /**\n * Returns true if the current Vector3 and the given vector coordinates are distant less than epsilon\n * @param otherVector - defines the second operand\n * @param epsilon - defines the minimal distance to define values as equals\n * @returns true if both vectors are distant less than epsilon\n */\n function equalsWithEpsilon(vector1, vector2, epsilon = types_1.Epsilon) {\n return (Scalar_1.Scalar.withinEpsilon(vector1.x, vector2.x, epsilon) &&\n Scalar_1.Scalar.withinEpsilon(vector1.y, vector2.y, epsilon) &&\n Scalar_1.Scalar.withinEpsilon(vector1.z, vector2.z, epsilon));\n }\n Vector3.equalsWithEpsilon = equalsWithEpsilon;\n /**\n * Returns true if the current Vector3 coordinates equals the given floats\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @returns true if both vectors are equals\n */\n function equalsToFloats(vector, x, y, z) {\n return vector.x === x && vector.y === y && vector.z === z;\n }\n Vector3.equalsToFloats = equalsToFloats;\n /**\n * Returns a new Vector3, result of the multiplication of vector1 by the vector2\n * @param vector1 - defines the first operand\n * @param vector2 - defines the second operand\n * @returns the new Vector3\n */\n function multiply(vector1, vector2) {\n const result = create();\n multiplyToRef(vector1, vector2, result);\n return result;\n }\n Vector3.multiply = multiply;\n /**\n * Multiplies the current Vector3 by the given one and stores the result in the given vector \"result\"\n * @param otherVector - defines the second operand\n * @param result - defines the Vector3 object where to store the result\n * @returns the current Vector3\n */\n function multiplyToRef(vector1, vector2, result) {\n result.x = vector1.x * vector2.x;\n result.y = vector1.y * vector2.y;\n result.z = vector1.z * vector2.z;\n }\n Vector3.multiplyToRef = multiplyToRef;\n /**\n * Returns a new Vector3 set with the result of the mulliplication of the current Vector3 coordinates by the given floats\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @returns the new Vector3\n */\n function multiplyByFloatsToRef(vector1, x, y, z, result) {\n result.x = vector1.x * x;\n result.y = vector1.y * y;\n result.z = vector1.z * z;\n }\n Vector3.multiplyByFloatsToRef = multiplyByFloatsToRef;\n /**\n * Returns a new Vector3 set with the result of the mulliplication of the current Vector3 coordinates by the given floats\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @returns the new Vector3\n */\n function multiplyByFloats(vector1, x, y, z) {\n const result = create();\n multiplyByFloatsToRef(vector1, x, y, z, result);\n return result;\n }\n Vector3.multiplyByFloats = multiplyByFloats;\n /**\n * Returns a new Vector3 set with the result of the division of the current Vector3 coordinates by the given ones\n * @param otherVector - defines the second operand\n * @returns the new Vector3\n */\n function divide(vector1, vector2) {\n return {\n x: vector1.x / vector2.x,\n y: vector1.y / vector2.y,\n z: vector1.z / vector2.z\n };\n }\n Vector3.divide = divide;\n /**\n * Divides the current Vector3 coordinates by the given ones and stores the result in the given vector \"result\"\n * @param otherVector - defines the second operand\n * @param result - defines the Vector3 object where to store the result\n * @returns the current Vector3\n */\n function divideToRef(vector1, vector2, result) {\n result.x = vector1.x / vector2.x;\n result.y = vector1.y / vector2.y;\n result.z = vector1.z / vector2.z;\n }\n Vector3.divideToRef = divideToRef;\n /**\n * Set result Vector3 with the maximal coordinate values between vector1 and the given coordinates\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @param result - the set Vector3\n */\n function maximizeInPlaceFromFloatsToRef(vector1, x, y, z, result) {\n if (x > vector1.x) {\n result.x = x;\n }\n else {\n result.x = vector1.x;\n }\n if (y > vector1.y) {\n result.y = y;\n }\n else {\n result.y = vector1.y;\n }\n if (z > vector1.z) {\n result.z = z;\n }\n else {\n result.z = vector1.z;\n }\n }\n Vector3.maximizeInPlaceFromFloatsToRef = maximizeInPlaceFromFloatsToRef;\n /**\n * Set result Vector3 with the minimal coordinate values between vector1 and the given coordinates\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @param result - the set Vector3\n */\n function minimizeInPlaceFromFloatsToRef(vector1, x, y, z, result) {\n if (x < vector1.x) {\n result.x = x;\n }\n else {\n result.x = vector1.x;\n }\n if (y < vector1.y) {\n result.y = y;\n }\n else {\n result.y = vector1.y;\n }\n if (z < vector1.z) {\n result.z = z;\n }\n else {\n result.z = vector1.z;\n }\n }\n Vector3.minimizeInPlaceFromFloatsToRef = minimizeInPlaceFromFloatsToRef;\n /**\n * Gets a new Vector3 from vector1 floored values\n * @returns a new Vector3\n */\n function floor(vector1) {\n return create(Math.floor(vector1.x), Math.floor(vector1.y), Math.floor(vector1.z));\n }\n Vector3.floor = floor;\n /**\n * Gets a new Vector3 from vector1 floored values\n * @returns a new Vector3\n */\n function fract(vector1) {\n return create(vector1.x - Math.floor(vector1.x), vector1.y - Math.floor(vector1.y), vector1.z - Math.floor(vector1.z));\n }\n Vector3.fract = fract;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, 0.0)\n * @returns a new empty Vector3\n */\n function Zero() {\n return create(0.0, 0.0, 0.0);\n }\n Vector3.Zero = Zero;\n /**\n * Returns a new Vector3 set to (1.0, 1.0, 1.0)\n * @returns a new unit Vector3\n */\n function One() {\n return create(1.0, 1.0, 1.0);\n }\n Vector3.One = One;\n /**\n * Returns a new Vector3 set tolengthSquared (0.0, 1.0, 0.0)\n * @returns a new up Vector3\n */\n function Up() {\n return create(0.0, 1.0, 0.0);\n }\n Vector3.Up = Up;\n /**\n * Returns a new Vector3 set to (0.0, -1.0, 0.0)\n * @returns a new down Vector3\n */\n function Down() {\n return create(0.0, -1.0, 0.0);\n }\n Vector3.Down = Down;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, 1.0)\n * @returns a new forward Vector3\n */\n function Forward() {\n return create(0.0, 0.0, 1.0);\n }\n Vector3.Forward = Forward;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, -1.0)\n * @returns a new forward Vector3\n */\n function Backward() {\n return create(0.0, 0.0, -1.0);\n }\n Vector3.Backward = Backward;\n /**\n * Returns a new Vector3 set to (1.0, 0.0, 0.0)\n * @returns a new right Vector3\n */\n function Right() {\n return create(1.0, 0.0, 0.0);\n }\n Vector3.Right = Right;\n /**\n * Returns a new Vector3 set to (-1.0, 0.0, 0.0)\n * @returns a new left Vector3\n */\n function Left() {\n return create(-1.0, 0.0, 0.0);\n }\n Vector3.Left = Left;\n /**\n * Returns a new random Vector3\n * @returns a random Vector3\n */\n function Random() {\n return create(Math.random(), Math.random(), Math.random());\n }\n Vector3.Random = Random;\n})(Vector3 = exports.Vector3 || (exports.Vector3 = {}));\n//# sourceMappingURL=Vector3.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Plane = void 0;\nconst Vector3_1 = require(\"./Vector3\");\nconst Matrix_1 = require(\"./Matrix\");\n/**\n * Represens a plane by the equation ax + by + cz + d = 0\n * @public\n */\nvar Plane;\n(function (Plane) {\n /**\n * Creates a Plane object according to the given floats a, b, c, d and the plane equation : ax + by + cz + d = 0\n * @param a - a component of the plane\n * @param b - b component of the plane\n * @param c - c component of the plane\n * @param d - d component of the plane\n */\n function create(a, b, c, d) {\n return {\n normal: Vector3_1.Vector3.create(a, b, c),\n d: d\n };\n }\n Plane.create = create;\n // Statics\n /**\n * Creates a plane from an array\n * @param array - the array to create a plane from\n * @returns a new Plane from the given array.\n */\n function fromArray(array) {\n return create(array[0], array[1], array[2], array[3]);\n }\n Plane.fromArray = fromArray;\n /**\n * Creates a plane from three points\n * @param point1 - point used to create the plane\n * @param point2 - point used to create the plane\n * @param point3 - point used to create the plane\n * @returns a new Plane defined by the three given points.\n */\n function fromPoints(_point1, _point2, _point3) {\n const result = create(0.0, 0.0, 0.0, 0.0);\n // TODO\n // result.copyFromPoints(point1, point2, point3)\n return result;\n }\n Plane.fromPoints = fromPoints;\n /**\n * Creates a plane from an origin point and a normal\n * @param origin - origin of the plane to be constructed\n * @param normal - normal of the plane to be constructed\n * @returns a new Plane the normal vector to this plane at the given origin point.\n * Note : the vector \"normal\" is updated because normalized.\n */\n function romPositionAndNormal(origin, normal) {\n const result = create(0.0, 0.0, 0.0, 0.0);\n result.normal = Vector3_1.Vector3.normalize(normal);\n result.d = -(normal.x * origin.x +\n normal.y * origin.y +\n normal.z * origin.z);\n return result;\n }\n Plane.romPositionAndNormal = romPositionAndNormal;\n /**\n * Calculates the distance from a plane and a point\n * @param origin - origin of the plane to be constructed\n * @param normal - normal of the plane to be constructed\n * @param point - point to calculate distance to\n * @returns the signed distance between the plane defined by the normal vector at the \"origin\"\" point and the given other point.\n */\n function signedDistanceToPlaneFromPositionAndNormal(origin, normal, point) {\n const d = -(normal.x * origin.x + normal.y * origin.y + normal.z * origin.z);\n return Vector3_1.Vector3.dot(point, normal) + d;\n }\n Plane.signedDistanceToPlaneFromPositionAndNormal = signedDistanceToPlaneFromPositionAndNormal;\n /**\n * @returns the plane coordinates as a new array of 4 elements [a, b, c, d].\n */\n function asArray(plane) {\n return [plane.normal.x, plane.normal.y, plane.normal.z, plane.d];\n }\n Plane.asArray = asArray;\n // Methods\n /**\n * @returns a new plane copied from the current Plane.\n */\n function clone(plane) {\n return create(plane.normal.x, plane.normal.y, plane.normal.z, plane.d);\n }\n Plane.clone = clone;\n /**\n * @returns the Plane hash code.\n */\n function getHashCode(_plane) {\n // TODO\n // let hash = plane.normal.getHashCode()\n // hash = (hash * 397) ^ (plane.d || 0)\n // return hash\n return 0;\n }\n Plane.getHashCode = getHashCode;\n /**\n * Normalize the current Plane in place.\n * @returns the updated Plane.\n */\n function normalize(plane) {\n const result = create(0, 0, 0, 0);\n const norm = Math.sqrt(plane.normal.x * plane.normal.x +\n plane.normal.y * plane.normal.y +\n plane.normal.z * plane.normal.z);\n let magnitude = 0.0;\n if (norm !== 0) {\n magnitude = 1.0 / norm;\n }\n result.normal.x = plane.normal.x * magnitude;\n result.normal.y = plane.normal.y * magnitude;\n result.normal.z = plane.normal.z * magnitude;\n result.d *= magnitude;\n return plane;\n }\n Plane.normalize = normalize;\n /**\n * Applies a transformation the plane and returns the result\n * @param transformation - the transformation matrix to be applied to the plane\n * @returns a new Plane as the result of the transformation of the current Plane by the given matrix.\n */\n function transform(plane, transformation) {\n const transposedMatrix = Matrix_1.Matrix.create();\n Matrix_1.Matrix.transposeToRef(transformation, transposedMatrix);\n const m = transposedMatrix._m;\n const x = plane.normal.x;\n const y = plane.normal.y;\n const z = plane.normal.z;\n const d = plane.d;\n const normalX = x * m[0] + y * m[1] + z * m[2] + d * m[3];\n const normalY = x * m[4] + y * m[5] + z * m[6] + d * m[7];\n const normalZ = x * m[8] + y * m[9] + z * m[10] + d * m[11];\n const finalD = x * m[12] + y * m[13] + z * m[14] + d * m[15];\n return create(normalX, normalY, normalZ, finalD);\n }\n Plane.transform = transform;\n /**\n * Calcualtte the dot product between the point and the plane normal\n * @param point - point to calculate the dot product with\n * @returns the dot product (float) of the point coordinates and the plane normal.\n */\n function dotCoordinate(plane, point) {\n return (plane.normal.x * point.x +\n plane.normal.y * point.y +\n plane.normal.z * point.z +\n plane.d);\n }\n Plane.dotCoordinate = dotCoordinate;\n /**\n * Updates the current Plane from the plane defined by the three given points.\n * @param point1 - one of the points used to contruct the plane\n * @param point2 - one of the points used to contruct the plane\n * @param point3 - one of the points used to contruct the plane\n * @returns the updated Plane.\n */\n function copyFromPoints(point1, point2, point3) {\n const x1 = point2.x - point1.x;\n const y1 = point2.y - point1.y;\n const z1 = point2.z - point1.z;\n const x2 = point3.x - point1.x;\n const y2 = point3.y - point1.y;\n const z2 = point3.z - point1.z;\n const yz = y1 * z2 - z1 * y2;\n const xz = z1 * x2 - x1 * z2;\n const xy = x1 * y2 - y1 * x2;\n const pyth = Math.sqrt(yz * yz + xz * xz + xy * xy);\n let invPyth;\n if (pyth !== 0) {\n invPyth = 1.0 / pyth;\n }\n else {\n invPyth = 0.0;\n }\n const normal = Vector3_1.Vector3.create(yz * invPyth, xz * invPyth, xy * invPyth);\n return {\n normal,\n d: -(normal.x * point1.x + normal.y * point1.y + normal.z * point1.z)\n };\n }\n Plane.copyFromPoints = copyFromPoints;\n /**\n * Checks if the plane is facing a given direction\n * @param direction - the direction to check if the plane is facing\n * @param epsilon - value the dot product is compared against (returns true if dot &lt;= epsilon)\n * @returns True is the vector \"direction\" is the same side than the plane normal.\n */\n function isFrontFacingTo(plane, direction, epsilon) {\n const dot = Vector3_1.Vector3.dot(plane.normal, direction);\n return dot <= epsilon;\n }\n Plane.isFrontFacingTo = isFrontFacingTo;\n /**\n * Calculates the distance to a point\n * @param point - point to calculate distance to\n * @returns the signed distance (float) from the given point to the Plane.\n */\n function signedDistanceTo(plane, point) {\n return Vector3_1.Vector3.dot(point, plane.normal) + plane.d;\n }\n Plane.signedDistanceTo = signedDistanceTo;\n})(Plane = exports.Plane || (exports.Plane = {}));\n//# sourceMappingURL=Plane.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Matrix = void 0;\nconst Vector3_1 = require(\"./Vector3\");\nconst Quaternion_1 = require(\"./Quaternion\");\nconst Plane_1 = require(\"./Plane\");\n/**\n * Class used to store matrix data (4x4)\n * @public\n */\nvar Matrix;\n(function (Matrix) {\n /**\n * Gets the internal data of the matrix\n */\n function m(self) {\n return self._m;\n }\n Matrix.m = m;\n let _updateFlagSeed = 0;\n const _identityReadonly = {};\n /**\n * Gets an identity matrix that must not be updated\n */\n function IdentityReadonly() {\n return _identityReadonly;\n }\n Matrix.IdentityReadonly = IdentityReadonly;\n /**\n * Creates an empty matrix (filled with zeros)\n */\n function create() {\n const newMatrix = {\n updateFlag: 0,\n isIdentity: false,\n isIdentity3x2: true,\n _isIdentityDirty: true,\n _isIdentity3x2Dirty: true,\n _m: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n };\n _updateIdentityStatus(newMatrix, false);\n return newMatrix;\n }\n Matrix.create = create;\n // Statics\n /**\n * Creates a matrix from an array\n * @param array - defines the source array\n * @param offset - defines an offset in the source array\n * @returns a new Matrix set from the starting index of the given array\n */\n function fromArray(array, offset = 0) {\n const result = create();\n fromArrayToRef(array, offset, result);\n return result;\n }\n Matrix.fromArray = fromArray;\n /**\n * Copy the content of an array into a given matrix\n * @param array - defines the source array\n * @param offset - defines an offset in the source array\n * @param result - defines the target matrix\n */\n function fromArrayToRef(array, offset, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] = array[index + offset];\n }\n _markAsUpdated(result);\n }\n Matrix.fromArrayToRef = fromArrayToRef;\n /**\n * Stores an array into a matrix after having multiplied each component by a given factor\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @param scale - defines the scaling factor\n * @param result - defines the target matrix\n */\n function fromFloatArrayToRefScaled(array, offset, scale, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] = array[index + offset] * scale;\n }\n _markAsUpdated(result);\n }\n Matrix.fromFloatArrayToRefScaled = fromFloatArrayToRefScaled;\n /**\n * Stores a list of values (16) inside a given matrix\n * @param initialM11 - defines 1st value of 1st row\n * @param initialM12 - defines 2nd value of 1st row\n * @param initialM13 - defines 3rd value of 1st row\n * @param initialM14 - defines 4th value of 1st row\n * @param initialM21 - defines 1st value of 2nd row\n * @param initialM22 - defines 2nd value of 2nd row\n * @param initialM23 - defines 3rd value of 2nd row\n * @param initialM24 - defines 4th value of 2nd row\n * @param initialM31 - defines 1st value of 3rd row\n * @param initialM32 - defines 2nd value of 3rd row\n * @param initialM33 - defines 3rd value of 3rd row\n * @param initialM34 - defines 4th value of 3rd row\n * @param initialM41 - defines 1st value of 4th row\n * @param initialM42 - defines 2nd value of 4th row\n * @param initialM43 - defines 3rd value of 4th row\n * @param initialM44 - defines 4th value of 4th row\n * @param result - defines the target matrix\n */\n function fromValuesToRef(initialM11, initialM12, initialM13, initialM14, initialM21, initialM22, initialM23, initialM24, initialM31, initialM32, initialM33, initialM34, initialM41, initialM42, initialM43, initialM44, result) {\n const m = result._m;\n m[0] = initialM11;\n m[1] = initialM12;\n m[2] = initialM13;\n m[3] = initialM14;\n m[4] = initialM21;\n m[5] = initialM22;\n m[6] = initialM23;\n m[7] = initialM24;\n m[8] = initialM31;\n m[9] = initialM32;\n m[10] = initialM33;\n m[11] = initialM34;\n m[12] = initialM41;\n m[13] = initialM42;\n m[14] = initialM43;\n m[15] = initialM44;\n _markAsUpdated(result);\n }\n Matrix.fromValuesToRef = fromValuesToRef;\n /**\n * Creates new matrix from a list of values (16)\n * @param initialM11 - defines 1st value of 1st row\n * @param initialM12 - defines 2nd value of 1st row\n * @param initialM13 - defines 3rd value of 1st row\n * @param initialM14 - defines 4th value of 1st row\n * @param initialM21 - defines 1st value of 2nd row\n * @param initialM22 - defines 2nd value of 2nd row\n * @param initialM23 - defines 3rd value of 2nd row\n * @param initialM24 - defines 4th value of 2nd row\n * @param initialM31 - defines 1st value of 3rd row\n * @param initialM32 - defines 2nd value of 3rd row\n * @param initialM33 - defines 3rd value of 3rd row\n * @param initialM34 - defines 4th value of 3rd row\n * @param initialM41 - defines 1st value of 4th row\n * @param initialM42 - defines 2nd value of 4th row\n * @param initialM43 - defines 3rd value of 4th row\n * @param initialM44 - defines 4th value of 4th row\n * @returns the new matrix\n */\n function fromValues(initialM11, initialM12, initialM13, initialM14, initialM21, initialM22, initialM23, initialM24, initialM31, initialM32, initialM33, initialM34, initialM41, initialM42, initialM43, initialM44) {\n const result = create();\n const m = result._m;\n m[0] = initialM11;\n m[1] = initialM12;\n m[2] = initialM13;\n m[3] = initialM14;\n m[4] = initialM21;\n m[5] = initialM22;\n m[6] = initialM23;\n m[7] = initialM24;\n m[8] = initialM31;\n m[9] = initialM32;\n m[10] = initialM33;\n m[11] = initialM34;\n m[12] = initialM41;\n m[13] = initialM42;\n m[14] = initialM43;\n m[15] = initialM44;\n _markAsUpdated(result);\n return result;\n }\n Matrix.fromValues = fromValues;\n /**\n * Creates a new matrix composed by merging scale (vector3), rotation (quaternion) and translation (vector3)\n * @param scale - defines the scale vector3\n * @param rotation - defines the rotation quaternion\n * @param translation - defines the translation vector3\n * @returns a new matrix\n */\n function compose(scale, rotation, translation) {\n const result = create();\n composeToRef(scale, rotation, translation, result);\n return result;\n }\n Matrix.compose = compose;\n /**\n * Sets a matrix to a value composed by merging scale (vector3), rotation (quaternion) and translation (vector3)\n * @param scale - defines the scale vector3\n * @param rotation - defines the rotation quaternion\n * @param translation - defines the translation vector3\n * @param result - defines the target matrix\n */\n function composeToRef(scale, rotation, translation, result) {\n const tmpMatrix = [create(), create(), create()];\n scalingToRef(scale.x, scale.y, scale.z, tmpMatrix[1]);\n fromQuaternionToRef(rotation, tmpMatrix[0]);\n multiplyToRef(tmpMatrix[1], tmpMatrix[0], result);\n setTranslation(result, translation);\n }\n Matrix.composeToRef = composeToRef;\n /**\n * Creates a new identity matrix\n * @returns a new identity matrix\n */\n function Identity() {\n const identity = fromValues(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0);\n _updateIdentityStatus(identity, true);\n return identity;\n }\n Matrix.Identity = Identity;\n /**\n * Creates a new identity matrix and stores the result in a given matrix\n * @param result - defines the target matrix\n */\n function IdentityToRef(result) {\n fromValuesToRef(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, true);\n }\n Matrix.IdentityToRef = IdentityToRef;\n /**\n * Creates a new zero matrix\n * @returns a new zero matrix\n */\n function Zero() {\n const zero = fromValues(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\n _updateIdentityStatus(zero, false);\n return zero;\n }\n Matrix.Zero = Zero;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the X axis\n * @param angle - defines the angle (in radians) to use\n * @returns the new matrix\n */\n function RotationX(angle) {\n const result = create();\n rotationXToRef(angle, result);\n return result;\n }\n Matrix.RotationX = RotationX;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the X axis and stores it in a given matrix\n * @param angle - defines the angle (in radians) to use\n * @param result - defines the target matrix\n */\n function rotationXToRef(angle, result) {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n fromValuesToRef(1.0, 0.0, 0.0, 0.0, 0.0, c, s, 0.0, 0.0, -s, c, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, c === 1 && s === 0);\n }\n Matrix.rotationXToRef = rotationXToRef;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the Y axis\n * @param angle - defines the angle (in radians) to use\n * @returns the new matrix\n */\n function rotationY(angle) {\n const result = create();\n rotationYToRef(angle, result);\n return result;\n }\n Matrix.rotationY = rotationY;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the Y axis and stores it in a given matrix\n * @param angle - defines the angle (in radians) to use\n * @param result - defines the target matrix\n */\n function rotationYToRef(angle, result) {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n fromValuesToRef(c, 0.0, -s, 0.0, 0.0, 1.0, 0.0, 0.0, s, 0.0, c, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, c === 1 && s === 0);\n }\n Matrix.rotationYToRef = rotationYToRef;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the Z axis\n * @param angle - defines the angle (in radians) to use\n * @returns the new matrix\n */\n function rotationZ(angle) {\n const result = create();\n rotationZToRef(angle, result);\n return result;\n }\n Matrix.rotationZ = rotationZ;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the Z axis and stores it in a given matrix\n * @param angle - defines the angle (in radians) to use\n * @param result - defines the target matrix\n */\n function rotationZToRef(angle, result) {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n fromValuesToRef(c, s, 0.0, 0.0, -s, c, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, c === 1 && s === 0);\n }\n Matrix.rotationZToRef = rotationZToRef;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the given axis\n * @param axis - defines the axis to use\n * @param angle - defines the angle (in radians) to use\n * @returns the new matrix\n */\n function rotationAxis(axis, angle) {\n const result = create();\n rotationAxisToRef(axis, angle, result);\n return result;\n }\n Matrix.rotationAxis = rotationAxis;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the given axis and stores it in a given matrix\n * @param axis - defines the axis to use\n * @param angle - defines the angle (in radians) to use\n * @param result - defines the target matrix\n */\n function rotationAxisToRef(_axis, angle, result) {\n const s = Math.sin(-angle);\n const c = Math.cos(-angle);\n const c1 = 1 - c;\n const axis = Vector3_1.Vector3.normalize(_axis);\n const m = result._m;\n m[0] = axis.x * axis.x * c1 + c;\n m[1] = axis.x * axis.y * c1 - axis.z * s;\n m[2] = axis.x * axis.z * c1 + axis.y * s;\n m[3] = 0.0;\n m[4] = axis.y * axis.x * c1 + axis.z * s;\n m[5] = axis.y * axis.y * c1 + c;\n m[6] = axis.y * axis.z * c1 - axis.x * s;\n m[7] = 0.0;\n m[8] = axis.z * axis.x * c1 - axis.y * s;\n m[9] = axis.z * axis.y * c1 + axis.x * s;\n m[10] = axis.z * axis.z * c1 + c;\n m[11] = 0.0;\n m[12] = 0.0;\n m[13] = 0.0;\n m[14] = 0.0;\n m[15] = 1.0;\n _markAsUpdated(result);\n }\n Matrix.rotationAxisToRef = rotationAxisToRef;\n /**\n * Creates a rotation matrix\n * @param yaw - defines the yaw angle in radians (Y axis)\n * @param pitch - defines the pitch angle in radians (X axis)\n * @param roll - defines the roll angle in radians (X axis)\n * @returns the new rotation matrix\n */\n function rotationYawPitchRoll(yaw, pitch, roll) {\n const result = create();\n rotationYawPitchRollToRef(yaw, pitch, roll, result);\n return result;\n }\n Matrix.rotationYawPitchRoll = rotationYawPitchRoll;\n /**\n * Creates a rotation matrix and stores it in a given matrix\n * @param yaw - defines the yaw angle in radians (Y axis)\n * @param pitch - defines the pitch angle in radians (X axis)\n * @param roll - defines the roll angle in radians (X axis)\n * @param result - defines the target matrix\n */\n function rotationYawPitchRollToRef(yaw, pitch, roll, result) {\n const quaternionResult = Quaternion_1.Quaternion.Zero();\n Quaternion_1.Quaternion.fromRotationYawPitchRollToRef(yaw, pitch, roll, quaternionResult);\n fromQuaternionToRef(quaternionResult, result);\n }\n Matrix.rotationYawPitchRollToRef = rotationYawPitchRollToRef;\n /**\n * Creates a scaling matrix\n * @param x - defines the scale factor on X axis\n * @param y - defines the scale factor on Y axis\n * @param z - defines the scale factor on Z axis\n * @returns the new matrix\n */\n function scaling(x, y, z) {\n const result = create();\n scalingToRef(x, y, z, result);\n return result;\n }\n Matrix.scaling = scaling;\n /**\n * Creates a scaling matrix and stores it in a given matrix\n * @param x - defines the scale factor on X axis\n * @param y - defines the scale factor on Y axis\n * @param z - defines the scale factor on Z axis\n * @param result - defines the target matrix\n */\n function scalingToRef(x, y, z, result) {\n fromValuesToRef(x, 0.0, 0.0, 0.0, 0.0, y, 0.0, 0.0, 0.0, 0.0, z, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, x === 1 && y === 1 && z === 1);\n }\n Matrix.scalingToRef = scalingToRef;\n /**\n * Creates a translation matrix\n * @param x - defines the translation on X axis\n * @param y - defines the translation on Y axis\n * @param z - defines the translationon Z axis\n * @returns the new matrix\n */\n function translation(x, y, z) {\n const result = create();\n translationToRef(x, y, z, result);\n return result;\n }\n Matrix.translation = translation;\n /**\n * Creates a translation matrix and stores it in a given matrix\n * @param x - defines the translation on X axis\n * @param y - defines the translation on Y axis\n * @param z - defines the translationon Z axis\n * @param result - defines the target matrix\n */\n function translationToRef(x, y, z, result) {\n fromValuesToRef(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, x, y, z, 1.0, result);\n _updateIdentityStatus(result, x === 0 && y === 0 && z === 0);\n }\n Matrix.translationToRef = translationToRef;\n /**\n * Returns a new Matrix whose values are the interpolated values for \"gradient\" (float) between the ones of the matrices \"startValue\" and \"endValue\".\n * @param startValue - defines the start value\n * @param endValue - defines the end value\n * @param gradient - defines the gradient factor\n * @returns the new matrix\n */\n function lerp(startValue, endValue, gradient) {\n const result = create();\n lerpToRef(startValue, endValue, gradient, result);\n return result;\n }\n Matrix.lerp = lerp;\n /**\n * Set the given matrix \"result\" as the interpolated values for \"gradient\" (float) between the ones of the matrices \"startValue\" and \"endValue\".\n * @param startValue - defines the start value\n * @param endValue - defines the end value\n * @param gradient - defines the gradient factor\n * @param result - defines the Matrix object where to store data\n */\n function lerpToRef(startValue, endValue, gradient, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] =\n startValue._m[index] * (1.0 - gradient) + endValue._m[index] * gradient;\n }\n _markAsUpdated(result);\n }\n Matrix.lerpToRef = lerpToRef;\n /**\n * Builds a new matrix whose values are computed by:\n * * decomposing the the \"startValue\" and \"endValue\" matrices into their respective scale, rotation and translation matrices\n * * interpolating for \"gradient\" (float) the values between each of these decomposed matrices between the start and the end\n * * recomposing a new matrix from these 3 interpolated scale, rotation and translation matrices\n * @param startValue - defines the first matrix\n * @param endValue - defines the second matrix\n * @param gradient - defines the gradient between the two matrices\n * @returns the new matrix\n */\n function decomposeLerp(startValue, endValue, gradient) {\n const result = create();\n decomposeLerpToRef(startValue, endValue, gradient, result);\n return result;\n }\n Matrix.decomposeLerp = decomposeLerp;\n /**\n * Update a matrix to values which are computed by:\n * * decomposing the the \"startValue\" and \"endValue\" matrices into their respective scale, rotation and translation matrices\n * * interpolating for \"gradient\" (float) the values between each of these decomposed matrices between the start and the end\n * * recomposing a new matrix from these 3 interpolated scale, rotation and translation matrices\n * @param startValue - defines the first matrix\n * @param endValue - defines the second matrix\n * @param gradient - defines the gradient between the two matrices\n * @param result - defines the target matrix\n */\n function decomposeLerpToRef(startValue, endValue, gradient, result) {\n const startScale = Vector3_1.Vector3.Zero();\n const startRotation = Quaternion_1.Quaternion.Zero();\n const startTranslation = Vector3_1.Vector3.Zero();\n decompose(startValue, startScale, startRotation, startTranslation);\n const endScale = Vector3_1.Vector3.Zero();\n const endRotation = Quaternion_1.Quaternion.Zero();\n const endTranslation = Vector3_1.Vector3.Zero();\n decompose(endValue, endScale, endRotation, endTranslation);\n const resultScale = Vector3_1.Vector3.Zero();\n Vector3_1.Vector3.lerpToRef(startScale, endScale, gradient, resultScale);\n const resultRotation = Quaternion_1.Quaternion.Zero();\n Quaternion_1.Quaternion.slerpToRef(startRotation, endRotation, gradient, resultRotation);\n const resultTranslation = Vector3_1.Vector3.Zero();\n Vector3_1.Vector3.lerpToRef(startTranslation, endTranslation, gradient, resultTranslation);\n composeToRef(resultScale, resultRotation, resultTranslation, result);\n }\n Matrix.decomposeLerpToRef = decomposeLerpToRef;\n /**\n * Gets a new rotation matrix used to rotate an entity so as it looks at the target vector3, from the eye vector3 position, the up vector3 being oriented like \"up\"\n * self function works in left handed mode\n * @param eye - defines the final position of the entity\n * @param target - defines where the entity should look at\n * @param up - defines the up vector for the entity\n * @returns the new matrix\n */\n function LookAtLH(eye, target, up) {\n const result = create();\n lookAtLHToRef(eye, target, up, result);\n return result;\n }\n Matrix.LookAtLH = LookAtLH;\n /**\n * Sets the given \"result\" Matrix to a rotation matrix used to rotate an entity so that it looks at the target vector3, from the eye vector3 position, the up vector3 being oriented like \"up\".\n * self function works in left handed mode\n * @param eye - defines the final position of the entity\n * @param target - defines where the entity should look at\n * @param up - defines the up vector for the entity\n * @param result - defines the target matrix\n */\n function lookAtLHToRef(eye, target, up, result) {\n const xAxis = Vector3_1.Vector3.Zero();\n const yAxis = Vector3_1.Vector3.Zero();\n const zAxis = Vector3_1.Vector3.Zero();\n // Z axis\n Vector3_1.Vector3.subtractToRef(target, eye, zAxis);\n Vector3_1.Vector3.normalizeToRef(zAxis, zAxis);\n // X axis\n Vector3_1.Vector3.crossToRef(up, zAxis, xAxis);\n const xSquareLength = Vector3_1.Vector3.lengthSquared(xAxis);\n if (xSquareLength === 0) {\n xAxis.x = 1.0;\n }\n else {\n Vector3_1.Vector3.normalizeFromLengthToRef(xAxis, Math.sqrt(xSquareLength), xAxis);\n }\n // Y axis\n Vector3_1.Vector3.crossToRef(zAxis, xAxis, yAxis);\n Vector3_1.Vector3.normalizeToRef(yAxis, yAxis);\n // Eye angles\n const ex = -Vector3_1.Vector3.dot(xAxis, eye);\n const ey = -Vector3_1.Vector3.dot(yAxis, eye);\n const ez = -Vector3_1.Vector3.dot(zAxis, eye);\n fromValuesToRef(xAxis.x, yAxis.x, zAxis.x, 0.0, xAxis.y, yAxis.y, zAxis.y, 0.0, xAxis.z, yAxis.z, zAxis.z, 0.0, ex, ey, ez, 1.0, result);\n }\n Matrix.lookAtLHToRef = lookAtLHToRef;\n /**\n * Gets a new rotation matrix used to rotate an entity so as it looks at the target vector3, from the eye vector3 position, the up vector3 being oriented like \"up\"\n * self function works in right handed mode\n * @param eye - defines the final position of the entity\n * @param target - defines where the entity should look at\n * @param up - defines the up vector for the entity\n * @returns the new matrix\n */\n function lookAtRH(eye, target, up) {\n const result = create();\n lookAtRHToRef(eye, target, up, result);\n return result;\n }\n Matrix.lookAtRH = lookAtRH;\n /**\n * Sets the given \"result\" Matrix to a rotation matrix used to rotate an entity so that it looks at the target vector3, from the eye vector3 position, the up vector3 being oriented like \"up\".\n * self function works in right handed mode\n * @param eye - defines the final position of the entity\n * @param target - defines where the entity should look at\n * @param up - defines the up vector for the entity\n * @param result - defines the target matrix\n */\n function lookAtRHToRef(eye, target, up, result) {\n const xAxis = Vector3_1.Vector3.Zero();\n const yAxis = Vector3_1.Vector3.Zero();\n const zAxis = Vector3_1.Vector3.Zero();\n // Z axis\n Vector3_1.Vector3.subtractToRef(eye, target, zAxis);\n Vector3_1.Vector3.normalizeToRef(zAxis, zAxis);\n // X axis\n Vector3_1.Vector3.crossToRef(up, zAxis, xAxis);\n const xSquareLength = Vector3_1.Vector3.lengthSquared(xAxis);\n if (xSquareLength === 0) {\n xAxis.x = 1.0;\n }\n else {\n Vector3_1.Vector3.normalizeFromLengthToRef(xAxis, Math.sqrt(xSquareLength), xAxis);\n }\n // Y axis\n Vector3_1.Vector3.crossToRef(zAxis, xAxis, yAxis);\n Vector3_1.Vector3.normalizeToRef(yAxis, yAxis);\n // Eye angles\n const ex = -Vector3_1.Vector3.dot(xAxis, eye);\n const ey = -Vector3_1.Vector3.dot(yAxis, eye);\n const ez = -Vector3_1.Vector3.dot(zAxis, eye);\n fromValuesToRef(xAxis.x, yAxis.x, zAxis.x, 0.0, xAxis.y, yAxis.y, zAxis.y, 0.0, xAxis.z, yAxis.z, zAxis.z, 0.0, ex, ey, ez, 1.0, result);\n }\n Matrix.lookAtRHToRef = lookAtRHToRef;\n /**\n * Create a left-handed orthographic projection matrix\n * @param width - defines the viewport width\n * @param height - defines the viewport height\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a left-handed orthographic projection matrix\n */\n function orthoLH(width, height, znear, zfar) {\n const matrix = create();\n orthoLHToRef(width, height, znear, zfar, matrix);\n return matrix;\n }\n Matrix.orthoLH = orthoLH;\n /**\n * Store a left-handed orthographic projection to a given matrix\n * @param width - defines the viewport width\n * @param height - defines the viewport height\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n */\n function orthoLHToRef(width, height, znear, zfar, result) {\n const n = znear;\n const f = zfar;\n const a = 2.0 / width;\n const b = 2.0 / height;\n const c = 2.0 / (f - n);\n const d = -(f + n) / (f - n);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, 0.0, 0.0, 0.0, d, 1.0, result);\n _updateIdentityStatus(result, a === 1 && b === 1 && c === 1 && d === 0);\n }\n Matrix.orthoLHToRef = orthoLHToRef;\n /**\n * Create a left-handed orthographic projection matrix\n * @param left - defines the viewport left coordinate\n * @param right - defines the viewport right coordinate\n * @param bottom - defines the viewport bottom coordinate\n * @param top - defines the viewport top coordinate\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a left-handed orthographic projection matrix\n */\n function OrthoOffCenterLH(left, right, bottom, top, znear, zfar) {\n const matrix = create();\n orthoOffCenterLHToRef(left, right, bottom, top, znear, zfar, matrix);\n return matrix;\n }\n Matrix.OrthoOffCenterLH = OrthoOffCenterLH;\n /**\n * Stores a left-handed orthographic projection into a given matrix\n * @param left - defines the viewport left coordinate\n * @param right - defines the viewport right coordinate\n * @param bottom - defines the viewport bottom coordinate\n * @param top - defines the viewport top coordinate\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n */\n function orthoOffCenterLHToRef(left, right, bottom, top, znear, zfar, result) {\n const n = znear;\n const f = zfar;\n const a = 2.0 / (right - left);\n const b = 2.0 / (top - bottom);\n const c = 2.0 / (f - n);\n const d = -(f + n) / (f - n);\n const i0 = (left + right) / (left - right);\n const i1 = (top + bottom) / (bottom - top);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, 0.0, i0, i1, d, 1.0, result);\n _markAsUpdated(result);\n }\n Matrix.orthoOffCenterLHToRef = orthoOffCenterLHToRef;\n /**\n * Creates a right-handed orthographic projection matrix\n * @param left - defines the viewport left coordinate\n * @param right - defines the viewport right coordinate\n * @param bottom - defines the viewport bottom coordinate\n * @param top - defines the viewport top coordinate\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a right-handed orthographic projection matrix\n */\n function orthoOffCenterRH(left, right, bottom, top, znear, zfar) {\n const matrix = create();\n orthoOffCenterRHToRef(left, right, bottom, top, znear, zfar, matrix);\n return matrix;\n }\n Matrix.orthoOffCenterRH = orthoOffCenterRH;\n /**\n * Stores a right-handed orthographic projection into a given matrix\n * @param left - defines the viewport left coordinate\n * @param right - defines the viewport right coordinate\n * @param bottom - defines the viewport bottom coordinate\n * @param top - defines the viewport top coordinate\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n */\n function orthoOffCenterRHToRef(left, right, bottom, top, znear, zfar, result) {\n orthoOffCenterLHToRef(left, right, bottom, top, znear, zfar, result);\n result._m[10] *= -1; // No need to call _markAsUpdated as previous function already called it and let _isIdentityDirty to true\n }\n Matrix.orthoOffCenterRHToRef = orthoOffCenterRHToRef;\n /**\n * Creates a left-handed perspective projection matrix\n * @param width - defines the viewport width\n * @param height - defines the viewport height\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a left-handed perspective projection matrix\n */\n function perspectiveLH(width, height, znear, zfar) {\n const matrix = create();\n const n = znear;\n const f = zfar;\n const a = (2.0 * n) / width;\n const b = (2.0 * n) / height;\n const c = (f + n) / (f - n);\n const d = (-2.0 * f * n) / (f - n);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, 1.0, 0.0, 0.0, d, 0.0, matrix);\n _updateIdentityStatus(matrix, false);\n return matrix;\n }\n Matrix.perspectiveLH = perspectiveLH;\n /**\n * Creates a left-handed perspective projection matrix\n * @param fov - defines the horizontal field of view\n * @param aspect - defines the aspect ratio\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a left-handed perspective projection matrix\n */\n function perspectiveFovLH(fov, aspect, znear, zfar) {\n const matrix = create();\n perspectiveFovLHToRef(fov, aspect, znear, zfar, matrix);\n return matrix;\n }\n Matrix.perspectiveFovLH = perspectiveFovLH;\n /**\n * Stores a left-handed perspective projection into a given matrix\n * @param fov - defines the horizontal field of view\n * @param aspect - defines the aspect ratio\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n * @param isVerticalFovFixed - defines it the fov is vertically fixed (default) or horizontally\n */\n function perspectiveFovLHToRef(fov, aspect, znear, zfar, result, isVerticalFovFixed = true) {\n const n = znear;\n const f = zfar;\n const t = 1.0 / Math.tan(fov * 0.5);\n const a = isVerticalFovFixed ? t / aspect : t;\n const b = isVerticalFovFixed ? t : t * aspect;\n const c = (f + n) / (f - n);\n const d = (-2.0 * f * n) / (f - n);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, 1.0, 0.0, 0.0, d, 0.0, result);\n _updateIdentityStatus(result, false);\n }\n Matrix.perspectiveFovLHToRef = perspectiveFovLHToRef;\n /**\n * Creates a right-handed perspective projection matrix\n * @param fov - defines the horizontal field of view\n * @param aspect - defines the aspect ratio\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a right-handed perspective projection matrix\n */\n function PerspectiveFovRH(fov, aspect, znear, zfar) {\n const matrix = create();\n perspectiveFovRHToRef(fov, aspect, znear, zfar, matrix);\n return matrix;\n }\n Matrix.PerspectiveFovRH = PerspectiveFovRH;\n /**\n * Stores a right-handed perspective projection into a given matrix\n * @param fov - defines the horizontal field of view\n * @param aspect - defines the aspect ratio\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n * @param isVerticalFovFixed - defines it the fov is vertically fixed (default) or horizontally\n */\n function perspectiveFovRHToRef(fov, aspect, znear, zfar, result, isVerticalFovFixed = true) {\n /* alternatively self could be expressed as:\n // m = PerspectiveFovLHToRef\n // m[10] *= -1.0;\n // m[11] *= -1.0;\n */\n const n = znear;\n const f = zfar;\n const t = 1.0 / Math.tan(fov * 0.5);\n const a = isVerticalFovFixed ? t / aspect : t;\n const b = isVerticalFovFixed ? t : t * aspect;\n const c = -(f + n) / (f - n);\n const d = (-2 * f * n) / (f - n);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, -1.0, 0.0, 0.0, d, 0.0, result);\n _updateIdentityStatus(result, false);\n }\n Matrix.perspectiveFovRHToRef = perspectiveFovRHToRef;\n /**\n * Stores a perspective projection for WebVR info a given matrix\n * @param fov - defines the field of view\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n * @param rightHanded - defines if the matrix must be in right-handed mode (false by default)\n */\n function perspectiveFovWebVRToRef(fov, znear, zfar, result, rightHanded = false) {\n const rightHandedFactor = rightHanded ? -1 : 1;\n const upTan = Math.tan((fov.upDegrees * Math.PI) / 180.0);\n const downTan = Math.tan((fov.downDegrees * Math.PI) / 180.0);\n const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180.0);\n const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180.0);\n const xScale = 2.0 / (leftTan + rightTan);\n const yScale = 2.0 / (upTan + downTan);\n const m = result._m;\n m[0] = xScale;\n m[1] = m[2] = m[3] = m[4] = 0.0;\n m[5] = yScale;\n m[6] = m[7] = 0.0;\n m[8] = (leftTan - rightTan) * xScale * 0.5;\n m[9] = -((upTan - downTan) * yScale * 0.5);\n m[10] = -zfar / (znear - zfar);\n m[11] = 1.0 * rightHandedFactor;\n m[12] = m[13] = m[15] = 0.0;\n m[14] = -(2.0 * zfar * znear) / (zfar - znear);\n _markAsUpdated(result);\n }\n Matrix.perspectiveFovWebVRToRef = perspectiveFovWebVRToRef;\n /**\n * Extracts a 2x2 matrix from a given matrix and store the result in a FloatArray\n * @param matrix - defines the matrix to use\n * @returns a new FloatArray array with 4 elements : the 2x2 matrix extracted from the given matrix\n */\n function GetAsMatrix2x2(matrix) {\n return [matrix._m[0], matrix._m[1], matrix._m[4], matrix._m[5]];\n }\n Matrix.GetAsMatrix2x2 = GetAsMatrix2x2;\n /**\n * Extracts a 3x3 matrix from a given matrix and store the result in a FloatArray\n * @param matrix - defines the matrix to use\n * @returns a new FloatArray array with 9 elements : the 3x3 matrix extracted from the given matrix\n */\n function GetAsMatrix3x3(matrix) {\n return [\n matrix._m[0],\n matrix._m[1],\n matrix._m[2],\n matrix._m[4],\n matrix._m[5],\n matrix._m[6],\n matrix._m[8],\n matrix._m[9],\n matrix._m[10]\n ];\n }\n Matrix.GetAsMatrix3x3 = GetAsMatrix3x3;\n /**\n * Compute the transpose of a given matrix\n * @param matrix - defines the matrix to transpose\n * @returns the new matrix\n */\n function transpose(matrix) {\n const result = create();\n transposeToRef(matrix, result);\n return result;\n }\n Matrix.transpose = transpose;\n /**\n * Compute the transpose of a matrix and store it in a target matrix\n * @param matrix - defines the matrix to transpose\n * @param result - defines the target matrix\n */\n function transposeToRef(matrix, result) {\n const rm = result._m;\n const mm = matrix._m;\n rm[0] = mm[0];\n rm[1] = mm[4];\n rm[2] = mm[8];\n rm[3] = mm[12];\n rm[4] = mm[1];\n rm[5] = mm[5];\n rm[6] = mm[9];\n rm[7] = mm[13];\n rm[8] = mm[2];\n rm[9] = mm[6];\n rm[10] = mm[10];\n rm[11] = mm[14];\n rm[12] = mm[3];\n rm[13] = mm[7];\n rm[14] = mm[11];\n rm[15] = mm[15];\n // identity-ness does not change when transposing\n _updateIdentityStatus(result, matrix.isIdentity, matrix._isIdentityDirty);\n }\n Matrix.transposeToRef = transposeToRef;\n /**\n * Computes a reflection matrix from a plane\n * @param plane - defines the reflection plane\n * @returns a new matrix\n */\n function reflection(plane) {\n const matrix = create();\n reflectionToRef(plane, matrix);\n return matrix;\n }\n Matrix.reflection = reflection;\n /**\n * Computes a reflection matrix from a plane\n * @param plane - defines the reflection plane\n * @param result - defines the target matrix\n */\n function reflectionToRef(_plane, result) {\n const plane = Plane_1.Plane.normalize(_plane);\n const x = plane.normal.x;\n const y = plane.normal.y;\n const z = plane.normal.z;\n const temp = -2 * x;\n const temp2 = -2 * y;\n const temp3 = -2 * z;\n fromValuesToRef(temp * x + 1, temp2 * x, temp3 * x, 0.0, temp * y, temp2 * y + 1, temp3 * y, 0.0, temp * z, temp2 * z, temp3 * z + 1, 0.0, temp * plane.d, temp2 * plane.d, temp3 * plane.d, 1.0, result);\n }\n Matrix.reflectionToRef = reflectionToRef;\n /**\n * Sets the given matrix as a rotation matrix composed from the 3 left handed axes\n * @param xaxis - defines the value of the 1st axis\n * @param yaxis - defines the value of the 2nd axis\n * @param zaxis - defines the value of the 3rd axis\n * @param result - defines the target matrix\n */\n function fromXYZAxesToRef(xaxis, yaxis, zaxis, result) {\n fromValuesToRef(xaxis.x, xaxis.y, xaxis.z, 0.0, yaxis.x, yaxis.y, yaxis.z, 0.0, zaxis.x, zaxis.y, zaxis.z, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n }\n Matrix.fromXYZAxesToRef = fromXYZAxesToRef;\n /**\n * Creates a rotation matrix from a quaternion and stores it in a target matrix\n * @param quat - defines the quaternion to use\n * @param result - defines the target matrix\n */\n function fromQuaternionToRef(quat, result) {\n const xx = quat.x * quat.x;\n const yy = quat.y * quat.y;\n const zz = quat.z * quat.z;\n const xy = quat.x * quat.y;\n const zw = quat.z * quat.w;\n const zx = quat.z * quat.x;\n const yw = quat.y * quat.w;\n const yz = quat.y * quat.z;\n const xw = quat.x * quat.w;\n result._m[0] = 1.0 - 2.0 * (yy + zz);\n result._m[1] = 2.0 * (xy + zw);\n result._m[2] = 2.0 * (zx - yw);\n result._m[3] = 0.0;\n result._m[4] = 2.0 * (xy - zw);\n result._m[5] = 1.0 - 2.0 * (zz + xx);\n result._m[6] = 2.0 * (yz + xw);\n result._m[7] = 0.0;\n result._m[8] = 2.0 * (zx + yw);\n result._m[9] = 2.0 * (yz - xw);\n result._m[10] = 1.0 - 2.0 * (yy + xx);\n result._m[11] = 0.0;\n result._m[12] = 0.0;\n result._m[13] = 0.0;\n result._m[14] = 0.0;\n result._m[15] = 1.0;\n _markAsUpdated(result);\n }\n Matrix.fromQuaternionToRef = fromQuaternionToRef;\n /** @internal */\n function _markAsUpdated(self) {\n self.updateFlag = _updateFlagSeed++;\n self.isIdentity = false;\n self.isIdentity3x2 = false;\n self._isIdentityDirty = true;\n self._isIdentity3x2Dirty = true;\n }\n // Properties\n /**\n * Check if the current matrix is identity\n * @returns true is the matrix is the identity matrix\n */\n function isIdentityUpdate(self) {\n if (self._isIdentityDirty) {\n self._isIdentityDirty = false;\n const m = self._m;\n self.isIdentity =\n m[0] === 1.0 &&\n m[1] === 0.0 &&\n m[2] === 0.0 &&\n m[3] === 0.0 &&\n m[4] === 0.0 &&\n m[5] === 1.0 &&\n m[6] === 0.0 &&\n m[7] === 0.0 &&\n m[8] === 0.0 &&\n m[9] === 0.0 &&\n m[10] === 1.0 &&\n m[11] === 0.0 &&\n m[12] === 0.0 &&\n m[13] === 0.0 &&\n m[14] === 0.0 &&\n m[15] === 1.0;\n }\n return self.isIdentity;\n }\n Matrix.isIdentityUpdate = isIdentityUpdate;\n /**\n * Check if the current matrix is identity as a texture matrix (3x2 store in 4x4)\n * @returns true is the matrix is the identity matrix\n */\n function isIdentityAs3x2Update(self) {\n if (self._isIdentity3x2Dirty) {\n self._isIdentity3x2Dirty = false;\n if (self._m[0] !== 1.0 || self._m[5] !== 1.0 || self._m[15] !== 1.0) {\n self.isIdentity3x2 = false;\n }\n else if (self._m[1] !== 0.0 ||\n self._m[2] !== 0.0 ||\n self._m[3] !== 0.0 ||\n self._m[4] !== 0.0 ||\n self._m[6] !== 0.0 ||\n self._m[7] !== 0.0 ||\n self._m[8] !== 0.0 ||\n self._m[9] !== 0.0 ||\n self._m[10] !== 0.0 ||\n self._m[11] !== 0.0 ||\n self._m[12] !== 0.0 ||\n self._m[13] !== 0.0 ||\n self._m[14] !== 0.0) {\n self.isIdentity3x2 = false;\n }\n else {\n self.isIdentity3x2 = true;\n }\n }\n return self.isIdentity3x2;\n }\n Matrix.isIdentityAs3x2Update = isIdentityAs3x2Update;\n /**\n * Gets the determinant of the matrix\n * @returns the matrix determinant\n */\n function determinant(self) {\n if (self.isIdentity === true) {\n return 1;\n }\n const m = self._m;\n // tslint:disable-next-line:one-variable-per-declaration\n const m00 = m[0], m01 = m[1], m02 = m[2], m03 = m[3];\n // tslint:disable-next-line:one-variable-per-declaration\n const m10 = m[4], m11 = m[5], m12 = m[6], m13 = m[7];\n // tslint:disable-next-line:one-variable-per-declaration\n const m20 = m[8], m21 = m[9], m22 = m[10], m23 = m[11];\n // tslint:disable-next-line:one-variable-per-declaration\n const m30 = m[12], m31 = m[13], m32 = m[14], m33 = m[15];\n /*\n // https://en.wikipedia.org/wiki/Laplace_expansion\n // to compute the deterrminant of a 4x4 Matrix we compute the cofactors of any row or column,\n // then we multiply each Cofactor by its corresponding matrix value and sum them all to get the determinant\n // Cofactor(i, j) = sign(i,j) * det(Minor(i, j))\n // where\n // - sign(i,j) = (i+j) % 2 === 0 ? 1 : -1\n // - Minor(i, j) is the 3x3 matrix we get by removing row i and column j from current Matrix\n //\n // Here we do that for the 1st row.\n */\n // tslint:disable:variable-name\n const det_22_33 = m22 * m33 - m32 * m23;\n const det_21_33 = m21 * m33 - m31 * m23;\n const det_21_32 = m21 * m32 - m31 * m22;\n const det_20_33 = m20 * m33 - m30 * m23;\n const det_20_32 = m20 * m32 - m22 * m30;\n const det_20_31 = m20 * m31 - m30 * m21;\n const cofact_00 = +(m11 * det_22_33 - m12 * det_21_33 + m13 * det_21_32);\n const cofact_01 = -(m10 * det_22_33 - m12 * det_20_33 + m13 * det_20_32);\n const cofact_02 = +(m10 * det_21_33 - m11 * det_20_33 + m13 * det_20_31);\n const cofact_03 = -(m10 * det_21_32 - m11 * det_20_32 + m12 * det_20_31);\n // tslint:enable:variable-name\n return m00 * cofact_00 + m01 * cofact_01 + m02 * cofact_02 + m03 * cofact_03;\n }\n Matrix.determinant = determinant;\n // Methods\n /**\n * Returns the matrix as a FloatArray\n * @returns the matrix underlying array\n */\n function toArray(self) {\n return self._m;\n }\n Matrix.toArray = toArray;\n /**\n * Returns the matrix as a FloatArray\n * @returns the matrix underlying array.\n */\n function asArray(self) {\n return self._m;\n }\n Matrix.asArray = asArray;\n /**\n * Sets all the matrix elements to zero\n * @returns the current matrix\n */\n function reset(self) {\n fromValuesToRef(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, self);\n _updateIdentityStatus(self, false);\n }\n Matrix.reset = reset;\n /**\n * Adds the current matrix with a second one\n * @param other - defines the matrix to add\n * @returns a new matrix as the addition of the current matrix and the given one\n */\n function add(self, other) {\n const result = create();\n addToRef(self, other, result);\n return result;\n }\n Matrix.add = add;\n /**\n * Sets the given matrix \"result\" to the addition of the current matrix and the given one\n * @param other - defines the matrix to add\n * @param result - defines the target matrix\n * @returns the current matrix\n */\n function addToRef(self, other, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] = self._m[index] + other._m[index];\n }\n _markAsUpdated(result);\n }\n Matrix.addToRef = addToRef;\n /**\n * Adds in place the given matrix to the current matrix\n * @param other - defines the second operand\n * @returns the current updated matrix\n */\n function addToSelf(self, other) {\n for (let index = 0; index < 16; index++) {\n self._m[index] += other._m[index];\n }\n _markAsUpdated(self);\n }\n Matrix.addToSelf = addToSelf;\n /**\n * Creates a new matrix as the invert of a given matrix\n * @param source - defines the source matrix\n * @returns the new matrix\n */\n function invert(source) {\n const result = create();\n invertToRef(source, result);\n return result;\n }\n Matrix.invert = invert;\n /**\n * Sets the given matrix to the current inverted Matrix\n * @param other - defines the target matrix\n * @returns the unmodified current matrix\n */\n function invertToRef(source, result) {\n if (source.isIdentity === true) {\n copy(source, result);\n return;\n }\n // the inverse of a Matrix is the transpose of cofactor matrix divided by the determinant\n const m = source._m;\n // tslint:disable:one-variable-per-declaration\n const m00 = m[0], m01 = m[1], m02 = m[2], m03 = m[3];\n const m10 = m[4], m11 = m[5], m12 = m[6], m13 = m[7];\n const m20 = m[8], m21 = m[9], m22 = m[10], m23 = m[11];\n const m30 = m[12], m31 = m[13], m32 = m[14], m33 = m[15];\n // tslint:enable:one-variable-per-declaration\n // tslint:disable:variable-name\n const det_22_33 = m22 * m33 - m32 * m23;\n const det_21_33 = m21 * m33 - m31 * m23;\n const det_21_32 = m21 * m32 - m31 * m22;\n const det_20_33 = m20 * m33 - m30 * m23;\n const det_20_32 = m20 * m32 - m22 * m30;\n const det_20_31 = m20 * m31 - m30 * m21;\n const cofact_00 = +(m11 * det_22_33 - m12 * det_21_33 + m13 * det_21_32);\n const cofact_01 = -(m10 * det_22_33 - m12 * det_20_33 + m13 * det_20_32);\n const cofact_02 = +(m10 * det_21_33 - m11 * det_20_33 + m13 * det_20_31);\n const cofact_03 = -(m10 * det_21_32 - m11 * det_20_32 + m12 * det_20_31);\n const det = m00 * cofact_00 + m01 * cofact_01 + m02 * cofact_02 + m03 * cofact_03;\n if (det === 0) {\n copy(source, result);\n return;\n }\n const detInv = 1 / det;\n const det_12_33 = m12 * m33 - m32 * m13;\n const det_11_33 = m11 * m33 - m31 * m13;\n const det_11_32 = m11 * m32 - m31 * m12;\n const det_10_33 = m10 * m33 - m30 * m13;\n const det_10_32 = m10 * m32 - m30 * m12;\n const det_10_31 = m10 * m31 - m30 * m11;\n const det_12_23 = m12 * m23 - m22 * m13;\n const det_11_23 = m11 * m23 - m21 * m13;\n const det_11_22 = m11 * m22 - m21 * m12;\n const det_10_23 = m10 * m23 - m20 * m13;\n const det_10_22 = m10 * m22 - m20 * m12;\n const det_10_21 = m10 * m21 - m20 * m11;\n const cofact_10 = -(m01 * det_22_33 - m02 * det_21_33 + m03 * det_21_32);\n const cofact_11 = +(m00 * det_22_33 - m02 * det_20_33 + m03 * det_20_32);\n const cofact_12 = -(m00 * det_21_33 - m01 * det_20_33 + m03 * det_20_31);\n const cofact_13 = +(m00 * det_21_32 - m01 * det_20_32 + m02 * det_20_31);\n const cofact_20 = +(m01 * det_12_33 - m02 * det_11_33 + m03 * det_11_32);\n const cofact_21 = -(m00 * det_12_33 - m02 * det_10_33 + m03 * det_10_32);\n const cofact_22 = +(m00 * det_11_33 - m01 * det_10_33 + m03 * det_10_31);\n const cofact_23 = -(m00 * det_11_32 - m01 * det_10_32 + m02 * det_10_31);\n const cofact_30 = -(m01 * det_12_23 - m02 * det_11_23 + m03 * det_11_22);\n const cofact_31 = +(m00 * det_12_23 - m02 * det_10_23 + m03 * det_10_22);\n const cofact_32 = -(m00 * det_11_23 - m01 * det_10_23 + m03 * det_10_21);\n const cofact_33 = +(m00 * det_11_22 - m01 * det_10_22 + m02 * det_10_21);\n fromValuesToRef(cofact_00 * detInv, cofact_10 * detInv, cofact_20 * detInv, cofact_30 * detInv, cofact_01 * detInv, cofact_11 * detInv, cofact_21 * detInv, cofact_31 * detInv, cofact_02 * detInv, cofact_12 * detInv, cofact_22 * detInv, cofact_32 * detInv, cofact_03 * detInv, cofact_13 * detInv, cofact_23 * detInv, cofact_33 * detInv, result);\n // tslint:enable:variable-name\n }\n Matrix.invertToRef = invertToRef;\n /**\n * add a value at the specified position in the current Matrix\n * @param index - the index of the value within the matrix. between 0 and 15.\n * @param value - the value to be added\n * @returns the current updated matrix\n */\n function addAtIndex(self, index, value) {\n self._m[index] += value;\n _markAsUpdated(self);\n }\n Matrix.addAtIndex = addAtIndex;\n /**\n * mutiply the specified position in the current Matrix by a value\n * @param index - the index of the value within the matrix. between 0 and 15.\n * @param value - the value to be added\n * @returns the current updated matrix\n */\n function multiplyAtIndex(self, index, value) {\n self._m[index] *= value;\n _markAsUpdated(self);\n return self;\n }\n Matrix.multiplyAtIndex = multiplyAtIndex;\n /**\n * Inserts the translation vector (using 3 floats) in the current matrix\n * @param x - defines the 1st component of the translation\n * @param y - defines the 2nd component of the translation\n * @param z - defines the 3rd component of the translation\n * @returns the current updated matrix\n */\n function setTranslationFromFloats(self, x, y, z) {\n self._m[12] = x;\n self._m[13] = y;\n self._m[14] = z;\n _markAsUpdated(self);\n }\n Matrix.setTranslationFromFloats = setTranslationFromFloats;\n /**\n * Inserts the translation vector in the current matrix\n * @param vector3 - defines the translation to insert\n * @returns the current updated matrix\n */\n function setTranslation(self, vector3) {\n setTranslationFromFloats(self, vector3.x, vector3.y, vector3.z);\n }\n Matrix.setTranslation = setTranslation;\n /**\n * Gets the translation value of the current matrix\n * @returns a new Vector3 as the extracted translation from the matrix\n */\n function getTranslation(self) {\n return Vector3_1.Vector3.create(self._m[12], self._m[13], self._m[14]);\n }\n Matrix.getTranslation = getTranslation;\n /**\n * Fill a Vector3 with the extracted translation from the matrix\n * @param result - defines the Vector3 where to store the translation\n * @returns the current matrix\n */\n function getTranslationToRef(self, result) {\n result.x = self._m[12];\n result.y = self._m[13];\n result.z = self._m[14];\n }\n Matrix.getTranslationToRef = getTranslationToRef;\n /**\n * Remove rotation and scaling part from the matrix\n * @returns the updated matrix\n */\n function removeRotationAndScaling(self) {\n const m = self._m;\n fromValuesToRef(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, m[12], m[13], m[14], m[15], self);\n _updateIdentityStatus(self, m[12] === 0 && m[13] === 0 && m[14] === 0 && m[15] === 1);\n return self;\n }\n Matrix.removeRotationAndScaling = removeRotationAndScaling;\n /**\n * Multiply two matrices\n * @param other - defines the second operand\n * @returns a new matrix set with the multiplication result of the current Matrix and the given one\n */\n function multiply(self, other) {\n const result = create();\n multiplyToRef(self, other, result);\n return result;\n }\n Matrix.multiply = multiply;\n /**\n * Copy the current matrix from the given one\n * @param other - defines the source matrix\n * @returns the current updated matrix\n */\n function copy(from, dest) {\n copyToArray(from, dest._m);\n _updateIdentityStatus(dest, from.isIdentity, from._isIdentityDirty, from.isIdentity3x2, from._isIdentity3x2Dirty);\n }\n Matrix.copy = copy;\n /**\n * Populates the given array from the starting index with the current matrix values\n * @param array - defines the target array\n * @param offset - defines the offset in the target array where to start storing values\n * @returns the current matrix\n */\n function copyToArray(self, arrayDest, offsetDest = 0) {\n for (let index = 0; index < 16; index++) {\n arrayDest[offsetDest + index] = self._m[index];\n }\n }\n Matrix.copyToArray = copyToArray;\n /**\n * Sets the given matrix \"result\" with the multiplication result of the current Matrix and the given one\n * @param other - defines the second operand\n * @param result - defines the matrix where to store the multiplication\n * @returns the current matrix\n */\n function multiplyToRef(self, other, result) {\n if (self.isIdentity) {\n copy(other, result);\n return;\n }\n if (other.isIdentity) {\n copy(self, result);\n return;\n }\n multiplyToArray(self, other, result._m, 0);\n _markAsUpdated(result);\n }\n Matrix.multiplyToRef = multiplyToRef;\n /**\n * Sets the FloatArray \"result\" from the given index \"offset\" with the multiplication of the current matrix and the given one\n * @param other - defines the second operand\n * @param result - defines the array where to store the multiplication\n * @param offset - defines the offset in the target array where to start storing values\n * @returns the current matrix\n */\n function multiplyToArray(self, other, result, offset) {\n const m = self._m;\n const otherM = other._m;\n // tslint:disable:one-variable-per-declaration\n const tm0 = m[0], tm1 = m[1], tm2 = m[2], tm3 = m[3];\n const tm4 = m[4], tm5 = m[5], tm6 = m[6], tm7 = m[7];\n const tm8 = m[8], tm9 = m[9], tm10 = m[10], tm11 = m[11];\n const tm12 = m[12], tm13 = m[13], tm14 = m[14], tm15 = m[15];\n const om0 = otherM[0], om1 = otherM[1], om2 = otherM[2], om3 = otherM[3];\n const om4 = otherM[4], om5 = otherM[5], om6 = otherM[6], om7 = otherM[7];\n const om8 = otherM[8], om9 = otherM[9], om10 = otherM[10], om11 = otherM[11];\n const om12 = otherM[12], om13 = otherM[13], om14 = otherM[14], om15 = otherM[15];\n // tslint:enable:one-variable-per-declaration\n result[offset] = tm0 * om0 + tm1 * om4 + tm2 * om8 + tm3 * om12;\n result[offset + 1] = tm0 * om1 + tm1 * om5 + tm2 * om9 + tm3 * om13;\n result[offset + 2] = tm0 * om2 + tm1 * om6 + tm2 * om10 + tm3 * om14;\n result[offset + 3] = tm0 * om3 + tm1 * om7 + tm2 * om11 + tm3 * om15;\n result[offset + 4] = tm4 * om0 + tm5 * om4 + tm6 * om8 + tm7 * om12;\n result[offset + 5] = tm4 * om1 + tm5 * om5 + tm6 * om9 + tm7 * om13;\n result[offset + 6] = tm4 * om2 + tm5 * om6 + tm6 * om10 + tm7 * om14;\n result[offset + 7] = tm4 * om3 + tm5 * om7 + tm6 * om11 + tm7 * om15;\n result[offset + 8] = tm8 * om0 + tm9 * om4 + tm10 * om8 + tm11 * om12;\n result[offset + 9] = tm8 * om1 + tm9 * om5 + tm10 * om9 + tm11 * om13;\n result[offset + 10] = tm8 * om2 + tm9 * om6 + tm10 * om10 + tm11 * om14;\n result[offset + 11] = tm8 * om3 + tm9 * om7 + tm10 * om11 + tm11 * om15;\n result[offset + 12] = tm12 * om0 + tm13 * om4 + tm14 * om8 + tm15 * om12;\n result[offset + 13] = tm12 * om1 + tm13 * om5 + tm14 * om9 + tm15 * om13;\n result[offset + 14] = tm12 * om2 + tm13 * om6 + tm14 * om10 + tm15 * om14;\n result[offset + 15] = tm12 * om3 + tm13 * om7 + tm14 * om11 + tm15 * om15;\n }\n Matrix.multiplyToArray = multiplyToArray;\n /**\n * Check equality between self matrix and a second one\n * @param value - defines the second matrix to compare\n * @returns true is the current matrix and the given one values are strictly equal\n */\n function equals(self, value) {\n const other = value;\n if (!other) {\n return false;\n }\n if (self.isIdentity || other.isIdentity) {\n if (!self._isIdentityDirty && !other._isIdentityDirty) {\n return self.isIdentity && other.isIdentity;\n }\n }\n const m = self._m;\n const om = other._m;\n return (m[0] === om[0] &&\n m[1] === om[1] &&\n m[2] === om[2] &&\n m[3] === om[3] &&\n m[4] === om[4] &&\n m[5] === om[5] &&\n m[6] === om[6] &&\n m[7] === om[7] &&\n m[8] === om[8] &&\n m[9] === om[9] &&\n m[10] === om[10] &&\n m[11] === om[11] &&\n m[12] === om[12] &&\n m[13] === om[13] &&\n m[14] === om[14] &&\n m[15] === om[15]);\n }\n Matrix.equals = equals;\n /**\n * Clone the current matrix\n * @returns a new matrix from the current matrix\n */\n function clone(self) {\n const result = create();\n copy(self, result);\n return result;\n }\n Matrix.clone = clone;\n /**\n * Gets the hash code of the current matrix\n * @returns the hash code\n */\n function getHashCode(self) {\n let hash = self._m[0] || 0;\n for (let i = 1; i < 16; i++) {\n hash = (hash * 397) ^ (self._m[i] || 0);\n }\n return hash;\n }\n Matrix.getHashCode = getHashCode;\n /**\n * Decomposes the current Matrix into a translation, rotation and scaling components\n * @param scale - defines the scale vector3 given as a reference to update\n * @param rotation - defines the rotation quaternion given as a reference to update\n * @param translation - defines the translation vector3 given as a reference to update\n * @returns true if operation was successful\n */\n function decompose(self, scale, rotation, translation) {\n if (self.isIdentity) {\n if (translation) {\n translation = Vector3_1.Vector3.create(0, 0, 0);\n }\n if (scale) {\n scale = Vector3_1.Vector3.create(0, 0, 0);\n }\n if (rotation) {\n rotation = Quaternion_1.Quaternion.create(0, 0, 0, 1);\n }\n return true;\n }\n const m = self._m;\n if (translation) {\n translation = Vector3_1.Vector3.create(m[12], m[13], m[14]);\n }\n const usedScale = scale || Vector3_1.Vector3.Zero();\n usedScale.x = Math.sqrt(m[0] * m[0] + m[1] * m[1] + m[2] * m[2]);\n usedScale.y = Math.sqrt(m[4] * m[4] + m[5] * m[5] + m[6] * m[6]);\n usedScale.z = Math.sqrt(m[8] * m[8] + m[9] * m[9] + m[10] * m[10]);\n if (determinant(self) <= 0) {\n usedScale.y *= -1;\n }\n if (usedScale.x === 0 || usedScale.y === 0 || usedScale.z === 0) {\n if (rotation) {\n rotation = Quaternion_1.Quaternion.create(0, 0, 0, 1);\n }\n return false;\n }\n if (rotation) {\n // tslint:disable-next-line:one-variable-per-declaration\n const sx = 1 / usedScale.x, sy = 1 / usedScale.y, sz = 1 / usedScale.z;\n const tmpMatrix = create();\n fromValuesToRef(m[0] * sx, m[1] * sx, m[2] * sx, 0.0, m[4] * sy, m[5] * sy, m[6] * sy, 0.0, m[8] * sz, m[9] * sz, m[10] * sz, 0.0, 0.0, 0.0, 0.0, 1.0, tmpMatrix);\n Quaternion_1.Quaternion.fromRotationMatrixToRef(tmpMatrix, rotation);\n }\n return true;\n }\n Matrix.decompose = decompose;\n /**\n * Gets specific row of the matrix\n * @param index - defines the number of the row to get\n * @returns the index-th row of the current matrix as a new Vector4\n */\n // TODO\n // export function getRow(index: number): Nullable<Vector4> {\n // if (index < 0 || index > 3) {\n // return null\n // }\n // const i = index * 4\n // return new Vector4(\n // self._m[i + 0],\n // self._m[i + 1],\n // self._m[i + 2],\n // self._m[i + 3]\n // )\n // }\n /**\n * Sets the index-th row of the current matrix to the vector4 values\n * @param index - defines the number of the row to set\n * @param row - defines the target vector4\n * @returns the updated current matrix\n */\n // TODO\n // export function setRow(index: number, row: Vector4): MutableMatrix {\n // return setRowFromFloats(index, row.x, row.y, row.z, row.w)\n // }\n /**\n * Sets the index-th row of the current matrix with the given 4 x float values\n * @param index - defines the row index\n * @param x - defines the x component to set\n * @param y - defines the y component to set\n * @param z - defines the z component to set\n * @param w - defines the w component to set\n * @returns the updated current matrix\n */\n function setRowFromFloats(self, index, x, y, z, w) {\n if (index < 0 || index > 3) {\n return;\n }\n const i = index * 4;\n self._m[i + 0] = x;\n self._m[i + 1] = y;\n self._m[i + 2] = z;\n self._m[i + 3] = w;\n _markAsUpdated(self);\n }\n Matrix.setRowFromFloats = setRowFromFloats;\n /**\n * Compute a new matrix set with the current matrix values multiplied by scale (float)\n * @param scale - defines the scale factor\n * @returns a new matrix\n */\n function scale(self, scale) {\n const result = create();\n scaleToRef(self, scale, result);\n return result;\n }\n Matrix.scale = scale;\n /**\n * Scale the current matrix values by a factor to a given result matrix\n * @param scale - defines the scale factor\n * @param result - defines the matrix to store the result\n * @returns the current matrix\n */\n function scaleToRef(self, scale, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] = self._m[index] * scale;\n }\n _markAsUpdated(result);\n }\n Matrix.scaleToRef = scaleToRef;\n /**\n * Scale the current matrix values by a factor and add the result to a given matrix\n * @param scale - defines the scale factor\n * @param result - defines the Matrix to store the result\n * @returns the current matrix\n */\n function scaleAndAddToRef(self, scale, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] += self._m[index] * scale;\n }\n _markAsUpdated(result);\n }\n Matrix.scaleAndAddToRef = scaleAndAddToRef;\n /**\n * Writes to the given matrix a normal matrix, computed from self one (using values from identity matrix for fourth row and column).\n * @param ref - matrix to store the result\n */\n function normalMatrixToRef(self, ref) {\n const tmp = create();\n invertToRef(self, tmp);\n transposeToRef(tmp, ref);\n const m = ref._m;\n fromValuesToRef(m[0], m[1], m[2], 0.0, m[4], m[5], m[6], 0.0, m[8], m[9], m[10], 0.0, 0.0, 0.0, 0.0, 1.0, ref);\n }\n Matrix.normalMatrixToRef = normalMatrixToRef;\n /**\n * Gets only rotation part of the current matrix\n * @returns a new matrix sets to the extracted rotation matrix from the current one\n */\n function getRotationMatrix(self) {\n const result = create();\n getRotationMatrixToRef(self, result);\n return result;\n }\n Matrix.getRotationMatrix = getRotationMatrix;\n /**\n * Extracts the rotation matrix from the current one and sets it as the given \"result\"\n * @param result - defines the target matrix to store data to\n * @returns the current matrix\n */\n function getRotationMatrixToRef(self, result) {\n const scale = Vector3_1.Vector3.Zero();\n if (!decompose(self, scale)) {\n result = Identity();\n return;\n }\n const m = self._m;\n // tslint:disable-next-line:one-variable-per-declaration\n const sx = 1 / scale.x, sy = 1 / scale.y, sz = 1 / scale.z;\n fromValuesToRef(m[0] * sx, m[1] * sx, m[2] * sx, 0.0, m[4] * sy, m[5] * sy, m[6] * sy, 0.0, m[8] * sz, m[9] * sz, m[10] * sz, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n }\n Matrix.getRotationMatrixToRef = getRotationMatrixToRef;\n /**\n * Toggles model matrix from being right handed to left handed in place and vice versa\n */\n function toggleModelMatrixHandInPlace(self) {\n self._m[2] *= -1;\n self._m[6] *= -1;\n self._m[8] *= -1;\n self._m[9] *= -1;\n self._m[14] *= -1;\n _markAsUpdated(self);\n }\n Matrix.toggleModelMatrixHandInPlace = toggleModelMatrixHandInPlace;\n /**\n * Toggles projection matrix from being right handed to left handed in place and vice versa\n */\n function toggleProjectionMatrixHandInPlace(self) {\n self._m[8] *= -1;\n self._m[9] *= -1;\n self._m[10] *= -1;\n self._m[11] *= -1;\n _markAsUpdated(self);\n }\n Matrix.toggleProjectionMatrixHandInPlace = toggleProjectionMatrixHandInPlace;\n /** @internal */\n function _updateIdentityStatus(self, isIdentity, isIdentityDirty = false, isIdentity3x2 = false, isIdentity3x2Dirty = true) {\n self.updateFlag = _updateFlagSeed++;\n self.isIdentity = isIdentity;\n self.isIdentity3x2 = isIdentity || isIdentity3x2;\n self._isIdentityDirty = self.isIdentity ? false : isIdentityDirty;\n self._isIdentity3x2Dirty = self.isIdentity3x2 ? false : isIdentity3x2Dirty;\n }\n})(Matrix = exports.Matrix || (exports.Matrix = {}));\n//# sourceMappingURL=Matrix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quaternion = void 0;\nconst Vector3_1 = require(\"./Vector3\");\nconst Scalar_1 = require(\"./Scalar\");\nconst types_1 = require(\"./types\");\nconst Matrix_1 = require(\"./Matrix\");\n/**\n * @public\n * Quaternion is a type and a namespace.\n * ```\n * // The namespace contains all types and functions to operates with Quaternion\n * const next = Quaternion.add(pointA, velocityA)\n * // The type Quaternion is an alias to Quaternion.ReadonlyQuaternion\n * const readonlyRotation: Quaternion = Quaternion.Zero()\n * readonlyRotation.x = 0.1 // this FAILS\n *\n * // For mutable usage, use `Quaternion.Mutable`\n * const rotation: Quaternion.Mutable = Quaternion.Identity()\n * rotation.x = 3.0 // this WORKS\n * ```\n */\nvar Quaternion;\n(function (Quaternion) {\n /**\n * Creates a new Quaternion from the given floats\n * @param x - defines the first component (0 by default)\n * @param y - defines the second component (0 by default)\n * @param z - defines the third component (0 by default)\n * @param w - defines the fourth component (1.0 by default)\n */\n function create(\n /** defines the first component (0 by default) */\n x = 0.0, \n /** defines the second component (0 by default) */\n y = 0.0, \n /** defines the third component (0 by default) */\n z = 0.0, \n /** defines the fourth component (1.0 by default) */\n w = 1.0) {\n return { x, y, z, w };\n }\n Quaternion.create = create;\n /**\n * Returns a new Quaternion as the result of the addition of the two given quaternions.\n * @param q1 - the first quaternion\n * @param q2 - the second quaternion\n * @returns the resulting quaternion\n */\n function add(q1, q2) {\n return { x: q1.x + q2.x, y: q1.y + q2.y, z: q1.z + q2.z, w: q1.w + q2.w };\n }\n Quaternion.add = add;\n /**\n * Creates a new rotation from the given Euler float angles (y, x, z) and stores it in the target quaternion\n * @param yaw - defines the rotation around Y axis (radians)\n * @param pitch - defines the rotation around X axis (radians)\n * @param roll - defines the rotation around Z axis (radians)\n * @returns result quaternion\n */\n function fromRotationYawPitchRoll(yaw, pitch, roll) {\n // Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n const halfPitch = pitch * 0.5;\n const halfYaw = yaw * 0.5;\n const halfRoll = roll * 0.5;\n const c1 = Math.cos(halfPitch);\n const c2 = Math.cos(halfYaw);\n const c3 = Math.cos(halfRoll);\n const s1 = Math.sin(halfPitch);\n const s2 = Math.sin(halfYaw);\n const s3 = Math.sin(halfRoll);\n return create(c2 * s1 * c3 + s2 * c1 * s3, s2 * c1 * c3 - c2 * s1 * s3, c2 * c1 * s3 - s2 * s1 * c3, c2 * c1 * c3 + s2 * s1 * s3);\n }\n Quaternion.fromRotationYawPitchRoll = fromRotationYawPitchRoll;\n /**\n * Returns a rotation that rotates z degrees around the z axis, x degrees around the x axis, and y degrees around the y axis.\n * @param x - the rotation on the x axis in euler degrees\n * @param y - the rotation on the y axis in euler degrees\n * @param z - the rotation on the z axis in euler degrees\n */\n function fromEulerDegrees(x, y, z) {\n return fromRotationYawPitchRoll(y * types_1.DEG2RAD, x * types_1.DEG2RAD, z * types_1.DEG2RAD);\n }\n Quaternion.fromEulerDegrees = fromEulerDegrees;\n /**\n * Gets length of current quaternion\n * @returns the quaternion length (float)\n */\n function length(q) {\n return Math.sqrt(lengthSquared(q));\n }\n Quaternion.length = length;\n /**\n * Gets length of current quaternion\n * @returns the quaternion length (float)\n */\n function lengthSquared(q) {\n return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n }\n Quaternion.lengthSquared = lengthSquared;\n /**\n * Returns the dot product (float) between the quaternions \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the dot product\n */\n function dot(left, right) {\n return (left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w);\n }\n Quaternion.dot = dot;\n /**\n * Returns the angle in degrees between two rotations a and b.\n * @param quat1 - defines the first quaternion\n * @param quat2 - defines the second quaternion\n * @returns the degrees angle\n */\n function angle(quat1, quat2) {\n const dotVal = dot(quat1, quat2);\n return Math.acos(Math.min(Math.abs(dotVal), 1)) * 2 * types_1.RAD2DEG;\n }\n Quaternion.angle = angle;\n /**\n * The from quaternion is rotated towards to by an angular step of maxDegreesDelta.\n * @param from - defines the first quaternion\n * @param to - defines the second quaternion\n * @param maxDegreesDelta - the interval step\n */\n function rotateTowards(from, to, maxDegreesDelta) {\n const num = angle(from, to);\n if (num === 0) {\n return to;\n }\n const t = Math.min(1, maxDegreesDelta / num);\n return slerp(from, to, t);\n }\n Quaternion.rotateTowards = rotateTowards;\n /**\n * Creates a rotation with the specified forward and upwards directions.\n * @param forward - the direction to look in\n * @param up - the vector that defines in which direction up is\n */\n function lookRotation(forward, up = { x: 0.0, y: 1.0, z: 0.0 }) {\n const forwardNew = Vector3_1.Vector3.normalize(forward);\n const right = Vector3_1.Vector3.normalize(Vector3_1.Vector3.cross(up, forwardNew));\n const upNew = Vector3_1.Vector3.cross(forwardNew, right);\n const m00 = right.x;\n const m01 = right.y;\n const m02 = right.z;\n const m10 = upNew.x;\n const m11 = upNew.y;\n const m12 = upNew.z;\n const m20 = forwardNew.x;\n const m21 = forwardNew.y;\n const m22 = forwardNew.z;\n const num8 = m00 + m11 + m22;\n const quaternion = create();\n if (num8 > 0) {\n let num = Math.sqrt(num8 + 1);\n quaternion.w = num * 0.5;\n num = 0.5 / num;\n quaternion.x = (m12 - m21) * num;\n quaternion.y = (m20 - m02) * num;\n quaternion.z = (m01 - m10) * num;\n return quaternion;\n }\n if (m00 >= m11 && m00 >= m22) {\n const num7 = Math.sqrt(1 + m00 - m11 - m22);\n const num4 = 0.5 / num7;\n quaternion.x = 0.5 * num7;\n quaternion.y = (m01 + m10) * num4;\n quaternion.z = (m02 + m20) * num4;\n quaternion.w = (m12 - m21) * num4;\n return quaternion;\n }\n if (m11 > m22) {\n const num6 = Math.sqrt(1 + m11 - m00 - m22);\n const num3 = 0.5 / num6;\n quaternion.x = (m10 + m01) * num3;\n quaternion.y = 0.5 * num6;\n quaternion.z = (m21 + m12) * num3;\n quaternion.w = (m20 - m02) * num3;\n return quaternion;\n }\n const num5 = Math.sqrt(1 + m22 - m00 - m11);\n const num2 = 0.5 / num5;\n quaternion.x = (m20 + m02) * num2;\n quaternion.y = (m21 + m12) * num2;\n quaternion.z = 0.5 * num5;\n quaternion.w = (m01 - m10) * num2;\n return quaternion;\n }\n Quaternion.lookRotation = lookRotation;\n /**\n * Normalize in place the current quaternion\n * @returns the current updated quaternion\n */\n function normalize(q) {\n const qLength = 1.0 / length(q);\n return create(q.x * qLength, q.y * qLength, q.z * qLength, q.w * qLength);\n }\n Quaternion.normalize = normalize;\n /**\n * Creates a rotation which rotates from fromDirection to toDirection.\n * @param from - defines the first direction Vector\n * @param to - defines the target direction Vector\n */\n function fromToRotation(from, to, up = Vector3_1.Vector3.Up()) {\n // Unity-based calculations implemented from https://forum.unity.com/threads/quaternion-lookrotation-around-an-axis.608470/#post-4069888\n const v0 = Vector3_1.Vector3.normalize(from);\n const v1 = Vector3_1.Vector3.normalize(to);\n const a = Vector3_1.Vector3.cross(v0, v1);\n const w = Math.sqrt(Vector3_1.Vector3.lengthSquared(v0) * Vector3_1.Vector3.lengthSquared(v1)) +\n Vector3_1.Vector3.dot(v0, v1);\n if (Vector3_1.Vector3.lengthSquared(a) < 0.0001) {\n // the vectors are parallel, check w to find direction\n // if w is 0 then values are opposite, and we sould rotate 180 degrees around the supplied axis\n // otherwise the vectors in the same direction and no rotation should occur\n return Math.abs(w) < 0.0001\n ? normalize(create(up.x, up.y, up.z, 0))\n : Identity();\n }\n else {\n return normalize(create(a.x, a.y, a.z, w));\n }\n }\n Quaternion.fromToRotation = fromToRotation;\n /**\n * Creates an identity quaternion\n * @returns - the identity quaternion\n */\n function Identity() {\n return create(0.0, 0.0, 0.0, 1.0);\n }\n Quaternion.Identity = Identity;\n /**\n * Gets or sets the euler angle representation of the rotation.\n * Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n * @public\n * @returns a new Vector3 with euler angles degrees\n */\n function toEulerAngles(q) {\n const out = Vector3_1.Vector3.create();\n // if the input quaternion is normalized, this is exactly one. Otherwise, this acts as a correction factor for the quaternion's not-normalizedness\n const unit = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n // q will have a magnitude of 0.5 or greater if and only if q is a singularity case\n const test = q.x * q.w - q.y * q.z;\n if (test > 0.4995 * unit) {\n // singularity at north pole\n out.x = Math.PI / 2;\n out.y = 2 * Math.atan2(q.y, q.x);\n out.z = 0;\n }\n else if (test < -0.4995 * unit) {\n // singularity at south pole\n out.x = -Math.PI / 2;\n out.y = -2 * Math.atan2(q.y, q.x);\n out.z = 0;\n }\n else {\n // no singularity - q is the majority of cases\n out.x = Math.asin(2 * (q.w * q.x - q.y * q.z));\n out.y = Math.atan2(2 * q.w * q.y + 2 * q.z * q.x, 1 - 2 * (q.x * q.x + q.y * q.y));\n out.z = Math.atan2(2 * q.w * q.z + 2 * q.x * q.y, 1 - 2 * (q.z * q.z + q.x * q.x));\n }\n out.x *= types_1.RAD2DEG;\n out.y *= types_1.RAD2DEG;\n out.z *= types_1.RAD2DEG;\n // ensure the degree values are between 0 and 360\n out.x = Scalar_1.Scalar.repeat(out.x, 360);\n out.y = Scalar_1.Scalar.repeat(out.y, 360);\n out.z = Scalar_1.Scalar.repeat(out.z, 360);\n return out;\n }\n Quaternion.toEulerAngles = toEulerAngles;\n /**\n * Creates a new rotation from the given Euler float angles (y, x, z) and stores it in the target quaternion\n * @param yaw - defines the rotation around Y axis (radians)\n * @param pitch - defines the rotation around X axis (radians)\n * @param roll - defines the rotation around Z axis (radians)\n * @param result - defines the target quaternion\n */\n function fromRotationYawPitchRollToRef(yaw, pitch, roll, result) {\n // Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n const halfPitch = pitch * 0.5;\n const halfYaw = yaw * 0.5;\n const halfRoll = roll * 0.5;\n const c1 = Math.cos(halfPitch);\n const c2 = Math.cos(halfYaw);\n const c3 = Math.cos(halfRoll);\n const s1 = Math.sin(halfPitch);\n const s2 = Math.sin(halfYaw);\n const s3 = Math.sin(halfRoll);\n result.x = c2 * s1 * c3 + s2 * c1 * s3;\n result.y = s2 * c1 * c3 - c2 * s1 * s3;\n result.z = c2 * c1 * s3 - s2 * s1 * c3;\n result.w = c2 * c1 * c3 + s2 * s1 * s3;\n }\n Quaternion.fromRotationYawPitchRollToRef = fromRotationYawPitchRollToRef;\n /**\n * Updates the given quaternion with the given rotation matrix values\n * @param matrix - defines the source matrix\n * @param result - defines the target quaternion\n */\n function fromRotationMatrixToRef(matrix, result) {\n const data = matrix._m;\n // tslint:disable:one-variable-per-declaration\n const m11 = data[0], m12 = data[4], m13 = data[8];\n const m21 = data[1], m22 = data[5], m23 = data[9];\n const m31 = data[2], m32 = data[6], m33 = data[10];\n // tslint:enable:one-variable-per-declaration\n const trace = m11 + m22 + m33;\n let s;\n if (trace > 0) {\n s = 0.5 / Math.sqrt(trace + 1.0);\n result.w = 0.25 / s;\n result.x = (m32 - m23) * s;\n result.y = (m13 - m31) * s;\n result.z = (m21 - m12) * s;\n }\n else if (m11 > m22 && m11 > m33) {\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n result.w = (m32 - m23) / s;\n result.x = 0.25 * s;\n result.y = (m12 + m21) / s;\n result.z = (m13 + m31) / s;\n }\n else if (m22 > m33) {\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n result.w = (m13 - m31) / s;\n result.x = (m12 + m21) / s;\n result.y = 0.25 * s;\n result.z = (m23 + m32) / s;\n }\n else {\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n result.w = (m21 - m12) / s;\n result.x = (m13 + m31) / s;\n result.y = (m23 + m32) / s;\n result.z = 0.25 * s;\n }\n }\n Quaternion.fromRotationMatrixToRef = fromRotationMatrixToRef;\n /**\n * Interpolates between two quaternions\n * @param left - defines first quaternion\n * @param right - defines second quaternion\n * @param amount - defines the gradient to use\n * @returns the new interpolated quaternion\n */\n function slerp(left, right, amount) {\n const result = Quaternion.Identity();\n Quaternion.slerpToRef(left, right, amount, result);\n return result;\n }\n Quaternion.slerp = slerp;\n /**\n * Interpolates between two quaternions and stores it into a target quaternion\n * @param left - defines first quaternion\n * @param right - defines second quaternion\n * @param amount - defines the gradient to use\n * @param result - defines the target quaternion\n */\n function slerpToRef(left, right, amount, result) {\n let num2;\n let num3;\n let num4 = left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w;\n let flag = false;\n if (num4 < 0) {\n flag = true;\n num4 = -num4;\n }\n if (num4 > 0.999999) {\n num3 = 1 - amount;\n num2 = flag ? -amount : amount;\n }\n else {\n const num5 = Math.acos(num4);\n const num6 = 1.0 / Math.sin(num5);\n num3 = Math.sin((1.0 - amount) * num5) * num6;\n num2 = flag\n ? -Math.sin(amount * num5) * num6\n : Math.sin(amount * num5) * num6;\n }\n result.x = num3 * left.x + num2 * right.x;\n result.y = num3 * left.y + num2 * right.y;\n result.z = num3 * left.z + num2 * right.z;\n result.w = num3 * left.w + num2 * right.w;\n }\n Quaternion.slerpToRef = slerpToRef;\n /**\n * Multiplies two quaternions\n * @param self - defines the first operand\n * @param q1 - defines the second operand\n * @returns a new quaternion set as the multiplication result of the self one with the given one \"q1\"\n */\n function multiply(self, q1) {\n const result = create(0, 0, 0, 1.0);\n multiplyToRef(self, q1, result);\n return result;\n }\n Quaternion.multiply = multiply;\n /**\n * Sets the given \"result\" as the the multiplication result of the self one with the given one \"q1\"\n * @param self - defines the first operand\n * @param q1 - defines the second operand\n * @param result - defines the target quaternion\n * @returns the current quaternion\n */\n function multiplyToRef(self, q1, result) {\n result.x = self.x * q1.w + self.y * q1.z - self.z * q1.y + self.w * q1.x;\n result.y = -self.x * q1.z + self.y * q1.w + self.z * q1.x + self.w * q1.y;\n result.z = self.x * q1.y - self.y * q1.x + self.z * q1.w + self.w * q1.z;\n result.w = -self.x * q1.x - self.y * q1.y - self.z * q1.z + self.w * q1.w;\n }\n Quaternion.multiplyToRef = multiplyToRef;\n /**\n *\n * @param degrees - the angle degrees\n * @param axis - vector3\n * @returns a new Quaternion\n */\n function fromAngleAxis(degrees, axis) {\n if (Vector3_1.Vector3.lengthSquared(axis) === 0) {\n return Quaternion.Identity();\n }\n const result = Identity();\n let radians = degrees * types_1.DEG2RAD;\n radians *= 0.5;\n const a2 = Vector3_1.Vector3.normalize(axis);\n Vector3_1.Vector3.scaleToRef(a2, Math.sin(radians), a2);\n result.x = a2.x;\n result.y = a2.y;\n result.z = a2.z;\n result.w = Math.cos(radians);\n return normalize(result);\n }\n Quaternion.fromAngleAxis = fromAngleAxis;\n /**\n * Creates a new quaternion containing the rotation value to reach the target (axis1, axis2, axis3) orientation as a rotated XYZ system (axis1, axis2 and axis3 are normalized during this operation)\n * @param axis1 - defines the first axis\n * @param axis2 - defines the second axis\n * @param axis3 - defines the third axis\n * @returns the new quaternion\n */\n function fromAxisToRotationQuaternion(axis1, axis2, axis3) {\n const quat = Quaternion.create(0.0, 0.0, 0.0, 0.0);\n fromAxisToRotationQuaternionToRef(axis1, axis2, axis3, quat);\n return quat;\n }\n Quaternion.fromAxisToRotationQuaternion = fromAxisToRotationQuaternion;\n /**\n * Creates a rotation value to reach the target (axis1, axis2, axis3) orientation as a rotated XYZ system (axis1, axis2 and axis3 are normalized during this operation) and stores it in the target quaternion\n * @param axis1 - defines the first axis\n * @param axis2 - defines the second axis\n * @param axis3 - defines the third axis\n * @param ref - defines the target quaternion\n */\n function fromAxisToRotationQuaternionToRef(axis1, axis2, axis3, ref) {\n const rotMat = Matrix_1.Matrix.create();\n Matrix_1.Matrix.fromXYZAxesToRef(Vector3_1.Vector3.normalize(axis1), Vector3_1.Vector3.normalize(axis2), Vector3_1.Vector3.normalize(axis3), rotMat);\n Quaternion.fromRotationMatrixToRef(rotMat, ref);\n }\n Quaternion.fromAxisToRotationQuaternionToRef = fromAxisToRotationQuaternionToRef;\n /**\n * Returns a zero filled quaternion\n */\n function Zero() {\n return create(0.0, 0.0, 0.0, 0.0);\n }\n Quaternion.Zero = Zero;\n /**\n * @public\n * Rotates the transform so the forward vector points at target's current position.\n */\n function fromLookAt(position, target, worldUp = Vector3_1.Vector3.Up()) {\n const result = Quaternion.Identity();\n fromLookAtToRef(position, target, worldUp, result);\n return result;\n }\n Quaternion.fromLookAt = fromLookAt;\n /**\n * @public\n * Rotates the transform so the forward vector points at target's current position.\n */\n function fromLookAtToRef(position, target, worldUp = Vector3_1.Vector3.Up(), result) {\n const m = Matrix_1.Matrix.Identity();\n Matrix_1.Matrix.lookAtLHToRef(position, target, worldUp, m);\n Matrix_1.Matrix.invertToRef(m, m);\n Quaternion.fromRotationMatrixToRef(m, result);\n }\n Quaternion.fromLookAtToRef = fromLookAtToRef;\n})(Quaternion = exports.Quaternion || (exports.Quaternion = {}));\n//# sourceMappingURL=Quaternion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Color4 = void 0;\nconst Scalar_1 = require(\"./Scalar\");\nconst types_1 = require(\"./types\");\n/**\n * @public\n * Color4 is a type and a namespace.\n * ```\n * // The namespace contains all types and functions to operates with Color4\n * Color4.add(blue, red) // sum component by component resulting pink\n * // The type Color4 is an alias to Color4.ReadonlyColor4\n * const readonlyBlue: Color4 = Color4.Blue()\n * readonlyBlue.a = 0.1 // this FAILS\n *\n * // For mutable usage, use `Color4.Mutable`\n * const blue: Color4.Mutable = Color4.Blue()\n * blue.a = 0.1 // this WORKS\n * ```\n */\nvar Color4;\n(function (Color4) {\n /**\n * Creates create mutable Color4 from red, green, blue values, all between 0 and 1\n * @param r - defines the red component (between 0 and 1, default is 0)\n * @param g - defines the green component (between 0 and 1, default is 0)\n * @param b - defines the blue component (between 0 and 1, default is 0)\n * @param a - defines the alpha component (between 0 and 1, default is 1)\n */\n function create(\n /**\n * Defines the red component (between 0 and 1, default is 0)\n */\n r = 0, \n /**\n * Defines the green component (between 0 and 1, default is 0)\n */\n g = 0, \n /**\n * Defines the blue component (between 0 and 1, default is 0)\n */\n b = 0, \n /**\n * Defines the alpha component (between 0 and 1, default is 1)\n */\n a = 1) {\n return { r, g, b, a };\n }\n Color4.create = create;\n // Statics\n /**\n * Creates a Color4 from the string containing valid hexadecimal values\n * @param hex - defines a string containing valid hexadecimal values\n * @returns create mutable Color4\n */\n function fromHexString(hex) {\n if (hex.substring(0, 1) !== '#' || hex.length !== 9) {\n return create(0.0, 0.0, 0.0, 0.0);\n }\n const r = parseInt(hex.substring(1, 3), 16);\n const g = parseInt(hex.substring(3, 5), 16);\n const b = parseInt(hex.substring(5, 7), 16);\n const a = parseInt(hex.substring(7, 9), 16);\n return Color4.fromInts(r, g, b, a);\n }\n Color4.fromHexString = fromHexString;\n /**\n * Creates create mutable Color4 set with the linearly interpolated values of \"amount\" between the left Color4 object and the right Color4 object\n * @param left - defines the start value\n * @param right - defines the end value\n * @param amount - defines the gradient factor\n * @returns create mutable Color4\n */\n function lerp(left, right, amount) {\n const result = create(0.0, 0.0, 0.0, 0.0);\n Color4.lerpToRef(left, right, amount, result);\n return result;\n }\n Color4.lerp = lerp;\n /**\n * Set the given \"result\" with the linearly interpolated values of \"amount\" between the left Color4 object and the right Color4 object\n * @param left - defines the start value\n * @param right - defines the end value\n * @param amount - defines the gradient factor\n * @param result - defines the Color4 object where to store data\n */\n function lerpToRef(left, right, amount, result) {\n result.r = left.r + (right.r - left.r) * amount;\n result.g = left.g + (right.g - left.g) * amount;\n result.b = left.b + (right.b - left.b) * amount;\n result.a = left.a + (right.a - left.a) * amount;\n }\n Color4.lerpToRef = lerpToRef;\n /**\n * Returns a Color4 value containing a red color\n * @returns a new Color4\n */\n function Red() {\n return create(1.0, 0, 0, 1.0);\n }\n Color4.Red = Red;\n /**\n * Returns a Color4 value containing a green color\n * @returns create mutable Color4\n */\n function Green() {\n return create(0, 1.0, 0, 1.0);\n }\n Color4.Green = Green;\n /**\n * Returns a Color4 value containing a blue color\n * @returns create mutable Color4\n */\n function Blue() {\n return create(0, 0, 1.0, 1.0);\n }\n Color4.Blue = Blue;\n /**\n * Returns a Color4 value containing a black color\n * @returns create mutable Color4\n */\n function Black() {\n return create(0, 0, 0, 1);\n }\n Color4.Black = Black;\n /**\n * Returns a Color4 value containing a white color\n * @returns create mutable Color4\n */\n function White() {\n return create(1, 1, 1, 1);\n }\n Color4.White = White;\n /**\n * Returns a Color4 value containing a purple color\n * @returns create mutable Color4\n */\n function Purple() {\n return create(0.5, 0, 0.5, 1);\n }\n Color4.Purple = Purple;\n /**\n * Returns a Color4 value containing a magenta color\n * @returns create mutable Color4\n */\n function Magenta() {\n return create(1, 0, 1, 1);\n }\n Color4.Magenta = Magenta;\n /**\n * Returns a Color4 value containing a yellow color\n * @returns create mutable Color4\n */\n function Yellow() {\n return create(1, 1, 0, 1);\n }\n Color4.Yellow = Yellow;\n /**\n * Returns a Color4 value containing a gray color\n * @returns create mutable Color4\n */\n function Gray() {\n return create(0.5, 0.5, 0.5, 1.0);\n }\n Color4.Gray = Gray;\n /**\n * Returns a Color4 value containing a teal color\n * @returns create mutable Color4\n */\n function Teal() {\n return create(0, 1.0, 1.0, 1.0);\n }\n Color4.Teal = Teal;\n /**\n * Returns a Color4 value containing a transparent color\n * @returns create mutable Color4\n */\n function Clear() {\n return create(0, 0, 0, 0);\n }\n Color4.Clear = Clear;\n /**\n * Creates a Color4 from a Color3 and an alpha value\n * @param color3 - defines the source Color3 to read from\n * @param alpha - defines the alpha component (1.0 by default)\n * @returns create mutable Color4\n */\n function fromColor3(color3, alpha = 1.0) {\n return create(color3.r, color3.g, color3.b, alpha);\n }\n Color4.fromColor3 = fromColor3;\n /**\n * Creates a Color4 from the starting index element of the given array\n * @param array - defines the source array to read from\n * @param offset - defines the offset in the source array\n * @returns create mutable Color4\n */\n function fromArray(array, offset = 0) {\n return create(array[offset], array[offset + 1], array[offset + 2], array[offset + 3]);\n }\n Color4.fromArray = fromArray;\n /**\n * Creates a new Color3 from integer values (less than 256)\n * @param r - defines the red component to read from (value between 0 and 255)\n * @param g - defines the green component to read from (value between 0 and 255)\n * @param b - defines the blue component to read from (value between 0 and 255)\n * @param a - defines the alpha component to read from (value between 0 and 255)\n * @returns a new Color4\n */\n function fromInts(r, g, b, a) {\n return create(r / 255.0, g / 255.0, b / 255.0, a / 255.0);\n }\n Color4.fromInts = fromInts;\n /**\n * Check the content of a given array and convert it to an array containing RGBA data\n * If the original array was already containing count * 4 values then it is returned directly\n * @param colors - defines the array to check\n * @param count - defines the number of RGBA data to expect\n * @returns an array containing count * 4 values (RGBA)\n */\n function checkColors4(colors, count) {\n // Check if color3 was used\n if (colors.length === count * 3) {\n const colors4 = [];\n for (let index = 0; index < colors.length; index += 3) {\n const newIndex = (index / 3) * 4;\n colors4[newIndex] = colors[index];\n colors4[newIndex + 1] = colors[index + 1];\n colors4[newIndex + 2] = colors[index + 2];\n colors4[newIndex + 3] = 1.0;\n }\n return colors4;\n }\n return colors;\n }\n Color4.checkColors4 = checkColors4;\n // Operators\n /**\n * Adds the given Color4 values to the ref Color4 object\n * @param a - defines the first operand\n * @param b - defines the second operand\n * @param ref - defines the result rference\n * @returns\n */\n function addToRef(a, b, ref) {\n ref.r = a.r + b.r;\n ref.g = a.g + b.g;\n ref.b = a.b + b.b;\n ref.a = a.a + b.a;\n }\n Color4.addToRef = addToRef;\n /**\n * Stores from the starting index in the given array the Color4 successive values\n * @param array - defines the array where to store the r,g,b components\n * @param index - defines an optional index in the target array to define where to start storing values\n * @returns the current Color4 object\n */\n function toArray(value, array, index = 0) {\n array[index] = value.r;\n array[index + 1] = value.g;\n array[index + 2] = value.b;\n array[index + 3] = value.a;\n }\n Color4.toArray = toArray;\n /**\n * Creates a Color4 set with the added values of the current Color4 and of the given one\n * @param right - defines the second operand\n * @returns create mutable Color4\n */\n function add(value, right) {\n const ret = Clear();\n addToRef(value, right, ret);\n return ret;\n }\n Color4.add = add;\n /**\n * Creates a Color4 set with the subtracted values of the given one from the current Color4\n * @param right - defines the second operand\n * @returns create mutable Color4\n */\n function subtract(value, right) {\n const ret = Clear();\n subtractToRef(value, right, ret);\n return ret;\n }\n Color4.subtract = subtract;\n /**\n * Subtracts the given ones from the current Color4 values and stores the results in \"result\"\n * @param right - defines the second operand\n * @param result - defines the Color4 object where to store the result\n * @returns the current Color4 object\n */\n function subtractToRef(a, b, result) {\n result.r = a.r - b.r;\n result.g = a.g - b.g;\n result.b = a.b - b.b;\n result.a = a.a - b.a;\n }\n Color4.subtractToRef = subtractToRef;\n /**\n * Creates a Color4 with the current Color4 values multiplied by scale\n * @param scale - defines the scaling factor to apply\n * @returns create mutable Color4\n */\n function scale(value, scale) {\n return create(value.r * scale, value.g * scale, value.b * scale, value.a * scale);\n }\n Color4.scale = scale;\n /**\n * Multiplies the current Color4 values by scale and stores the result in \"result\"\n * @param scale - defines the scaling factor to apply\n * @param result - defines the Color4 object where to store the result\n */\n function scaleToRef(value, scale, result) {\n result.r = value.r * scale;\n result.g = value.g * scale;\n result.b = value.b * scale;\n result.a = value.a * scale;\n }\n Color4.scaleToRef = scaleToRef;\n /**\n * Scale the current Color4 values by a factor and add the result to a given Color4\n * @param scale - defines the scale factor\n * @param result - defines the Color4 object where to store the result\n */\n function scaleAndAddToRef(value, scale, result) {\n result.r += value.r * scale;\n result.g += value.g * scale;\n result.b += value.b * scale;\n result.a += value.a * scale;\n }\n Color4.scaleAndAddToRef = scaleAndAddToRef;\n /**\n * Clamps the rgb values by the min and max values and stores the result into \"result\"\n * @param min - defines minimum clamping value (default is 0)\n * @param max - defines maximum clamping value (default is 1)\n * @param result - defines color to store the result into.\n */\n function clampToRef(value, min = 0, max = 1, result) {\n result.r = Scalar_1.Scalar.clamp(value.r, min, max);\n result.g = Scalar_1.Scalar.clamp(value.g, min, max);\n result.b = Scalar_1.Scalar.clamp(value.b, min, max);\n result.a = Scalar_1.Scalar.clamp(value.a, min, max);\n }\n Color4.clampToRef = clampToRef;\n /**\n * Multipy an Color4 value by another and return create mutable Color4\n * @param color - defines the Color4 value to multiply by\n * @returns create mutable Color4\n */\n function multiply(value, color) {\n return create(value.r * color.r, value.g * color.g, value.b * color.b, value.a * color.a);\n }\n Color4.multiply = multiply;\n /**\n * Multipy a Color4 value by another and push the result in a reference value\n * @param color - defines the Color4 value to multiply by\n * @param result - defines the Color4 to fill the result in\n * @returns the result Color4\n */\n function multiplyToRef(value, color, result) {\n result.r = value.r * color.r;\n result.g = value.g * color.g;\n result.b = value.b * color.b;\n result.a = value.a * color.a;\n }\n Color4.multiplyToRef = multiplyToRef;\n /**\n * Creates a string with the Color4 current values\n * @returns the string representation of the Color4 object\n */\n function toString(value) {\n return ('{R: ' +\n value.r +\n ' G:' +\n value.g +\n ' B:' +\n value.b +\n ' A:' +\n value.a +\n '}');\n }\n Color4.toString = toString;\n /**\n * Compute the Color4 hash code\n * @returns an unique number that can be used to hash Color4 objects\n */\n function getHashCode(value) {\n let hash = value.r || 0;\n hash = (hash * 397) ^ (value.g || 0);\n hash = (hash * 397) ^ (value.b || 0);\n hash = (hash * 397) ^ (value.a || 0);\n return hash;\n }\n Color4.getHashCode = getHashCode;\n /**\n * Creates a Color4 copied from the current one\n * @returns create mutable Color4\n */\n function clone(value) {\n return create(value.r, value.g, value.b, value.a);\n }\n Color4.clone = clone;\n /**\n * Copies the given Color4 values into the destination\n * @param source - defines the source Color4 object\n * @param dest - defines the destination Color4 object\n * @returns\n */\n function copyFrom(source, dest) {\n dest.r = source.r;\n dest.g = source.g;\n dest.b = source.b;\n dest.a = source.a;\n }\n Color4.copyFrom = copyFrom;\n /**\n * Copies the given float values into the current one\n * @param r - defines the red component to read from\n * @param g - defines the green component to read from\n * @param b - defines the blue component to read from\n * @param a - defines the alpha component to read from\n * @returns the current updated Color4 object\n */\n function copyFromFloats(r, g, b, a, dest) {\n dest.r = r;\n dest.g = g;\n dest.b = b;\n dest.a = a;\n }\n Color4.copyFromFloats = copyFromFloats;\n /**\n * Copies the given float values into the current one\n * @param r - defines the red component to read from\n * @param g - defines the green component to read from\n * @param b - defines the blue component to read from\n * @param a - defines the alpha component to read from\n * @returns the current updated Color4 object\n */\n function set(r, g, b, a, dest) {\n dest.r = r;\n dest.g = g;\n dest.b = b;\n dest.a = a;\n }\n Color4.set = set;\n /**\n * Compute the Color4 hexadecimal code as a string\n * @returns a string containing the hexadecimal representation of the Color4 object\n */\n function toHexString(value) {\n const intR = (value.r * 255) | 0;\n const intG = (value.g * 255) | 0;\n const intB = (value.b * 255) | 0;\n const intA = (value.a * 255) | 0;\n return ('#' +\n Scalar_1.Scalar.toHex(intR) +\n Scalar_1.Scalar.toHex(intG) +\n Scalar_1.Scalar.toHex(intB) +\n Scalar_1.Scalar.toHex(intA));\n }\n Color4.toHexString = toHexString;\n /**\n * Computes a Color4 converted from the current one to linear space\n * @returns create mutable Color4\n */\n function toLinearSpace(value) {\n const convertedColor = create();\n toLinearSpaceToRef(value, convertedColor);\n return convertedColor;\n }\n Color4.toLinearSpace = toLinearSpace;\n /**\n * Converts the Color4 values to linear space and stores the result in \"convertedColor\"\n * @param convertedColor - defines the Color4 object where to store the linear space version\n * @returns the unmodified Color4\n */\n function toLinearSpaceToRef(value, ref) {\n ref.r = Math.pow(value.r, types_1.ToLinearSpace);\n ref.g = Math.pow(value.g, types_1.ToLinearSpace);\n ref.b = Math.pow(value.b, types_1.ToLinearSpace);\n ref.a = value.a;\n }\n Color4.toLinearSpaceToRef = toLinearSpaceToRef;\n /**\n * Computes a Color4 converted from the current one to gamma space\n * @returns create mutable Color4\n */\n function toGammaSpace(value) {\n const convertedColor = create();\n toGammaSpaceToRef(value, convertedColor);\n return convertedColor;\n }\n Color4.toGammaSpace = toGammaSpace;\n /**\n * Converts the Color4 values to gamma space and stores the result in \"convertedColor\"\n * @param convertedColor - defines the Color4 object where to store the gamma space version\n * @returns the unmodified Color4\n */\n function toGammaSpaceToRef(value, convertedColor) {\n convertedColor.r = Math.pow(value.r, types_1.ToGammaSpace);\n convertedColor.g = Math.pow(value.g, types_1.ToGammaSpace);\n convertedColor.b = Math.pow(value.b, types_1.ToGammaSpace);\n convertedColor.a = value.a;\n }\n Color4.toGammaSpaceToRef = toGammaSpaceToRef;\n})(Color4 = exports.Color4 || (exports.Color4 = {}));\n//# sourceMappingURL=Color4.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Color3 = void 0;\nconst types_1 = require(\"./types\");\nconst Color4_1 = require(\"./Color4\");\nconst Scalar_1 = require(\"./Scalar\");\n/**\n * @public\n * Color3 is a type and a namespace.\n * ```\n * // The namespace contains all types and functions to operates with Color3\n * Color3.add(blue, red) // sum component by component resulting pink\n * // The type Color3 is an alias to Color3.ReadonlyColor3\n * const readonlyBlue: Color3 = Color3.Blue()\n * readonlyBlue.r = 0.1 // this FAILS\n *\n * // For mutable usage, use `Color3.Mutable`\n * const blue: Color3.Mutable = Color3.Blue()\n * blue.r = 0.1 // this WORKS\n * ```\n */\nvar Color3;\n(function (Color3) {\n /**\n * Creates Color3 object from red, green, blue values, all between 0 and 1\n * @param r - defines the red component (between 0 and 1, default is 0)\n * @param g - defines the green component (between 0 and 1, default is 0)\n * @param b - defines the blue component (between 0 and 1, default is 0)\n */\n function create(\n /**\n * Defines the red component (between 0 and 1, default is 0)\n */\n r = 0, \n /**\n * Defines the green component (between 0 and 1, default is 0)\n */\n g = 0, \n /**\n * Defines the blue component (between 0 and 1, default is 0)\n */\n b = 0) {\n return { r, g, b };\n }\n Color3.create = create;\n /**\n * Creates a Vector3 from the string containing valid hexadecimal values\n * @param hex - defines a string containing valid hexadecimal values\n * @returns a new Vector3\n */\n function fromHexString(hex) {\n if (hex.substring(0, 1) !== '#' || hex.length !== 7) {\n return create(0, 0, 0);\n }\n const r = parseInt(hex.substring(1, 3), 16);\n const g = parseInt(hex.substring(3, 5), 16);\n const b = parseInt(hex.substring(5, 7), 16);\n return fromInts(r, g, b);\n }\n Color3.fromHexString = fromHexString;\n /**\n * Creates a new Vector3 from the starting index of the given array\n * @param array - defines the source array\n * @param offset - defines an offset in the source array\n * @returns a new Vector3\n */\n function fromArray(array, offset = 0) {\n return create(array[offset], array[offset + 1], array[offset + 2]);\n }\n Color3.fromArray = fromArray;\n /**\n * Creates a Vector3 from integer values (less than 256)\n * @param r - defines the red component to read from (value between 0 and 255)\n * @param g - defines the green component to read from (value between 0 and 255)\n * @param b - defines the blue component to read from (value between 0 and 255)\n * @returns a new Vector3\n */\n function fromInts(r, g, b) {\n return create(r / 255.0, g / 255.0, b / 255.0);\n }\n Color3.fromInts = fromInts;\n /**\n * Creates a Vector3 with values linearly interpolated of \"amount\" between the start Color3 and the end Color3\n * @param start - defines the start Color3 value\n * @param end - defines the end Color3 value\n * @param amount - defines the gradient value between start and end\n * @returns a new Vector3\n */\n function lerp(start, end, amount) {\n const result = create(0.0, 0.0, 0.0);\n Color3.lerpToRef(start, end, amount, result);\n return result;\n }\n Color3.lerp = lerp;\n /**\n * Creates a Vector3 with values linearly interpolated of \"amount\" between the start Color3 and the end Color3\n * @param left - defines the start value\n * @param right - defines the end value\n * @param amount - defines the gradient factor\n * @param result - defines the Color3 object where to store the result\n */\n function lerpToRef(left, right, amount, result) {\n result.r = left.r + (right.r - left.r) * amount;\n result.g = left.g + (right.g - left.g) * amount;\n result.b = left.b + (right.b - left.b) * amount;\n }\n Color3.lerpToRef = lerpToRef;\n /**\n * Returns a Color3 value containing a red color\n * @returns a new Vector3\n */\n function Red() {\n return create(1, 0, 0);\n }\n Color3.Red = Red;\n /**\n * Returns a Color3 value containing a green color\n * @returns a new Vector3\n */\n function Green() {\n return create(0, 1, 0);\n }\n Color3.Green = Green;\n /**\n * Returns a Color3 value containing a blue color\n * @returns a new Vector3\n */\n function Blue() {\n return create(0, 0, 1);\n }\n Color3.Blue = Blue;\n /**\n * Returns a Color3 value containing a black color\n * @returns a new Vector3\n */\n function Black() {\n return create(0, 0, 0);\n }\n Color3.Black = Black;\n /**\n * Returns a Color3 value containing a white color\n * @returns a new Vector3\n */\n function White() {\n return create(1, 1, 1);\n }\n Color3.White = White;\n /**\n * Returns a Color3 value containing a purple color\n * @returns a new Vector3\n */\n function Purple() {\n return create(0.5, 0, 0.5);\n }\n Color3.Purple = Purple;\n /**\n * Returns a Color3 value containing a magenta color\n * @returns a new Vector3\n */\n function Magenta() {\n return create(1, 0, 1);\n }\n Color3.Magenta = Magenta;\n /**\n * Returns a Color3 value containing a yellow color\n * @returns a new Vector3\n */\n function Yellow() {\n return create(1, 1, 0);\n }\n Color3.Yellow = Yellow;\n /**\n * Returns a Color3 value containing a gray color\n * @returns a new Vector3\n */\n function Gray() {\n return create(0.5, 0.5, 0.5);\n }\n Color3.Gray = Gray;\n /**\n * Returns a Color3 value containing a teal color\n * @returns a new Vector3\n */\n function Teal() {\n return create(0, 1.0, 1.0);\n }\n Color3.Teal = Teal;\n /**\n * Returns a Color3 value containing a random color\n * @returns a new Vector3\n */\n function Random() {\n return create(Math.random(), Math.random(), Math.random());\n }\n Color3.Random = Random;\n /**\n * Creates a string with the Color3 current values\n * @returns the string representation of the Color3 object\n */\n function toString(value) {\n return '{R: ' + value.r + ' G:' + value.g + ' B:' + value.b + '}';\n }\n Color3.toString = toString;\n /**\n * Compute the Color3 hash code\n * @returns an unique number that can be used to hash Color3 objects\n */\n function getHashCode(value) {\n let hash = value.r || 0;\n hash = (hash * 397) ^ (value.g || 0);\n hash = (hash * 397) ^ (value.b || 0);\n return hash;\n }\n Color3.getHashCode = getHashCode;\n // Operators\n /**\n * Stores in the given array from the given starting index the red, green, blue values as successive elements\n * @param array - defines the array where to store the r,g,b components\n * @param index - defines an optional index in the target array to define where to start storing values\n *\n */\n function toArray(value, array, index = 0) {\n array[index] = value.r;\n array[index + 1] = value.g;\n array[index + 2] = value.b;\n }\n Color3.toArray = toArray;\n /**\n * Returns a new Color4 object from the current Color3 and the given alpha\n * @param alpha - defines the alpha component on the new Color4 object (default is 1)\n * @returns a new Color4 object\n */\n function toColor4(value, alpha = 1) {\n return Color4_1.Color4.create(value.r, value.g, value.b, alpha);\n }\n Color3.toColor4 = toColor4;\n /**\n * Returns a new array populated with 3 numeric elements : red, green and blue values\n * @returns the new array\n */\n function asArray(value) {\n const result = new Array();\n toArray(value, result, 0);\n return result;\n }\n Color3.asArray = asArray;\n /**\n * Returns the luminance value\n * @returns a float value\n */\n function toLuminance(value) {\n return value.r * 0.3 + value.g * 0.59 + value.b * 0.11;\n }\n Color3.toLuminance = toLuminance;\n /**\n * Multiply each Color3 rgb values by the given Color3 rgb values in Color3 object\n * @param otherColor - defines the second operand\n * @returns the create object\n */\n function multiply(value, otherColor) {\n return create(value.r * otherColor.r, value.g * otherColor.g, value.b * otherColor.b);\n }\n Color3.multiply = multiply;\n /**\n * Multiply the rgb values of the Color3 and the given Color3 and stores the result in the object \"result\"\n * @param otherColor - defines the second operand\n * @param result - defines the Color3 object where to store the result\n * @returns the current Color3\n */\n function multiplyToRef(value, otherColor, result) {\n result.r = value.r * otherColor.r;\n result.g = value.g * otherColor.g;\n result.b = value.b * otherColor.b;\n }\n Color3.multiplyToRef = multiplyToRef;\n /**\n * Determines equality between Color3 objects\n * @param otherColor - defines the second operand\n * @returns true if the rgb values are equal to the given ones\n */\n function equals(value, otherColor) {\n return (otherColor &&\n value.r === otherColor.r &&\n value.g === otherColor.g &&\n value.b === otherColor.b);\n }\n Color3.equals = equals;\n /**\n * Determines equality between the current Color3 object and a set of r,b,g values\n * @param r - defines the red component to check\n * @param g - defines the green component to check\n * @param b - defines the blue component to check\n * @returns true if the rgb values are equal to the given ones\n */\n function equalsFloats(value, r, g, b) {\n return value.r === r && value.g === g && value.b === b;\n }\n Color3.equalsFloats = equalsFloats;\n /**\n * Multiplies in place each rgb value by scale\n * @param scale - defines the scaling factor\n * @returns the updated Color3\n */\n function scale(value, scale) {\n return create(value.r * scale, value.g * scale, value.b * scale);\n }\n Color3.scale = scale;\n /**\n * Multiplies the rgb values by scale and stores the result into \"result\"\n * @param scale - defines the scaling factor\n * @param result - defines the Color3 object where to store the result\n * @returns the unmodified current Color3\n */\n function scaleToRef(value, scale, result) {\n result.r = value.r * scale;\n result.g = value.g * scale;\n result.b = value.b * scale;\n }\n Color3.scaleToRef = scaleToRef;\n /**\n * Scale the current Color3 values by a factor and add the result to a given Color3\n * @param scale - defines the scale factor\n * @param result - defines color to store the result into\n * @returns the unmodified current Color3\n */\n function scaleAndAddToRef(value, scale, result) {\n result.r += value.r * scale;\n result.g += value.g * scale;\n result.b += value.b * scale;\n }\n Color3.scaleAndAddToRef = scaleAndAddToRef;\n /**\n * Clamps the rgb values by the min and max values and stores the result into \"result\"\n * @param min - defines minimum clamping value (default is 0)\n * @param max - defines maximum clamping value (default is 1)\n * @param result - defines color to store the result into\n * @returns the original Color3\n */\n function clampToRef(value, min = 0, max = 1, result) {\n result.r = Scalar_1.Scalar.clamp(value.r, min, max);\n result.g = Scalar_1.Scalar.clamp(value.g, min, max);\n result.b = Scalar_1.Scalar.clamp(value.b, min, max);\n }\n Color3.clampToRef = clampToRef;\n /**\n * Clamps the rgb values by the min and max values and returns the result\n * @param min - defines minimum clamping value (default is 0)\n * @param max - defines maximum clamping value (default is 1)\n * @returns result\n */\n function clamp(value, min = 0, max = 1) {\n const result = Color3.Black();\n clampToRef(value, min, max, result);\n return result;\n }\n Color3.clamp = clamp;\n /**\n * Creates Color3 set with the added values of the current Color3 and of the given one\n * @param otherColor - defines the second operand\n * @returns the create\n */\n function add(value, otherColor) {\n return create(value.r + otherColor.r, value.g + otherColor.g, value.b + otherColor.b);\n }\n Color3.add = add;\n /**\n * Stores the result of the addition of the current Color3 and given one rgb values into \"result\"\n * @param otherColor - defines the second operand\n * @param result - defines Color3 object to store the result into\n * @returns the unmodified current Color3\n */\n function addToRef(value, otherColor, result) {\n result.r = value.r + otherColor.r;\n result.g = value.g + otherColor.g;\n result.b = value.b + otherColor.b;\n }\n Color3.addToRef = addToRef;\n /**\n * Returns Color3 set with the subtracted values of the given one from the current Color3\n * @param otherColor - defines the second operand\n * @returns the create\n */\n function subtract(value, otherColor) {\n return create(value.r - otherColor.r, value.g - otherColor.g, value.b - otherColor.b);\n }\n Color3.subtract = subtract;\n /**\n * Stores the result of the subtraction of given one from the current Color3 rgb values into \"result\"\n * @param otherColor - defines the second operand\n * @param result - defines Color3 object to store the result into\n * @returns the unmodified current Color3\n */\n function subtractToRef(value, otherColor, result) {\n result.r = value.r - otherColor.r;\n result.g = value.g - otherColor.g;\n result.b = value.b - otherColor.b;\n }\n Color3.subtractToRef = subtractToRef;\n /**\n * Copy the current object\n * @returns Color3 copied the current one\n */\n function clone(value) {\n return create(value.r, value.g, value.b);\n }\n Color3.clone = clone;\n /**\n * Copies the rgb values from the source in the current Color3\n * @param source - defines the source Color3 object\n * @returns the updated Color3 object\n */\n function copyFrom(source, dest) {\n dest.r = source.r;\n dest.g = source.g;\n dest.b = source.b;\n }\n Color3.copyFrom = copyFrom;\n /**\n * Updates the Color3 rgb values from the given floats\n * @param dest -\n * @param r - defines the red component to read from\n * @param g - defines the green component to read from\n * @param b - defines the blue component to read from\n * @returns\n */\n function set(dest, r, g, b) {\n dest.r = r;\n dest.g = g;\n dest.b = b;\n }\n Color3.set = set;\n /**\n * Compute the Color3 hexadecimal code as a string\n * @returns a string containing the hexadecimal representation of the Color3 object\n */\n function toHexString(value) {\n const intR = (value.r * 255) | 0;\n const intG = (value.g * 255) | 0;\n const intB = (value.b * 255) | 0;\n return '#' + Scalar_1.Scalar.toHex(intR) + Scalar_1.Scalar.toHex(intG) + Scalar_1.Scalar.toHex(intB);\n }\n Color3.toHexString = toHexString;\n /**\n * Computes Color3 converted from the current one to linear space\n * @returns a new Vector3\n */\n function toLinearSpace(value) {\n const convertedColor = create();\n toLinearSpaceToRef(value, convertedColor);\n return convertedColor;\n }\n Color3.toLinearSpace = toLinearSpace;\n /**\n * Converts the Color3 values to linear space and stores the result in \"convertedColor\"\n * @param convertedColor - defines the Color3 object where to store the linear space version\n * @returns the unmodified Color3\n */\n function toLinearSpaceToRef(value, convertedColor) {\n convertedColor.r = Math.pow(value.r, types_1.ToLinearSpace);\n convertedColor.g = Math.pow(value.g, types_1.ToLinearSpace);\n convertedColor.b = Math.pow(value.b, types_1.ToLinearSpace);\n }\n Color3.toLinearSpaceToRef = toLinearSpaceToRef;\n /**\n * Computes Color3 converted from the current one to gamma space\n * @returns a new Vector3\n */\n function toGammaSpace(value) {\n const convertedColor = create();\n toGammaSpaceToRef(value, convertedColor);\n return convertedColor;\n }\n Color3.toGammaSpace = toGammaSpace;\n /**\n * Converts the Color3 values to gamma space and stores the result in \"convertedColor\"\n * @param convertedColor - defines the Color3 object where to store the gamma space version\n * @returns the unmodified Color3\n */\n function toGammaSpaceToRef(value, convertedColor) {\n convertedColor.r = Math.pow(value.r, types_1.ToGammaSpace);\n convertedColor.g = Math.pow(value.g, types_1.ToGammaSpace);\n convertedColor.b = Math.pow(value.b, types_1.ToGammaSpace);\n }\n Color3.toGammaSpaceToRef = toGammaSpaceToRef;\n})(Color3 = exports.Color3 || (exports.Color3 = {}));\n//# sourceMappingURL=Color3.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./Quaternion\"), exports);\n__exportStar(require(\"./Vector3\"), exports);\n__exportStar(require(\"./Color3\"), exports);\n__exportStar(require(\"./Color4\"), exports);\n__exportStar(require(\"./Vector3\"), exports);\n__exportStar(require(\"./Scalar\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./index\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBAnimator {\n states: PBAnimationState[]\n}\n\nexport interface PBAnimationState {\n name: string\n clip: string\n playing?: boolean | undefined\n /** default=1.0s */\n weight?: number | undefined\n /** default=1.0 */\n speed?: number | undefined\n /** default=true */\n loop?: boolean | undefined\n shouldReset?: boolean | undefined\n}\n\nfunction createBasePBAnimator(): PBAnimator {\n return { states: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBAnimator = {\n encode(message: PBAnimator, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.states) {\n PBAnimationState.encode(v!, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAnimator {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAnimator()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.states.push(PBAnimationState.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBAnimationState(): PBAnimationState {\n return {\n name: '',\n clip: '',\n playing: undefined,\n weight: undefined,\n speed: undefined,\n loop: undefined,\n shouldReset: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBAnimationState = {\n encode(message: PBAnimationState, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.name !== '') {\n writer.uint32(10).string(message.name)\n }\n if (message.clip !== '') {\n writer.uint32(18).string(message.clip)\n }\n if (message.playing !== undefined) {\n writer.uint32(24).bool(message.playing)\n }\n if (message.weight !== undefined) {\n writer.uint32(37).float(message.weight)\n }\n if (message.speed !== undefined) {\n writer.uint32(45).float(message.speed)\n }\n if (message.loop !== undefined) {\n writer.uint32(48).bool(message.loop)\n }\n if (message.shouldReset !== undefined) {\n writer.uint32(56).bool(message.shouldReset)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAnimationState {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAnimationState()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.name = reader.string()\n break\n case 2:\n message.clip = reader.string()\n break\n case 3:\n message.playing = reader.bool()\n break\n case 4:\n message.weight = reader.float()\n break\n case 5:\n message.speed = reader.float()\n break\n case 6:\n message.loop = reader.bool()\n break\n case 7:\n message.shouldReset = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAnimator } from './pb/decentraland/sdk/components/animator.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1042\n\n/**\n * @internal\n */\nexport const AnimatorSchema: ISchema<PBAnimator> = {\n serialize(value: PBAnimator, builder: ByteBuffer): void {\n const writer = PBAnimator.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAnimator {\n return PBAnimator.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAnimator {\n // TODO: this is a hack.\n return PBAnimator.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBAudioSource {\n playing?: boolean | undefined\n /** default=1.0f */\n volume?: number | undefined\n loop?: boolean | undefined\n /** default=1.0f */\n pitch?: number | undefined\n audioClipUrl: string\n}\n\nfunction createBasePBAudioSource(): PBAudioSource {\n return { playing: undefined, volume: undefined, loop: undefined, pitch: undefined, audioClipUrl: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBAudioSource = {\n encode(message: PBAudioSource, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.playing !== undefined) {\n writer.uint32(8).bool(message.playing)\n }\n if (message.volume !== undefined) {\n writer.uint32(21).float(message.volume)\n }\n if (message.loop !== undefined) {\n writer.uint32(24).bool(message.loop)\n }\n if (message.pitch !== undefined) {\n writer.uint32(37).float(message.pitch)\n }\n if (message.audioClipUrl !== '') {\n writer.uint32(42).string(message.audioClipUrl)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAudioSource {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAudioSource()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.playing = reader.bool()\n break\n case 2:\n message.volume = reader.float()\n break\n case 3:\n message.loop = reader.bool()\n break\n case 4:\n message.pitch = reader.float()\n break\n case 5:\n message.audioClipUrl = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAudioSource } from './pb/decentraland/sdk/components/audio_source.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1020\n\n/**\n * @internal\n */\nexport const AudioSourceSchema: ISchema<PBAudioSource> = {\n serialize(value: PBAudioSource, builder: ByteBuffer): void {\n const writer = PBAudioSource.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAudioSource {\n return PBAudioSource.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAudioSource {\n // TODO: this is a hack.\n return PBAudioSource.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBAudioStream {\n playing?: boolean | undefined\n /** default=1.0f */\n volume?: number | undefined\n url: string\n}\n\nfunction createBasePBAudioStream(): PBAudioStream {\n return { playing: undefined, volume: undefined, url: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBAudioStream = {\n encode(message: PBAudioStream, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.playing !== undefined) {\n writer.uint32(8).bool(message.playing)\n }\n if (message.volume !== undefined) {\n writer.uint32(21).float(message.volume)\n }\n if (message.url !== '') {\n writer.uint32(26).string(message.url)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAudioStream {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAudioStream()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.playing = reader.bool()\n break\n case 2:\n message.volume = reader.float()\n break\n case 3:\n message.url = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAudioStream } from './pb/decentraland/sdk/components/audio_stream.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1021\n\n/**\n * @internal\n */\nexport const AudioStreamSchema: ISchema<PBAudioStream> = {\n serialize(value: PBAudioStream, builder: ByteBuffer): void {\n const writer = PBAudioStream.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAudioStream {\n return PBAudioStream.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAudioStream {\n // TODO: this is a hack.\n return PBAudioStream.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum AvatarAnchorPointType {\n AAPT_POSITION = 0,\n AAPT_NAME_TAG = 1,\n AAPT_LEFT_HAND = 2,\n AAPT_RIGHT_HAND = 3\n}\n\nexport interface PBAvatarAttach {\n avatarId: string\n anchorPointId: AvatarAnchorPointType\n}\n\nfunction createBasePBAvatarAttach(): PBAvatarAttach {\n return { avatarId: '', anchorPointId: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarAttach = {\n encode(message: PBAvatarAttach, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.avatarId !== '') {\n writer.uint32(10).string(message.avatarId)\n }\n if (message.anchorPointId !== 0) {\n writer.uint32(16).int32(message.anchorPointId)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarAttach {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarAttach()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.avatarId = reader.string()\n break\n case 2:\n message.anchorPointId = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarAttach } from './pb/decentraland/sdk/components/avatar_attach.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1073\n\n/**\n * @internal\n */\nexport const AvatarAttachSchema: ISchema<PBAvatarAttach> = {\n serialize(value: PBAvatarAttach, builder: ByteBuffer): void {\n const writer = PBAvatarAttach.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarAttach {\n return PBAvatarAttach.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarAttach {\n // TODO: this is a hack.\n return PBAvatarAttach.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.common'\n\nexport interface Position {\n x: number\n y: number\n z: number\n}\n\nexport interface Vector3 {\n x: number\n y: number\n z: number\n}\n\nexport interface Vector2 {\n x: number\n y: number\n}\n\nfunction createBasePosition(): Position {\n return { x: 0, y: 0, z: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Position = {\n encode(message: Position, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x)\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y)\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Position {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePosition()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.x = reader.float()\n break\n case 2:\n message.y = reader.float()\n break\n case 3:\n message.z = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseVector3(): Vector3 {\n return { x: 0, y: 0, z: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Vector3 = {\n encode(message: Vector3, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x)\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y)\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Vector3 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseVector3()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.x = reader.float()\n break\n case 2:\n message.y = reader.float()\n break\n case 3:\n message.z = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseVector2(): Vector2 {\n return { x: 0, y: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Vector2 = {\n encode(message: Vector2, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x)\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Vector2 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseVector2()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.x = reader.float()\n break\n case 2:\n message.y = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport { Vector3 } from '../../common/vectors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum AvatarModifierType {\n AMT_HIDE_AVATARS = 0,\n AMT_DISABLE_PASSPORTS = 1\n}\n\nexport interface PBAvatarModifierArea {\n area: Vector3 | undefined\n excludeIds: string[]\n modifiers: AvatarModifierType[]\n}\n\nfunction createBasePBAvatarModifierArea(): PBAvatarModifierArea {\n return { area: undefined, excludeIds: [], modifiers: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarModifierArea = {\n encode(message: PBAvatarModifierArea, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim()\n }\n for (const v of message.excludeIds) {\n writer.uint32(18).string(v!)\n }\n writer.uint32(26).fork()\n for (const v of message.modifiers) {\n writer.int32(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarModifierArea {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarModifierArea()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.area = Vector3.decode(reader, reader.uint32())\n break\n case 2:\n message.excludeIds.push(reader.string())\n break\n case 3:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.modifiers.push(reader.int32() as any)\n }\n } else {\n message.modifiers.push(reader.int32() as any)\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarModifierArea } from './pb/decentraland/sdk/components/avatar_modifier_area.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1070\n\n/**\n * @internal\n */\nexport const AvatarModifierAreaSchema: ISchema<PBAvatarModifierArea> = {\n serialize(value: PBAvatarModifierArea, builder: ByteBuffer): void {\n const writer = PBAvatarModifierArea.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarModifierArea {\n return PBAvatarModifierArea.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarModifierArea {\n // TODO: this is a hack.\n return PBAvatarModifierArea.decode(new Uint8Array())\n }\n}\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.<number>} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.<number>} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.<number>} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.<number>} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.<number>} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.<number>} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.common'\n\nexport interface Color3 {\n r: number\n g: number\n b: number\n}\n\nexport interface Color4 {\n r: number\n g: number\n b: number\n a: number\n}\n\nfunction createBaseColor3(): Color3 {\n return { r: 0, g: 0, b: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Color3 = {\n encode(message: Color3, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r)\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g)\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Color3 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseColor3()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.r = reader.float()\n break\n case 2:\n message.g = reader.float()\n break\n case 3:\n message.b = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseColor4(): Color4 {\n return { r: 0, g: 0, b: 0, a: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Color4 = {\n encode(message: Color4, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r)\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g)\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b)\n }\n if (message.a !== 0) {\n writer.uint32(37).float(message.a)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Color4 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseColor4()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.r = reader.float()\n break\n case 2:\n message.g = reader.float()\n break\n case 3:\n message.b = reader.float()\n break\n case 4:\n message.a = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport Long from 'long'\nimport { Color3 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBAvatarShape {\n id: string\n /** default = NPC */\n name?: string | undefined\n /** default = urn:decentraland:off-chain:base-avatars:BaseFemale */\n bodyShape?: string | undefined\n /** default = decentraland.common.Color3(R = 0.6f, G = 0.462f, B = 0.356f) */\n skinColor?: Color3 | undefined\n /** default = decentraland.common.Color3(R = 0.283f, G = 0.142f, B = 0f) */\n hairColor?: Color3 | undefined\n /** default = decentraland.common.Color3(R = 0.6f, G = 0.462f, B = 0.356f) */\n eyeColor?: Color3 | undefined\n expressionTriggerId?: string | undefined\n /** default = timestamp */\n expressionTriggerTimestamp?: number | undefined\n talking?: boolean | undefined\n /**\n * default = [\"urn:decentraland:off-chain:base-avatars:f_eyes_00\",\n * \"urn:decentraland:off-chain:base-avatars:f_eyebrows_00\",\n * \"urn:decentraland:off-chain:base-avatars:f_mouth_00\"\n * \"urn:decentraland:off-chain:base-avatars:standard_hair\",\n * \"urn:decentraland:off-chain:base-avatars:f_simple_yellow_tshirt\",\n * \"urn:decentraland:off-chain:base-avatars:f_brown_trousers\",\n * \"urn:decentraland:off-chain:base-avatars:bun_shoes\"]\n */\n wearables: string[]\n /** default = [] */\n emotes: string[]\n}\n\nfunction createBasePBAvatarShape(): PBAvatarShape {\n return {\n id: '',\n name: undefined,\n bodyShape: undefined,\n skinColor: undefined,\n hairColor: undefined,\n eyeColor: undefined,\n expressionTriggerId: undefined,\n expressionTriggerTimestamp: undefined,\n talking: undefined,\n wearables: [],\n emotes: []\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarShape = {\n encode(message: PBAvatarShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.id !== '') {\n writer.uint32(10).string(message.id)\n }\n if (message.name !== undefined) {\n writer.uint32(18).string(message.name)\n }\n if (message.bodyShape !== undefined) {\n writer.uint32(26).string(message.bodyShape)\n }\n if (message.skinColor !== undefined) {\n Color3.encode(message.skinColor, writer.uint32(34).fork()).ldelim()\n }\n if (message.hairColor !== undefined) {\n Color3.encode(message.hairColor, writer.uint32(42).fork()).ldelim()\n }\n if (message.eyeColor !== undefined) {\n Color3.encode(message.eyeColor, writer.uint32(50).fork()).ldelim()\n }\n if (message.expressionTriggerId !== undefined) {\n writer.uint32(58).string(message.expressionTriggerId)\n }\n if (message.expressionTriggerTimestamp !== undefined) {\n writer.uint32(64).int64(message.expressionTriggerTimestamp)\n }\n if (message.talking !== undefined) {\n writer.uint32(72).bool(message.talking)\n }\n for (const v of message.wearables) {\n writer.uint32(82).string(v!)\n }\n for (const v of message.emotes) {\n writer.uint32(90).string(v!)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.id = reader.string()\n break\n case 2:\n message.name = reader.string()\n break\n case 3:\n message.bodyShape = reader.string()\n break\n case 4:\n message.skinColor = Color3.decode(reader, reader.uint32())\n break\n case 5:\n message.hairColor = Color3.decode(reader, reader.uint32())\n break\n case 6:\n message.eyeColor = Color3.decode(reader, reader.uint32())\n break\n case 7:\n message.expressionTriggerId = reader.string()\n break\n case 8:\n message.expressionTriggerTimestamp = longToNumber(reader.int64() as Long)\n break\n case 9:\n message.talking = reader.bool()\n break\n case 10:\n message.wearables.push(reader.string())\n break\n case 11:\n message.emotes.push(reader.string())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\ndeclare var self: any | undefined\ndeclare var window: any | undefined\ndeclare var global: any | undefined\nvar globalThis: any = (() => {\n if (typeof globalThis !== 'undefined') return globalThis\n if (typeof self !== 'undefined') return self\n if (typeof window !== 'undefined') return window\n if (typeof global !== 'undefined') return global\n throw 'Unable to locate global object'\n})()\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER')\n }\n return long.toNumber()\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any\n _m0.configure()\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarShape } from './pb/decentraland/sdk/components/avatar_shape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1080\n\n/**\n * @internal\n */\nexport const AvatarShapeSchema: ISchema<PBAvatarShape> = {\n serialize(value: PBAvatarShape, builder: ByteBuffer): void {\n const writer = PBAvatarShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarShape {\n return PBAvatarShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarShape {\n // TODO: this is a hack.\n return PBAvatarShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum BillboardMode {\n BM_ALL_AXES = 0,\n BM_Y_AXE = 1\n}\n\nexport interface PBBillboard {\n /** default=BM_ALL_AXES */\n billboardMode?: BillboardMode | undefined\n /** default=false */\n oppositeDirection?: boolean | undefined\n}\n\nfunction createBasePBBillboard(): PBBillboard {\n return { billboardMode: undefined, oppositeDirection: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBBillboard = {\n encode(message: PBBillboard, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.billboardMode !== undefined) {\n writer.uint32(8).int32(message.billboardMode)\n }\n if (message.oppositeDirection !== undefined) {\n writer.uint32(16).bool(message.oppositeDirection)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBBillboard {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBBillboard()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.billboardMode = reader.int32() as any\n break\n case 2:\n message.oppositeDirection = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBBillboard } from './pb/decentraland/sdk/components/billboard.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1090\n\n/**\n * @internal\n */\nexport const BillboardSchema: ISchema<PBBillboard> = {\n serialize(value: PBBillboard, builder: ByteBuffer): void {\n const writer = PBBillboard.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBBillboard {\n return PBBillboard.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBBillboard {\n // TODO: this is a hack.\n return PBBillboard.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { CameraType } from './common/camera_type.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBCameraMode {\n mode: CameraType\n}\n\nfunction createBasePBCameraMode(): PBCameraMode {\n return { mode: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBCameraMode = {\n encode(message: PBCameraMode, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.mode !== 0) {\n writer.uint32(8).int32(message.mode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBCameraMode {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBCameraMode()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.mode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBCameraMode } from './pb/decentraland/sdk/components/camera_mode.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1072\n\n/**\n * @internal\n */\nexport const CameraModeSchema: ISchema<PBCameraMode> = {\n serialize(value: PBCameraMode, builder: ByteBuffer): void {\n const writer = PBCameraMode.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBCameraMode {\n return PBCameraMode.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBCameraMode {\n // TODO: this is a hack.\n return PBCameraMode.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { CameraType } from './common/camera_type.gen'\nimport { Vector3 } from '../../common/vectors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBCameraModeArea {\n area: Vector3 | undefined\n mode: CameraType\n}\n\nfunction createBasePBCameraModeArea(): PBCameraModeArea {\n return { area: undefined, mode: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBCameraModeArea = {\n encode(message: PBCameraModeArea, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim()\n }\n if (message.mode !== 0) {\n writer.uint32(16).int32(message.mode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBCameraModeArea {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBCameraModeArea()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.area = Vector3.decode(reader, reader.uint32())\n break\n case 2:\n message.mode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBCameraModeArea } from './pb/decentraland/sdk/components/camera_mode_area.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1071\n\n/**\n * @internal\n */\nexport const CameraModeAreaSchema: ISchema<PBCameraModeArea> = {\n serialize(value: PBCameraModeArea, builder: ByteBuffer): void {\n const writer = PBCameraModeArea.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBCameraModeArea {\n return PBCameraModeArea.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBCameraModeArea {\n // TODO: this is a hack.\n return PBCameraModeArea.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBGltfContainer {\n /** which file to load */\n src: string\n}\n\nfunction createBasePBGltfContainer(): PBGltfContainer {\n return { src: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBGltfContainer = {\n encode(message: PBGltfContainer, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.src !== '') {\n writer.uint32(10).string(message.src)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBGltfContainer {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBGltfContainer()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.src = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBGltfContainer } from './pb/decentraland/sdk/components/gltf_container.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1041\n\n/**\n * @internal\n */\nexport const GltfContainerSchema: ISchema<PBGltfContainer> = {\n serialize(value: PBGltfContainer, builder: ByteBuffer): void {\n const writer = PBGltfContainer.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBGltfContainer {\n return PBGltfContainer.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBGltfContainer {\n // TODO: this is a hack.\n return PBGltfContainer.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.common'\n\nexport const enum TextureWrapMode {\n TWM_REPEAT = 0,\n TWM_CLAMP = 1,\n TWM_MIRROR = 2,\n TWM_MIRROR_ONCE = 3\n}\n\nexport const enum TextureFilterMode {\n TFM_POINT = 0,\n TFM_BILINEAR = 1,\n TFM_TRILINEAR = 2\n}\n\nexport interface Texture {\n src: string\n /** default = TextureWrapMode.Clamp */\n wrapMode?: TextureWrapMode | undefined\n /** default = FilterMode.Bilinear */\n filterMode?: TextureFilterMode | undefined\n}\n\nexport interface AvatarTexture {\n userId: string\n /** default = TextureWrapMode.Clamp */\n wrapMode?: TextureWrapMode | undefined\n /** default = FilterMode.Bilinear */\n filterMode?: TextureFilterMode | undefined\n}\n\nexport interface TextureUnion {\n tex?: { $case: 'texture'; texture: Texture } | { $case: 'avatarTexture'; avatarTexture: AvatarTexture }\n}\n\nfunction createBaseTexture(): Texture {\n return { src: '', wrapMode: undefined, filterMode: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const Texture = {\n encode(message: Texture, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.src !== '') {\n writer.uint32(10).string(message.src)\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode)\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Texture {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseTexture()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.src = reader.string()\n break\n case 2:\n message.wrapMode = reader.int32() as any\n break\n case 3:\n message.filterMode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseAvatarTexture(): AvatarTexture {\n return { userId: '', wrapMode: undefined, filterMode: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const AvatarTexture = {\n encode(message: AvatarTexture, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.userId !== '') {\n writer.uint32(10).string(message.userId)\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode)\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): AvatarTexture {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseAvatarTexture()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.userId = reader.string()\n break\n case 2:\n message.wrapMode = reader.int32() as any\n break\n case 3:\n message.filterMode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseTextureUnion(): TextureUnion {\n return { tex: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const TextureUnion = {\n encode(message: TextureUnion, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.tex?.$case === 'texture') {\n Texture.encode(message.tex.texture, writer.uint32(10).fork()).ldelim()\n }\n if (message.tex?.$case === 'avatarTexture') {\n AvatarTexture.encode(message.tex.avatarTexture, writer.uint32(18).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TextureUnion {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseTextureUnion()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.tex = { $case: 'texture', texture: Texture.decode(reader, reader.uint32()) }\n break\n case 2:\n message.tex = { $case: 'avatarTexture', avatarTexture: AvatarTexture.decode(reader, reader.uint32()) }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport { TextureUnion } from '../../common/texture.gen'\nimport { Color3 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum MaterialTransparencyMode {\n MTM_OPAQUE = 0,\n MTM_ALPHA_TEST = 1,\n MTM_ALPHA_BLEND = 2,\n MTM_ALPHA_TEST_AND_ALPHA_BLEND = 3,\n MTM_AUTO = 4\n}\n\nexport interface PBMaterial {\n material?: { $case: 'unlit'; unlit: PBMaterial_UnlitMaterial } | { $case: 'pbr'; pbr: PBMaterial_PbrMaterial }\n}\n\nexport interface PBMaterial_UnlitMaterial {\n /** default = null */\n texture?: TextureUnion | undefined\n /** default = 0.5. range value: from 0 to 1 */\n alphaTest?: number | undefined\n /** default = true */\n castShadows?: boolean | undefined\n}\n\nexport interface PBMaterial_PbrMaterial {\n /** default = null */\n texture?: TextureUnion | undefined\n /** default = 0.5. range value: from 0 to 1 */\n alphaTest?: number | undefined\n /** default = true */\n castShadows?: boolean | undefined\n /** default = null */\n alphaTexture?: TextureUnion | undefined\n /** default = null */\n emissiveTexture?: TextureUnion | undefined\n /** default = null */\n bumpTexture?: TextureUnion | undefined\n /** default = white; */\n albedoColor?: Color3 | undefined\n /** default = black; */\n emissiveColor?: Color3 | undefined\n /** default = white; */\n reflectivityColor?: Color3 | undefined\n /** default = TransparencyMode.Auto */\n transparencyMode?: MaterialTransparencyMode | undefined\n /** default = 0.5 */\n metallic?: number | undefined\n /** default = 0.5 */\n roughness?: number | undefined\n /** default = 1 */\n glossiness?: number | undefined\n /** default = 1 */\n specularIntensity?: number | undefined\n /** default = 2 */\n emissiveIntensity?: number | undefined\n /** default = 1 */\n directIntensity?: number | undefined\n}\n\nfunction createBasePBMaterial(): PBMaterial {\n return { material: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMaterial = {\n encode(message: PBMaterial, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.material?.$case === 'unlit') {\n PBMaterial_UnlitMaterial.encode(message.material.unlit, writer.uint32(10).fork()).ldelim()\n }\n if (message.material?.$case === 'pbr') {\n PBMaterial_PbrMaterial.encode(message.material.pbr, writer.uint32(18).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMaterial {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMaterial()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.material = { $case: 'unlit', unlit: PBMaterial_UnlitMaterial.decode(reader, reader.uint32()) }\n break\n case 2:\n message.material = { $case: 'pbr', pbr: PBMaterial_PbrMaterial.decode(reader, reader.uint32()) }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMaterial_UnlitMaterial(): PBMaterial_UnlitMaterial {\n return { texture: undefined, alphaTest: undefined, castShadows: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMaterial_UnlitMaterial = {\n encode(message: PBMaterial_UnlitMaterial, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(10).fork()).ldelim()\n }\n if (message.alphaTest !== undefined) {\n writer.uint32(21).float(message.alphaTest)\n }\n if (message.castShadows !== undefined) {\n writer.uint32(24).bool(message.castShadows)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMaterial_UnlitMaterial {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMaterial_UnlitMaterial()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.texture = TextureUnion.decode(reader, reader.uint32())\n break\n case 2:\n message.alphaTest = reader.float()\n break\n case 3:\n message.castShadows = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMaterial_PbrMaterial(): PBMaterial_PbrMaterial {\n return {\n texture: undefined,\n alphaTest: undefined,\n castShadows: undefined,\n alphaTexture: undefined,\n emissiveTexture: undefined,\n bumpTexture: undefined,\n albedoColor: undefined,\n emissiveColor: undefined,\n reflectivityColor: undefined,\n transparencyMode: undefined,\n metallic: undefined,\n roughness: undefined,\n glossiness: undefined,\n specularIntensity: undefined,\n emissiveIntensity: undefined,\n directIntensity: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBMaterial_PbrMaterial = {\n encode(message: PBMaterial_PbrMaterial, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(10).fork()).ldelim()\n }\n if (message.alphaTest !== undefined) {\n writer.uint32(21).float(message.alphaTest)\n }\n if (message.castShadows !== undefined) {\n writer.uint32(24).bool(message.castShadows)\n }\n if (message.alphaTexture !== undefined) {\n TextureUnion.encode(message.alphaTexture, writer.uint32(34).fork()).ldelim()\n }\n if (message.emissiveTexture !== undefined) {\n TextureUnion.encode(message.emissiveTexture, writer.uint32(42).fork()).ldelim()\n }\n if (message.bumpTexture !== undefined) {\n TextureUnion.encode(message.bumpTexture, writer.uint32(50).fork()).ldelim()\n }\n if (message.albedoColor !== undefined) {\n Color3.encode(message.albedoColor, writer.uint32(58).fork()).ldelim()\n }\n if (message.emissiveColor !== undefined) {\n Color3.encode(message.emissiveColor, writer.uint32(66).fork()).ldelim()\n }\n if (message.reflectivityColor !== undefined) {\n Color3.encode(message.reflectivityColor, writer.uint32(74).fork()).ldelim()\n }\n if (message.transparencyMode !== undefined) {\n writer.uint32(80).int32(message.transparencyMode)\n }\n if (message.metallic !== undefined) {\n writer.uint32(93).float(message.metallic)\n }\n if (message.roughness !== undefined) {\n writer.uint32(101).float(message.roughness)\n }\n if (message.glossiness !== undefined) {\n writer.uint32(109).float(message.glossiness)\n }\n if (message.specularIntensity !== undefined) {\n writer.uint32(117).float(message.specularIntensity)\n }\n if (message.emissiveIntensity !== undefined) {\n writer.uint32(125).float(message.emissiveIntensity)\n }\n if (message.directIntensity !== undefined) {\n writer.uint32(133).float(message.directIntensity)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMaterial_PbrMaterial {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMaterial_PbrMaterial()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.texture = TextureUnion.decode(reader, reader.uint32())\n break\n case 2:\n message.alphaTest = reader.float()\n break\n case 3:\n message.castShadows = reader.bool()\n break\n case 4:\n message.alphaTexture = TextureUnion.decode(reader, reader.uint32())\n break\n case 5:\n message.emissiveTexture = TextureUnion.decode(reader, reader.uint32())\n break\n case 6:\n message.bumpTexture = TextureUnion.decode(reader, reader.uint32())\n break\n case 7:\n message.albedoColor = Color3.decode(reader, reader.uint32())\n break\n case 8:\n message.emissiveColor = Color3.decode(reader, reader.uint32())\n break\n case 9:\n message.reflectivityColor = Color3.decode(reader, reader.uint32())\n break\n case 10:\n message.transparencyMode = reader.int32() as any\n break\n case 11:\n message.metallic = reader.float()\n break\n case 12:\n message.roughness = reader.float()\n break\n case 13:\n message.glossiness = reader.float()\n break\n case 14:\n message.specularIntensity = reader.float()\n break\n case 15:\n message.emissiveIntensity = reader.float()\n break\n case 16:\n message.directIntensity = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBMaterial } from './pb/decentraland/sdk/components/material.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1017\n\n/**\n * @internal\n */\nexport const MaterialSchema: ISchema<PBMaterial> = {\n serialize(value: PBMaterial, builder: ByteBuffer): void {\n const writer = PBMaterial.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBMaterial {\n return PBMaterial.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBMaterial {\n // TODO: this is a hack.\n return PBMaterial.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum ColliderLayer {\n CL_NONE = 0,\n CL_POINTER = 1,\n CL_PHYSICS = 2\n}\n\nexport interface PBMeshCollider {\n /** default = ColliderLayer.Physics | ColliderLayer.Pointer */\n collisionMask?: number | undefined\n mesh?:\n | { $case: 'box'; box: PBMeshCollider_BoxMesh }\n | { $case: 'sphere'; sphere: PBMeshCollider_SphereMesh }\n | { $case: 'cylinder'; cylinder: PBMeshCollider_CylinderMesh }\n | { $case: 'plane'; plane: PBMeshCollider_PlaneMesh }\n}\n\nexport interface PBMeshCollider_BoxMesh {}\n\nexport interface PBMeshCollider_CylinderMesh {\n /** default=1.0 */\n radiusTop?: number | undefined\n /** default=1.0 */\n radiusBottom?: number | undefined\n}\n\nexport interface PBMeshCollider_PlaneMesh {}\n\nexport interface PBMeshCollider_SphereMesh {}\n\nfunction createBasePBMeshCollider(): PBMeshCollider {\n return { collisionMask: undefined, mesh: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider = {\n encode(message: PBMeshCollider, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.collisionMask !== undefined) {\n writer.uint32(8).int32(message.collisionMask)\n }\n if (message.mesh?.$case === 'box') {\n PBMeshCollider_BoxMesh.encode(message.mesh.box, writer.uint32(18).fork()).ldelim()\n }\n if (message.mesh?.$case === 'sphere') {\n PBMeshCollider_SphereMesh.encode(message.mesh.sphere, writer.uint32(26).fork()).ldelim()\n }\n if (message.mesh?.$case === 'cylinder') {\n PBMeshCollider_CylinderMesh.encode(message.mesh.cylinder, writer.uint32(34).fork()).ldelim()\n }\n if (message.mesh?.$case === 'plane') {\n PBMeshCollider_PlaneMesh.encode(message.mesh.plane, writer.uint32(42).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.collisionMask = reader.int32()\n break\n case 2:\n message.mesh = { $case: 'box', box: PBMeshCollider_BoxMesh.decode(reader, reader.uint32()) }\n break\n case 3:\n message.mesh = { $case: 'sphere', sphere: PBMeshCollider_SphereMesh.decode(reader, reader.uint32()) }\n break\n case 4:\n message.mesh = { $case: 'cylinder', cylinder: PBMeshCollider_CylinderMesh.decode(reader, reader.uint32()) }\n break\n case 5:\n message.mesh = { $case: 'plane', plane: PBMeshCollider_PlaneMesh.decode(reader, reader.uint32()) }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshCollider_BoxMesh(): PBMeshCollider_BoxMesh {\n return {}\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider_BoxMesh = {\n encode(_: PBMeshCollider_BoxMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider_BoxMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider_BoxMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshCollider_CylinderMesh(): PBMeshCollider_CylinderMesh {\n return { radiusTop: undefined, radiusBottom: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider_CylinderMesh = {\n encode(message: PBMeshCollider_CylinderMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.radiusTop !== undefined) {\n writer.uint32(13).float(message.radiusTop)\n }\n if (message.radiusBottom !== undefined) {\n writer.uint32(21).float(message.radiusBottom)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider_CylinderMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider_CylinderMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.radiusTop = reader.float()\n break\n case 2:\n message.radiusBottom = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshCollider_PlaneMesh(): PBMeshCollider_PlaneMesh {\n return {}\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider_PlaneMesh = {\n encode(_: PBMeshCollider_PlaneMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider_PlaneMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider_PlaneMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshCollider_SphereMesh(): PBMeshCollider_SphereMesh {\n return {}\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider_SphereMesh = {\n encode(_: PBMeshCollider_SphereMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider_SphereMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider_SphereMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBMeshCollider } from './pb/decentraland/sdk/components/mesh_collider.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1019\n\n/**\n * @internal\n */\nexport const MeshColliderSchema: ISchema<PBMeshCollider> = {\n serialize(value: PBMeshCollider, builder: ByteBuffer): void {\n const writer = PBMeshCollider.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBMeshCollider {\n return PBMeshCollider.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBMeshCollider {\n // TODO: this is a hack.\n return PBMeshCollider.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBMeshRenderer {\n mesh?:\n | { $case: 'box'; box: PBMeshRenderer_BoxMesh }\n | { $case: 'sphere'; sphere: PBMeshRenderer_SphereMesh }\n | { $case: 'cylinder'; cylinder: PBMeshRenderer_CylinderMesh }\n | { $case: 'plane'; plane: PBMeshRenderer_PlaneMesh }\n}\n\nexport interface PBMeshRenderer_BoxMesh {\n uvs: number[]\n}\n\nexport interface PBMeshRenderer_CylinderMesh {\n /** default=1.0 */\n radiusTop?: number | undefined\n /** default=1.0 */\n radiusBottom?: number | undefined\n}\n\nexport interface PBMeshRenderer_PlaneMesh {\n uvs: number[]\n}\n\nexport interface PBMeshRenderer_SphereMesh {}\n\nfunction createBasePBMeshRenderer(): PBMeshRenderer {\n return { mesh: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer = {\n encode(message: PBMeshRenderer, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.mesh?.$case === 'box') {\n PBMeshRenderer_BoxMesh.encode(message.mesh.box, writer.uint32(10).fork()).ldelim()\n }\n if (message.mesh?.$case === 'sphere') {\n PBMeshRenderer_SphereMesh.encode(message.mesh.sphere, writer.uint32(18).fork()).ldelim()\n }\n if (message.mesh?.$case === 'cylinder') {\n PBMeshRenderer_CylinderMesh.encode(message.mesh.cylinder, writer.uint32(26).fork()).ldelim()\n }\n if (message.mesh?.$case === 'plane') {\n PBMeshRenderer_PlaneMesh.encode(message.mesh.plane, writer.uint32(34).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.mesh = { $case: 'box', box: PBMeshRenderer_BoxMesh.decode(reader, reader.uint32()) }\n break\n case 2:\n message.mesh = { $case: 'sphere', sphere: PBMeshRenderer_SphereMesh.decode(reader, reader.uint32()) }\n break\n case 3:\n message.mesh = { $case: 'cylinder', cylinder: PBMeshRenderer_CylinderMesh.decode(reader, reader.uint32()) }\n break\n case 4:\n message.mesh = { $case: 'plane', plane: PBMeshRenderer_PlaneMesh.decode(reader, reader.uint32()) }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshRenderer_BoxMesh(): PBMeshRenderer_BoxMesh {\n return { uvs: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer_BoxMesh = {\n encode(message: PBMeshRenderer_BoxMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n writer.uint32(10).fork()\n for (const v of message.uvs) {\n writer.float(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer_BoxMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer_BoxMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.uvs.push(reader.float())\n }\n } else {\n message.uvs.push(reader.float())\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshRenderer_CylinderMesh(): PBMeshRenderer_CylinderMesh {\n return { radiusTop: undefined, radiusBottom: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer_CylinderMesh = {\n encode(message: PBMeshRenderer_CylinderMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.radiusTop !== undefined) {\n writer.uint32(13).float(message.radiusTop)\n }\n if (message.radiusBottom !== undefined) {\n writer.uint32(21).float(message.radiusBottom)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer_CylinderMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer_CylinderMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.radiusTop = reader.float()\n break\n case 2:\n message.radiusBottom = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshRenderer_PlaneMesh(): PBMeshRenderer_PlaneMesh {\n return { uvs: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer_PlaneMesh = {\n encode(message: PBMeshRenderer_PlaneMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n writer.uint32(10).fork()\n for (const v of message.uvs) {\n writer.float(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer_PlaneMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer_PlaneMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.uvs.push(reader.float())\n }\n } else {\n message.uvs.push(reader.float())\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshRenderer_SphereMesh(): PBMeshRenderer_SphereMesh {\n return {}\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer_SphereMesh = {\n encode(_: PBMeshRenderer_SphereMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer_SphereMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer_SphereMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBMeshRenderer } from './pb/decentraland/sdk/components/mesh_renderer.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1018\n\n/**\n * @internal\n */\nexport const MeshRendererSchema: ISchema<PBMeshRenderer> = {\n serialize(value: PBMeshRenderer, builder: ByteBuffer): void {\n const writer = PBMeshRenderer.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBMeshRenderer {\n return PBMeshRenderer.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBMeshRenderer {\n // TODO: this is a hack.\n return PBMeshRenderer.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color3 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum NftFrameType {\n NFT_CLASSIC = 0,\n NFT_BAROQUE_ORNAMENT = 1,\n NFT_DIAMOND_ORNAMENT = 2,\n NFT_MINIMAL_WIDE = 3,\n NFT_MINIMAL_GREY = 4,\n NFT_BLOCKY = 5,\n NFT_GOLD_EDGES = 6,\n NFT_GOLD_CARVED = 7,\n NFT_GOLD_WIDE = 8,\n NFT_GOLD_ROUNDED = 9,\n NFT_METAL_MEDIUM = 10,\n NFT_METAL_WIDE = 11,\n NFT_METAL_SLIM = 12,\n NFT_METAL_ROUNDED = 13,\n NFT_PINS = 14,\n NFT_MINIMAL_BLACK = 15,\n NFT_MINIMAL_WHITE = 16,\n NFT_TAPE = 17,\n NFT_WOOD_SLIM = 18,\n NFT_WOOD_WIDE = 19,\n NFT_WOOD_TWIGS = 20,\n NFT_CANVAS = 21,\n NFT_NONE = 22\n}\n\nexport interface PBNftShape {\n src: string\n /** default = PictureFrameStyle.Classic */\n style?: NftFrameType | undefined\n /** default = decentraland.common.Color3(0.6404918, 0.611472, 0.8584906) */\n color?: Color3 | undefined\n}\n\nfunction createBasePBNftShape(): PBNftShape {\n return { src: '', style: undefined, color: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBNftShape = {\n encode(message: PBNftShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.src !== '') {\n writer.uint32(10).string(message.src)\n }\n if (message.style !== undefined) {\n writer.uint32(16).int32(message.style)\n }\n if (message.color !== undefined) {\n Color3.encode(message.color, writer.uint32(26).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBNftShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBNftShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.src = reader.string()\n break\n case 2:\n message.style = reader.int32() as any\n break\n case 3:\n message.color = Color3.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBNftShape } from './pb/decentraland/sdk/components/nft_shape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1040\n\n/**\n * @internal\n */\nexport const NftShapeSchema: ISchema<PBNftShape> = {\n serialize(value: PBNftShape, builder: ByteBuffer): void {\n const writer = PBNftShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBNftShape {\n return PBNftShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBNftShape {\n // TODO: this is a hack.\n return PBNftShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport Long from 'long'\nimport { Vector3 } from '../../common/vectors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBRaycastResult {\n timestamp: number\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n hits: RaycastHit[]\n}\n\n/** Position will be relative to the scene */\nexport interface RaycastHit {\n position: Vector3 | undefined\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n normalHit: Vector3 | undefined\n length: number\n meshName?: string | undefined\n entityId?: number | undefined\n}\n\nfunction createBasePBRaycastResult(): PBRaycastResult {\n return { timestamp: 0, origin: undefined, direction: undefined, hits: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBRaycastResult = {\n encode(message: PBRaycastResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.timestamp !== 0) {\n writer.uint32(8).int32(message.timestamp)\n }\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(18).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim()\n }\n for (const v of message.hits) {\n RaycastHit.encode(v!, writer.uint32(34).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBRaycastResult {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBRaycastResult()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.timestamp = reader.int32()\n break\n case 2:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 3:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 4:\n message.hits.push(RaycastHit.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseRaycastHit(): RaycastHit {\n return {\n position: undefined,\n origin: undefined,\n direction: undefined,\n normalHit: undefined,\n length: 0,\n meshName: undefined,\n entityId: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const RaycastHit = {\n encode(message: RaycastHit, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.position !== undefined) {\n Vector3.encode(message.position, writer.uint32(10).fork()).ldelim()\n }\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(18).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim()\n }\n if (message.normalHit !== undefined) {\n Vector3.encode(message.normalHit, writer.uint32(34).fork()).ldelim()\n }\n if (message.length !== 0) {\n writer.uint32(45).float(message.length)\n }\n if (message.meshName !== undefined) {\n writer.uint32(50).string(message.meshName)\n }\n if (message.entityId !== undefined) {\n writer.uint32(56).int64(message.entityId)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): RaycastHit {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseRaycastHit()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.position = Vector3.decode(reader, reader.uint32())\n break\n case 2:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 3:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 4:\n message.normalHit = Vector3.decode(reader, reader.uint32())\n break\n case 5:\n message.length = reader.float()\n break\n case 6:\n message.meshName = reader.string()\n break\n case 7:\n message.entityId = longToNumber(reader.int64() as Long)\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\ndeclare var self: any | undefined\ndeclare var window: any | undefined\ndeclare var global: any | undefined\nvar globalThis: any = (() => {\n if (typeof globalThis !== 'undefined') return globalThis\n if (typeof self !== 'undefined') return self\n if (typeof window !== 'undefined') return window\n if (typeof global !== 'undefined') return global\n throw 'Unable to locate global object'\n})()\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER')\n }\n return long.toNumber()\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any\n _m0.configure()\n}\n","/* eslint-disable */\nimport { InputAction } from './common/input_action.gen'\nimport { PointerEventType } from './pointer_hover_feedback.gen'\nimport { RaycastHit } from './raycast_result.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\n/** the renderer will set this component to the root entity once per frame with all the events */\nexport interface PBPointerEventsResult {\n /** a list of the last N pointer commands (from the engine) */\n commands: PBPointerEventsResult_PointerCommand[]\n}\n\n/** this message represents a pointer event, used both for UP and DOWN actions */\nexport interface PBPointerEventsResult_PointerCommand {\n /** identifier of the input */\n button: InputAction\n hit: RaycastHit | undefined\n state: PointerEventType\n /** could be a Lamport timestamp */\n timestamp: number\n /** if the input is analog then we store it here */\n analog?: number | undefined\n}\n\nfunction createBasePBPointerEventsResult(): PBPointerEventsResult {\n return { commands: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerEventsResult = {\n encode(message: PBPointerEventsResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.commands) {\n PBPointerEventsResult_PointerCommand.encode(v!, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerEventsResult {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerEventsResult()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.commands.push(PBPointerEventsResult_PointerCommand.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBPointerEventsResult_PointerCommand(): PBPointerEventsResult_PointerCommand {\n return { button: 0, hit: undefined, state: 0, timestamp: 0, analog: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerEventsResult_PointerCommand = {\n encode(message: PBPointerEventsResult_PointerCommand, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(8).int32(message.button)\n }\n if (message.hit !== undefined) {\n RaycastHit.encode(message.hit, writer.uint32(18).fork()).ldelim()\n }\n if (message.state !== 0) {\n writer.uint32(32).int32(message.state)\n }\n if (message.timestamp !== 0) {\n writer.uint32(40).int32(message.timestamp)\n }\n if (message.analog !== undefined) {\n writer.uint32(53).float(message.analog)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerEventsResult_PointerCommand {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerEventsResult_PointerCommand()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.button = reader.int32() as any\n break\n case 2:\n message.hit = RaycastHit.decode(reader, reader.uint32())\n break\n case 4:\n message.state = reader.int32() as any\n break\n case 5:\n message.timestamp = reader.int32()\n break\n case 6:\n message.analog = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBPointerEventsResult } from './pb/decentraland/sdk/components/pointer_events_result.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1063\n\n/**\n * @internal\n */\nexport const PointerEventsResultSchema: ISchema<PBPointerEventsResult> = {\n serialize(value: PBPointerEventsResult, builder: ByteBuffer): void {\n const writer = PBPointerEventsResult.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBPointerEventsResult {\n return PBPointerEventsResult.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBPointerEventsResult {\n // TODO: this is a hack.\n return PBPointerEventsResult.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { InputAction } from './common/input_action.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum PointerEventType {\n PET_UP = 0,\n PET_DOWN = 1,\n PET_HOVER_ENTER = 2,\n PET_HOVER_LEAVE = 3\n}\n\nexport interface PBPointerHoverFeedback {\n pointerEvents: PBPointerHoverFeedback_Entry[]\n}\n\nexport interface PBPointerHoverFeedback_Info {\n /** default=InputAction.ANY */\n button?: InputAction | undefined\n /** default='Interact' */\n hoverText?: string | undefined\n /** default=10 */\n maxDistance?: number | undefined\n /** default=true */\n showFeedback?: boolean | undefined\n}\n\nexport interface PBPointerHoverFeedback_Entry {\n eventType: PointerEventType\n eventInfo: PBPointerHoverFeedback_Info | undefined\n}\n\nfunction createBasePBPointerHoverFeedback(): PBPointerHoverFeedback {\n return { pointerEvents: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerHoverFeedback = {\n encode(message: PBPointerHoverFeedback, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.pointerEvents) {\n PBPointerHoverFeedback_Entry.encode(v!, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerHoverFeedback {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerHoverFeedback()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.pointerEvents.push(PBPointerHoverFeedback_Entry.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBPointerHoverFeedback_Info(): PBPointerHoverFeedback_Info {\n return { button: undefined, hoverText: undefined, maxDistance: undefined, showFeedback: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerHoverFeedback_Info = {\n encode(message: PBPointerHoverFeedback_Info, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== undefined) {\n writer.uint32(8).int32(message.button)\n }\n if (message.hoverText !== undefined) {\n writer.uint32(18).string(message.hoverText)\n }\n if (message.maxDistance !== undefined) {\n writer.uint32(29).float(message.maxDistance)\n }\n if (message.showFeedback !== undefined) {\n writer.uint32(32).bool(message.showFeedback)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerHoverFeedback_Info {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerHoverFeedback_Info()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.button = reader.int32() as any\n break\n case 2:\n message.hoverText = reader.string()\n break\n case 3:\n message.maxDistance = reader.float()\n break\n case 4:\n message.showFeedback = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBPointerHoverFeedback_Entry(): PBPointerHoverFeedback_Entry {\n return { eventType: 0, eventInfo: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerHoverFeedback_Entry = {\n encode(message: PBPointerHoverFeedback_Entry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.eventType !== 0) {\n writer.uint32(8).int32(message.eventType)\n }\n if (message.eventInfo !== undefined) {\n PBPointerHoverFeedback_Info.encode(message.eventInfo, writer.uint32(18).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerHoverFeedback_Entry {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerHoverFeedback_Entry()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.eventType = reader.int32() as any\n break\n case 2:\n message.eventInfo = PBPointerHoverFeedback_Info.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBPointerHoverFeedback } from './pb/decentraland/sdk/components/pointer_hover_feedback.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1062\n\n/**\n * @internal\n */\nexport const PointerHoverFeedbackSchema: ISchema<PBPointerHoverFeedback> = {\n serialize(value: PBPointerHoverFeedback, builder: ByteBuffer): void {\n const writer = PBPointerHoverFeedback.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBPointerHoverFeedback {\n return PBPointerHoverFeedback.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBPointerHoverFeedback {\n // TODO: this is a hack.\n return PBPointerHoverFeedback.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBPointerLock {\n isPointerLocked: boolean\n}\n\nfunction createBasePBPointerLock(): PBPointerLock {\n return { isPointerLocked: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerLock = {\n encode(message: PBPointerLock, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.isPointerLocked === true) {\n writer.uint32(8).bool(message.isPointerLocked)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerLock {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerLock()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.isPointerLocked = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBPointerLock } from './pb/decentraland/sdk/components/pointer_lock.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1074\n\n/**\n * @internal\n */\nexport const PointerLockSchema: ISchema<PBPointerLock> = {\n serialize(value: PBPointerLock, builder: ByteBuffer): void {\n const writer = PBPointerLock.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBPointerLock {\n return PBPointerLock.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBPointerLock {\n // TODO: this is a hack.\n return PBPointerLock.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Vector3 } from '../../common/vectors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum RaycastQueryType {\n RQT_HIT_FIRST = 0,\n RQT_QUERY_ALL = 1\n}\n\nexport interface PBRaycast {\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n maxDistance: number\n queryType: RaycastQueryType\n}\n\nfunction createBasePBRaycast(): PBRaycast {\n return { origin: undefined, direction: undefined, maxDistance: 0, queryType: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBRaycast = {\n encode(message: PBRaycast, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(18).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim()\n }\n if (message.maxDistance !== 0) {\n writer.uint32(37).float(message.maxDistance)\n }\n if (message.queryType !== 0) {\n writer.uint32(40).int32(message.queryType)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBRaycast {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBRaycast()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 2:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 3:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 4:\n message.maxDistance = reader.float()\n break\n case 5:\n message.queryType = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBRaycast } from './pb/decentraland/sdk/components/raycast.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1067\n\n/**\n * @internal\n */\nexport const RaycastSchema: ISchema<PBRaycast> = {\n serialize(value: PBRaycast, builder: ByteBuffer): void {\n const writer = PBRaycast.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBRaycast {\n return PBRaycast.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBRaycast {\n // TODO: this is a hack.\n return PBRaycast.decode(new Uint8Array())\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBRaycastResult } from './pb/decentraland/sdk/components/raycast_result.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1068\n\n/**\n * @internal\n */\nexport const RaycastResultSchema: ISchema<PBRaycastResult> = {\n serialize(value: PBRaycastResult, builder: ByteBuffer): void {\n const writer = PBRaycastResult.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBRaycastResult {\n return PBRaycastResult.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBRaycastResult {\n // TODO: this is a hack.\n return PBRaycastResult.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Font, TextAlignMode } from './common/texts.gen'\nimport { Color3, Color4 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBTextShape {\n text: string\n /** default=F_SANS_SERIF */\n font?: Font | undefined\n /** default=10 */\n fontSize?: number | undefined\n fontAutoSize?: boolean | undefined\n /** default=TAM_CENTER_CENTER */\n textAlign?: TextAlignMode | undefined\n /** default=1 */\n width?: number | undefined\n /** default=1 */\n height?: number | undefined\n paddingTop?: number | undefined\n paddingRight?: number | undefined\n paddingBottom?: number | undefined\n paddingLeft?: number | undefined\n lineSpacing?: number | undefined\n lineCount?: number | undefined\n textWrapping?: boolean | undefined\n shadowBlur?: number | undefined\n shadowOffsetX?: number | undefined\n shadowOffsetY?: number | undefined\n outlineWidth?: number | undefined\n /** default=(1.0,1.0,1.0) */\n shadowColor?: Color3 | undefined\n /** default=(1.0,1.0,1.0) */\n outlineColor?: Color3 | undefined\n /** default=(1.0,1.0,1.0) */\n textColor?: Color4 | undefined\n}\n\nfunction createBasePBTextShape(): PBTextShape {\n return {\n text: '',\n font: undefined,\n fontSize: undefined,\n fontAutoSize: undefined,\n textAlign: undefined,\n width: undefined,\n height: undefined,\n paddingTop: undefined,\n paddingRight: undefined,\n paddingBottom: undefined,\n paddingLeft: undefined,\n lineSpacing: undefined,\n lineCount: undefined,\n textWrapping: undefined,\n shadowBlur: undefined,\n shadowOffsetX: undefined,\n shadowOffsetY: undefined,\n outlineWidth: undefined,\n shadowColor: undefined,\n outlineColor: undefined,\n textColor: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBTextShape = {\n encode(message: PBTextShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.text !== '') {\n writer.uint32(10).string(message.text)\n }\n if (message.font !== undefined) {\n writer.uint32(16).int32(message.font)\n }\n if (message.fontSize !== undefined) {\n writer.uint32(29).float(message.fontSize)\n }\n if (message.fontAutoSize !== undefined) {\n writer.uint32(32).bool(message.fontAutoSize)\n }\n if (message.textAlign !== undefined) {\n writer.uint32(40).int32(message.textAlign)\n }\n if (message.width !== undefined) {\n writer.uint32(53).float(message.width)\n }\n if (message.height !== undefined) {\n writer.uint32(61).float(message.height)\n }\n if (message.paddingTop !== undefined) {\n writer.uint32(69).float(message.paddingTop)\n }\n if (message.paddingRight !== undefined) {\n writer.uint32(77).float(message.paddingRight)\n }\n if (message.paddingBottom !== undefined) {\n writer.uint32(85).float(message.paddingBottom)\n }\n if (message.paddingLeft !== undefined) {\n writer.uint32(93).float(message.paddingLeft)\n }\n if (message.lineSpacing !== undefined) {\n writer.uint32(101).float(message.lineSpacing)\n }\n if (message.lineCount !== undefined) {\n writer.uint32(104).int32(message.lineCount)\n }\n if (message.textWrapping !== undefined) {\n writer.uint32(112).bool(message.textWrapping)\n }\n if (message.shadowBlur !== undefined) {\n writer.uint32(125).float(message.shadowBlur)\n }\n if (message.shadowOffsetX !== undefined) {\n writer.uint32(133).float(message.shadowOffsetX)\n }\n if (message.shadowOffsetY !== undefined) {\n writer.uint32(141).float(message.shadowOffsetY)\n }\n if (message.outlineWidth !== undefined) {\n writer.uint32(149).float(message.outlineWidth)\n }\n if (message.shadowColor !== undefined) {\n Color3.encode(message.shadowColor, writer.uint32(154).fork()).ldelim()\n }\n if (message.outlineColor !== undefined) {\n Color3.encode(message.outlineColor, writer.uint32(162).fork()).ldelim()\n }\n if (message.textColor !== undefined) {\n Color4.encode(message.textColor, writer.uint32(170).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBTextShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBTextShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.text = reader.string()\n break\n case 2:\n message.font = reader.int32() as any\n break\n case 3:\n message.fontSize = reader.float()\n break\n case 4:\n message.fontAutoSize = reader.bool()\n break\n case 5:\n message.textAlign = reader.int32() as any\n break\n case 6:\n message.width = reader.float()\n break\n case 7:\n message.height = reader.float()\n break\n case 8:\n message.paddingTop = reader.float()\n break\n case 9:\n message.paddingRight = reader.float()\n break\n case 10:\n message.paddingBottom = reader.float()\n break\n case 11:\n message.paddingLeft = reader.float()\n break\n case 12:\n message.lineSpacing = reader.float()\n break\n case 13:\n message.lineCount = reader.int32()\n break\n case 14:\n message.textWrapping = reader.bool()\n break\n case 15:\n message.shadowBlur = reader.float()\n break\n case 16:\n message.shadowOffsetX = reader.float()\n break\n case 17:\n message.shadowOffsetY = reader.float()\n break\n case 18:\n message.outlineWidth = reader.float()\n break\n case 19:\n message.shadowColor = Color3.decode(reader, reader.uint32())\n break\n case 20:\n message.outlineColor = Color3.decode(reader, reader.uint32())\n break\n case 21:\n message.textColor = Color4.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBTextShape } from './pb/decentraland/sdk/components/text_shape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1030\n\n/**\n * @internal\n */\nexport const TextShapeSchema: ISchema<PBTextShape> = {\n serialize(value: PBTextShape, builder: ByteBuffer): void {\n const writer = PBTextShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBTextShape {\n return PBTextShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBTextShape {\n // TODO: this is a hack.\n return PBTextShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color4 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBUiBackground {\n /** default=(0.0, 0.0, 0.0, 0.0) */\n backgroundColor?: Color4 | undefined\n}\n\nfunction createBasePBUiBackground(): PBUiBackground {\n return { backgroundColor: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBUiBackground = {\n encode(message: PBUiBackground, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.backgroundColor !== undefined) {\n Color4.encode(message.backgroundColor, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBUiBackground {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBUiBackground()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.backgroundColor = Color4.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBUiBackground } from './pb/decentraland/sdk/components/ui_background.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1053\n\n/**\n * @internal\n */\nexport const UiBackgroundSchema: ISchema<PBUiBackground> = {\n serialize(value: PBUiBackground, builder: ByteBuffer): void {\n const writer = PBUiBackground.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBUiBackground {\n return PBUiBackground.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBUiBackground {\n // TODO: this is a hack.\n return PBUiBackground.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color4 } from '../../common/colors.gen'\nimport { TextAlignMode, Font } from './common/texts.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBUiText {\n value: string\n /** default=(1.0,1.0,1.0,1.0) */\n color?: Color4 | undefined\n /** default='center' */\n textAlign?: TextAlignMode | undefined\n /** default=0 */\n font?: Font | undefined\n /** default=10 */\n fontSize?: number | undefined\n}\n\nfunction createBasePBUiText(): PBUiText {\n return { value: '', color: undefined, textAlign: undefined, font: undefined, fontSize: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBUiText = {\n encode(message: PBUiText, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.value !== '') {\n writer.uint32(10).string(message.value)\n }\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(18).fork()).ldelim()\n }\n if (message.textAlign !== undefined) {\n writer.uint32(24).int32(message.textAlign)\n }\n if (message.font !== undefined) {\n writer.uint32(32).int32(message.font)\n }\n if (message.fontSize !== undefined) {\n writer.uint32(40).int32(message.fontSize)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBUiText {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBUiText()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.value = reader.string()\n break\n case 2:\n message.color = Color4.decode(reader, reader.uint32())\n break\n case 3:\n message.textAlign = reader.int32() as any\n break\n case 4:\n message.font = reader.int32() as any\n break\n case 5:\n message.fontSize = reader.int32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBUiText } from './pb/decentraland/sdk/components/ui_text.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1052\n\n/**\n * @internal\n */\nexport const UiTextSchema: ISchema<PBUiText> = {\n serialize(value: PBUiText, builder: ByteBuffer): void {\n const writer = PBUiText.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBUiText {\n return PBUiText.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBUiText {\n // TODO: this is a hack.\n return PBUiText.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum YGPositionType {\n YGPT_RELATIVE = 0,\n YGPT_ABSOLUTE = 1\n}\n\nexport const enum YGAlign {\n YGA_AUTO = 0,\n YGA_FLEX_START = 1,\n YGA_CENTER = 2,\n YGA_FLEX_END = 3,\n YGA_STRETCH = 4,\n YGA_BASELINE = 5,\n YGA_SPACE_BETWEEN = 6,\n YGA_SPACE_AROUND = 7\n}\n\nexport const enum YGUnit {\n YGU_UNDEFINED = 0,\n YGU_POINT = 1,\n YGU_PERCENT = 2,\n YGU_AUTO = 3\n}\n\nexport const enum YGFlexDirection {\n YGFD_ROW = 0,\n YGFD_COLUMN = 1,\n YGFD_COLUMN_REVERSE = 2,\n YGFD_ROW_REVERSE = 3\n}\n\nexport const enum YGWrap {\n YGW_NO_WRAP = 0,\n YGW_WRAP = 1,\n YGW_WRAP_REVERSE = 2\n}\n\nexport const enum YGJustify {\n YGJ_FLEX_START = 0,\n YGJ_CENTER = 1,\n YGJ_FLEX_END = 2,\n YGJ_SPACE_BETWEEN = 3,\n YGJ_SPACE_AROUND = 4,\n YGJ_SPACE_EVENLY = 5\n}\n\nexport const enum YGOverflow {\n YGO_VISIBLE = 0,\n YGO_HIDDEN = 1,\n YGO_SCROLL = 2\n}\n\nexport const enum YGDisplay {\n YGD_FLEX = 0,\n YGD_NONE = 1\n}\n\nexport const enum YGEdge {\n YGE_LEFT = 0,\n YGE_TOP = 1,\n YGE_RIGHT = 2,\n YGE_BOTTOM = 3,\n YGE_START = 4,\n YGE_END = 5,\n YGE_HORIZONTAL = 6,\n YGE_VERTICAL = 7,\n YGE_ALL = 8\n}\n\nexport interface PBUiTransform {\n parent: number\n rightOf: number\n /** default: YGAlign.YGA_FLEX_START */\n alignContent?: YGAlign | undefined\n /** default: YGAlign.YGA_STRETCH */\n alignItems?: YGAlign | undefined\n /** default: YGWrap.YGW_WRAP */\n flexWrap?: YGWrap | undefined\n /** default: 1 */\n flexShrink?: number | undefined\n /** YGPositionType.YGPT_RELATIVE */\n positionType: YGPositionType\n /** YGAlign.YGA_AUTO */\n alignSelf: YGAlign\n /** YGFlexDirection.YGFD_ROW */\n flexDirection: YGFlexDirection\n /** YGJustify.YGJ_FLEX_START */\n justifyContent: YGJustify\n /** YGOverflow.YGO_VISIBLE */\n overflow: YGOverflow\n /** YGDisplay.YGD_FLEX */\n display: YGDisplay\n /** YGUnit.YGU_UNDEFINED */\n flexBasisUnit: YGUnit\n flexBasis: number\n flexGrow: number\n /** YGUnit.YGU_UNDEFINED */\n widthUnit: YGUnit\n width: number\n /** YGUnit.YGU_UNDEFINED */\n heightUnit: YGUnit\n height: number\n /** YGUnit.YGU_UNDEFINED */\n minWidthUnit: YGUnit\n minWidth: number\n /** YGUnit.YGU_UNDEFINED */\n minHeightUnit: YGUnit\n minHeight: number\n /** YGUnit.YGU_UNDEFINED */\n maxWidthUnit: YGUnit\n maxWidth: number\n /** YGUnit.YGU_UNDEFINED */\n maxHeightUnit: YGUnit\n maxHeight: number\n /** YGUnit.YGU_UNDEFINED */\n positionLeftUnit: YGUnit\n positionLeft: number\n /** YGUnit.YGU_UNDEFINED */\n positionTopUnit: YGUnit\n positionTop: number\n /** YGUnit.YGU_UNDEFINED */\n positionRightUnit: YGUnit\n positionRight: number\n /** YGUnit.YGU_UNDEFINED */\n positionBottomUnit: YGUnit\n positionBottom: number\n /** YGUnit.YGU_UNDEFINED */\n marginLeftUnit: YGUnit\n marginLeft: number\n /** YGUnit.YGU_UNDEFINED */\n marginTopUnit: YGUnit\n marginTop: number\n /** YGUnit.YGU_UNDEFINED */\n marginRightUnit: YGUnit\n marginRight: number\n /** YGUnit.YGU_UNDEFINED */\n marginBottomUnit: YGUnit\n marginBottom: number\n /** YGUnit.YGU_UNDEFINED */\n paddingLeftUnit: YGUnit\n paddingLeft: number\n /** YGUnit.YGU_UNDEFINED */\n paddingTopUnit: YGUnit\n paddingTop: number\n /** YGUnit.YGU_UNDEFINED */\n paddingRightUnit: YGUnit\n paddingRight: number\n /** YGUnit.YGU_UNDEFINED */\n paddingBottomUnit: YGUnit\n paddingBottom: number\n}\n\nfunction createBasePBUiTransform(): PBUiTransform {\n return {\n parent: 0,\n rightOf: 0,\n alignContent: undefined,\n alignItems: undefined,\n flexWrap: undefined,\n flexShrink: undefined,\n positionType: 0,\n alignSelf: 0,\n flexDirection: 0,\n justifyContent: 0,\n overflow: 0,\n display: 0,\n flexBasisUnit: 0,\n flexBasis: 0,\n flexGrow: 0,\n widthUnit: 0,\n width: 0,\n heightUnit: 0,\n height: 0,\n minWidthUnit: 0,\n minWidth: 0,\n minHeightUnit: 0,\n minHeight: 0,\n maxWidthUnit: 0,\n maxWidth: 0,\n maxHeightUnit: 0,\n maxHeight: 0,\n positionLeftUnit: 0,\n positionLeft: 0,\n positionTopUnit: 0,\n positionTop: 0,\n positionRightUnit: 0,\n positionRight: 0,\n positionBottomUnit: 0,\n positionBottom: 0,\n marginLeftUnit: 0,\n marginLeft: 0,\n marginTopUnit: 0,\n marginTop: 0,\n marginRightUnit: 0,\n marginRight: 0,\n marginBottomUnit: 0,\n marginBottom: 0,\n paddingLeftUnit: 0,\n paddingLeft: 0,\n paddingTopUnit: 0,\n paddingTop: 0,\n paddingRightUnit: 0,\n paddingRight: 0,\n paddingBottomUnit: 0,\n paddingBottom: 0\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBUiTransform = {\n encode(message: PBUiTransform, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.parent !== 0) {\n writer.uint32(8).int32(message.parent)\n }\n if (message.rightOf !== 0) {\n writer.uint32(16).int32(message.rightOf)\n }\n if (message.alignContent !== undefined) {\n writer.uint32(24).int32(message.alignContent)\n }\n if (message.alignItems !== undefined) {\n writer.uint32(32).int32(message.alignItems)\n }\n if (message.flexWrap !== undefined) {\n writer.uint32(40).int32(message.flexWrap)\n }\n if (message.flexShrink !== undefined) {\n writer.uint32(53).float(message.flexShrink)\n }\n if (message.positionType !== 0) {\n writer.uint32(56).int32(message.positionType)\n }\n if (message.alignSelf !== 0) {\n writer.uint32(64).int32(message.alignSelf)\n }\n if (message.flexDirection !== 0) {\n writer.uint32(72).int32(message.flexDirection)\n }\n if (message.justifyContent !== 0) {\n writer.uint32(80).int32(message.justifyContent)\n }\n if (message.overflow !== 0) {\n writer.uint32(88).int32(message.overflow)\n }\n if (message.display !== 0) {\n writer.uint32(96).int32(message.display)\n }\n if (message.flexBasisUnit !== 0) {\n writer.uint32(104).int32(message.flexBasisUnit)\n }\n if (message.flexBasis !== 0) {\n writer.uint32(117).float(message.flexBasis)\n }\n if (message.flexGrow !== 0) {\n writer.uint32(125).float(message.flexGrow)\n }\n if (message.widthUnit !== 0) {\n writer.uint32(128).int32(message.widthUnit)\n }\n if (message.width !== 0) {\n writer.uint32(141).float(message.width)\n }\n if (message.heightUnit !== 0) {\n writer.uint32(144).int32(message.heightUnit)\n }\n if (message.height !== 0) {\n writer.uint32(157).float(message.height)\n }\n if (message.minWidthUnit !== 0) {\n writer.uint32(160).int32(message.minWidthUnit)\n }\n if (message.minWidth !== 0) {\n writer.uint32(173).float(message.minWidth)\n }\n if (message.minHeightUnit !== 0) {\n writer.uint32(176).int32(message.minHeightUnit)\n }\n if (message.minHeight !== 0) {\n writer.uint32(189).float(message.minHeight)\n }\n if (message.maxWidthUnit !== 0) {\n writer.uint32(192).int32(message.maxWidthUnit)\n }\n if (message.maxWidth !== 0) {\n writer.uint32(205).float(message.maxWidth)\n }\n if (message.maxHeightUnit !== 0) {\n writer.uint32(208).int32(message.maxHeightUnit)\n }\n if (message.maxHeight !== 0) {\n writer.uint32(221).float(message.maxHeight)\n }\n if (message.positionLeftUnit !== 0) {\n writer.uint32(224).int32(message.positionLeftUnit)\n }\n if (message.positionLeft !== 0) {\n writer.uint32(237).float(message.positionLeft)\n }\n if (message.positionTopUnit !== 0) {\n writer.uint32(240).int32(message.positionTopUnit)\n }\n if (message.positionTop !== 0) {\n writer.uint32(253).float(message.positionTop)\n }\n if (message.positionRightUnit !== 0) {\n writer.uint32(256).int32(message.positionRightUnit)\n }\n if (message.positionRight !== 0) {\n writer.uint32(269).float(message.positionRight)\n }\n if (message.positionBottomUnit !== 0) {\n writer.uint32(272).int32(message.positionBottomUnit)\n }\n if (message.positionBottom !== 0) {\n writer.uint32(285).float(message.positionBottom)\n }\n if (message.marginLeftUnit !== 0) {\n writer.uint32(288).int32(message.marginLeftUnit)\n }\n if (message.marginLeft !== 0) {\n writer.uint32(301).float(message.marginLeft)\n }\n if (message.marginTopUnit !== 0) {\n writer.uint32(304).int32(message.marginTopUnit)\n }\n if (message.marginTop !== 0) {\n writer.uint32(317).float(message.marginTop)\n }\n if (message.marginRightUnit !== 0) {\n writer.uint32(320).int32(message.marginRightUnit)\n }\n if (message.marginRight !== 0) {\n writer.uint32(333).float(message.marginRight)\n }\n if (message.marginBottomUnit !== 0) {\n writer.uint32(336).int32(message.marginBottomUnit)\n }\n if (message.marginBottom !== 0) {\n writer.uint32(349).float(message.marginBottom)\n }\n if (message.paddingLeftUnit !== 0) {\n writer.uint32(352).int32(message.paddingLeftUnit)\n }\n if (message.paddingLeft !== 0) {\n writer.uint32(365).float(message.paddingLeft)\n }\n if (message.paddingTopUnit !== 0) {\n writer.uint32(368).int32(message.paddingTopUnit)\n }\n if (message.paddingTop !== 0) {\n writer.uint32(381).float(message.paddingTop)\n }\n if (message.paddingRightUnit !== 0) {\n writer.uint32(384).int32(message.paddingRightUnit)\n }\n if (message.paddingRight !== 0) {\n writer.uint32(397).float(message.paddingRight)\n }\n if (message.paddingBottomUnit !== 0) {\n writer.uint32(400).int32(message.paddingBottomUnit)\n }\n if (message.paddingBottom !== 0) {\n writer.uint32(413).float(message.paddingBottom)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBUiTransform {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBUiTransform()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.parent = reader.int32()\n break\n case 2:\n message.rightOf = reader.int32()\n break\n case 3:\n message.alignContent = reader.int32() as any\n break\n case 4:\n message.alignItems = reader.int32() as any\n break\n case 5:\n message.flexWrap = reader.int32() as any\n break\n case 6:\n message.flexShrink = reader.float()\n break\n case 7:\n message.positionType = reader.int32() as any\n break\n case 8:\n message.alignSelf = reader.int32() as any\n break\n case 9:\n message.flexDirection = reader.int32() as any\n break\n case 10:\n message.justifyContent = reader.int32() as any\n break\n case 11:\n message.overflow = reader.int32() as any\n break\n case 12:\n message.display = reader.int32() as any\n break\n case 13:\n message.flexBasisUnit = reader.int32() as any\n break\n case 14:\n message.flexBasis = reader.float()\n break\n case 15:\n message.flexGrow = reader.float()\n break\n case 16:\n message.widthUnit = reader.int32() as any\n break\n case 17:\n message.width = reader.float()\n break\n case 18:\n message.heightUnit = reader.int32() as any\n break\n case 19:\n message.height = reader.float()\n break\n case 20:\n message.minWidthUnit = reader.int32() as any\n break\n case 21:\n message.minWidth = reader.float()\n break\n case 22:\n message.minHeightUnit = reader.int32() as any\n break\n case 23:\n message.minHeight = reader.float()\n break\n case 24:\n message.maxWidthUnit = reader.int32() as any\n break\n case 25:\n message.maxWidth = reader.float()\n break\n case 26:\n message.maxHeightUnit = reader.int32() as any\n break\n case 27:\n message.maxHeight = reader.float()\n break\n case 28:\n message.positionLeftUnit = reader.int32() as any\n break\n case 29:\n message.positionLeft = reader.float()\n break\n case 30:\n message.positionTopUnit = reader.int32() as any\n break\n case 31:\n message.positionTop = reader.float()\n break\n case 32:\n message.positionRightUnit = reader.int32() as any\n break\n case 33:\n message.positionRight = reader.float()\n break\n case 34:\n message.positionBottomUnit = reader.int32() as any\n break\n case 35:\n message.positionBottom = reader.float()\n break\n case 36:\n message.marginLeftUnit = reader.int32() as any\n break\n case 37:\n message.marginLeft = reader.float()\n break\n case 38:\n message.marginTopUnit = reader.int32() as any\n break\n case 39:\n message.marginTop = reader.float()\n break\n case 40:\n message.marginRightUnit = reader.int32() as any\n break\n case 41:\n message.marginRight = reader.float()\n break\n case 42:\n message.marginBottomUnit = reader.int32() as any\n break\n case 43:\n message.marginBottom = reader.float()\n break\n case 44:\n message.paddingLeftUnit = reader.int32() as any\n break\n case 45:\n message.paddingLeft = reader.float()\n break\n case 46:\n message.paddingTopUnit = reader.int32() as any\n break\n case 47:\n message.paddingTop = reader.float()\n break\n case 48:\n message.paddingRightUnit = reader.int32() as any\n break\n case 49:\n message.paddingRight = reader.float()\n break\n case 50:\n message.paddingBottomUnit = reader.int32() as any\n break\n case 51:\n message.paddingBottom = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBUiTransform } from './pb/decentraland/sdk/components/ui_transform.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1050\n\n/**\n * @internal\n */\nexport const UiTransformSchema: ISchema<PBUiTransform> = {\n serialize(value: PBUiTransform, builder: ByteBuffer): void {\n const writer = PBUiTransform.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBUiTransform {\n return PBUiTransform.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBUiTransform {\n // TODO: this is a hack.\n return PBUiTransform.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBVisibilityComponent {\n /** default=true */\n visible?: boolean | undefined\n}\n\nfunction createBasePBVisibilityComponent(): PBVisibilityComponent {\n return { visible: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBVisibilityComponent = {\n encode(message: PBVisibilityComponent, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.visible !== undefined) {\n writer.uint32(8).bool(message.visible)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBVisibilityComponent {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBVisibilityComponent()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.visible = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBVisibilityComponent } from './pb/decentraland/sdk/components/visibility_component.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1081\n\n/**\n * @internal\n */\nexport const VisibilityComponentSchema: ISchema<PBVisibilityComponent> = {\n serialize(value: PBVisibilityComponent, builder: ByteBuffer): void {\n const writer = PBVisibilityComponent.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBVisibilityComponent {\n return PBVisibilityComponent.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBVisibilityComponent {\n // TODO: this is a hack.\n return PBVisibilityComponent.decode(new Uint8Array())\n }\n}\n","import type { IEngine } from '../../engine/types'\nimport * as TransformSchema from '../legacy/Transform'\nimport * as AnimatorSchema from './Animator.gen'\nimport * as AudioSourceSchema from './AudioSource.gen'\nimport * as AudioStreamSchema from './AudioStream.gen'\nimport * as AvatarAttachSchema from './AvatarAttach.gen'\nimport * as AvatarModifierAreaSchema from './AvatarModifierArea.gen'\nimport * as AvatarShapeSchema from './AvatarShape.gen'\nimport * as BillboardSchema from './Billboard.gen'\nimport * as CameraModeSchema from './CameraMode.gen'\nimport * as CameraModeAreaSchema from './CameraModeArea.gen'\nimport * as GltfContainerSchema from './GltfContainer.gen'\nimport * as MaterialSchema from './Material.gen'\nimport * as MeshColliderSchema from './MeshCollider.gen'\nimport * as MeshRendererSchema from './MeshRenderer.gen'\nimport * as NftShapeSchema from './NftShape.gen'\nimport * as PointerEventsResultSchema from './PointerEventsResult.gen'\nimport * as PointerHoverFeedbackSchema from './PointerHoverFeedback.gen'\nimport * as PointerLockSchema from './PointerLock.gen'\nimport * as RaycastSchema from './Raycast.gen'\nimport * as RaycastResultSchema from './RaycastResult.gen'\nimport * as TextShapeSchema from './TextShape.gen'\nimport * as UiBackgroundSchema from './UiBackground.gen'\nimport * as UiTextSchema from './UiText.gen'\nimport * as UiTransformSchema from './UiTransform.gen'\nimport * as VisibilityComponentSchema from './VisibilityComponent.gen'\nexport * from './pb/decentraland/sdk/components/animator.gen'\nexport * from './pb/decentraland/sdk/components/audio_source.gen'\nexport * from './pb/decentraland/sdk/components/audio_stream.gen'\nexport * from './pb/decentraland/sdk/components/avatar_attach.gen'\nexport * from './pb/decentraland/sdk/components/avatar_modifier_area.gen'\nexport * from './pb/decentraland/sdk/components/avatar_shape.gen'\nexport * from './pb/decentraland/sdk/components/billboard.gen'\nexport * from './pb/decentraland/sdk/components/camera_mode.gen'\nexport * from './pb/decentraland/sdk/components/camera_mode_area.gen'\nexport * from './pb/decentraland/sdk/components/gltf_container.gen'\nexport * from './pb/decentraland/sdk/components/material.gen'\nexport * from './pb/decentraland/sdk/components/mesh_collider.gen'\nexport * from './pb/decentraland/sdk/components/mesh_renderer.gen'\nexport * from './pb/decentraland/sdk/components/nft_shape.gen'\nexport * from './pb/decentraland/sdk/components/pointer_events_result.gen'\nexport * from './pb/decentraland/sdk/components/pointer_hover_feedback.gen'\nexport * from './pb/decentraland/sdk/components/pointer_lock.gen'\nexport * from './pb/decentraland/sdk/components/raycast.gen'\nexport * from './pb/decentraland/sdk/components/raycast_result.gen'\nexport * from './pb/decentraland/sdk/components/text_shape.gen'\nexport * from './pb/decentraland/sdk/components/ui_background.gen'\nexport * from './pb/decentraland/sdk/components/ui_text.gen'\nexport * from './pb/decentraland/sdk/components/ui_transform.gen'\nexport * from './pb/decentraland/sdk/components/visibility_component.gen'\n\nexport function defineLibraryComponents({\n defineComponentFromSchema\n}: Pick<IEngine, 'defineComponentFromSchema'>) {\n return {\n\t\tAnimator: defineComponentFromSchema(AnimatorSchema.AnimatorSchema, AnimatorSchema.COMPONENT_ID),\n\t\tAudioSource: defineComponentFromSchema(AudioSourceSchema.AudioSourceSchema, AudioSourceSchema.COMPONENT_ID),\n\t\tAudioStream: defineComponentFromSchema(AudioStreamSchema.AudioStreamSchema, AudioStreamSchema.COMPONENT_ID),\n\t\tAvatarAttach: defineComponentFromSchema(AvatarAttachSchema.AvatarAttachSchema, AvatarAttachSchema.COMPONENT_ID),\n\t\tAvatarModifierArea: defineComponentFromSchema(AvatarModifierAreaSchema.AvatarModifierAreaSchema, AvatarModifierAreaSchema.COMPONENT_ID),\n\t\tAvatarShape: defineComponentFromSchema(AvatarShapeSchema.AvatarShapeSchema, AvatarShapeSchema.COMPONENT_ID),\n\t\tBillboard: defineComponentFromSchema(BillboardSchema.BillboardSchema, BillboardSchema.COMPONENT_ID),\n\t\tCameraMode: defineComponentFromSchema(CameraModeSchema.CameraModeSchema, CameraModeSchema.COMPONENT_ID),\n\t\tCameraModeArea: defineComponentFromSchema(CameraModeAreaSchema.CameraModeAreaSchema, CameraModeAreaSchema.COMPONENT_ID),\n\t\tGltfContainer: defineComponentFromSchema(GltfContainerSchema.GltfContainerSchema, GltfContainerSchema.COMPONENT_ID),\n\t\tMaterial: defineComponentFromSchema(MaterialSchema.MaterialSchema, MaterialSchema.COMPONENT_ID),\n\t\tMeshCollider: defineComponentFromSchema(MeshColliderSchema.MeshColliderSchema, MeshColliderSchema.COMPONENT_ID),\n\t\tMeshRenderer: defineComponentFromSchema(MeshRendererSchema.MeshRendererSchema, MeshRendererSchema.COMPONENT_ID),\n\t\tNftShape: defineComponentFromSchema(NftShapeSchema.NftShapeSchema, NftShapeSchema.COMPONENT_ID),\n\t\tPointerEventsResult: defineComponentFromSchema(PointerEventsResultSchema.PointerEventsResultSchema, PointerEventsResultSchema.COMPONENT_ID),\n\t\tPointerHoverFeedback: defineComponentFromSchema(PointerHoverFeedbackSchema.PointerHoverFeedbackSchema, PointerHoverFeedbackSchema.COMPONENT_ID),\n\t\tPointerLock: defineComponentFromSchema(PointerLockSchema.PointerLockSchema, PointerLockSchema.COMPONENT_ID),\n\t\tRaycast: defineComponentFromSchema(RaycastSchema.RaycastSchema, RaycastSchema.COMPONENT_ID),\n\t\tRaycastResult: defineComponentFromSchema(RaycastResultSchema.RaycastResultSchema, RaycastResultSchema.COMPONENT_ID),\n\t\tTextShape: defineComponentFromSchema(TextShapeSchema.TextShapeSchema, TextShapeSchema.COMPONENT_ID),\n\t\tUiBackground: defineComponentFromSchema(UiBackgroundSchema.UiBackgroundSchema, UiBackgroundSchema.COMPONENT_ID),\n\t\tUiText: defineComponentFromSchema(UiTextSchema.UiTextSchema, UiTextSchema.COMPONENT_ID),\n\t\tUiTransform: defineComponentFromSchema(UiTransformSchema.UiTransformSchema, UiTransformSchema.COMPONENT_ID),\n\t\tVisibilityComponent: defineComponentFromSchema(VisibilityComponentSchema.VisibilityComponentSchema, VisibilityComponentSchema.COMPONENT_ID),\n }\n}\n","import type { ISchema } from '../../schemas/ISchema'\nimport { Entity } from '../../engine/entity'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ComponentDefinition, IEngine } from '../../engine'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1\n\n/**\n * @public\n */\nexport type TransformType = {\n position: { x: number; y: number; z: number }\n rotation: { x: number; y: number; z: number; w: number }\n scale: { x: number; y: number; z: number }\n parent?: Entity\n}\n\n/** @internal */\nexport const TRANSFORM_LENGTH = 44\n\n/** @internal */\nexport const TransformSchema: ISchema<TransformType> = {\n serialize(value: TransformType, builder: ByteBuffer): void {\n const ptr = builder.incrementWriteOffset(TRANSFORM_LENGTH)\n builder.setFloat32(ptr, value.position.x)\n builder.setFloat32(ptr + 4, value.position.y)\n builder.setFloat32(ptr + 8, value.position.z)\n builder.setFloat32(ptr + 12, value.rotation.x)\n builder.setFloat32(ptr + 16, value.rotation.y)\n builder.setFloat32(ptr + 20, value.rotation.z)\n builder.setFloat32(ptr + 24, value.rotation.w)\n builder.setFloat32(ptr + 28, value.scale.x)\n builder.setFloat32(ptr + 32, value.scale.y)\n builder.setFloat32(ptr + 36, value.scale.z)\n builder.setUint32(ptr + 40, value.parent || 0)\n },\n deserialize(reader: ByteBuffer): TransformType {\n const ptr = reader.incrementReadOffset(TRANSFORM_LENGTH)\n return {\n position: {\n x: reader.getFloat32(ptr),\n y: reader.getFloat32(ptr + 4),\n z: reader.getFloat32(ptr + 8)\n },\n rotation: {\n x: reader.getFloat32(ptr + 12),\n y: reader.getFloat32(ptr + 16),\n z: reader.getFloat32(ptr + 20),\n w: reader.getFloat32(ptr + 24)\n },\n scale: {\n x: reader.getFloat32(ptr + 28),\n y: reader.getFloat32(ptr + 32),\n z: reader.getFloat32(ptr + 36)\n },\n parent: reader.getUint32(ptr + 40) as Entity\n }\n },\n create(): TransformType {\n return {\n position: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n rotation: { x: 0, y: 0, z: 0, w: 1 }\n }\n }\n}\n\nexport function defineTransformComponent({\n defineComponentFromSchema\n}: Pick<IEngine, 'defineComponentFromSchema'>): ComponentDefinition<\n ISchema<TransformType>,\n Partial<TransformType>\n> {\n return defineComponentFromSchema(TransformSchema, COMPONENT_ID)\n}\n","import { ComponentDefinition, Entity, IEngine, ISchema } from '../../engine'\nimport {\n PBAnimationState,\n PBAnimator\n} from '../generated/pb/decentraland/sdk/components/animator.gen'\nimport * as AnimatorSchema from './../generated/Animator.gen'\n\n/**\n * @public\n */\nexport type AnimatorComponentDefinition = ComponentDefinition<\n ISchema<PBAnimator>,\n PBAnimator\n>\n\n/**\n * @public\n */\nexport interface AnimatorComponentDefinitionExtended\n extends AnimatorComponentDefinition {\n /**\n * @public\n *\n * Get a `mutable` version of animator clip\n * @param entity - entity with Animator component\n * @param name - the field `name` of the component\n * @returns the clip or fails if it isn't found\n */\n getClip(entity: Entity, name: string): PBAnimationState\n\n /**\n * @public\n *\n * Get a `mutable` version of animator clip\n * @param entity - entity with Animator component\n * @param name - the field `name` of the component\n * @returns the clip or null if it isn't found\n */\n getClipOrNull(entity: Entity, name: string): PBAnimationState | null\n\n /**\n * @public\n *\n * Set playing=true the animation `$name`\n * @param entity - entity with Animator component\n * @param name - animation name\n * @param resetCursor - the animation starts at 0 or continues from the current cursor position\n * @returns true in successful playing, false if it doesn't find the Animator or clip\n */\n playSingleAnimation(\n entity: Entity,\n name: string,\n resetCursor?: boolean\n ): boolean\n\n /**\n * @public\n *\n * Set playing=false all animations\n * @param entity - entity with Animator component\n * @param resetCursor - the animation stops at 0 or at the current cursor position\n * @returns true in successful playing, false if it doesn't find the Animator\n */\n stopAllAnimations(entity: Entity, resetCursor?: boolean): boolean\n}\n\nexport function defineAnimatorComponent(\n engine: Pick<IEngine, 'getComponent'>\n): AnimatorComponentDefinitionExtended {\n const Animator = engine.getComponent<typeof AnimatorSchema.AnimatorSchema>(\n AnimatorSchema.COMPONENT_ID\n )\n\n /**\n * @returns The tuple [animator, clip]\n */\n function getClipAndAnimator(\n entity: Entity,\n name: string\n ): [PBAnimator | null, PBAnimationState | null] {\n const anim = Animator.getMutableOrNull(entity)\n if (!anim) return [null, null]\n\n const state = anim.states.find(\n (item) => item.name === name || item.clip === name\n )\n if (!state) return [anim, null]\n return [anim, state]\n }\n\n return {\n ...Animator,\n getClipOrNull(entity: Entity, name: string): PBAnimationState | null {\n const [_, state] = getClipAndAnimator(entity, name)\n return state\n },\n getClip(entity: Entity, name: string): PBAnimationState {\n const [animator, state] = getClipAndAnimator(entity, name)\n\n if (!animator) {\n throw new Error(`There is no Animator found in the entity ${entity}`)\n }\n\n if (!state) {\n throw new Error(\n `The Animator component of ${entity} has no the state ${name}`\n )\n }\n\n return state\n },\n playSingleAnimation(\n entity: Entity,\n name: string,\n shouldReset: boolean = true\n ): boolean {\n const [animator, state] = getClipAndAnimator(entity, name)\n if (!animator || !state) return false\n\n // Reset all other animations\n for (const state of animator.states) {\n state.playing = false\n state.shouldReset = true\n }\n\n state.playing = true\n state.shouldReset = shouldReset\n\n return true\n },\n\n stopAllAnimations(entity: Entity, resetCursor: boolean = true): boolean {\n // Get the mutable to modifying\n const animator = Animator.getMutableOrNull(entity)\n if (!animator) return false\n\n // Reset all other animations\n for (const state of animator.states) {\n state.playing = false\n state.shouldReset = resetCursor\n }\n\n return true\n }\n }\n}\n","import { ComponentDefinition, Entity, IEngine, ISchema } from '../../engine'\nimport { ColliderLayer, PBMeshCollider } from '../generated/index.gen'\nimport * as MeshColliderSchema from './../generated/MeshCollider.gen'\n\n/**\n * @public\n */\nexport type MeshColliderComponentDefinition = ComponentDefinition<\n ISchema<PBMeshCollider>,\n PBMeshCollider\n>\n\n/**\n * @public\n */\nexport interface MeshColliderComponentDefinitionExtended\n extends MeshColliderComponentDefinition {\n /**\n * @public\n * Set a box in the MeshCollider component\n * @param entity - entity to create or replace the MeshCollider component\n * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer\n */\n setBox(entity: Entity, colliderLayers?: ColliderLayer | ColliderLayer[]): void\n\n /**\n * @public\n * Set a plane in the MeshCollider component\n * @param entity - entity to create or replace the MeshCollider component\n * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer\n */\n setPlane(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void\n\n /**\n * @public\n * Set a cylinder in the MeshCollider component\n * @param entity - entity to create or replace the MeshCollider component\n * @param radiusBottom - radius of bottom of cylinder\n * @param radiusTop - radius of top of cylinder\n * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer\n */\n setCylinder(\n entity: Entity,\n radiusBottom?: number,\n radiusTop?: number,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void\n\n /**\n * @public\n * Set a sphere in the MeshCollider component\n * @param entity - entity to create or replace the MeshCollider component\n * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer\n */\n setSphere(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void\n}\n\nexport function defineMeshColliderComponent(\n engine: Pick<IEngine, 'getComponent'>\n): MeshColliderComponentDefinitionExtended {\n const MeshCollider = engine.getComponent<\n typeof MeshColliderSchema.MeshColliderSchema\n >(MeshColliderSchema.COMPONENT_ID)\n\n function getCollisionMask(layers?: ColliderLayer | ColliderLayer[]) {\n if (Array.isArray(layers)) {\n return layers\n .map((item) => item as number)\n .reduce((prev, item) => prev | item, 0)\n } else if (layers) {\n return layers\n }\n }\n\n return {\n ...MeshCollider,\n setBox(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void {\n MeshCollider.createOrReplace(entity, {\n mesh: { $case: 'box', box: {} },\n collisionMask: getCollisionMask(colliderLayers)\n })\n },\n setPlane(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void {\n MeshCollider.createOrReplace(entity, {\n mesh: { $case: 'plane', plane: {} },\n collisionMask: getCollisionMask(colliderLayers)\n })\n },\n setCylinder(\n entity: Entity,\n radiusBottom?: number,\n radiusTop?: number,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void {\n MeshCollider.createOrReplace(entity, {\n mesh: { $case: 'cylinder', cylinder: { radiusBottom, radiusTop } },\n collisionMask: getCollisionMask(colliderLayers)\n })\n },\n setSphere(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void {\n MeshCollider.createOrReplace(entity, {\n mesh: { $case: 'sphere', sphere: {} },\n collisionMask: getCollisionMask(colliderLayers)\n })\n }\n }\n}\n","import { ComponentDefinition, Entity, IEngine, ISchema } from '../../engine'\nimport { PBMeshRenderer } from '../generated/index.gen'\nimport * as MeshRendererSchema from './../generated/MeshRenderer.gen'\n\n/**\n * @public\n */\nexport type MeshRendererComponentDefinition = ComponentDefinition<\n ISchema<PBMeshRenderer>,\n PBMeshRenderer\n>\n/**\n * @public\n */\nexport interface MeshRendererComponentDefinitionExtended\n extends MeshRendererComponentDefinition {\n /**\n * @public\n * Set a box in the MeshRenderer component\n * @param entity - entity to create or replace the MeshRenderer component\n * @param uvs - uvs coord\n */\n setBox(entity: Entity, uvs?: number[]): void\n\n /**\n * @public\n * Set a plane in the MeshRenderer component\n * @param entity - entity to create or replace the MeshRenderer component\n * @param uvs - uvs coord\n */\n setPlane(entity: Entity, uvs?: number[]): void\n\n /**\n * @public\n * Set a cylinder in the MeshRenderer component\n * @param entity - entity to create or replace the MeshRenderer component\n * @param radiusBottom -\n * @param radiusTop -\n */\n setCylinder(entity: Entity, radiusBottom?: number, radiusTop?: number): void\n\n /**\n * @public\n * Set a sphere in the MeshRenderer component\n * @param entity - entity to create or replace the MeshRenderer component\n */\n setSphere(entity: Entity): void\n}\n\nexport function defineMeshRendererComponent(\n engine: Pick<IEngine, 'getComponent'>\n): MeshRendererComponentDefinitionExtended {\n const MeshRenderer = engine.getComponent<\n typeof MeshRendererSchema.MeshRendererSchema\n >(MeshRendererSchema.COMPONENT_ID)\n\n return {\n ...MeshRenderer,\n setBox(entity: Entity, uvs?: number[]): void {\n MeshRenderer.createOrReplace(entity, {\n mesh: { $case: 'box', box: { uvs: uvs || [] } }\n })\n },\n setPlane(entity: Entity, uvs?: number[]): void {\n MeshRenderer.createOrReplace(entity, {\n mesh: { $case: 'plane', plane: { uvs: uvs || [] } }\n })\n },\n setCylinder(entity: Entity, radiusBottom: number, radiusTop: number): void {\n MeshRenderer.createOrReplace(entity, {\n mesh: { $case: 'cylinder', cylinder: { radiusBottom, radiusTop } }\n })\n },\n setSphere(entity: Entity): void {\n MeshRenderer.createOrReplace(entity, {\n mesh: { $case: 'sphere', sphere: {} }\n })\n }\n }\n}\n","import { ComponentDefinition, Entity, IEngine, ISchema } from '../../engine'\nimport {\n PBMaterial,\n PBMaterial_PbrMaterial,\n PBMaterial_UnlitMaterial\n} from '../generated/index.gen'\nimport * as MaterialSchema from '../generated/Material.gen'\nimport { AvatarTexture, Texture, TextureUnion } from '../generated/types.gen'\n\n/**\n * @public\n */\nexport type MaterialComponentDefinition = ComponentDefinition<\n ISchema<PBMaterial>,\n PBMaterial\n>\n\n/**\n * @public\n */\nexport type TextureHelper = {\n /**\n * @returns a common texture with a source file\n */\n Common: (texture: Texture) => TextureUnion\n\n /**\n * @returns the avatar texture of userId specified\n */\n Avatar: (avatarTexture: AvatarTexture) => TextureUnion\n}\n\n/**\n * @public\n */\nexport interface MaterialComponentDefinitionExtended\n extends MaterialComponentDefinition {\n /**\n * Texture helpers with constructor\n */\n Texture: TextureHelper\n\n /**\n * Create or replace the component Material in the entity specified\n * @param entity - the entity to link the component\n * @param material - the Unlit data for this material\n */\n setBasicMaterial: (entity: Entity, material: PBMaterial_UnlitMaterial) => void\n\n /**\n * Create or replace the component Material in the entity specified\n * @param entity - the entity to link the component\n * @param material - the PBR data for this material\n */\n setPbrMaterial: (entity: Entity, material: PBMaterial_PbrMaterial) => void\n}\n\nconst TextureHelper: TextureHelper = {\n Common(texture: Texture) {\n return {\n tex: {\n $case: 'texture',\n texture\n }\n }\n },\n Avatar(avatarTexture: AvatarTexture) {\n return {\n tex: {\n $case: 'avatarTexture',\n avatarTexture\n }\n }\n }\n}\n\nexport function defineMaterialComponent(\n engine: Pick<IEngine, 'getComponent'>\n): MaterialComponentDefinitionExtended {\n const Material = engine.getComponent<typeof MaterialSchema.MaterialSchema>(\n MaterialSchema.COMPONENT_ID\n )\n\n return {\n ...Material,\n Texture: TextureHelper,\n setBasicMaterial(entity: Entity, material: PBMaterial_UnlitMaterial) {\n Material.createOrReplace(entity, {\n material: {\n $case: 'unlit',\n unlit: material\n }\n })\n },\n setPbrMaterial(entity: Entity, material: PBMaterial_PbrMaterial) {\n Material.createOrReplace(entity, {\n material: {\n $case: 'pbr',\n pbr: material\n }\n })\n }\n }\n}\n","import { IEngine } from '../engine'\nimport { defineLibraryComponents } from './generated/index.gen'\nimport { defineTransformComponent } from './legacy/Transform'\nimport { defineAnimatorComponent } from './extended/Animator'\nimport { defineMeshColliderComponent } from './extended/MeshCollider'\nimport { defineMeshRendererComponent } from './extended/MeshRenderer'\nimport { defineMaterialComponent } from './extended/Material'\n\nexport function defineSdkComponents(\n engine: Pick<IEngine, 'defineComponentFromSchema' | 'getComponent'>\n) {\n const autogeneratedComponents = defineLibraryComponents(engine)\n return {\n ...autogeneratedComponents,\n Material: defineMaterialComponent(engine),\n Animator: defineAnimatorComponent(engine),\n MeshRenderer: defineMeshRendererComponent(engine),\n MeshCollider: defineMeshColliderComponent(engine),\n Transform: defineTransformComponent(engine)\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { ISchema } from './ISchema'\n\n/**\n * @public\n */\nexport function IArray<T>(type: ISchema<T>): ISchema<Array<T>> {\n return {\n serialize(value: Array<T>, builder: ByteBuffer): void {\n builder.writeUint32(value.length)\n for (const item of value) {\n type.serialize(item, builder)\n }\n },\n deserialize(reader: ByteBuffer): Array<T> {\n const newArray: Array<T> = []\n const length = reader.readUint32()\n for (let index = 0; index < length; index++) {\n newArray.push(type.deserialize(reader))\n }\n return newArray\n },\n create() {\n return []\n }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const Bool: ISchema<boolean> = {\n serialize(value: boolean, builder: ByteBuffer): void {\n builder.writeInt8(value ? 1 : 0)\n },\n deserialize(reader: ByteBuffer): boolean {\n return reader.readInt8() === 1\n },\n create() {\n return false\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport function IEnum<T>(type: ISchema<any>): ISchema<T> {\n return {\n serialize(value: T, builder: ByteBuffer): void {\n type.serialize(value, builder)\n },\n deserialize(reader: ByteBuffer): T {\n return type.deserialize(reader)\n },\n create() {\n return type.create()\n }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const Float32: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeFloat32(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readFloat32()\n },\n create() {\n return 0.0\n }\n}\n\n/**\n * @public\n */\nexport const Float64: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeFloat64(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readFloat64()\n },\n create() {\n return 0.0\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const Int64: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt64(BigInt(value))\n },\n deserialize(reader: ByteBuffer): number {\n return Number(reader.readInt64())\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int32: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt32(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt32()\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int16: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt16(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt16()\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int8: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt8(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt8()\n },\n create() {\n return 0\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const FlatString: ISchema<string> = {\n serialize(value: string, builder: ByteBuffer): void {\n builder.writeBuffer(new TextEncoder().encode(value))\n },\n deserialize(reader: ByteBuffer): string {\n return new TextDecoder().decode(reader.readBuffer())\n },\n create() {\n return ''\n }\n}\n\n/**\n * @public\n */\nexport const EcsString = FlatString\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport type Color3Type = { r: number; g: number; b: number }\n\n/**\n * @public\n */\nexport const Color3Schema: ISchema<Color3Type> = {\n serialize(value: Color3Type, builder: ByteBuffer): void {\n builder.writeFloat32(value.r)\n builder.writeFloat32(value.g)\n builder.writeFloat32(value.b)\n },\n deserialize(reader: ByteBuffer): Color3Type {\n return {\n r: reader.readFloat32(),\n g: reader.readFloat32(),\n b: reader.readFloat32()\n }\n },\n create() {\n return { r: 0, g: 0, b: 0 }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport type Color4Type = { r: number; g: number; b: number; a: number }\n\n/**\n * @public\n */\nexport const Color4Schema: ISchema<Color4Type> = {\n serialize(value: Color4Type, builder: ByteBuffer): void {\n builder.writeFloat32(value.r)\n builder.writeFloat32(value.g)\n builder.writeFloat32(value.b)\n builder.writeFloat32(value.a)\n },\n deserialize(reader: ByteBuffer): Color4Type {\n return {\n r: reader.readFloat32(),\n g: reader.readFloat32(),\n b: reader.readFloat32(),\n a: reader.readFloat32()\n }\n },\n create() {\n return { r: 0, g: 0, b: 0, a: 0 }\n }\n}\n","import { Entity } from '../../engine'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const EntitySchema: ISchema<Entity> = {\n serialize(value: Entity, builder: ByteBuffer): void {\n builder.writeInt32(value)\n },\n deserialize(reader: ByteBuffer): Entity {\n return reader.readInt32() as Entity\n },\n create() {\n return 0 as Entity\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport type QuaternionType = { x: number; y: number; z: number; w: number }\n\n/**\n * @public\n */\nexport const QuaternionSchema: ISchema<QuaternionType> = {\n serialize(value: QuaternionType, builder: ByteBuffer): void {\n builder.writeFloat32(value.x)\n builder.writeFloat32(value.y)\n builder.writeFloat32(value.z)\n builder.writeFloat32(value.w)\n },\n deserialize(reader: ByteBuffer): QuaternionType {\n return {\n x: reader.readFloat32(),\n y: reader.readFloat32(),\n z: reader.readFloat32(),\n w: reader.readFloat32()\n }\n },\n create() {\n return { x: 0, y: 0, z: 0, w: 0 }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport type Vector3Type = { x: number; y: number; z: number }\n\n/**\n * @public\n */\nexport const Vector3Schema: ISchema<Vector3Type> = {\n serialize(value: Vector3Type, builder: ByteBuffer): void {\n builder.writeFloat32(value.x)\n builder.writeFloat32(value.y)\n builder.writeFloat32(value.z)\n },\n deserialize(reader: ByteBuffer): Vector3Type {\n return {\n x: reader.readFloat32(),\n y: reader.readFloat32(),\n z: reader.readFloat32()\n }\n },\n create() {\n return { x: 0, y: 0, z: 0 }\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { ISchema } from './ISchema'\nimport { ToOptional } from './typing'\n\n/**\n * @public\n */\nexport interface Spec {\n [key: string]: ISchema\n}\n\n/**\n * @public\n */\nexport type Result<T extends Spec> = ToOptional<{\n [K in keyof T]: T[K] extends ISchema\n ? ReturnType<T[K]['deserialize']>\n : T[K] extends Spec\n ? Result<T[K]>\n : never\n}>\n\nexport type MapSchemaType<T extends Spec> = ISchema<Result<T>>\n\n/**\n * @public\n */\nexport function IMap<T extends Spec>(spec: T): ISchema<Result<T>> {\n return {\n serialize(value: Result<T>, builder: ByteBuffer): void {\n for (const key in spec) {\n // TODO: as any\n spec[key].serialize((value as any)[key], builder)\n }\n },\n deserialize(reader: ByteBuffer): Result<T> {\n const newValue: Result<T> = {} as any\n for (const key in spec) {\n // TODO: as any\n ;(newValue as any)[key] = spec[key].deserialize(reader)\n }\n return newValue\n },\n create() {\n const newValue: Result<T> = {} as any\n for (const key in spec) {\n // TODO: as any\n ;(newValue as any)[key] = spec[key].create()\n }\n return newValue\n }\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { ISchema } from './ISchema'\n\n/**\n * @public\n */\nexport function IOptional<T>(spec: ISchema<T>): ISchema<T | undefined> {\n return {\n serialize(value: T | undefined, builder: ByteBuffer): void {\n if (value) {\n builder.writeInt8(1)\n spec.serialize(value, builder)\n } else {\n builder.writeInt8(0)\n }\n },\n deserialize(reader: ByteBuffer): T | undefined {\n const exists = reader.readInt8()\n if (exists) {\n return spec.deserialize(reader)\n }\n },\n create() {\n return undefined\n }\n }\n}\n","import { IArray } from './Array'\nimport { Bool } from './basic/Boolean'\nimport { IEnum } from './basic/Enum'\nimport { Float32, Float64 } from './basic/Float'\nimport { Int16, Int32, Int8, Int64 as iInt64 } from './basic/Integer'\nimport { EcsString } from './basic/String'\nimport { Color3Schema } from './custom/Color3'\nimport { Color4Schema } from './custom/Color4'\nimport { EntitySchema } from './custom/Entity'\nimport { QuaternionSchema } from './custom/Quaternion'\nimport { Vector3Schema } from './custom/Vector3'\nimport { ISchema } from './ISchema'\nimport { IMap } from './Map'\nimport { IOptional } from './Optional'\n\nexport type { IOptional } from './Optional'\nexport type { IMap } from './Map'\nexport type { IArray } from './Array'\nexport type { IEnum } from './basic/Enum'\nexport type { Vector3Type } from './custom/Vector3'\nexport type { QuaternionType } from './custom/Quaternion'\nexport type { Color3Type } from './custom/Color3'\nexport type { Color4Type } from './custom/Color4'\n\n/**\n * @public\n */\nexport namespace Schemas {\n export type SchemaType = ISchema\n\n export const Boolean = Bool\n\n export const String = EcsString\n\n export const Float = Float32\n export const Double = Float64\n\n export const Byte = Int8\n export const Short = Int16\n export const Int = Int32\n export const Int64 = iInt64\n\n export const Number = Float32\n\n export const Vector3 = Vector3Schema\n export const Quaternion = QuaternionSchema\n export const Color3 = Color3Schema\n export const Color4 = Color4Schema\n\n export const Entity = EntitySchema\n\n export const Enum = IEnum\n export const Array = IArray\n export const Map = IMap\n export const Optional = IOptional\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0IG9mIHRoZSBtZXNzYWdlIHRoYXQncyBiZWluZyB0cmFuc2ZlcmVkIGJldHdlZW4gY2xpZW50cy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZTxUID0gdW5rbm93bj4gPSB7XG4gIGtleTE6IG51bWJlclxuICBrZXkyOiBudW1iZXJcbiAgdGltZXN0YW1wOiBudW1iZXJcbiAgZGF0YTogVCB8IG51bGxcbn1cblxuLyoqXG4gKiBQYXlsb2FkIHRoYXQgaXRzIGJlaW5nIHN0b3JlZCBpbiB0aGUgc3RhdGUuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFBheWxvYWQ8VCA9IHVua25vd24+ID0ge1xuICB0aW1lc3RhbXA6IG51bWJlclxuICBkYXRhOiBUIHwgbnVsbFxufVxuXG4vKipcbiAqIExvY2FsIHN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFN0YXRlPFQgPSB1bmtub3duPiA9IE1hcDxudW1iZXIsIE1hcDxudW1iZXIsIFBheWxvYWQ8VD4gfCBudWxsPj5cblxuLyoqXG4gKiBDUkRUIHJldHVybiB0eXBlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENSRFQ8VCA9IHVua25vd24+ID0ge1xuICBjcmVhdGVFdmVudChrZXkxOiBudW1iZXIsIGtleTI6IG51bWJlciwgZGF0YTogVCB8IG51bGwpOiBNZXNzYWdlPFQ+XG4gIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2U8VD4pOiBNZXNzYWdlPFQ+XG4gIGdldFN0YXRlKCk6IFN0YXRlPFQ+XG59XG4iXX0=","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crdtProtocol = exports.stateIterator = exports.sameData = void 0;\n__exportStar(require(\"./types\"), exports);\nconst globalBuffer = globalThis.Buffer;\n/**\n * Compare raw data.\n * @internal\n */\nfunction sameData(a, b) {\n // At reference level\n if (a === b)\n return true;\n if (a instanceof Uint8Array && b instanceof Uint8Array) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n if (globalBuffer) {\n if (a instanceof globalBuffer && b instanceof globalBuffer) {\n // Deep level\n return a.equals(b);\n }\n }\n return false;\n}\nexports.sameData = sameData;\n/**\n * State iterator\n * @internal\n */\nfunction* stateIterator(state) {\n for (const [key1, value1] of state.entries()) {\n for (const [key2, value2] of value1.entries()) {\n yield [key1, key2, value2];\n }\n }\n}\nexports.stateIterator = stateIterator;\n/**\n * @public\n * CRDT protocol.\n * Stores the latest state, and decides whenever we have\n * to process and store the new data in case its an update, or\n * to discard and send our local value cause remote it's outdated.\n */\nfunction crdtProtocol() {\n /**\n * Local state where we store the latest lamport timestamp\n * and the raw data value\n * @internal\n */\n const state = new Map();\n /**\n * We should call this fn in order to update the state\n * @internal\n */\n function updateState(key1, key2, data, remoteTimestamp) {\n const key1Value = state.get(key1);\n const timestamp = Math.max(remoteTimestamp, key1Value?.get(key2)?.timestamp || 0);\n if (key1Value) {\n key1Value.set(key2, { timestamp, data });\n }\n else {\n const newKey1Value = new Map();\n newKey1Value.set(key2, { timestamp, data });\n state.set(key1, newKey1Value);\n }\n return { timestamp, data };\n }\n /**\n * Create an event for the specified key and store the new data and\n * lamport timestmap incremented by one in the state.\n * @public\n */\n function createEvent(key1, key2, data) {\n // Increment the timestamp\n const timestamp = (state.get(key1)?.get(key2)?.timestamp || 0) + 1;\n updateState(key1, key2, data, timestamp);\n return { key1, key2, data, timestamp };\n }\n /**\n * Process the received message only if the lamport number recieved is higher\n * than the stored one. If its lower, we spread it to the network to correct the peer.\n * If they are equal, the bigger raw data wins.\n \n * Returns the recieved data if the lamport number was bigger than ours.\n * If it was an outdated message, then we return void\n * @public\n */\n function processMessage(message) {\n const { key1, key2, data, timestamp } = message;\n const current = state.get(key1)?.get(key2);\n // The received message is > than our current value, update our state.\n if (!current || current.timestamp < timestamp) {\n updateState(key1, key2, data, timestamp);\n return message;\n }\n // Outdated Message. Resend our state message through the wire.\n if (current.timestamp > timestamp) {\n return {\n key1,\n key2,\n data: current.data,\n timestamp: current.timestamp\n };\n }\n // Same data, same timestamp. Weirdo echo message.\n if (sameData(current.data, data)) {\n return message;\n }\n // Race condition, same timestamp diff data.\n function compareData(current, data) {\n return current > data;\n }\n if (compareData(current.data, data)) {\n return {\n key1,\n key2,\n data: current.data,\n timestamp: current.timestamp\n };\n }\n updateState(key1, key2, data, timestamp).data;\n return message;\n }\n /**\n * Returns the current state\n * @public\n */\n function getState() {\n return state;\n }\n return {\n createEvent,\n processMessage,\n getState\n };\n}\nexports.crdtProtocol = crdtProtocol;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLDBDQUF1QjtBQUV2QixNQUFNLFlBQVksR0FBSSxVQUFrQixDQUFDLE1BQU0sQ0FBQTtBQUUvQzs7O0dBR0c7QUFDSCxTQUFnQixRQUFRLENBQUksQ0FBSSxFQUFFLENBQUk7SUFDcEMscUJBQXFCO0lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUV4QixJQUFJLENBQUMsWUFBWSxVQUFVLElBQUksQ0FBQyxZQUFZLFVBQVUsRUFBRTtRQUN0RCxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRTtZQUNqQyxPQUFPLEtBQUssQ0FBQTtTQUNiO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQixPQUFPLEtBQUssQ0FBQTthQUNiO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQTtLQUNaO0lBRUQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsSUFBSSxDQUFDLFlBQVksWUFBWSxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUU7WUFDMUQsYUFBYTtZQUNiLE9BQVEsQ0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUM1QjtLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBekJELDRCQXlCQztBQUVEOzs7R0FHRztBQUNILFFBQWUsQ0FBQyxDQUFDLGFBQWEsQ0FDNUIsS0FBZTtJQUVmLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7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QUcsSUFBSyxDQUFBO1FBQ3pCLENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ25DLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixJQUFJO2dCQUNKLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2FBQzdCLENBQUE7U0FDRjtRQUNELFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDN0MsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsUUFBUTtRQUNmLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELE9BQU87UUFDTCxXQUFXO1FBQ1gsY0FBYztRQUNkLFFBQVE7S0FDVCxDQUFBO0FBQ0gsQ0FBQztBQWhIRCxvQ0FnSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDUkRULCBNZXNzYWdlLCBQYXlsb2FkLCBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBnbG9iYWxCdWZmZXIgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLkJ1ZmZlclxuXG4vKipcbiAqIENvbXBhcmUgcmF3IGRhdGEuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbWVEYXRhPFQ+KGE6IFQsIGI6IFQpOiBib29sZWFuIHtcbiAgLy8gQXQgcmVmZXJlbmNlIGxldmVsXG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZVxuXG4gIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBiIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIGlmIChhLmJ5dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoZ2xvYmFsQnVmZmVyKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBnbG9iYWxCdWZmZXIgJiYgYiBpbnN0YW5jZW9mIGdsb2JhbEJ1ZmZlcikge1xuICAgICAgLy8gRGVlcCBsZXZlbFxuICAgICAgcmV0dXJuIChhIGFzIGFueSkuZXF1YWxzKGIpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogU3RhdGUgaXRlcmF0b3JcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24qIHN0YXRlSXRlcmF0b3I8VD4oXG4gIHN0YXRlOiBTdGF0ZTxUPlxuKTogSXRlcmFibGVJdGVyYXRvcjxbbnVtYmVyLCBudW1iZXIsIFBheWxvYWQ8VD4gfCBudWxsXT4ge1xuICBmb3IgKGNvbnN0IFtrZXkxLCB2YWx1ZTFdIG9mIHN0YXRlLmVudHJpZXMoKSkge1xuICAgIGZvciAoY29uc3QgW2tleTIsIHZhbHVlMl0gb2YgdmFsdWUxLmVudHJpZXMoKSkge1xuICAgICAgeWllbGQgW2tleTEsIGtleTIsIHZhbHVlMl1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDUkRUIHByb3RvY29sLlxuICogU3RvcmVzIHRoZSBsYXRlc3Qgc3RhdGUsIGFuZCBkZWNpZGVzIHdoZW5ldmVyIHdlIGhhdmVcbiAqIHRvIHByb2Nlc3MgYW5kIHN0b3JlIHRoZSBuZXcgZGF0YSBpbiBjYXNlIGl0cyBhbiB1cGRhdGUsIG9yXG4gKiB0byBkaXNjYXJkIGFuZCBzZW5kIG91ciBsb2NhbCB2YWx1ZSBjYXVzZSByZW1vdGUgaXQncyBvdXRkYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZHRQcm90b2NvbDxcbiAgVCBleHRlbmRzIG51bWJlciB8IFVpbnQ4QXJyYXkgfCBzdHJpbmdcbj4oKTogQ1JEVDxUPiB7XG4gIC8qKlxuICAgKiBMb2NhbCBzdGF0ZSB3aGVyZSB3ZSBzdG9yZSB0aGUgbGF0ZXN0IGxhbXBvcnQgdGltZXN0YW1wXG4gICAqIGFuZCB0aGUgcmF3IGRhdGEgdmFsdWVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdCBzdGF0ZTogU3RhdGU8VD4gPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogV2Ugc2hvdWxkIGNhbGwgdGhpcyBmbiBpbiBvcmRlciB0byB1cGRhdGUgdGhlIHN0YXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlU3RhdGUoXG4gICAga2V5MTogbnVtYmVyLFxuICAgIGtleTI6IG51bWJlcixcbiAgICBkYXRhOiBUIHwgbnVsbCxcbiAgICByZW1vdGVUaW1lc3RhbXA6IG51bWJlclxuICApOiBQYXlsb2FkPFQ+IHtcbiAgICBjb25zdCBrZXkxVmFsdWUgPSBzdGF0ZS5nZXQoa2V5MSlcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLm1heChcbiAgICAgIHJlbW90ZVRpbWVzdGFtcCxcbiAgICAgIGtleTFWYWx1ZT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMFxuICAgIClcbiAgICBpZiAoa2V5MVZhbHVlKSB7XG4gICAgICBrZXkxVmFsdWUuc2V0KGtleTIsIHsgdGltZXN0YW1wLCBkYXRhIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld0tleTFWYWx1ZSA9IG5ldyBNYXAoKVxuICAgICAgbmV3S2V5MVZhbHVlLnNldChrZXkyLCB7IHRpbWVzdGFtcCwgZGF0YSB9KVxuICAgICAgc3RhdGUuc2V0KGtleTEsIG5ld0tleTFWYWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHsgdGltZXN0YW1wLCBkYXRhIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXZlbnQgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGFuZCBzdG9yZSB0aGUgbmV3IGRhdGEgYW5kXG4gICAqIGxhbXBvcnQgdGltZXN0bWFwIGluY3JlbWVudGVkIGJ5IG9uZSBpbiB0aGUgc3RhdGUuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KGtleTE6IG51bWJlciwga2V5MjogbnVtYmVyLCBkYXRhOiBUIHwgbnVsbCk6IE1lc3NhZ2U8VD4ge1xuICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXN0YW1wXG4gICAgY29uc3QgdGltZXN0YW1wID0gKHN0YXRlLmdldChrZXkxKT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMCkgKyAxXG4gICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKVxuXG4gICAgcmV0dXJuIHsga2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoZSByZWNlaXZlZCBtZXNzYWdlIG9ubHkgaWYgdGhlIGxhbXBvcnQgbnVtYmVyIHJlY2lldmVkIGlzIGhpZ2hlclxuICAgKiB0aGFuIHRoZSBzdG9yZWQgb25lLiBJZiBpdHMgbG93ZXIsIHdlIHNwcmVhZCBpdCB0byB0aGUgbmV0d29yayB0byBjb3JyZWN0IHRoZSBwZWVyLlxuICAgKiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIGJpZ2dlciByYXcgZGF0YSB3aW5zLlxuXG4gICAqIFJldHVybnMgdGhlIHJlY2lldmVkIGRhdGEgaWYgdGhlIGxhbXBvcnQgbnVtYmVyIHdhcyBiaWdnZXIgdGhhbiBvdXJzLlxuICAgKiBJZiBpdCB3YXMgYW4gb3V0ZGF0ZWQgbWVzc2FnZSwgdGhlbiB3ZSByZXR1cm4gdm9pZFxuICAgKiBAcHVibGljXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlPFQ+KTogTWVzc2FnZTxUPiB7XG4gICAgY29uc3QgeyBrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2VcbiAgICBjb25zdCBjdXJyZW50ID0gc3RhdGUuZ2V0KGtleTEpPy5nZXQoa2V5MilcblxuICAgIC8vIFRoZSByZWNlaXZlZCBtZXNzYWdlIGlzID4gdGhhbiBvdXIgY3VycmVudCB2YWx1ZSwgdXBkYXRlIG91ciBzdGF0ZS5cbiAgICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC50aW1lc3RhbXAgPCB0aW1lc3RhbXApIHtcbiAgICAgIHVwZGF0ZVN0YXRlKGtleTEsIGtleTIsIGRhdGEsIHRpbWVzdGFtcClcbiAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgfVxuXG4gICAgLy8gT3V0ZGF0ZWQgTWVzc2FnZS4gUmVzZW5kIG91ciBzdGF0ZSBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmUuXG4gICAgaWYgKGN1cnJlbnQudGltZXN0YW1wID4gdGltZXN0YW1wKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXkxLFxuICAgICAgICBrZXkyLFxuICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEsXG4gICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTYW1lIGRhdGEsIHNhbWUgdGltZXN0YW1wLiBXZWlyZG8gZWNobyBtZXNzYWdlLlxuICAgIGlmIChzYW1lRGF0YShjdXJyZW50LmRhdGEsIGRhdGEpKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZVxuICAgIH1cblxuICAgIC8vIFJhY2UgY29uZGl0aW9uLCBzYW1lIHRpbWVzdGFtcCBkaWZmIGRhdGEuXG4gICAgZnVuY3Rpb24gY29tcGFyZURhdGEoY3VycmVudDogVCB8IG51bGwsIGRhdGE6IFQgfCBudWxsKSB7XG4gICAgICByZXR1cm4gY3VycmVudCEgPiBkYXRhIVxuICAgIH1cblxuICAgIGlmIChjb21wYXJlRGF0YShjdXJyZW50LmRhdGEsIGRhdGEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXkxLFxuICAgICAgICBrZXkyLFxuICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEsXG4gICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKS5kYXRhXG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCk6IFN0YXRlPFQ+IHtcbiAgICByZXR1cm4gc3RhdGVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlRXZlbnQsXG4gICAgcHJvY2Vzc01lc3NhZ2UsXG4gICAgZ2V0U3RhdGVcbiAgfVxufVxuIl19","/**\n * Take the max between currentSize and intendedSize and then plus 1024. Then,\n * find the next nearer multiple of 1024.\n * @param currentSize - number\n * @param intendedSize - number\n * @returns the calculated number\n */\nfunction getNextSize(currentSize: number, intendedSize: number) {\n const minNewSize = Math.max(currentSize, intendedSize) + 1024\n return Math.ceil(minNewSize / 1024) * 1024\n}\n\n/**\n * @param writing - writing option, see object specs.\n * @param reading - reading option, see object specs.\n * @param initialCapacity - Initial capacity of buffer to allocate, ignored if you use writing or reading options\n */\nexport interface CreateByteBufferOptions {\n /**\n * @param buffer - a buffer already allocated to read from there.\n * @param currentOffset - set the cursor where begins to read. Default 0\n * @param length - delimite where the valid data ends. Default: buffer.length\n */\n reading?: {\n buffer: Uint8Array\n length?: number\n currentOffset: number\n }\n\n /**\n * @param buffer - a buffer already allocated to write there.\n * @param currentOffset - set the cursor to not start writing from the begin of it. Default 0\n */\n writing?: {\n buffer: Uint8Array\n currentOffset?: number\n }\n\n initialCapacity?: number\n}\n\nconst defaultInitialCapacity = 10240\n\n/**\n * ByteBuffer is a wrapper of DataView which also adds a read and write offset.\n * Also in a write operation it resizes the buffer is being used if it needs.\n *\n * - Use read and write function to generate or consume data.\n * - Use set and get only if you are sure that you're doing.\n */\nexport function createByteBuffer(\n options: CreateByteBufferOptions = {}\n): ByteBuffer {\n const initialROffset: number = options.reading?.currentOffset || 0\n let initialBuffer: Uint8Array | null = null\n let initialWOffset: number = 0\n\n if (options.writing) {\n initialBuffer = options.writing.buffer\n if (options.writing.currentOffset) {\n initialWOffset = options.writing.currentOffset\n }\n } else if (options.reading) {\n initialBuffer = options.reading.buffer\n initialWOffset = options.reading.length || options.reading.buffer.length\n } else {\n initialBuffer = new Uint8Array(\n options.initialCapacity || defaultInitialCapacity\n )\n }\n\n let buffer: Uint8Array = initialBuffer!\n let view: DataView = new DataView(buffer.buffer, buffer.byteOffset)\n let woffset: number = initialWOffset\n let roffset: number = initialROffset\n\n /**\n * Increement the write offset and resize the buffer if it needs.\n */\n const woAdd = (amount: number) => {\n if (woffset + amount > buffer.byteLength) {\n const newsize = getNextSize(buffer.byteLength, woffset + amount)\n const newBuffer = new Uint8Array(newsize)\n newBuffer.set(buffer)\n buffer = newBuffer\n view = new DataView(buffer.buffer)\n }\n\n woffset += amount\n return woffset - amount\n }\n\n /**\n * Increment the read offset and throw an error if it's trying to read\n * outside the bounds.\n */\n const roAdd = (amount: number) => {\n if (roffset + amount > woffset) {\n throw new Error('Outside of the bounds of writen data.')\n }\n\n roffset += amount\n return roffset - amount\n }\n\n return {\n buffer(): Uint8Array {\n return buffer\n },\n bufferLength(): number {\n return buffer.length\n },\n resetBuffer(): void {\n roffset = 0\n woffset = 0\n },\n currentReadOffset(): number {\n return roffset\n },\n currentWriteOffset(): number {\n return woffset\n },\n incrementReadOffset(amount: number): number {\n return roAdd(amount)\n },\n remainingBytes(): number {\n return woffset - roffset\n },\n readFloat32(): number {\n return view.getFloat32(roAdd(4))\n },\n readFloat64(): number {\n return view.getFloat64(roAdd(8))\n },\n readInt8(): number {\n return view.getInt8(roAdd(1))\n },\n readInt16(): number {\n return view.getInt16(roAdd(2))\n },\n readInt32(): number {\n return view.getInt32(roAdd(4))\n },\n readInt64(): bigint {\n return view.getBigInt64(roAdd(8))\n },\n readUint8(): number {\n return view.getUint8(roAdd(1))\n },\n readUint16(): number {\n return view.getUint16(roAdd(2))\n },\n readUint32(): number {\n return view.getUint32(roAdd(4))\n },\n readUint64(): bigint {\n return view.getBigUint64(roAdd(8))\n },\n readBuffer() {\n const length = view.getUint32(roAdd(4))\n return buffer.subarray(roAdd(length), roAdd(0))\n },\n incrementWriteOffset(amount: number): number {\n return woAdd(amount)\n },\n size(): number {\n return woffset\n },\n toBinary() {\n return buffer.subarray(0, woffset)\n },\n toCopiedBinary() {\n return new Uint8Array(this.toBinary())\n },\n writeBuffer(value: Uint8Array, writeLength: boolean = true) {\n if (writeLength) {\n this.writeUint32(value.byteLength)\n }\n\n const o = woAdd(value.byteLength)\n buffer.set(value, o)\n },\n writeFloat32(value: number): void {\n const o = woAdd(4)\n view.setFloat32(o, value)\n },\n writeFloat64(value: number): void {\n const o = woAdd(8)\n view.setFloat64(o, value)\n },\n writeInt8(value: number): void {\n const o = woAdd(1)\n view.setInt8(o, value)\n },\n writeInt16(value: number): void {\n const o = woAdd(2)\n view.setInt16(o, value)\n },\n writeInt32(value: number): void {\n const o = woAdd(4)\n view.setInt32(o, value)\n },\n writeInt64(value: bigint): void {\n const o = woAdd(8)\n view.setBigInt64(o, value)\n },\n writeUint8(value: number): void {\n const o = woAdd(1)\n view.setUint8(o, value)\n },\n writeUint16(value: number): void {\n const o = woAdd(2)\n view.setUint16(o, value)\n },\n writeUint32(value: number): void {\n const o = woAdd(4)\n view.setUint32(o, value)\n },\n writeUint64(value: bigint): void {\n const o = woAdd(8)\n view.setBigUint64(o, value)\n },\n // Dataview Proxy\n getFloat32(offset: number): number {\n return view.getFloat32(offset)\n },\n getFloat64(offset: number): number {\n return view.getFloat64(offset)\n },\n getInt8(offset: number): number {\n return view.getInt8(offset)\n },\n getInt16(offset: number): number {\n return view.getInt16(offset)\n },\n getInt32(offset: number): number {\n return view.getInt32(offset)\n },\n getInt64(offset: number): bigint {\n return view.getBigInt64(offset)\n },\n getUint8(offset: number): number {\n return view.getUint8(offset)\n },\n getUint16(offset: number): number {\n return view.getUint16(offset)\n },\n getUint32(offset: number): number {\n return view.getUint32(offset)\n },\n getUint64(offset: number): bigint {\n return view.getBigUint64(offset)\n },\n setFloat32(offset: number, value: number): void {\n view.setFloat32(offset, value)\n },\n setFloat64(offset: number, value: number): void {\n view.setFloat64(offset, value)\n },\n setInt8(offset: number, value: number): void {\n view.setInt8(offset, value)\n },\n setInt16(offset: number, value: number): void {\n view.setInt16(offset, value)\n },\n setInt32(offset: number, value: number): void {\n view.setInt32(offset, value)\n },\n setInt64(offset: number, value: bigint): void {\n view.setBigInt64(offset, value)\n },\n setUint8(offset: number, value: number): void {\n view.setUint8(offset, value)\n },\n setUint16(offset: number, value: number): void {\n view.setUint16(offset, value)\n },\n setUint32(offset: number, value: number): void {\n view.setUint32(offset, value)\n },\n setUint64(offset: number, value: bigint): void {\n view.setBigUint64(offset, value)\n }\n }\n}\n\n/**\n * @public\n */\nexport type ByteBuffer = {\n /**\n * @returns The entire current Uint8Array.\n *\n * WARNING: if the buffer grows, the view had changed itself,\n * and the reference will be a invalid one.\n */\n buffer(): Uint8Array\n /**\n * @returns The capacity of the current buffer\n */\n bufferLength(): number\n /**\n * Resets byteBuffer to avoid creating a new one\n */\n resetBuffer(): void\n /**\n * @returns The current read offset\n */\n currentReadOffset(): number\n /**\n * @returns The current write offset\n */\n currentWriteOffset(): number\n /**\n * Reading purpose\n * Returns the previuos offsset size before incrementing\n */\n incrementReadOffset(amount: number): number\n /**\n * @returns How many bytes are available to read.\n */\n remainingBytes(): number\n readFloat32(): number\n readFloat64(): number\n readInt8(): number\n readInt16(): number\n readInt32(): number\n readInt64(): bigint\n readUint8(): number\n readUint16(): number\n readUint32(): number\n readUint64(): bigint\n readBuffer(): Uint8Array\n /**\n * Writing purpose\n */\n /**\n * Increment offset\n * @param amount - how many bytes\n * @returns The offset when this reserving starts.\n */\n incrementWriteOffset(amount: number): number\n /**\n * @returns The total number of bytes writen in the buffer.\n */\n size(): number\n /**\n * Take care using this function, if you modify the data after, the\n * returned subarray will change too. If you'll modify the content of the\n * bytebuffer, maybe you want to use toCopiedBinary()\n *\n * @returns The subarray from 0 to offset as reference.\n */\n toBinary(): Uint8Array\n\n /**\n * Safe copied buffer of the current data of ByteBuffer\n *\n * @returns The subarray from 0 to offset.\n */\n toCopiedBinary(): Uint8Array\n\n writeBuffer(value: Uint8Array, writeLength?: boolean): void\n writeFloat32(value: number): void\n writeFloat64(value: number): void\n writeInt8(value: number): void\n writeInt16(value: number): void\n writeInt32(value: number): void\n writeInt64(value: bigint): void\n writeUint8(value: number): void\n writeUint16(value: number): void\n writeUint32(value: number): void\n writeUint64(value: bigint): void\n // Dataview Proxy\n getFloat32(offset: number): number\n getFloat64(offset: number): number\n getInt8(offset: number): number\n getInt16(offset: number): number\n getInt32(offset: number): number\n getInt64(offset: number): bigint\n getUint8(offset: number): number\n getUint16(offset: number): number\n getUint32(offset: number): number\n getUint64(offset: number): bigint\n setFloat32(offset: number, value: number): void\n setFloat64(offset: number, value: number): void\n setInt8(offset: number, value: number): void\n setInt16(offset: number, value: number): void\n setInt32(offset: number, value: number): void\n setInt64(offset: number, value: bigint): void\n setUint8(offset: number, value: number): void\n setUint16(offset: number, value: number): void\n setUint32(offset: number, value: number): void\n setUint64(offset: number, value: bigint): void\n}\n","/**\n * The wire message is the top-level message that can be packed\n * inside it can contain a data with another structure or protocol\n *\n * Each wire message has three primitive property that it'll never change\n * ---> length uint32 (message size up to 4,294,967,295)\n * ---> version uint32 (for now just a number which is zero)\n * ---> message type uint32\n * The length indicates how many bytes are above self, the version in\n * combination with message type defines the set of handlers that will be\n * available to process the message\n *\n */\n\nimport { ByteBuffer } from './ByteBuffer'\n\nexport namespace WireMessage {\n export type Uint32 = number\n export enum Enum {\n RESERVED = 0,\n\n // Component Operation\n PUT_COMPONENT = 1,\n DELETE_COMPONENT = 2,\n\n MAX_MESSAGE_TYPE\n }\n\n /**\n * @param length - Uint32 the length of all message (including the header)\n * @param type - define the function which handles the data\n */\n export type Header = {\n length: Uint32\n type: Uint32\n }\n\n export const HEADER_LENGTH = 8\n /**\n * Validate if the message incoming is completed\n * @param buf - ByteBuffer\n */\n export function validate(buf: ByteBuffer) {\n const rem = buf.remainingBytes()\n if (rem < HEADER_LENGTH) {\n return false\n }\n\n const messageLength = buf.getUint32(buf.currentReadOffset())\n if (rem < messageLength) {\n return false\n }\n\n return true\n }\n\n export function readHeader(buf: ByteBuffer): Header | null {\n if (!validate(buf)) {\n return null\n }\n\n return {\n length: buf.readUint32(),\n type: buf.readUint32() as Enum\n }\n }\n}\n\nexport default WireMessage\n","import { ComponentDefinition } from '../../engine/component'\nimport { Entity } from '../../engine/entity'\nimport { ByteBuffer } from '../ByteBuffer'\nimport WireMessage from '../wireMessage'\n\nexport namespace ComponentOperation {\n /**\n * @param entity - Uint32 number of the entity\n * @param componentId - Uint32 number of id\n * @param timestamp - Uint64 Lamport timestamp\n * @param data - Uint8[] data of component\n */\n export type IPutComponent = {\n entity: Entity\n componentId: number\n timestamp: number\n data: Uint8Array\n }\n export type IDeleteComponent = {\n entity: Entity\n componentId: number\n timestamp: number\n data?: undefined\n }\n\n export const MESSAGE_HEADER_LENGTH = 20\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n export function write(\n type: WireMessage.Enum,\n entity: Entity,\n timestamp: number,\n componentDefinition: ComponentDefinition,\n buf: ByteBuffer\n ) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(\n WireMessage.HEADER_LENGTH + MESSAGE_HEADER_LENGTH\n )\n\n // write body\n if (type === WireMessage.Enum.PUT_COMPONENT) {\n componentDefinition.writeToByteBuffer(entity, buf)\n }\n const messageLength = buf.size() - startMessageOffset\n\n // Write WireMessage header\n buf.setUint32(startMessageOffset, messageLength)\n buf.setUint32(startMessageOffset + 4, type)\n\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity)\n buf.setUint32(startMessageOffset + 12, componentDefinition._id)\n buf.setUint64(startMessageOffset + 16, BigInt(timestamp))\n buf.setUint32(\n startMessageOffset + 24,\n messageLength - MESSAGE_HEADER_LENGTH - WireMessage.HEADER_LENGTH\n )\n }\n\n export function read(\n buf: ByteBuffer\n ): (WireMessage.Header & (IPutComponent | IDeleteComponent)) | null {\n const header = WireMessage.readHeader(buf)\n\n if (!header) {\n return null\n }\n\n const common = {\n ...header,\n entity: buf.readUint32() as Entity,\n componentId: buf.readInt32(),\n timestamp: Number(buf.readUint64())\n }\n\n if (header.type === WireMessage.Enum.DELETE_COMPONENT) {\n return common\n }\n\n return {\n ...common,\n data: buf.readBuffer()\n }\n }\n}\n","import { Entity } from './entity'\n\nexport namespace EntityUtils {\n /**\n * Range is the first element and the last possible element, they both are included in the interval.\n * [start, end]\n */\n export type EntityRange = readonly [number, number]\n\n export const MAX_ENTITIES = 0xffffffff\n export const DYNAMIC_ENTITIES_START_AT = 100e3\n export const RESERVED_STATIC_ENTITIES = 512\n\n export const RESERVED_ENTITIES_RANGE: EntityRange = [\n 0,\n RESERVED_STATIC_ENTITIES - 1\n ]\n\n export const STATIC_ENTITIES_RANGE: EntityRange = [\n RESERVED_STATIC_ENTITIES,\n DYNAMIC_ENTITIES_START_AT - 1\n ]\n\n export const DYNAMIC_ENTITIES_RANGE: EntityRange = [\n DYNAMIC_ENTITIES_START_AT,\n MAX_ENTITIES\n ]\n\n function isInRange(entity: Entity, range: EntityRange): boolean {\n return entity >= range[0] && entity <= range[1]\n }\n\n export function isDynamicEntity(entity: Entity) {\n return isInRange(entity, DYNAMIC_ENTITIES_RANGE)\n }\n\n export function isStaticEntity(entity: Entity) {\n return isInRange(entity, STATIC_ENTITIES_RANGE)\n }\n\n export function isReservedEntity(entity: Entity) {\n return isInRange(entity, RESERVED_ENTITIES_RANGE)\n }\n}\n\nexport default EntityUtils\n","import { crdtProtocol, Message as CrdtMessage } from '@dcl/crdt'\n\nimport type { IEngine } from '../../engine'\nimport { Entity } from '../../engine/entity'\nimport { createByteBuffer } from '../../serialization/ByteBuffer'\nimport { ComponentOperation as Message } from '../../serialization/crdt/componentOperation'\nimport WireMessage from '../../serialization/wireMessage'\nimport { Transport } from './transports/types'\nimport { ReceiveMessage, TransportMessage } from './types'\n\nexport function crdtSceneSystem(engine: Pick<IEngine, 'getComponent'>) {\n const transports: Transport[] = []\n\n // CRDT Client\n const crdtClient = crdtProtocol<Uint8Array>()\n // Messages that we received at transport.onMessage waiting to be processed\n const receivedMessages: ReceiveMessage[] = []\n // Messages already processed by the engine but that we need to broadcast to other transports.\n const transportMessages: TransportMessage[] = []\n // Map of entities already processed at least once\n\n /**\n *\n * @param transportType tranport id to identiy messages\n * @returns a function to process received messages\n */\n function parseChunkMessage(transportType: string) {\n /**\n * Receives a chunk of binary messages and stores all the valid\n * Component Operation Messages at messages queue\n * @param chunkMessage A chunk of binary messages\n */\n return function parseChunkMessage(chunkMessage: Uint8Array) {\n const buffer = createByteBuffer({\n reading: { buffer: chunkMessage, currentOffset: 0 }\n })\n\n while (WireMessage.validate(buffer)) {\n const offset = buffer.currentReadOffset()\n const message = Message.read(buffer)!\n\n const { type, entity, componentId, data, timestamp } = message\n receivedMessages.push({\n type,\n entity,\n componentId,\n data,\n timestamp,\n transportType,\n messageBuffer: buffer\n .buffer()\n .subarray(offset, buffer.currentReadOffset())\n })\n }\n }\n }\n\n /**\n * Return and clear the messaes queue\n * @returns messages recieved by the transport to process on the next tick\n */\n function getMessages<T = unknown>(value: T[]) {\n const messagesToProcess = Array.from(value)\n value.length = 0\n return messagesToProcess\n }\n\n /**\n * This fn will be called on every tick.\n * Process all the messages queue received by the transport\n */\n function receiveMessages() {\n const messagesToProcess = getMessages(receivedMessages)\n for (const transport of transports) {\n const buffer = createByteBuffer()\n for (const message of messagesToProcess) {\n const { data, timestamp, componentId, entity, type } = message\n const crdtMessage: CrdtMessage<Uint8Array> = {\n key1: entity,\n key2: componentId,\n data: data || null,\n timestamp: timestamp\n }\n const component = engine.getComponent(componentId)\n const current = crdtClient.processMessage(crdtMessage)\n\n // CRDT outdated message. Resend this message through the wire\n if (crdtMessage !== current) {\n const type = component.has(entity)\n ? WireMessage.Enum.PUT_COMPONENT\n : WireMessage.Enum.DELETE_COMPONENT\n Message.write(type, entity, current.timestamp, component, buffer)\n } else {\n // Process CRDT Message\n if (type === WireMessage.Enum.DELETE_COMPONENT) {\n component.deleteFrom(entity)\n } else {\n const opts = {\n reading: { buffer: message.data!, currentOffset: 0 }\n }\n const bb = createByteBuffer(opts)\n\n // Update engine component\n component.upsertFromBinary(message.entity, bb)\n component.clearDirty()\n }\n // Add message to transport queue to be processed by others transports\n transportMessages.push(message)\n }\n }\n\n if (buffer.size()) {\n transport.send(buffer.toBinary())\n }\n }\n }\n\n /**\n * Iterates the dirty map and generates crdt messages to be send\n * @param dirtyMap a map of { entities: [componentId] }\n */\n function createMessages(dirtyMap: Map<Entity, Set<number>>) {\n // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages\n const crdtMessages = getMessages(transportMessages)\n const buffer = createByteBuffer()\n\n for (const [entity, componentsId] of dirtyMap) {\n for (const componentId of componentsId) {\n const component = engine.getComponent(componentId)\n const entityComponent = component.has(entity)\n ? component.toBinary(entity).toBinary()\n : null\n const event = crdtClient.createEvent(\n entity,\n componentId,\n entityComponent\n )\n const offset = buffer.currentWriteOffset()\n const type = component.has(entity)\n ? WireMessage.Enum.PUT_COMPONENT\n : WireMessage.Enum.DELETE_COMPONENT\n const transportMessage: Omit<TransportMessage, 'messageBuffer'> = {\n type,\n componentId,\n entity,\n timestamp: event.timestamp\n }\n if (transports.some((t) => t.filter(transportMessage))) {\n Message.write(type, entity, event.timestamp, component, buffer)\n crdtMessages.push({\n ...transportMessage,\n messageBuffer: buffer\n .buffer()\n .subarray(offset, buffer.currentWriteOffset())\n })\n }\n }\n }\n\n // Send messages to transports\n const transportBuffer = createByteBuffer()\n for (const transport of transports) {\n transportBuffer.resetBuffer()\n for (const message of crdtMessages) {\n if (transport.filter(message)) {\n transportBuffer.writeBuffer(message.messageBuffer, false)\n }\n }\n if (transportBuffer.size()) {\n transport.send(transportBuffer.toBinary())\n }\n }\n }\n\n function addTransport(transport: Transport) {\n transports.push(transport)\n transport.onmessage = parseChunkMessage(transport.type)\n }\n\n return {\n createMessages,\n receiveMessages,\n addTransport\n }\n}\n","import { ComponentDefinition } from './component'\n\n/**\n * @public\n */\nexport type DeepReadonlyMap<K, V> = ReadonlyMap<\n DeepReadonly<K>,\n DeepReadonly<V>\n>\n/**\n * @public\n */\nexport type DeepReadonlySet<T> = ReadonlySet<DeepReadonly<T>>\n/**\n * @public\n */\nexport type DeepReadonlyObject<T> = {\n readonly [K in keyof T]: DeepReadonly<T[K]>\n}\n/**\n * @public\n */\nexport type ReadonlyPrimitive =\n | number\n | string\n | number[]\n | string[]\n | boolean\n | boolean[]\n\n/**\n * @public\n */\nexport type ReadonlyComponentSchema<\n T extends [ComponentDefinition, ...ComponentDefinition[]]\n> = {\n [K in keyof T]: T[K] extends ComponentDefinition\n ? ReturnType<T[K]['get']>\n : never\n}\n\n/**\n * @public\n */\nexport type DeepReadonly<T> = T extends ReadonlyPrimitive\n ? T\n : T extends Map<infer K, infer V>\n ? DeepReadonlyMap<K, V>\n : T extends Set<infer M>\n ? DeepReadonlySet<M>\n : DeepReadonlyObject<T>\n\n/**\n * @internal\n */\nexport function deepReadonly<T extends Record<string, unknown>>(\n val: T\n): DeepReadonly<T> {\n return Object.freeze({ ...val }) as DeepReadonly<T>\n}\n","import type { ISchema } from '../schemas/ISchema'\nimport { ByteBuffer, createByteBuffer } from '../serialization/ByteBuffer'\nimport { Entity } from './entity'\nimport { deepReadonly, DeepReadonly } from './readonly'\n\n/**\n * @public\n */\nexport type EcsResult<T extends ISchema> = T extends ISchema\n ? ReturnType<T['deserialize']>\n : never\n\n/**\n * @public\n */\nexport type ComponentType<T extends ISchema> = EcsResult<T>\n\n/**\n * @public\n */\nexport type ComponentDefinition<\n T extends ISchema = ISchema<any>,\n ConstructorType = ComponentType<T>\n> = {\n _id: number\n\n /**\n * Return the default value of the current component\n */\n default(): DeepReadonly<ComponentType<T>>\n\n /**\n * Get if the entity has this component\n * @param entity\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.has(myEntity) // return false\n * Transform.create(myEntity)\n * Transform.has(myEntity) // return true\n * ```\n */\n has(entity: Entity): boolean\n\n /**\n * Get the readonly component of the entity (to mutate it, use getMutable instead), throw an error if the entity doesn't have the component.\n * @param entity\n * @return\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity)\n * const transform = Transform.get(myEntity) // return true\n * log(transform.position.x === 0) // log 'true'\n *\n * transform.position.y = 10 // illegal statement, to mutate the component use getMutable\n * ```\n *\n * ```ts\n * const otherEntity = engine.addEntity()\n * Transform.get(otherEntity) // throw an error!!\n * ```\n */\n get(entity: Entity): DeepReadonly<ComponentType<T>>\n\n /**\n * Get the readonly component of the entity (to mutate it, use getMutable instead), or null if the entity doesn't have the component.\n * @param entity\n * @return\n *\n * Example:\n * ```ts\n * const otherEntity = engine.addEntity()\n * log(Transform.get(otherEntity) === null) // log 'true'\n * ```\n */\n getOrNull(entity: Entity): DeepReadonly<ComponentType<T>> | null\n\n /**\n * Add the current component to an entity, throw an error if the component already exists (use `createOrReplace` instead).\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n * @param val The initial value\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity, { ...Transform.default(), position: {x: 4, y: 0, z: 4} }) // ok!\n * Transform.create(myEntity) // throw an error, the `Transform` component already exists in `myEntity`\n * ````\n */\n create(entity: Entity, val?: ConstructorType): ComponentType<T>\n /**\n * Add the current component to an entity or replace the content if the entity already has the component\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n * @param val The initial or new value\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity) // ok!\n * Transform.createOrReplace(myEntity, { ...Transform.default(), position: {x: 4, y: 0, z: 4} }) // ok!\n * ````\n */\n createOrReplace(entity: Entity, val?: ConstructorType): ComponentType<T>\n\n /**\n * Delete the current component to an entity, return null if the entity doesn't have the current component.\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity) // ok!\n * Transform.deleteFrom(myEntity) // return the component\n * Transform.deleteFrom(myEntity) // return null\n * ````\n */\n deleteFrom(entity: Entity): ComponentType<T> | null\n\n /**\n * Get the mutable component of the entity, throw an error if the entity doesn't have the component.\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity)\n * Transform.getMutable(myEntity).position = {x: 4, y: 0, z: 4}\n * ````\n */\n getMutable(entity: Entity): ComponentType<T>\n\n /**\n * Get the mutable component of the entity, return null if the entity doesn't have the component.\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n *\n * Example:\n * ```ts\n * const transform = Transform.getMutableOrNull(myEntity)\n * if (transform) {\n * transform.position = {x: 4, y: 0, z: 4}\n * }\n * ````\n */\n getMutableOrNull(entity: Entity): ComponentType<T> | null\n\n /**\n * @internal\n * @param entity\n * @param data\n */\n upsertFromBinary(entity: Entity, data: ByteBuffer): ComponentType<T> | null\n /**\n * @internal\n * @param entity\n * @param data\n */\n updateFromBinary(entity: Entity, data: ByteBuffer): ComponentType<T> | null\n\n // allocates a buffer and returns new buffer\n /**\n * @internal\n * @param entity\n */\n toBinary(entity: Entity): ByteBuffer\n\n // writes to a pre-allocated buffer\n writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void\n\n /**\n * @internal Use engine.getEntitiesWith(Component) instead.\n * Get the iterator to every entity has the component\n */\n iterator(): Iterable<[Entity, ComponentType<T>]>\n\n // Dirty\n /**\n * @internal\n */\n dirtyIterator(): Iterable<Entity>\n /**\n * @internal\n */\n clearDirty(): void\n /**\n * @internal\n */\n isDirty(entity: Entity): boolean\n}\n\nexport function defineComponent<\n T extends ISchema,\n ConstructorType = ComponentType<T>\n>(\n componentId: number,\n spec: T,\n constructorDefault?: ConstructorType\n // meta: { syncFlags }\n): ComponentDefinition<T, ConstructorType> {\n const data = new Map<Entity, ComponentType<T>>()\n const dirtyIterator = new Set<Entity>()\n\n const defaultBuffer = createByteBuffer()\n if (constructorDefault) {\n spec.serialize(constructorDefault, defaultBuffer)\n }\n\n function getDefaultValue() {\n if (constructorDefault) {\n return spec.deserialize(\n createByteBuffer({\n writing: {\n buffer: defaultBuffer.buffer(),\n currentOffset: defaultBuffer.currentWriteOffset()\n }\n })\n )\n } else {\n return spec.create()\n }\n }\n\n function prefillValue(value: ConstructorType) {\n return { ...getDefaultValue(), ...value }\n }\n\n return {\n _id: componentId,\n default: function () {\n return getDefaultValue()\n },\n isDirty: function (entity: Entity): boolean {\n return dirtyIterator.has(entity)\n },\n has: function (entity: Entity): boolean {\n return data.has(entity)\n },\n deleteFrom: function (entity: Entity): ComponentType<T> | null {\n const component = data.get(entity)\n data.delete(entity)\n dirtyIterator.add(entity)\n return component || null\n },\n getOrNull: function (\n entity: Entity\n ): DeepReadonly<ComponentType<T>> | null {\n const component = data.get(entity)\n return component ? deepReadonly(component) : null\n },\n get: function (entity: Entity): DeepReadonly<ComponentType<T>> {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[getFrom] Component ${componentId} for ${entity} not found`\n )\n }\n return deepReadonly(component)\n },\n create: function (\n entity: Entity,\n value?: ConstructorType\n ): ComponentType<T> {\n const component = data.get(entity)\n if (component) {\n throw new Error(\n `[create] Component ${componentId} for ${entity} already exists`\n )\n }\n const usedValue =\n value === undefined ? getDefaultValue() : prefillValue(value)\n data.set(entity, usedValue)\n dirtyIterator.add(entity)\n return usedValue\n },\n createOrReplace: function (\n entity: Entity,\n value?: ConstructorType\n ): ComponentType<T> {\n const usedValue =\n value === undefined ? getDefaultValue() : prefillValue(value)\n data.set(entity, usedValue!)\n dirtyIterator.add(entity)\n return usedValue!\n },\n getMutableOrNull: function (entity: Entity): ComponentType<T> | null {\n const component = data.get(entity)\n if (!component) {\n return null\n }\n dirtyIterator.add(entity)\n return component\n },\n getMutable: function (entity: Entity): ComponentType<T> {\n const component = this.getMutableOrNull(entity)\n if (component === null) {\n throw new Error(\n `[mutable] Component ${componentId} for ${entity} not found`\n )\n }\n return component\n },\n iterator: function* (): Iterable<[Entity, ComponentType<T>]> {\n for (const [entity, component] of data) {\n yield [entity, component]\n }\n },\n dirtyIterator: function* (): Iterable<Entity> {\n for (const entity of dirtyIterator) {\n yield entity\n }\n },\n toBinary(entity: Entity): ByteBuffer {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[toBinary] Component ${componentId} for ${entity} not found`\n )\n }\n\n const writeBuffer = createByteBuffer()\n spec.serialize(component, writeBuffer)\n return writeBuffer\n },\n writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[writeToByteBuffer] Component ${componentId} for ${entity} not found`\n )\n }\n\n spec.serialize(component, buffer)\n },\n updateFromBinary(\n entity: Entity,\n buffer: ByteBuffer\n ): ComponentType<T> | null {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[updateFromBinary] Component ${componentId} for ${entity} not found`\n )\n }\n return this.upsertFromBinary(entity, buffer)\n },\n upsertFromBinary(\n entity: Entity,\n buffer: ByteBuffer\n ): ComponentType<T> | null {\n const newValue = spec.deserialize(buffer)\n data.set(entity, newValue)\n dirtyIterator.add(entity)\n return newValue\n },\n clearDirty: function () {\n dirtyIterator.clear()\n }\n }\n}\n","import { EntityUtils } from './entity-utils'\n\ndeclare const entitySymbol: unique symbol\n/**\n * @public\n */\nexport type Entity = number & { [entitySymbol]: true }\n\nexport function EntityContainer() {\n const staticEntity = Entity(EntityUtils.STATIC_ENTITIES_RANGE)\n const dynamicEntity = Entity(EntityUtils.DYNAMIC_ENTITIES_RANGE)\n return {\n generateEntity(dynamic: boolean = false): Entity {\n if (dynamic) {\n return dynamicEntity.generateEntity()\n } else {\n return staticEntity.generateEntity()\n }\n },\n removeEntity(entity: Entity): boolean {\n return (\n staticEntity.removeEntity(entity) || dynamicEntity.removeEntity(entity)\n )\n },\n entityExists(entity: Entity): boolean {\n return (\n EntityUtils.isReservedEntity(entity) ||\n staticEntity.getExistingEntities().has(entity) ||\n dynamicEntity.getExistingEntities().has(entity)\n )\n },\n getExistingEntities(): Set<Entity> {\n return new Set([\n ...staticEntity.getExistingEntities(),\n ...dynamicEntity.getExistingEntities()\n ])\n }\n }\n}\n\nfunction Entity(range: EntityUtils.EntityRange) {\n function createEntity(entity: number): Entity {\n return entity as Entity\n }\n\n let entityCounter = range[0]\n const usedEntities: Set<Entity> = new Set()\n\n function generateEntity(): Entity {\n if (entityCounter >= range[1]) {\n throw new Error(\n `It fails trying to generate an entity out of range [${range[0]}, ${range[1]}].`\n )\n }\n\n const entity = createEntity(entityCounter)\n entityCounter++\n\n usedEntities.add(entity)\n return entity\n }\n\n function removeEntity(entity: Entity) {\n return usedEntities.delete(entity)\n }\n\n return {\n getExistingEntities() {\n return new Set(usedEntities)\n },\n generateEntity,\n removeEntity\n }\n}\n","/**\n * @public\n */\nexport type SystemFn = (dt: number) => void\n\nexport const SYSTEMS_REGULAR_PRIORITY = 100e3\n\ntype System = {\n fn: SystemFn\n priority: number\n name?: string\n}\n\nexport function SystemContainer() {\n const systems: System[] = []\n\n function sort() {\n systems.sort((a, b) => b.priority - a.priority)\n }\n\n function add(fn: SystemFn, priority: number, name?: string): void {\n if (systems.find((item) => item.fn === fn)) {\n throw new Error('System already added')\n } else if (name && systems.find((item) => item.name === name)) {\n throw new Error('System name already used')\n }\n\n systems.push({\n fn,\n priority,\n name\n })\n sort()\n }\n\n function remove(selector: string | SystemFn) {\n let index = -1\n\n if (typeof selector === 'string') {\n index = systems.findIndex((item) => item.name === selector)\n } else {\n index = systems.findIndex((item) => item.fn === selector)\n }\n\n if (index === -1) {\n return false\n }\n\n systems.splice(index, 1)\n sort()\n return true\n }\n\n return {\n add,\n remove,\n getSystems() {\n return systems\n }\n }\n}\n","import { defineSdkComponents } from '../components'\nimport { Schemas } from '../schemas'\nimport { ISchema } from '../schemas/ISchema'\nimport { Result, Spec } from '../schemas/Map'\nimport { ByteBuffer } from '../serialization/ByteBuffer'\nimport { crdtSceneSystem } from '../systems/crdt'\nimport {\n ComponentDefinition,\n ComponentType,\n defineComponent as defComponent\n} from './component'\nimport { Entity, EntityContainer } from './entity'\nimport { SystemContainer, SYSTEMS_REGULAR_PRIORITY, SystemFn } from './systems'\nimport type { IEngineParams, IEngine } from './types'\nimport { ReadonlyComponentSchema } from './readonly'\n\nexport * from './readonly'\nexport * from './types'\nexport { ComponentType, Entity, ByteBuffer, ComponentDefinition }\n\nfunction preEngine() {\n const entityContainer = EntityContainer()\n const componentsDefinition = new Map<number, ComponentDefinition<any>>()\n const systems = SystemContainer()\n\n function addSystem(\n fn: SystemFn,\n priority: number = SYSTEMS_REGULAR_PRIORITY,\n name?: string\n ) {\n systems.add(fn, priority, name)\n }\n\n function removeSystem(selector: string | SystemFn) {\n return systems.remove(selector)\n }\n\n function addEntity(dynamic: boolean = false) {\n // entitiesCompnonent.set(entity, new Set())\n const entity = entityContainer.generateEntity(dynamic)\n return entity\n }\n\n function entityExists(entity: Entity) {\n return entityContainer.entityExists(entity)\n }\n\n function addDynamicEntity() {\n return addEntity(true)\n }\n\n function removeEntity(entity: Entity) {\n for (const [, component] of componentsDefinition) {\n if (component.has(entity)) {\n component.deleteFrom(entity)\n }\n }\n\n return entityContainer.removeEntity(entity)\n }\n\n function defineComponentFromSchema<\n T extends ISchema,\n ConstructorType = ComponentType<T>\n >(\n spec: T,\n componentId: number,\n constructorDefault?: ConstructorType\n ): ComponentDefinition<T, ConstructorType> {\n if (componentsDefinition.get(componentId)) {\n throw new Error(`Component ${componentId} already declared`)\n }\n const newComponent = defComponent<T, ConstructorType>(\n componentId,\n spec,\n constructorDefault\n )\n componentsDefinition.set(componentId, newComponent)\n return newComponent\n }\n\n function defineComponent<\n T extends Spec,\n ConstructorType = Partial<Result<T>>\n >(\n spec: T,\n componentId: number,\n constructorDefault?: ConstructorType\n ): ComponentDefinition<ISchema<Result<T>>, ConstructorType> {\n return defineComponentFromSchema(\n Schemas.Map(spec),\n componentId,\n constructorDefault\n )\n }\n\n function getComponent<T extends ISchema>(\n componentId: number\n ): ComponentDefinition<T> {\n const component = componentsDefinition.get(componentId)\n if (!component) {\n throw new Error(\n `Component ${componentId} not found. You need to declare the components at the beginnig of the engine declaration`\n )\n }\n return component\n }\n\n function* getEntitiesWith<\n T extends [ComponentDefinition, ...ComponentDefinition[]]\n >(...components: T): Iterable<[Entity, ...ReadonlyComponentSchema<T>]> {\n for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {\n yield [entity, ...groupComp.map((c) => c.get(entity))] as [\n Entity,\n ...ReadonlyComponentSchema<T>\n ]\n }\n }\n\n function* getComponentDefGroup<T extends ComponentDefinition[]>(\n ...args: T\n ): Iterable<[Entity, ...T]> {\n const [firstComponentDef, ...componentDefinitions] = args\n for (const [entity] of firstComponentDef.iterator()) {\n let matches = true\n for (const componentDef of componentDefinitions) {\n if (!componentDef.has(entity)) {\n matches = false\n break\n }\n }\n\n if (matches) {\n yield [entity, ...args]\n }\n }\n }\n\n function getSystems() {\n return systems.getSystems()\n }\n\n function removeComponentDefinition(componentId: number) {\n componentsDefinition.delete(componentId)\n }\n\n return {\n entityExists,\n componentsDefinition,\n addEntity,\n addDynamicEntity,\n removeEntity,\n addSystem,\n getSystems,\n removeSystem,\n defineComponent,\n defineComponentFromSchema,\n getEntitiesWith,\n getComponent,\n removeComponentDefinition\n }\n}\n\n/**\n * @public\n */\nexport function Engine({ transports }: IEngineParams = {}): IEngine {\n const engine = preEngine()\n const crdtSystem = crdtSceneSystem(engine)\n const baseComponents = defineSdkComponents(engine)\n\n if (transports) {\n for (const tranport of transports) {\n crdtSystem.addTransport(tranport)\n }\n }\n\n function update(dt: number) {\n crdtSystem.receiveMessages()\n\n for (const system of engine.getSystems()) {\n system.fn(dt)\n }\n\n // TODO: Perf tip\n // Should we add some dirtyIteratorSet at engine level so we dont have\n // to iterate all the component definitions to get the dirty ones ?\n const dirtySet = new Map<Entity, Set<number>>()\n for (const [componentId, definition] of engine.componentsDefinition) {\n for (const entity of definition.dirtyIterator()) {\n if (!dirtySet.has(entity)) {\n dirtySet.set(entity, new Set())\n }\n dirtySet.get(entity)!.add(componentId)\n }\n }\n crdtSystem.createMessages(dirtySet)\n\n for (const [_componentId, definition] of engine.componentsDefinition) {\n definition.clearDirty()\n }\n }\n\n function* getTreeEntityArray(\n firstEntity: Entity,\n proccesedEntities: Entity[]\n ): Generator<Entity> {\n // This avoid infinite loop when there is a cyclic parenting\n if (proccesedEntities.find((value) => firstEntity === value)) return\n proccesedEntities.push(firstEntity)\n\n for (const [entity, value] of engine.getEntitiesWith(\n baseComponents.Transform\n )) {\n if (value.parent === firstEntity) {\n yield* getTreeEntityArray(entity, proccesedEntities)\n }\n }\n\n yield firstEntity\n }\n\n function removeEntityWithChildren(firstEntity: Entity) {\n for (const entity of getTreeEntityArray(firstEntity, [])) {\n engine.removeEntity(entity)\n }\n }\n\n return {\n addEntity: engine.addEntity,\n addDynamicEntity: engine.addDynamicEntity,\n removeEntity: engine.removeEntity,\n removeEntityWithChildren,\n addSystem: engine.addSystem,\n removeSystem: engine.removeSystem,\n defineComponent: engine.defineComponent,\n defineComponentFromSchema: engine.defineComponentFromSchema,\n getEntitiesWith: engine.getEntitiesWith,\n getComponent: engine.getComponent,\n removeComponentDefinition: engine.removeComponentDefinition,\n update,\n RootEntity: 0 as Entity,\n PlayerEntity: 1 as Entity,\n CameraEntity: 2 as Entity,\n baseComponents,\n entityExists: engine.entityExists,\n addTransport: crdtSystem.addTransport\n }\n}\n","import { IEngine } from '../engine'\n\nexport type Task<T = unknown> = () => Promise<T>\n\nfunction getAndClean<T = unknown>(value: T[]) {\n const messagesToProcess = Array.from(value)\n value.length = 0\n return messagesToProcess\n}\n\nexport function taskSystem(engine: IEngine) {\n const tasks: Task[] = []\n\n async function runTask(task: Task) {\n try {\n const resp = await task()\n return resp\n } catch (e: any) {\n dcl.error(`executeTask: FAILED. ${e.toString()}`, e)\n }\n }\n\n function executeTasks() {\n getAndClean(tasks).forEach((task) => runTask(task))\n }\n\n engine.addSystem(executeTasks)\n\n return {\n executeTask(task: Task) {\n tasks.push(task)\n }\n }\n}\n","/** @public */\nexport enum ECSComponentIDs {\n\tTransform = 1,\n\tAnimator = 1042,\n\tAudioSource = 1020,\n\tAudioStream = 1021,\n\tAvatarAttach = 1073,\n\tAvatarModifierArea = 1070,\n\tAvatarShape = 1080,\n\tBillboard = 1090,\n\tCameraMode = 1072,\n\tCameraModeArea = 1071,\n\tGltfContainer = 1041,\n\tMaterial = 1017,\n\tMeshCollider = 1019,\n\tMeshRenderer = 1018,\n\tNftShape = 1040,\n\tPointerEventsResult = 1063,\n\tPointerHoverFeedback = 1062,\n\tPointerLock = 1074,\n\tRaycast = 1067,\n\tRaycastResult = 1068,\n\tTextShape = 1030,\n\tUiBackground = 1053,\n\tUiText = 1052,\n\tUiTransform = 1050,\n\tVisibilityComponent = 1081,\n}\n","import { TransportMessage } from '../types'\nimport { Transport } from './types'\nimport { ECSComponentIDs } from '../../../components/generated/ids.gen'\n\nconst componentIds = Object.values(ECSComponentIDs)\n .filter((a) => typeof a === 'number')\n .map(Number)\n\nexport function createRendererTransport(): Transport {\n if (typeof dcl === 'undefined') {\n // TODO: replace with new rpc\n throw new Error(\n 'Cannot create createRendererTransport without global dcl object'\n )\n }\n\n const type = 'renderer'\n const rendererTransport: Transport = {\n type,\n send(message: Uint8Array): void {\n // TODO: replace with new rpc\n dcl\n .callRpc('~system/EngineApi', 'crdtSendToRenderer', [\n { data: new Uint8Array(message) }\n ])\n .then((response) => {\n if (response && response.data && response.data.length)\n if (rendererTransport.onmessage) {\n for (const byteArray of response.data) {\n rendererTransport.onmessage(byteArray)\n }\n }\n })\n .catch(dcl.error)\n },\n filter(message: TransportMessage): boolean {\n // Echo message, ignore them\n if (message.transportType === type) {\n return false\n }\n\n // Only send renderer components (Proto Generated)\n if (!componentIds.includes(message.componentId)) {\n return false\n }\n\n return !!message\n }\n }\n\n return rendererTransport\n}\n","import { InputAction } from '../components/generated/pb/decentraland/sdk/components/common/input_action.gen'\nimport { PBPointerEventsResult_PointerCommand } from '../components/generated/pb/decentraland/sdk/components/pointer_events_result.gen'\nimport { PointerEventType } from '../components/generated/pb/decentraland/sdk/components/pointer_hover_feedback.gen'\nimport { Entity, IEngine, IInput } from '../engine'\n\ndeclare const engine: IEngine\n\nexport type EventsSystem = typeof EventsSystem\nexport namespace EventsSystem {\n export type Callback = (\n event: PBPointerEventsResult_PointerCommand\n ) => void | Promise<void>\n\n export type Options = {\n button?: InputAction\n hoverText?: string\n maxDistance?: number\n }\n\n enum EventType {\n Click,\n Down,\n Up\n }\n type EventMapType = Map<EventType, { cb: Callback; opts: Required<Options> }>\n\n const getDefaultOpts = (opts: Options = {}): Required<Options> => ({\n button: InputAction.IA_ANY,\n hoverText: 'Interact',\n maxDistance: 100,\n ...opts\n })\n\n const eventsMap = new Map<Entity, EventMapType>()\n\n function getEvent(entity: Entity) {\n return (\n eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity)!\n )\n }\n\n function setHoverFeedback(\n entity: Entity,\n type: PointerEventType,\n opts: Options\n ) {\n const { PointerHoverFeedback } = engine.baseComponents\n if (opts.hoverText) {\n const pointerEvent =\n PointerHoverFeedback.getMutableOrNull(entity) ||\n PointerHoverFeedback.create(entity)\n\n pointerEvent.pointerEvents.push({\n eventType: type,\n eventInfo: {\n button: opts.button,\n showFeedback: true,\n hoverText: opts.hoverText,\n maxDistance: opts.maxDistance\n }\n })\n }\n }\n\n function removeHoverFeedback(\n entity: Entity,\n type: PointerEventType,\n button: InputAction\n ) {\n const { PointerHoverFeedback } = engine.baseComponents\n const pointerEvent = PointerHoverFeedback.getMutableOrNull(entity)\n if (!pointerEvent) return\n pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter(\n (pointer) =>\n !(pointer.eventInfo?.button === button && pointer.eventType === type)\n )\n }\n\n function getPointerEvent(eventType: EventType) {\n if (eventType === EventType.Up) {\n return PointerEventType.PET_UP\n }\n return PointerEventType.PET_DOWN\n }\n\n function removeEvent(entity: Entity, type: EventType) {\n const event = getEvent(entity)\n const pointerEvent = event.get(type)\n\n if (pointerEvent?.opts.hoverText) {\n removeHoverFeedback(\n entity,\n getPointerEvent(type),\n pointerEvent.opts.button\n )\n }\n\n event.delete(type)\n }\n\n /**\n * @internal\n * Remove the callback for onClick event\n * @param entity Entity where the callback was attached\n */\n export function removeOnClick(entity: Entity) {\n removeEvent(entity, EventType.Click)\n }\n\n /**\n * @public\n * Remove the callback for onPointerDown event\n * @param entity Entity where the callback was attached\n */\n export function removeOnPointerDown(entity: Entity) {\n removeEvent(entity, EventType.Down)\n }\n\n /**\n * @public\n * Remove the callback for onPointerUp event\n * @param entity Entity where the callback was attached\n */\n export function removeOnPointerUp(entity: Entity) {\n removeEvent(entity, EventType.Up)\n }\n\n /**\n * @internal\n * Execute callback when the user clicks the entity.\n * @param entity Entity to attach the callback\n * @param cb Function to execute when onPointerDown fires\n * @param opts Opts to trigger Feedback and Button\n */\n export function onClick(entity: Entity, cb: Callback, opts?: Options) {\n const options = getDefaultOpts(opts)\n // Clear previous event with over feedback included\n removeEvent(entity, EventType.Click)\n\n // Set new event\n getEvent(entity).set(EventType.Click, { cb, opts: options })\n setHoverFeedback(entity, PointerEventType.PET_DOWN, options)\n }\n\n /**\n * @public\n * Execute callback when the user press the InputButton pointing at the entity\n * @param entity Entity to attach the callback\n * @param cb Function to execute when click fires\n * @param opts Opts to trigger Feedback and Button\n */\n export function onPointerDown(entity: Entity, cb: Callback, opts?: Options) {\n const options = getDefaultOpts(opts)\n removeEvent(entity, EventType.Down)\n getEvent(entity).set(EventType.Down, { cb, opts: options })\n setHoverFeedback(entity, PointerEventType.PET_DOWN, options)\n }\n\n /**\n * @public\n * Execute callback when the user releases the InputButton pointing at the entity\n * @param entity Entity to attach the callback\n * @param cb Function to execute when click fires\n * @param opts Opts to trigger Feedback and Button\n */\n export function onPointerUp(entity: Entity, cb: Callback, opts?: Options) {\n const options = getDefaultOpts(opts)\n removeEvent(entity, EventType.Up)\n getEvent(entity).set(EventType.Up, { cb, opts: options })\n setHoverFeedback(entity, PointerEventType.PET_UP, options)\n }\n\n // @internal\n export function update(Input: IInput) {\n return function () {\n for (const [entity, event] of eventsMap) {\n if (!engine.entityExists(entity)) {\n eventsMap.delete(entity)\n continue\n }\n\n for (const [eventType, { cb, opts }] of event) {\n if (eventType === EventType.Click) {\n const command = Input.getClick(opts.button, entity)\n if (command) void cb(command.up)\n }\n\n if (eventType === EventType.Down || eventType === EventType.Up) {\n const command = Input.getInputCommand(\n opts.button,\n getPointerEvent(eventType),\n entity\n )\n if (command) {\n void cb(command)\n }\n }\n }\n }\n }\n }\n}\n","import { InputAction } from '../components/generated/pb/decentraland/sdk/components/common/input_action.gen'\nimport { PointerEventType } from '../components/generated/pb/decentraland/sdk/components/pointer_hover_feedback.gen'\nimport { PBPointerEventsResult_PointerCommand } from '../components/generated/pb/decentraland/sdk/components/pointer_events_result.gen'\nimport { Schemas } from '../schemas'\nimport { Entity } from './entity'\nimport { IEngine } from './types'\n\nconst InputCommands: InputAction[] = [\n InputAction.IA_POINTER,\n InputAction.IA_PRIMARY,\n InputAction.IA_SECONDARY,\n InputAction.IA_FORWARD,\n InputAction.IA_BACKWARD,\n InputAction.IA_RIGHT,\n InputAction.IA_LEFT,\n InputAction.IA_JUMP,\n InputAction.IA_WALK,\n InputAction.IA_ACTION_3,\n InputAction.IA_ACTION_4,\n InputAction.IA_ACTION_5,\n InputAction.IA_ACTION_6\n]\n/**\n * @public\n */\nexport type IInput = {\n /**\n * @internal\n * Check if a click was emmited in the current tick for the input action.\n * This is defined when an UP event is triggered with a previously DOWN state.\n * @param inputAction - the input action to query\n * @param entity - the entity to query, ignore for global events.\n * @returns true if the entity was clicked in the last tick-update\n */\n isClicked: (inputAction: InputAction, entity?: Entity) => boolean\n\n /**\n * @public\n * Check if a pointer event has been emitted in the last tick-update.\n * @param inputAction - the input action to query\n * @param pointerEventType - the pointer event type to query\n * @param entity - the entity to query, ignore for global\n * @returns boolean\n */\n isTriggered: (\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ) => boolean\n\n /**\n * @public\n * Check if an input action is currently being pressed.\n * @param inputAction - the input action to query\n * @returns boolean\n */\n isPressed: (inputAction: InputAction) => boolean\n\n /**\n * @internal\n * Get the click info if a click was emmited in the current tick for the input action.\n * This is defined when an UP event is triggered with a previously DOWN state.\n * @param inputAction - the input action to query\n * @param entity - the entity to query, ignore for global events.\n * @returns the click info or undefined if there is no command in the last tick-update\n */\n getClick: (\n inputAction: InputAction,\n entity?: Entity\n ) => {\n up: PBPointerEventsResult_PointerCommand\n down: PBPointerEventsResult_PointerCommand\n } | null\n\n /**\n * @public\n * Get the input command info if a pointer event has been emitted in the last tick-update.\n * @param inputAction - the input action to query\n * @param pointerEventType - the pointer event type to query\n * @param entity - the entity to query, ignore for global\n * @returns the input command info or undefined if there is no command in the last tick-update\n */\n getInputCommand: (\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ) => PBPointerEventsResult_PointerCommand | null\n}\n\nconst InternalInputStateSchema = {\n timestampLastUpdate: Schemas.Number,\n currentTimestamp: Schemas.Number,\n buttonState: Schemas.Array(\n Schemas.Map({\n value: Schemas.Boolean,\n ts: Schemas.Number\n })\n )\n}\n\nconst InternalInputStateComponentId = 1500\nconst TimestampUpdateSystemPriority = 1 << 20\nconst ButtonStateUpdateSystemPriority = 0\n\nexport function createInput(engine: IEngine): IInput {\n const InternalInputStateComponent = engine.defineComponent(\n InternalInputStateSchema,\n InternalInputStateComponentId\n )\n\n InternalInputStateComponent.create(engine.RootEntity, {\n buttonState: Array.from({ length: InputCommands.length }, () => ({\n ts: 0,\n value: false\n }))\n })\n\n function timestampUpdateSystem() {\n const state = InternalInputStateComponent.get(engine.RootEntity)\n if (state.currentTimestamp > state.timestampLastUpdate) {\n InternalInputStateComponent.getMutable(\n engine.RootEntity\n ).timestampLastUpdate = state.currentTimestamp\n }\n }\n\n function buttonStateUpdateSystem() {\n const component = engine.baseComponents.PointerEventsResult.getOrNull(\n engine.RootEntity\n )\n\n if (!component) return\n\n const state = InternalInputStateComponent.getMutable(engine.RootEntity)\n\n for (const command of component.commands) {\n if (command.timestamp > state.buttonState[command.button].ts) {\n if (command.state === PointerEventType.PET_DOWN) {\n state.buttonState[command.button].value = true\n } else if (command.state === PointerEventType.PET_UP) {\n state.buttonState[command.button].value = false\n }\n }\n }\n }\n\n engine.addSystem(buttonStateUpdateSystem, ButtonStateUpdateSystemPriority)\n engine.addSystem(timestampUpdateSystem, TimestampUpdateSystemPriority)\n\n function getClick(inputAction: InputAction, entity?: Entity) {\n if (inputAction !== InputAction.IA_ANY) {\n return findClick(inputAction, entity)\n }\n\n for (const input of InputCommands) {\n const cmd = findClick(input, entity)\n if (cmd) return cmd\n }\n return null\n }\n\n function findClick(inputAction: InputAction, entity?: Entity) {\n const component = engine.baseComponents.PointerEventsResult.getOrNull(\n engine.RootEntity\n )\n\n if (!component) return null\n const commands = component.commands\n\n // We search the last DOWN command sorted by timestamp\n const down = findLastAction(\n commands,\n PointerEventType.PET_DOWN,\n inputAction,\n entity\n )\n // We search the last UP command sorted by timestamp\n if (!down) return null\n\n const up = findLastAction(\n commands,\n PointerEventType.PET_UP,\n inputAction,\n entity\n )\n\n if (!up) return null\n\n const state = InternalInputStateComponent.get(engine.RootEntity)\n\n // If the DOWN command has happen before the UP commands, it means that that a clicked has happen\n if (\n down.timestamp < up.timestamp &&\n up.timestamp > state.timestampLastUpdate\n ) {\n InternalInputStateComponent.getMutable(\n engine.RootEntity\n ).currentTimestamp = Math.max(up.timestamp, state.currentTimestamp)\n return { up, down }\n }\n return null\n }\n\n function getInputCommand(\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ): PBPointerEventsResult_PointerCommand | null {\n if (inputAction !== InputAction.IA_ANY) {\n return findInputCommand(inputAction, pointerEventType, entity)\n }\n\n for (const input of InputCommands) {\n const cmd = findInputCommand(input, pointerEventType, entity)\n if (cmd) return cmd\n }\n return null\n }\n\n function findInputCommand(\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ): PBPointerEventsResult_PointerCommand | null {\n const component = engine.baseComponents.PointerEventsResult.getOrNull(\n engine.RootEntity\n )\n if (!component) return null\n\n // We search the last pointer Event command sorted by timestamp\n const command = findLastAction(\n component.commands,\n pointerEventType,\n inputAction,\n entity\n )\n if (!command) return null\n\n const state = InternalInputStateComponent.get(engine.RootEntity)\n if (command.timestamp > state.timestampLastUpdate) {\n InternalInputStateComponent.getMutable(\n engine.RootEntity\n ).currentTimestamp = Math.max(command.timestamp, state.currentTimestamp)\n return command\n } else {\n return null\n }\n }\n\n function isClicked(inputAction: InputAction, entity?: Entity) {\n return getClick(inputAction, entity) !== null\n }\n\n function isTriggered(\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ) {\n return getInputCommand(inputAction, pointerEventType, entity) !== null\n }\n\n function isPressed(inputAction: InputAction) {\n return InternalInputStateComponent.get(engine.RootEntity).buttonState[\n inputAction\n ].value\n }\n\n return {\n // @public\n isPressed,\n // @internal\n getClick,\n // @public\n getInputCommand,\n // @internal\n isClicked,\n // @public\n isTriggered\n }\n}\n\nfunction findLastAction(\n commands: readonly PBPointerEventsResult_PointerCommand[],\n pointerEventType: PointerEventType,\n inputAction: InputAction,\n entity?: Entity\n): PBPointerEventsResult_PointerCommand | undefined {\n let commandToReturn: PBPointerEventsResult_PointerCommand | undefined =\n undefined\n\n for (const command of commands) {\n if (\n command.button === inputAction &&\n command.state === pointerEventType &&\n (!entity || (command.hit && entity === command.hit.entityId))\n ) {\n if (!commandToReturn || command.timestamp >= commandToReturn.timestamp)\n commandToReturn = command\n }\n }\n\n return commandToReturn\n}\n","declare let Promise: any\n\n/**\n * A class serves as a medium between the observable and its observers\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed\n */\nexport class ObserverEventState {\n /**\n * An Observer can set this property to true to prevent subsequent observers of being notified\n */\n public skipNextObservers!: boolean\n\n /**\n * Get the mask value that were used to trigger the event corresponding to this EventState object\n */\n public mask!: number\n\n /**\n * The object that originally notified the event\n */\n public target?: any\n\n /**\n * The current object in the bubbling phase\n */\n public currentTarget?: any\n\n /**\n * This will be populated with the return value of the last function that was executed.\n * If it is the first function in the callback chain it will be the event data.\n */\n public lastReturnValue?: any\n\n /**\n * Create a new EventState\n * @param mask - defines the mask associated with this state\n * @param skipNextObservers - defines a flag which will instruct the observable to skip following observers when set to true\n * @param target - defines the original target of the state\n * @param currentTarget - defines the current target of the state\n */\n constructor(\n mask: number,\n skipNextObservers = false,\n target?: any,\n currentTarget?: any\n ) {\n this.initalize(mask, skipNextObservers, target, currentTarget)\n }\n\n /**\n * Initialize the current event state\n * @param mask - defines the mask associated with this state\n * @param skipNextObservers - defines a flag which will instruct the observable to skip following observers when set to true\n * @param target - defines the original target of the state\n * @param currentTarget - defines the current target of the state\n * @returns the current event state\n */\n public initalize(\n mask: number,\n skipNextObservers = false,\n target?: any,\n currentTarget?: any\n ): ObserverEventState {\n this.mask = mask\n this.skipNextObservers = skipNextObservers\n this.target = target\n this.currentTarget = currentTarget\n return this\n }\n}\n\n/**\n * Represent an Observer registered to a given Observable object.\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed\n */\nexport class Observer<T> {\n /**\n * Gets or sets a property defining that the observer as to be unregistered after the next notification\n */\n public unregisterOnNextCall = false\n\n /** For internal usage */\n public _willBeUnregistered = false\n\n /**\n * Creates a new observer\n * @param callback - defines the callback to call when the observer is notified\n * @param mask - defines the mask of the observer (used to filter notifications)\n * @param scope - defines the current scope used to restore the JS context\n */\n constructor(\n /**\n * Defines the callback to call when the observer is notified\n */\n public callback: (eventData: T, eventState: ObserverEventState) => void,\n /**\n * Defines the mask of the observer (used to filter notifications)\n */\n public mask: number,\n /**\n * Defines the current scope used to restore the JS context\n */\n public scope: any = null\n ) {}\n}\n\n/**\n * The Observable class is a simple implementation of the Observable pattern.\n *\n * There's one slight particularity though: a given Observable can notify its observer using a particular mask value, only the Observers registered with this mask value will be notified.\n * This enable a more fine grained execution without having to rely on multiple different Observable objects.\n * For instance you may have a given Observable that have four different types of notifications: Move (mask = 0x01), Stop (mask = 0x02), Turn Right (mask = 0X04), Turn Left (mask = 0X08).\n * A given observer can register itself with only Move and Stop (mask = 0x03), then it will only be notified when one of these two occurs and will never be for Turn Left/Right.\n *\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed\n */\nexport class Observable<T> {\n private _observers = new Array<Observer<T>>()\n\n private _eventState: ObserverEventState\n\n private _onObserverAdded: null | ((observer: Observer<T>) => void) = null\n\n /**\n * Creates a new observable\n * @param onObserverAdded - defines a callback to call when a new observer is added\n */\n constructor(onObserverAdded?: (observer: Observer<T>) => void) {\n this._eventState = new ObserverEventState(0)\n\n if (onObserverAdded) {\n this._onObserverAdded = onObserverAdded\n }\n }\n\n /**\n * Create a new Observer with the specified callback\n * @param callback - the callback that will be executed for that Observer\n * @param mask - the mask used to filter observers\n * @param insertFirst - if true the callback will be inserted at the first position, hence executed before the others ones. If false (default behavior) the callback will be inserted at the last position, executed after all the others already present.\n * @param scope - optional scope for the callback to be called from\n * @param unregisterOnFirstCall - defines if the observer as to be unregistered after the next notification\n * @returns the new observer created for the callback\n */\n public add(\n callback: (eventData: T, eventState: ObserverEventState) => void,\n mask: number = -1,\n insertFirst = false,\n scope: any = null,\n unregisterOnFirstCall = false\n ): null | Observer<T> {\n if (!callback) {\n return null\n }\n\n const observer = new Observer(callback, mask, scope)\n observer.unregisterOnNextCall = unregisterOnFirstCall\n\n if (insertFirst) {\n this._observers.unshift(observer)\n } else {\n this._observers.push(observer)\n }\n\n if (this._onObserverAdded) {\n this._onObserverAdded(observer)\n }\n\n return observer\n }\n\n /**\n * Create a new Observer with the specified callback and unregisters after the next notification\n * @param callback - the callback that will be executed for that Observer\n * @returns the new observer created for the callback\n */\n public addOnce(\n callback: (eventData: T, eventState: ObserverEventState) => void\n ): null | Observer<T> {\n return this.add(callback, undefined, undefined, undefined, true)\n }\n\n /**\n * Remove an Observer from the Observable object\n * @param observer - the instance of the Observer to remove\n * @returns false if it doesn't belong to this Observable\n */\n public remove(observer: null | Observer<T>): boolean {\n if (!observer) {\n return false\n }\n\n const index = this._observers.indexOf(observer)\n\n if (index !== -1) {\n this._deferUnregister(observer)\n return true\n }\n\n return false\n }\n\n /**\n * Remove a callback from the Observable object\n * @param callback - the callback to remove\n * @param scope - optional scope. If used only the callbacks with this scope will be removed\n * @returns false if it doesn't belong to this Observable\n */\n public removeCallback(\n callback: (eventData: T, eventState: ObserverEventState) => void,\n scope?: any\n ): boolean {\n for (let index = 0; index < this._observers.length; index++) {\n if (\n this._observers[index].callback === callback &&\n (!scope || scope === this._observers[index].scope)\n ) {\n this._deferUnregister(this._observers[index])\n return true\n }\n }\n\n return false\n }\n\n /**\n * Notify all Observers by calling their respective callback with the given data\n * Will return true if all observers were executed, false if an observer set skipNextObservers to true, then prevent the subsequent ones to execute\n * @param eventData - defines the data to send to all observers\n * @param mask - defines the mask of the current notification (observers with incompatible mask (ie mask & observer.mask === 0) will not be notified)\n * @param target - defines the original target of the state\n * @param currentTarget - defines the current target of the state\n * @returns false if the complete observer chain was not processed (because one observer set the skipNextObservers to true)\n */\n public notifyObservers(\n eventData: T,\n mask: number = -1,\n target?: any,\n currentTarget?: any\n ): boolean {\n if (!this._observers.length) {\n return true\n }\n\n const state = this._eventState\n state.mask = mask\n state.target = target\n state.currentTarget = currentTarget\n state.skipNextObservers = false\n state.lastReturnValue = eventData\n\n for (const obs of this._observers) {\n if (obs._willBeUnregistered) {\n continue\n }\n\n if (obs.mask & mask) {\n if (obs.scope) {\n state.lastReturnValue = obs.callback.apply(obs.scope, [\n eventData,\n state\n ])\n } else {\n state.lastReturnValue = obs.callback(eventData, state)\n }\n\n if (obs.unregisterOnNextCall) {\n this._deferUnregister(obs)\n }\n }\n if (state.skipNextObservers) {\n return false\n }\n }\n return true\n }\n\n /**\n * Calling this will execute each callback, expecting it to be a promise or return a value.\n * If at any point in the chain one function fails, the promise will fail and the execution will not continue.\n * This is useful when a chain of events (sometimes async events) is needed to initialize a certain object\n * and it is crucial that all callbacks will be executed.\n * The order of the callbacks is kept, callbacks are not executed parallel.\n *\n * @param eventData - The data to be sent to each callback\n * @param mask - is used to filter observers defaults to -1\n * @param target - defines the callback target (see EventState)\n * @param currentTarget - defines he current object in the bubbling phase\n * @returns will return a Promise than resolves when all callbacks executed successfully.\n */\n public notifyObserversWithPromise(\n eventData: T,\n mask: number = -1,\n target?: any,\n currentTarget?: any\n ): Promise<T> {\n // create an empty promise\n let p: Promise<any> = Promise.resolve(eventData)\n\n // no observers? return this promise.\n if (!this._observers.length) {\n return p\n }\n\n const state = this._eventState\n state.mask = mask\n state.target = target\n state.currentTarget = currentTarget\n state.skipNextObservers = false\n\n // execute one callback after another (not using Promise.all, the order is important)\n this._observers.forEach((obs) => {\n if (state.skipNextObservers) {\n return\n }\n if (obs._willBeUnregistered) {\n return\n }\n if (obs.mask & mask) {\n if (obs.scope) {\n p = p.then((lastReturnedValue) => {\n state.lastReturnValue = lastReturnedValue\n return obs.callback.apply(obs.scope, [eventData, state])\n })\n } else {\n p = p.then((lastReturnedValue) => {\n state.lastReturnValue = lastReturnedValue\n return obs.callback(eventData, state)\n })\n }\n if (obs.unregisterOnNextCall) {\n this._deferUnregister(obs)\n }\n }\n })\n\n // return the eventData\n return p.then(() => {\n return eventData\n })\n }\n\n /**\n * Notify a specific observer\n * @param observer - defines the observer to notify\n * @param eventData - defines the data to be sent to each callback\n * @param mask - is used to filter observers defaults to -1\n */\n public notifyObserver(\n observer: Observer<T>,\n eventData: T,\n mask: number = -1\n ): void {\n const state = this._eventState\n state.mask = mask\n state.skipNextObservers = false\n\n observer.callback(eventData, state)\n }\n\n /**\n * Gets a boolean indicating if the observable has at least one observer\n * @returns true is the Observable has at least one Observer registered\n */\n public hasObservers(): boolean {\n return this._observers.length > 0\n }\n\n /**\n * Clear the list of observers\n */\n public clear(): void {\n this._observers = new Array<Observer<T>>()\n this._onObserverAdded = null\n }\n\n /**\n * Clone the current observable\n * @returns a new observable\n */\n public clone(): Observable<T> {\n const result = new Observable<T>()\n\n result._observers = this._observers.slice(0)\n\n return result\n }\n\n /**\n * Does this observable handles observer registered with a given mask\n * @param mask - defines the mask to be tested\n * @returns whether or not one observer registered with the given mask is handeled\n */\n public hasSpecificMask(mask: number = -1): boolean {\n for (const obs of this._observers) {\n if (obs.mask & mask || obs.mask === mask) {\n return true\n }\n }\n return false\n }\n\n private _deferUnregister(observer: Observer<T>): void {\n observer.unregisterOnNextCall = false\n observer._willBeUnregistered = true\n Promise.resolve().then.bind(Promise.resolve())(async () =>\n this._remove(observer)\n )\n }\n\n // This should only be called when not iterating over _observers to avoid callback skipping.\n // Removes an observer from the _observer Array.\n private _remove(observer: null | Observer<T>): boolean {\n if (!observer) {\n return false\n }\n\n const index = this._observers.indexOf(observer)\n\n if (index !== -1) {\n this._observers.splice(index, 1)\n return true\n }\n\n return false\n }\n}\n","import { Observable } from './temp-fp/Observable'\n\n/**\n * @internal\n * This function generates a callback that is passed to the Observable\n * constructor to subscribe to the events of the DecentralandInterface\n */\nfunction createSubscriber(eventName: keyof IEvents) {\n return () => {\n if (typeof dcl !== 'undefined') dcl.subscribe(eventName)\n }\n}\n\n/**\n * These events are triggered after your character enters the scene.\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onEnterSceneObservable = new Observable<IEvents['onEnterScene']>(\n createSubscriber('onEnterScene')\n)\n\n/** @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed. Use onEnterSceneObservable instead. */\nexport const onEnterScene = onEnterSceneObservable\n\n/**\n * These events are triggered after your character leaves the scene.\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onLeaveSceneObservable = new Observable<IEvents['onLeaveScene']>(\n createSubscriber('onLeaveScene')\n)\n\n/** @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed. Use onLeaveSceneObservable instead. */\nexport const onLeaveScene = onLeaveSceneObservable\n\n/**\n * This event is triggered after all the resources of the scene were loaded (models, textures, etc...)\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onSceneReadyObservable = new Observable<IEvents['sceneStart']>(\n createSubscriber('sceneStart')\n)\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onPlayerExpressionObservable = new Observable<\n IEvents['playerExpression']\n>(createSubscriber('playerExpression'))\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onVideoEvent = new Observable<IEvents['videoEvent']>(\n createSubscriber('videoEvent')\n)\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onProfileChanged = new Observable<IEvents['profileChanged']>(\n createSubscriber('profileChanged')\n)\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onPlayerConnectedObservable = new Observable<\n IEvents['playerConnected']\n>(createSubscriber('playerConnected'))\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onPlayerDisconnectedObservable = new Observable<\n IEvents['playerDisconnected']\n>(createSubscriber('playerDisconnected'))\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onRealmChangedObservable = new Observable<\n IEvents['onRealmChanged']\n>(createSubscriber('onRealmChanged'))\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onPlayerClickedObservable = new Observable<\n IEvents['playerClicked']\n>(createSubscriber('playerClicked'))\n\n/**\n * @internal\n * This function adds _one_ listener to the onEvent event of dcl interface.\n * Leveraging a switch to route events to the Observable handlers.\n */\nexport function _initEventObservables() {\n if (typeof dcl !== 'undefined') {\n dcl.onEvent((event) => {\n switch (event.type) {\n case 'onEnterScene': {\n onEnterSceneObservable.notifyObservers(\n event.data as IEvents['onEnterScene']\n )\n return\n }\n case 'onLeaveScene': {\n onLeaveSceneObservable.notifyObservers(\n event.data as IEvents['onLeaveScene']\n )\n return\n }\n case 'sceneStart': {\n onSceneReadyObservable.notifyObservers(\n event.data as IEvents['sceneStart']\n )\n return\n }\n case 'playerExpression': {\n onPlayerExpressionObservable.notifyObservers(\n event.data as IEvents['playerExpression']\n )\n return\n }\n case 'videoEvent': {\n const videoData = event.data as IEvents['videoEvent']\n onVideoEvent.notifyObservers(videoData)\n return\n }\n case 'profileChanged': {\n onProfileChanged.notifyObservers(\n event.data as IEvents['profileChanged']\n )\n return\n }\n case 'playerConnected': {\n onPlayerConnectedObservable.notifyObservers(\n event.data as IEvents['playerConnected']\n )\n return\n }\n case 'playerDisconnected': {\n onPlayerDisconnectedObservable.notifyObservers(\n event.data as IEvents['playerDisconnected']\n )\n return\n }\n case 'onRealmChanged': {\n onRealmChangedObservable.notifyObservers(\n event.data as IEvents['onRealmChanged']\n )\n return\n }\n case 'playerClicked': {\n onPlayerClickedObservable.notifyObservers(\n event.data as IEvents['playerClicked']\n )\n return\n }\n }\n })\n }\n}\n","import { IEngine } from '../../engine'\nimport { _initEventObservables } from '../observables'\n\nexport function initializeDcl(engine: IEngine) {\n if (typeof dcl !== 'undefined') {\n dcl.loadModule('~system/EngineApi', {}).catch(dcl.error)\n\n dcl.onUpdate((dt: number) => {\n engine.update(dt)\n })\n\n _initEventObservables()\n\n return {\n log: dcl.log,\n error: dcl.error\n }\n }\n\n return {\n log: voidFn,\n error: voidFn\n }\n}\n\nfunction voidFn() {}\n","/**\n * @alpha * This file initialization is an alpha one. This is based on the old-ecs\n * init and it'll be changing.\n */\n\nimport { Engine } from '../../engine'\nimport { Task, taskSystem } from '../../systems/async-task'\nimport { createRendererTransport } from '../../systems/crdt/transports/rendererTransport'\nimport { EventsSystem } from '../../systems/events'\nimport { createInput } from './../../engine/input'\nimport { initializeDcl } from './dcl'\n\nconst rendererTransport = createRendererTransport()\nexport const engine = Engine({\n transports: [rendererTransport]\n})\n\n// Dcl Interface\nconst dclInterface = initializeDcl(engine)\n/**\n * Log function. Only works in debug mode, otherwise it does nothing.\n * @param args - any loggable parameter\n * @public\n */\nexport const log = dclInterface.log\n\n/**\n * Error function. Prints a console error. Only works in debug mode, otherwise it does nothing.\n * @param error - string or Error object.\n * @param data - any debug information.\n * @public\n */\nexport const error = dclInterface.error\n\n// INPUT Manager\n/**\n * @public\n */\nexport const Input = createInput(engine)\n\n/**\n * @public\n * Execute async task\n */\nexport const executeTask = taskSystem(engine).executeTask\nexport type { Task }\nexport { EventsSystem }\nengine.addSystem(EventsSystem.update(Input))\n","import { IEngine } from '../engine/types'\n\n/**\n * Transform parenting: cyclic dependency checker\n * It checks only in modified Transforms\n *\n * Add this system with:\n * ```ts\n * engine.addSystem(cyclicParentingChecker(engine))\n * ````\n * And then it will check every tick the parenting.\n *\n * @public\n *\n * @params engine\n * @returns a system\n */\nexport function cyclicParentingChecker(engine: IEngine) {\n const Transform = engine.baseComponents.Transform\n return () => {\n for (const entity of Transform.dirtyIterator()) {\n let transform = Transform.getOrNull(entity)\n while (transform && transform.parent) {\n if (transform.parent === entity) {\n dcl.error(`There is a cyclic parent with entity ${entity}`)\n break\n } else {\n transform = Transform.getOrNull(transform.parent)\n }\n }\n }\n }\n}\n","import { engine } from '../../runtime/initialization'\n\n/** @public */\nexport const Transform = engine.baseComponents.Transform\n/** @public */\nexport const Animator = engine.baseComponents.Animator\n/** @public */\nexport const AudioSource = engine.baseComponents.AudioSource\n/** @public */\nexport const AudioStream = engine.baseComponents.AudioStream\n/** @public */\nexport const AvatarAttach = engine.baseComponents.AvatarAttach\n/** @public */\nexport const AvatarModifierArea = engine.baseComponents.AvatarModifierArea\n/** @public */\nexport const AvatarShape = engine.baseComponents.AvatarShape\n/** @public */\nexport const Billboard = engine.baseComponents.Billboard\n/** @public */\nexport const CameraMode = engine.baseComponents.CameraMode\n/** @public */\nexport const CameraModeArea = engine.baseComponents.CameraModeArea\n/** @public */\nexport const GltfContainer = engine.baseComponents.GltfContainer\n/** @public */\nexport const Material = engine.baseComponents.Material\n/** @public */\nexport const MeshCollider = engine.baseComponents.MeshCollider\n/** @public */\nexport const MeshRenderer = engine.baseComponents.MeshRenderer\n/** @public */\nexport const NftShape = engine.baseComponents.NftShape\n/** @public */\nexport const PointerEventsResult = engine.baseComponents.PointerEventsResult\n/** @public */\nexport const PointerHoverFeedback = engine.baseComponents.PointerHoverFeedback\n/** @public */\nexport const PointerLock = engine.baseComponents.PointerLock\n/** @public */\nexport const Raycast = engine.baseComponents.Raycast\n/** @public */\nexport const RaycastResult = engine.baseComponents.RaycastResult\n/** @public */\nexport const TextShape = engine.baseComponents.TextShape\n/** @public */\nexport const UiBackground = engine.baseComponents.UiBackground\n/** @public */\nexport const UiText = engine.baseComponents.UiText\n/** @public */\nexport const UiTransform = engine.baseComponents.UiTransform\n/** @public */\nexport const VisibilityComponent = engine.baseComponents.VisibilityComponent\n","import { engine } from '../../runtime/initialization'\n/** @public */\nexport namespace Components {\n\t/** @public */\n\texport const Transform = engine.baseComponents.Transform\n\t/** @public */\n\texport const Animator = engine.baseComponents.Animator\n\t/** @public */\n\texport const AudioSource = engine.baseComponents.AudioSource\n\t/** @public */\n\texport const AudioStream = engine.baseComponents.AudioStream\n\t/** @public */\n\texport const AvatarAttach = engine.baseComponents.AvatarAttach\n\t/** @public */\n\texport const AvatarModifierArea = engine.baseComponents.AvatarModifierArea\n\t/** @public */\n\texport const AvatarShape = engine.baseComponents.AvatarShape\n\t/** @public */\n\texport const Billboard = engine.baseComponents.Billboard\n\t/** @public */\n\texport const CameraMode = engine.baseComponents.CameraMode\n\t/** @public */\n\texport const CameraModeArea = engine.baseComponents.CameraModeArea\n\t/** @public */\n\texport const GltfContainer = engine.baseComponents.GltfContainer\n\t/** @public */\n\texport const Material = engine.baseComponents.Material\n\t/** @public */\n\texport const MeshCollider = engine.baseComponents.MeshCollider\n\t/** @public */\n\texport const MeshRenderer = engine.baseComponents.MeshRenderer\n\t/** @public */\n\texport const NftShape = engine.baseComponents.NftShape\n\t/** @public */\n\texport const PointerEventsResult = engine.baseComponents.PointerEventsResult\n\t/** @public */\n\texport const PointerHoverFeedback = engine.baseComponents.PointerHoverFeedback\n\t/** @public */\n\texport const PointerLock = engine.baseComponents.PointerLock\n\t/** @public */\n\texport const Raycast = engine.baseComponents.Raycast\n\t/** @public */\n\texport const RaycastResult = engine.baseComponents.RaycastResult\n\t/** @public */\n\texport const TextShape = engine.baseComponents.TextShape\n\t/** @public */\n\texport const UiBackground = engine.baseComponents.UiBackground\n\t/** @public */\n\texport const UiText = engine.baseComponents.UiText\n\t/** @public */\n\texport const UiTransform = engine.baseComponents.UiTransform\n\t/** @public */\n\texport const VisibilityComponent = engine.baseComponents.VisibilityComponent\n}\n","import { Observable, Observer } from './temp-fp/Observable'\n\nlet communicationsController: ModuleDescriptor | null = null\nlet communicationsControllerPromise: PromiseLike<ModuleDescriptor> | null = null\n\nlet _messageObserver: null | Observable<IEvents['comms']> = null\n\n/**\n * @internal\n */\nexport function getMessageObserver() {\n if (!_messageObserver) {\n _messageObserver = new Observable<IEvents['comms']>()\n }\n return _messageObserver\n}\n\nfunction ensureCommunicationsController() {\n if (!communicationsControllerPromise) {\n communicationsControllerPromise = dcl.loadModule(\n '~system/CommunicationsController',\n {}\n )\n\n void communicationsControllerPromise.then(($) => {\n communicationsController = $\n })\n\n const observer = getMessageObserver()\n\n dcl.subscribe('comms')\n dcl.onEvent((event) => {\n if (event.type === 'comms') {\n observer.notifyObservers(event.data as any)\n }\n })\n }\n return communicationsControllerPromise\n}\n\n/**\n * @public\n * @deprecated\n */\nexport class MessageBus {\n private messageQueue: string[] = []\n private connected = false\n private flushing = false\n\n constructor() {\n void ensureCommunicationsController().then(() => {\n this.connected = true\n this.flush()\n })\n }\n\n on(\n message: string,\n callback: (value: any, sender: string) => void\n ): Observer<IEvents['comms']> {\n return getMessageObserver().add((e) => {\n try {\n const m = JSON.parse(e.message)\n\n if (m.message === message) {\n callback(m.payload, e.sender)\n }\n } catch (e) {\n dcl.error(\n 'Error parsing comms message ' + ((e as Error).message || ''),\n e\n )\n }\n })!\n }\n\n // @internal\n sendRaw(message: string) {\n this.messageQueue.push(message)\n\n if (this.connected) {\n this.flush()\n }\n }\n\n emit(message: string, payload: Record<any, any>) {\n const messageToSend = JSON.stringify({ message, payload })\n this.sendRaw(messageToSend)\n getMessageObserver().notifyObservers({\n message: messageToSend,\n sender: 'self'\n })\n }\n\n private flush() {\n if (this.messageQueue.length === 0) return\n if (!this.connected) return\n if (!communicationsController) return\n if (this.flushing) return\n\n const message = this.messageQueue.shift()\n\n this.flushing = true\n\n dcl.callRpc(communicationsController.rpcHandle, 'send', [message]).then(\n (_) => {\n this.flushing = false\n this.flush()\n },\n (_) => {\n this.flushing = false\n }\n )\n }\n}\n","/* eslint-disable */\nconst protobufPackage = 'decentraland.sdk.components.common'\n\nexport const enum CameraType {\n CT_FIRST_PERSON = 0,\n CT_THIRD_PERSON = 1\n}\n","/* eslint-disable */\nconst protobufPackage = 'decentraland.sdk.components.common'\n\nexport const enum InputAction {\n IA_POINTER = 0,\n IA_PRIMARY = 1,\n IA_SECONDARY = 2,\n IA_ANY = 3,\n IA_FORWARD = 4,\n IA_BACKWARD = 5,\n IA_RIGHT = 6,\n IA_LEFT = 7,\n IA_JUMP = 8,\n IA_WALK = 9,\n IA_ACTION_3 = 10,\n IA_ACTION_4 = 11,\n IA_ACTION_5 = 12,\n IA_ACTION_6 = 13\n}\n","/* eslint-disable */\nconst protobufPackage = 'decentraland.sdk.components.common'\n\nexport const enum TextAlignMode {\n TAM_TOP_LEFT = 0,\n TAM_TOP_CENTER = 1,\n TAM_TOP_RIGHT = 2,\n TAM_MIDDLE_LEFT = 3,\n TAM_MIDDLE_CENTER = 4,\n TAM_MIDDLE_RIGHT = 5,\n TAM_BOTTOM_LEFT = 6,\n TAM_BOTTOM_CENTER = 7,\n TAM_BOTTOM_RIGHT = 8\n}\n\nexport const enum Font {\n F_LIBERATION_SANS = 0,\n F_SANS_SERIF = 1\n}\n"],"names":["Object","defineProperty","types","value","RAD2DEG","DEG2RAD","Epsilon","ToLinearSpace","ToGammaSpace","Math","PI","exports","Scalar","sign","_value","isNaN","clamp","min","max","repeat","length","floor","deltaAngle","current","target","num","moveTowards","maxDelta","result","abs","TwoPi","withinEpsilon","a","b","epsilon","toHex","i","str","toString","toUpperCase","log2","log","LOG2E","normalize","denormalize","normalized","pingPong","tx","t","smoothStep","from","to","moveTowardsAngle","lerp","start","end","amount","lerpAngle","inverseLerp","hermite","value1","tangent1","value2","tangent2","squared","cubed","randomRange","random","rangeToPercent","percentToRange","percent","normalizeRadians","angle","Vector3","types_1","require$$0","Quaternion_1","require$$1","Scalar_1","require$$2","create","x","y","z","add","vector1","vector2","copyFrom","source","dest","copyFromFloats","clone","fromArray","array","offset","fromArrayToRef","vector","sqrt","scaleToRef","scale","normalizeFromLength","len","normalizeFromLengthToRef","dot","left","right","applyMatrix4ToRef","matrix","m","_m","w","rotateToRef","q","qx","qy","qz","qw","ix","iy","iz","iw","lerpToRef","crossToRef","transformCoordinatesToRef","transformation","transformCoordinatesFromFloatsToRef","rx","ry","rz","rw","transformNormalToRef","transformNormalFromFloatsToRef","clampToRef","distanceSquared","rotationFromAxisToRef","axis1","axis2","axis3","quat","Quaternion","fromAxisToRotationQuaternionToRef","toEulerAngles","multiplyToRef","multiplyByFloatsToRef","maximizeInPlaceFromFloatsToRef","minimizeInPlaceFromFloatsToRef","Zero","isNonUniform","absX","addToRef","subtract","subtractToRef","subtractFromFloatsToRef","negate","getClipFactor","vector0","axis","size","d0","getAngleBetweenVectors","normal","v0","v1","v0v1dot","n","acos","fromFloatArray","fromFloatArrayToRef","lengthSquared","normalizeToRef","applyMatrix4","rotate","cross","transformCoordinates","transformNormal","catmullRom","value3","value4","v","part1","part2","part3","part4","minimize","maximize","distance","center","rotationFromAxis","rotation","getHashCode","hash","equals","equalsWithEpsilon","equalsToFloats","multiply","multiplyByFloats","divide","divideToRef","fract","One","Up","Down","Forward","Backward","Right","Left","Random","Plane","Vector3_1","Matrix_1","c","d","fromPoints","_point1","_point2","_point3","romPositionAndNormal","origin","signedDistanceToPlaneFromPositionAndNormal","point","asArray","plane","_plane","norm","magnitude","transform","transposedMatrix","Matrix","transposeToRef","dotCoordinate","copyFromPoints","point1","point2","point3","x1","y1","z1","x2","y2","z2","yz","xz","xy","pyth","invPyth","isFrontFacingTo","direction","signedDistanceTo","Plane_1","self","_updateFlagSeed","_identityReadonly","newMatrix","updateFlag","isIdentity","isIdentity3x2","_isIdentityDirty","_isIdentity3x2Dirty","_updateIdentityStatus","index","_markAsUpdated","fromValuesToRef","initialM11","initialM12","initialM13","initialM14","initialM21","initialM22","initialM23","initialM24","initialM31","initialM32","initialM33","initialM34","initialM41","initialM42","initialM43","initialM44","fromValues","composeToRef","translation","tmpMatrix","scalingToRef","fromQuaternionToRef","setTranslation","Identity","identity","rotationXToRef","s","sin","cos","rotationYToRef","rotationZToRef","rotationAxisToRef","_axis","c1","rotationYawPitchRollToRef","yaw","pitch","roll","quaternionResult","fromRotationYawPitchRollToRef","translationToRef","startValue","endValue","gradient","decomposeLerpToRef","startScale","startRotation","startTranslation","decompose","endScale","endRotation","endTranslation","resultScale","resultRotation","slerpToRef","resultTranslation","lookAtLHToRef","eye","up","xAxis","yAxis","zAxis","xSquareLength","ex","ey","ez","lookAtRHToRef","orthoLHToRef","width","height","znear","zfar","orthoOffCenterLHToRef","bottom","top","orthoOffCenterRHToRef","perspectiveFovLHToRef","fov","aspect","isVerticalFovFixed","f","tan","perspectiveFovRHToRef","rm","mm","reflectionToRef","temp","temp2","temp3","xx","yy","zz","zw","zx","yw","xw","determinant","m00","m01","m02","m03","m10","m11","m12","m13","m20","m21","m22","m23","m30","m31","m32","m33","det_22_33","det_21_33","det_21_32","det_20_33","det_20_32","det_20_31","other","invertToRef","copy","cofact_00","cofact_01","cofact_02","cofact_03","det","detInv","det_12_33","det_11_33","det_11_32","det_10_33","det_10_32","det_10_31","det_12_23","det_11_23","det_11_22","det_10_23","det_10_22","det_10_21","setTranslationFromFloats","vector3","copyToArray","arrayDest","offsetDest","multiplyToArray","otherM","tm0","tm1","tm2","tm3","tm4","tm5","tm6","tm7","tm8","tm9","tm10","tm11","tm12","tm13","tm14","tm15","om0","om1","om2","om3","om4","om5","om6","om7","om8","om9","om10","om11","om12","om13","om14","om15","usedScale","sx","sy","sz","fromRotationMatrixToRef","getRotationMatrixToRef","isIdentityDirty","isIdentity3x2Dirty","IdentityReadonly","fromFloatArrayToRefScaled","compose","IdentityToRef","zero","RotationX","rotationY","rotationZ","rotationAxis","rotationYawPitchRoll","scaling","decomposeLerp","LookAtLH","lookAtRH","orthoLH","OrthoOffCenterLH","orthoOffCenterRH","perspectiveLH","perspectiveFovLH","PerspectiveFovRH","perspectiveFovWebVRToRef","rightHanded","rightHandedFactor","upTan","upDegrees","downTan","downDegrees","leftTan","leftDegrees","rightTan","rightDegrees","xScale","yScale","GetAsMatrix2x2","GetAsMatrix3x3","transpose","reflection","fromXYZAxesToRef","xaxis","yaxis","zaxis","isIdentityUpdate","isIdentityAs3x2Update","toArray","reset","addToSelf","invert","addAtIndex","multiplyAtIndex","getTranslation","getTranslationToRef","removeRotationAndScaling","om","setRowFromFloats","scaleAndAddToRef","normalMatrixToRef","ref","tmp","getRotationMatrix","toggleModelMatrixHandInPlace","toggleProjectionMatrixHandInPlace","require$$3","fromRotationYawPitchRoll","halfPitch","halfYaw","halfRoll","c2","c3","s1","s2","s3","quat1","quat2","dotVal","qLength","slerp","q1","rotMat","fromLookAtToRef","position","worldUp","q2","fromEulerDegrees","rotateTowards","maxDegreesDelta","lookRotation","forward","forwardNew","upNew","num8","quaternion","num7","num4","num6","num3","num5","num2","fromToRotation","out","unit","test","atan2","asin","data","trace","flag","fromAngleAxis","degrees","radians","a2","fromAxisToRotationQuaternion","fromLookAt","Color4","r","g","Clear","toLinearSpaceToRef","pow","toGammaSpaceToRef","convertedColor","fromHexString","hex","substring","parseInt","fromInts","Red","Green","Blue","Black","White","Purple","Magenta","Yellow","Gray","Teal","fromColor3","color3","alpha","checkColors4","colors","count","colors4","newIndex","ret","color","set","toHexString","intR","intG","intB","intA","toLinearSpace","toGammaSpace","Color3","Color4_1","toColor4","Array","toLuminance","otherColor","equalsFloats","__createBinding","this","o","k","k2","undefined","enumerable","get","__exportStar","p","prototype","hasOwnProperty","call","require$$4","require$$5","require$$6","aspromise","fn","ctx","params","arguments","pending","Promise","resolve","reject","err","apply","base64","string","charAt","ceil","b64","s64","encode","buffer","parts","chunk","j","push","String","fromCharCode","slice","join","invalidEncoding","decode","charCodeAt","Error","EventEmitter","_listeners","eventemitter","on","evt","off","listeners","splice","emit","args","factory","Float32Array","f32","f8b","Uint8Array","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","round","exponent","LN2","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","bind","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","float","inquire","moduleName","mod","eval","replace","keys","e","inquire_1","utf8","read","write","pool_1","alloc","SIZE","MAX","slab","longbits","LongBits","util","toNumber","zzEncode","zzDecode","zeroHash","fromNumber","isString","Long","fromString","low","high","unsigned","toLong","Boolean","fromHash","toHash","mask","part0","merge","dst","src","ifNotSet","newError","name","CustomError","message","properties","captureStackTrace","stack","constructor","asPromise","pool","require$$7","isNode","global","process","versions","node","window","emptyArray","freeze","emptyObject","isInteger","Number","isFinite","isObject","isset","isSet","obj","prop","isArray","Buffer","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","bits","fromBits","lcFirst","toLowerCase","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","enums","bytes","json","_configure","encoding","allocUnsafe","writer","Writer","BufferWriter","Op","next","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","subarray","_push","uint32","int32","sint32","uint64","int64","sint64","bool","fixed32","sfixed32","fixed64","sfixed64","double","writeBytes","fork","ldelim","finish","BufferWriter_","writer_buffer","writeStringBuffer","writeBytesBuffer","byteLength","reader","Reader","BufferReader","indexOutOfRange","writeLength","RangeError","create_array","isBuffer","readLongVarint","readFixed32_end","readFixed64","_slice","skip","skipType","wireType","BufferReader_","reader_buffer","utf8Slice","service","Service","rpcImpl","requestDelimited","responseDelimited","TypeError","rpcCall","method","requestCtor","responseCtor","request","callback","response","setTimeout","endedByRPC","roots","protobuf","configure","build","rpc","minimalExports","requireMinimal","createBasePBAnimator","PBAnimator","_m0","PBAnimationState","input","tag","createBasePBAnimationState","clip","playing","weight","speed","loop","shouldReset","COMPONENT_ID","AnimatorSchema","serialize","builder","writeBuffer","deserialize","remainingBytes","createBasePBAudioSource","volume","audioClipUrl","PBAudioSource","AudioSourceSchema","createBasePBAudioStream","url","PBAudioStream","AudioStreamSchema","AvatarAnchorPointType","createBasePBAvatarAttach","avatarId","anchorPointId","PBAvatarAttach","AvatarAttachSchema","createBasePosition","Position","createBaseVector3","createBaseVector2","Vector2","AvatarModifierType","createBasePBAvatarModifierArea","area","excludeIds","modifiers","PBAvatarModifierArea","end2","AvatarModifierAreaSchema","long","wasm","WebAssembly","Instance","Module","isLong","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","radix","indexOf","radixToPower","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtrahend","multiplier","get_high","b00","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","delta","approxRes","approxRem","modulo","rem_u","rem_s","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","longExports","requireLong","createBaseColor3","createBaseColor4","createBasePBAvatarShape","id","bodyShape","skinColor","hairColor","eyeColor","expressionTriggerId","expressionTriggerTimestamp","talking","wearables","emotes","PBAvatarShape","longToNumber","globalThis","MAX_SAFE_INTEGER","AvatarShapeSchema","BillboardMode","createBasePBBillboard","billboardMode","oppositeDirection","PBBillboard","BillboardSchema","createBasePBCameraMode","mode","PBCameraMode","CameraModeSchema","createBasePBCameraModeArea","PBCameraModeArea","CameraModeAreaSchema","createBasePBGltfContainer","PBGltfContainer","GltfContainerSchema","TextureWrapMode","TextureFilterMode","createBaseTexture","wrapMode","filterMode","Texture","createBaseAvatarTexture","userId","AvatarTexture","createBaseTextureUnion","tex","TextureUnion","$case","texture","avatarTexture","MaterialTransparencyMode","createBasePBMaterial","material","PBMaterial","PBMaterial_UnlitMaterial","unlit","PBMaterial_PbrMaterial","pbr","createBasePBMaterial_UnlitMaterial","alphaTest","castShadows","createBasePBMaterial_PbrMaterial","alphaTexture","emissiveTexture","bumpTexture","albedoColor","emissiveColor","reflectivityColor","transparencyMode","metallic","roughness","glossiness","specularIntensity","emissiveIntensity","directIntensity","MaterialSchema","ColliderLayer","createBasePBMeshCollider","collisionMask","mesh","PBMeshCollider","PBMeshCollider_BoxMesh","box","PBMeshCollider_SphereMesh","sphere","PBMeshCollider_CylinderMesh","cylinder","PBMeshCollider_PlaneMesh","createBasePBMeshCollider_BoxMesh","_","createBasePBMeshCollider_CylinderMesh","radiusTop","radiusBottom","createBasePBMeshCollider_PlaneMesh","createBasePBMeshCollider_SphereMesh","MeshColliderSchema","createBasePBMeshRenderer","PBMeshRenderer","PBMeshRenderer_BoxMesh","PBMeshRenderer_SphereMesh","PBMeshRenderer_CylinderMesh","PBMeshRenderer_PlaneMesh","createBasePBMeshRenderer_BoxMesh","uvs","createBasePBMeshRenderer_CylinderMesh","createBasePBMeshRenderer_PlaneMesh","createBasePBMeshRenderer_SphereMesh","MeshRendererSchema","NftFrameType","createBasePBNftShape","style","PBNftShape","NftShapeSchema","createBasePBRaycastResult","timestamp","hits","PBRaycastResult","RaycastHit","createBaseRaycastHit","normalHit","meshName","entityId","createBasePBPointerEventsResult","commands","PBPointerEventsResult","PBPointerEventsResult_PointerCommand","createBasePBPointerEventsResult_PointerCommand","button","hit","state","analog","PointerEventsResultSchema","PointerEventType","createBasePBPointerHoverFeedback","pointerEvents","PBPointerHoverFeedback","PBPointerHoverFeedback_Entry","createBasePBPointerHoverFeedback_Info","hoverText","maxDistance","showFeedback","PBPointerHoverFeedback_Info","createBasePBPointerHoverFeedback_Entry","eventType","eventInfo","PointerHoverFeedbackSchema","createBasePBPointerLock","isPointerLocked","PBPointerLock","PointerLockSchema","RaycastQueryType","createBasePBRaycast","queryType","PBRaycast","RaycastSchema","RaycastResultSchema","createBasePBTextShape","text","font","fontSize","fontAutoSize","textAlign","paddingTop","paddingRight","paddingBottom","paddingLeft","lineSpacing","lineCount","textWrapping","shadowBlur","shadowOffsetX","shadowOffsetY","outlineWidth","shadowColor","outlineColor","textColor","PBTextShape","TextShapeSchema","createBasePBUiBackground","backgroundColor","PBUiBackground","UiBackgroundSchema","createBasePBUiText","PBUiText","UiTextSchema","YGPositionType","YGAlign","YGUnit","YGFlexDirection","YGWrap","YGJustify","YGOverflow","YGDisplay","YGEdge","createBasePBUiTransform","parent","rightOf","alignContent","alignItems","flexWrap","flexShrink","positionType","alignSelf","flexDirection","justifyContent","overflow","display","flexBasisUnit","flexBasis","flexGrow","widthUnit","heightUnit","minWidthUnit","minWidth","minHeightUnit","minHeight","maxWidthUnit","maxWidth","maxHeightUnit","maxHeight","positionLeftUnit","positionLeft","positionTopUnit","positionTop","positionRightUnit","positionRight","positionBottomUnit","positionBottom","marginLeftUnit","marginLeft","marginTopUnit","marginTop","marginRightUnit","marginRight","marginBottomUnit","marginBottom","paddingLeftUnit","paddingTopUnit","paddingRightUnit","paddingBottomUnit","PBUiTransform","UiTransformSchema","createBasePBVisibilityComponent","visible","PBVisibilityComponent","VisibilityComponentSchema","defineLibraryComponents","defineComponentFromSchema","Animator","AnimatorSchema.AnimatorSchema","AnimatorSchema.COMPONENT_ID","AudioSource","AudioSourceSchema.AudioSourceSchema","AudioSourceSchema.COMPONENT_ID","AudioStream","AudioStreamSchema.AudioStreamSchema","AudioStreamSchema.COMPONENT_ID","AvatarAttach","AvatarAttachSchema.AvatarAttachSchema","AvatarAttachSchema.COMPONENT_ID","AvatarModifierArea","AvatarModifierAreaSchema.AvatarModifierAreaSchema","AvatarModifierAreaSchema.COMPONENT_ID","AvatarShape","AvatarShapeSchema.AvatarShapeSchema","AvatarShapeSchema.COMPONENT_ID","Billboard","BillboardSchema.BillboardSchema","BillboardSchema.COMPONENT_ID","CameraMode","CameraModeSchema.CameraModeSchema","CameraModeSchema.COMPONENT_ID","CameraModeArea","CameraModeAreaSchema.CameraModeAreaSchema","CameraModeAreaSchema.COMPONENT_ID","GltfContainer","GltfContainerSchema.GltfContainerSchema","GltfContainerSchema.COMPONENT_ID","Material","MaterialSchema.MaterialSchema","MaterialSchema.COMPONENT_ID","MeshCollider","MeshColliderSchema.MeshColliderSchema","MeshColliderSchema.COMPONENT_ID","MeshRenderer","MeshRendererSchema.MeshRendererSchema","MeshRendererSchema.COMPONENT_ID","NftShape","NftShapeSchema.NftShapeSchema","NftShapeSchema.COMPONENT_ID","PointerEventsResult","PointerEventsResultSchema.PointerEventsResultSchema","PointerEventsResultSchema.COMPONENT_ID","PointerHoverFeedback","PointerHoverFeedbackSchema.PointerHoverFeedbackSchema","PointerHoverFeedbackSchema.COMPONENT_ID","PointerLock","PointerLockSchema.PointerLockSchema","PointerLockSchema.COMPONENT_ID","Raycast","RaycastSchema.RaycastSchema","RaycastSchema.COMPONENT_ID","RaycastResult","RaycastResultSchema.RaycastResultSchema","RaycastResultSchema.COMPONENT_ID","TextShape","TextShapeSchema.TextShapeSchema","TextShapeSchema.COMPONENT_ID","UiBackground","UiBackgroundSchema.UiBackgroundSchema","UiBackgroundSchema.COMPONENT_ID","UiText","UiTextSchema.UiTextSchema","UiTextSchema.COMPONENT_ID","UiTransform","UiTransformSchema.UiTransformSchema","UiTransformSchema.COMPONENT_ID","VisibilityComponent","VisibilityComponentSchema.VisibilityComponentSchema","VisibilityComponentSchema.COMPONENT_ID","TRANSFORM_LENGTH","TransformSchema","ptr","incrementWriteOffset","setFloat32","setUint32","incrementReadOffset","getFloat32","getUint32","defineTransformComponent","defineAnimatorComponent","engine","getComponent","getClipAndAnimator","entity","anim","getMutableOrNull","find","item","getClipOrNull","getClip","animator","playSingleAnimation","stopAllAnimations","resetCursor","defineMeshColliderComponent","getCollisionMask","layers","map","reduce","prev","setBox","colliderLayers","createOrReplace","setPlane","setCylinder","setSphere","defineMeshRendererComponent","TextureHelper","Common","Avatar","defineMaterialComponent","setBasicMaterial","setPbrMaterial","defineSdkComponents","Transform","IArray","type","writeUint32","newArray","readUint32","Bool","writeInt8","readInt8","IEnum","Float32","writeFloat32","readFloat32","Float64","writeFloat64","readFloat64","Int64","writeInt64","BigInt","readInt64","Int32","writeInt32","readInt32","Int16","writeInt16","readInt16","Int8","FlatString","TextEncoder","TextDecoder","readBuffer","EcsString","Color3Schema","Color4Schema","EntitySchema","QuaternionSchema","Vector3Schema","IMap","spec","key","newValue","IOptional","Schemas","Float","Double","Byte","Short","Int","iInt64","Entity","Enum","Map","Optional","dist","crdtProtocol","stateIterator","sameData","globalBuffer","key1","entries","key2","updateState","remoteTimestamp","key1Value","newKey1Value","createEvent","processMessage","compareData","getState","distExports","requireDist","getNextSize","currentSize","intendedSize","minNewSize","defaultInitialCapacity","createByteBuffer","options","initialROffset","reading","currentOffset","initialBuffer","initialWOffset","writing","initialCapacity","view","DataView","byteOffset","woffset","roffset","woAdd","newsize","roAdd","bufferLength","resetBuffer","currentReadOffset","currentWriteOffset","getFloat64","getInt8","getInt16","getInt32","getBigInt64","readUint8","getUint8","readUint16","getUint16","readUint64","getBigUint64","toBinary","toCopiedBinary","setFloat64","setInt8","setInt16","setInt32","setBigInt64","writeUint8","setUint8","writeUint16","setUint16","writeUint64","setBigUint64","getInt64","getUint64","setInt64","setUint64","WireMessage","validate","HEADER_LENGTH","readHeader","WireMessage$1","ComponentOperation","EntityUtils","crdtSceneSystem","transports","crdtClient","receivedMessages","transportMessages","getMessages","messagesToProcess","createMessages","dirtyMap","crdtMessages","componentsId","componentId","component","entityComponent","has","event","PUT_COMPONENT","DELETE_COMPONENT","transportMessage","some","filter","Message","messageBuffer","transportBuffer","transport","send","receiveMessages","crdtMessage","deleteFrom","bb","upsertFromBinary","clearDirty","addTransport","transportType","onmessage","chunkMessage","deepReadonly","defineComponent","constructorDefault","dirtyIterator","Set","defaultBuffer","getDefaultValue","prefillValue","_id","default","isDirty","delete","getOrNull","usedValue","getMutable","iterator","writeToByteBuffer","updateFromBinary","clear","EntityContainer","staticEntity","STATIC_ENTITIES_RANGE","dynamicEntity","DYNAMIC_ENTITIES_RANGE","generateEntity","dynamic","removeEntity","entityExists","isReservedEntity","getExistingEntities","range","entityCounter","usedEntities","MESSAGE_HEADER_LENGTH","componentDefinition","startMessageOffset","messageLength","header","common","isInRange","MAX_ENTITIES","DYNAMIC_ENTITIES_START_AT","RESERVED_STATIC_ENTITIES","RESERVED_ENTITIES_RANGE","isDynamicEntity","isStaticEntity","SYSTEMS_REGULAR_PRIORITY","SystemContainer","systems","sort","priority","remove","selector","findIndex","getSystems","preEngine","entityContainer","componentsDefinition","addEntity","newComponent","defComponent","addDynamicEntity","addSystem","removeSystem","getEntitiesWith","components","groupComp","firstComponentDef","componentDefinitions","matches","componentDef","getComponentDefGroup","removeComponentDefinition","Engine","crdtSystem","baseComponents","tranport","getTreeEntityArray","firstEntity","proccesedEntities","removeEntityWithChildren","update","dt","system","dirtySet","definition","_componentId","RootEntity","PlayerEntity","CameraEntity","getAndClean","taskSystem","tasks","forEach","task","async","dcl","error","runTask","executeTask","ECSComponentIDs","componentIds","values","createRendererTransport","rendererTransport","callRpc","then","byteArray","catch","includes","EventsSystem","EventType","getDefaultOpts","opts","eventsMap","getEvent","setHoverFeedback","getPointerEvent","removeEvent","pointerEvent","pointer","removeHoverFeedback","removeOnClick","Click","removeOnPointerDown","removeOnPointerUp","onClick","cb","onPointerDown","onPointerUp","Input","command","getClick","getInputCommand","InputCommands","InternalInputStateSchema","timestampLastUpdate","currentTimestamp","buttonState","ts","InternalInputStateComponentId","TimestampUpdateSystemPriority","ButtonStateUpdateSystemPriority","createInput","InternalInputStateComponent","inputAction","findClick","cmd","down","findLastAction","pointerEventType","findInputCommand","isPressed","isClicked","isTriggered","commandToReturn","ObserverEventState","skipNextObservers","currentTarget","initalize","Observer","scope","unregisterOnNextCall","_willBeUnregistered","Observable","onObserverAdded","_observers","_onObserverAdded","_eventState","insertFirst","unregisterOnFirstCall","observer","unshift","addOnce","_deferUnregister","removeCallback","notifyObservers","eventData","lastReturnValue","obs","notifyObserversWithPromise","lastReturnedValue","notifyObserver","hasObservers","hasSpecificMask","_remove","createSubscriber","eventName","subscribe","onEnterSceneObservable","onEnterScene","onLeaveSceneObservable","onLeaveScene","onSceneReadyObservable","onPlayerExpressionObservable","onVideoEvent","onProfileChanged","onPlayerConnectedObservable","onPlayerDisconnectedObservable","onRealmChangedObservable","onPlayerClickedObservable","_initEventObservables","onEvent","videoData","initializeDcl","loadModule","onUpdate","voidFn","dclInterface","cyclicParentingChecker","Components","communicationsController","communicationsControllerPromise","_messageObserver","getMessageObserver","ensureCommunicationsController","$","MessageBus","messageQueue","connected","flushing","flush","JSON","parse","payload","sender","sendRaw","messageToSend","stringify","shift","rpcHandle","CameraType","InputAction","TextAlignMode","Font","distExports$1","PBColor3","PBColor4","PBPosition","PBVector2","PBVector3","engine$1"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","sources":["../node_modules/@dcl/ecs-math/dist/types.js","../node_modules/@dcl/ecs-math/dist/Scalar.js","../node_modules/@dcl/ecs-math/dist/Vector3.js","../node_modules/@dcl/ecs-math/dist/Plane.js","../node_modules/@dcl/ecs-math/dist/Matrix.js","../node_modules/@dcl/ecs-math/dist/Quaternion.js","../node_modules/@dcl/ecs-math/dist/Color4.js","../node_modules/@dcl/ecs-math/dist/Color3.js","../node_modules/@dcl/ecs-math/dist/index.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/inquire/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/util/minimal.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/roots.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/protobufjs/minimal.js","../src/components/generated/pb/decentraland/sdk/components/animator.gen.ts","../src/components/generated/Animator.gen.ts","../src/components/generated/pb/decentraland/sdk/components/audio_source.gen.ts","../src/components/generated/AudioSource.gen.ts","../src/components/generated/pb/decentraland/sdk/components/audio_stream.gen.ts","../src/components/generated/AudioStream.gen.ts","../src/components/generated/pb/decentraland/sdk/components/avatar_attach.gen.ts","../src/components/generated/AvatarAttach.gen.ts","../src/components/generated/pb/decentraland/common/vectors.gen.ts","../src/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.ts","../src/components/generated/AvatarModifierArea.gen.ts","../node_modules/long/src/long.js","../src/components/generated/pb/decentraland/common/colors.gen.ts","../src/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.ts","../src/components/generated/AvatarShape.gen.ts","../src/components/generated/pb/decentraland/sdk/components/billboard.gen.ts","../src/components/generated/Billboard.gen.ts","../src/components/generated/pb/decentraland/sdk/components/camera_mode.gen.ts","../src/components/generated/CameraMode.gen.ts","../src/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.ts","../src/components/generated/CameraModeArea.gen.ts","../src/components/generated/pb/decentraland/sdk/components/gltf_container.gen.ts","../src/components/generated/GltfContainer.gen.ts","../src/components/generated/pb/decentraland/common/texture.gen.ts","../src/components/generated/pb/decentraland/sdk/components/material.gen.ts","../src/components/generated/Material.gen.ts","../src/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.ts","../src/components/generated/MeshCollider.gen.ts","../src/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.ts","../src/components/generated/MeshRenderer.gen.ts","../src/components/generated/pb/decentraland/sdk/components/nft_shape.gen.ts","../src/components/generated/NftShape.gen.ts","../src/components/generated/pb/decentraland/sdk/components/raycast_result.gen.ts","../src/components/generated/pb/decentraland/sdk/components/pointer_events_result.gen.ts","../src/components/generated/PointerEventsResult.gen.ts","../src/components/generated/pb/decentraland/sdk/components/pointer_hover_feedback.gen.ts","../src/components/generated/PointerHoverFeedback.gen.ts","../src/components/generated/pb/decentraland/sdk/components/pointer_lock.gen.ts","../src/components/generated/PointerLock.gen.ts","../src/components/generated/pb/decentraland/sdk/components/raycast.gen.ts","../src/components/generated/Raycast.gen.ts","../src/components/generated/RaycastResult.gen.ts","../src/components/generated/pb/decentraland/sdk/components/text_shape.gen.ts","../src/components/generated/TextShape.gen.ts","../src/components/generated/pb/decentraland/sdk/components/ui_background.gen.ts","../src/components/generated/UiBackground.gen.ts","../src/components/generated/pb/decentraland/sdk/components/ui_text.gen.ts","../src/components/generated/UiText.gen.ts","../src/components/generated/pb/decentraland/sdk/components/ui_transform.gen.ts","../src/components/generated/UiTransform.gen.ts","../src/components/generated/pb/decentraland/sdk/components/visibility_component.gen.ts","../src/components/generated/VisibilityComponent.gen.ts","../src/components/generated/index.gen.ts","../src/components/legacy/Transform.ts","../src/components/extended/Animator.ts","../src/components/extended/MeshCollider.ts","../src/components/extended/MeshRenderer.ts","../src/components/extended/Material.ts","../src/components/index.ts","../src/schemas/Array.ts","../src/schemas/basic/Boolean.ts","../src/schemas/basic/Enum.ts","../src/schemas/basic/Float.ts","../src/schemas/basic/Integer.ts","../src/schemas/basic/String.ts","../src/schemas/custom/Color3.ts","../src/schemas/custom/Color4.ts","../src/schemas/custom/Entity.ts","../src/schemas/custom/Quaternion.ts","../src/schemas/custom/Vector3.ts","../src/schemas/Map.ts","../src/schemas/Optional.ts","../src/schemas/index.ts","../node_modules/@dcl/crdt/dist/types.js","../node_modules/@dcl/crdt/dist/index.js","../src/serialization/ByteBuffer/index.ts","../src/serialization/wireMessage.ts","../src/serialization/crdt/componentOperation.ts","../src/engine/entity-utils.ts","../src/systems/crdt/index.ts","../src/engine/readonly.ts","../src/engine/component.ts","../src/engine/entity.ts","../src/engine/systems.ts","../src/engine/index.ts","../src/systems/async-task.ts","../src/components/generated/ids.gen.ts","../src/systems/crdt/transports/rendererTransport.ts","../src/systems/events.ts","../src/engine/input.ts","../src/runtime/temp-fp/Observable.ts","../src/runtime/observables.ts","../src/runtime/initialization/dcl.ts","../src/runtime/initialization/index.ts","../src/systems/cyclicParentingChecker.ts","../src/components/generated/global.gen.ts","../src/components/generated/global.namespace.gen.ts","../src/runtime/messageBus.ts","../src/components/generated/pb/decentraland/sdk/components/common/camera_type.gen.ts","../src/components/generated/pb/decentraland/sdk/components/common/input_action.gen.ts","../src/components/generated/pb/decentraland/sdk/components/common/texts.gen.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RAD2DEG = exports.DEG2RAD = exports.Epsilon = exports.ToLinearSpace = exports.ToGammaSpace = void 0;\n/**\n * Constant used to convert a value to gamma space\n * @public\n */\nexports.ToGammaSpace = 1 / 2.2;\n/**\n * Constant used to convert a value to linear space\n * @public\n */\nexports.ToLinearSpace = 2.2;\n/**\n * Constant used to define the minimal number value in Babylon.js\n * @public\n */\nexports.Epsilon = 0.000001;\n/**\n * Constant used to convert from Euler degrees to radians\n * @public\n */\nexports.DEG2RAD = Math.PI / 180;\n/**\n * Constant used to convert from radians to Euler degrees\n * @public\n */\nexports.RAD2DEG = 360 / (Math.PI * 2);\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scalar = void 0;\n/**\n * Scalar computation library\n * @public\n */\nvar Scalar;\n(function (Scalar) {\n /**\n * Two pi constants convenient for computation.\n */\n Scalar.TwoPi = Math.PI * 2;\n /**\n * Boolean : true if the absolute difference between a and b is lower than epsilon (default = 1.401298E-45)\n * @param a - number\n * @param b - number\n * @param epsilon - (default = 1.401298E-45)\n * @returns true if the absolute difference between a and b is lower than epsilon (default = 1.401298E-45)\n */\n function withinEpsilon(a, b, epsilon = 1.401298e-45) {\n const num = a - b;\n return -epsilon <= num && num <= epsilon;\n }\n Scalar.withinEpsilon = withinEpsilon;\n /**\n * Returns a string : the upper case translation of the number i to hexadecimal.\n * @param i - number\n * @returns the upper case translation of the number i to hexadecimal.\n */\n function toHex(i) {\n const str = i.toString(16);\n if (i <= 15) {\n return ('0' + str).toUpperCase();\n }\n return str.toUpperCase();\n }\n Scalar.toHex = toHex;\n /**\n * Returns -1 if value is negative and +1 is value is positive.\n * @param _value - the value\n * @returns the value itself if it's equal to zero.\n */\n function sign(value) {\n const _value = +value; // convert to a number\n if (_value === 0 || isNaN(_value)) {\n return _value;\n }\n return _value > 0 ? 1 : -1;\n }\n Scalar.sign = sign;\n /**\n * Returns the value itself if it's between min and max.\n * Returns min if the value is lower than min.\n * Returns max if the value is greater than max.\n * @param value - the value to clmap\n * @param min - the min value to clamp to (default: 0)\n * @param max - the max value to clamp to (default: 1)\n * @returns the clamped value\n */\n function clamp(value, min = 0, max = 1) {\n return Math.min(max, Math.max(min, value));\n }\n Scalar.clamp = clamp;\n /**\n * the log2 of value.\n * @param value - the value to compute log2 of\n * @returns the log2 of value.\n */\n function log2(value) {\n return Math.log(value) * Math.LOG2E;\n }\n Scalar.log2 = log2;\n /**\n * Loops the value, so that it is never larger than length and never smaller than 0.\n *\n * This is similar to the modulo operator but it works with floating point numbers.\n * For example, using 3.0 for t and 2.5 for length, the result would be 0.5.\n * With t = 5 and length = 2.5, the result would be 0.0.\n * Note, however, that the behaviour is not defined for negative numbers as it is for the modulo operator\n * @param value - the value\n * @param length - the length\n * @returns the looped value\n */\n function repeat(value, length) {\n return value - Math.floor(value / length) * length;\n }\n Scalar.repeat = repeat;\n /**\n * Normalize the value between 0.0 and 1.0 using min and max values\n * @param value - value to normalize\n * @param min - max to normalize between\n * @param max - min to normalize between\n * @returns the normalized value\n */\n function normalize(value, min, max) {\n return (value - min) / (max - min);\n }\n Scalar.normalize = normalize;\n /**\n * Denormalize the value from 0.0 and 1.0 using min and max values\n * @param normalized - value to denormalize\n * @param min - max to denormalize between\n * @param max - min to denormalize between\n * @returns the denormalized value\n */\n function denormalize(normalized, min, max) {\n return normalized * (max - min) + min;\n }\n Scalar.denormalize = denormalize;\n /**\n * Calculates the shortest difference between two given angles given in degrees.\n * @param current - current angle in degrees\n * @param target - target angle in degrees\n * @returns the delta\n */\n function deltaAngle(current, target) {\n let num = repeat(target - current, 360.0);\n if (num > 180.0) {\n num -= 360.0;\n }\n return num;\n }\n Scalar.deltaAngle = deltaAngle;\n /**\n * PingPongs the value t, so that it is never larger than length and never smaller than 0.\n * @param tx - value\n * @param length - length\n * @returns The returned value will move back and forth between 0 and length\n */\n function pingPong(tx, length) {\n const t = repeat(tx, length * 2.0);\n return length - Math.abs(t - length);\n }\n Scalar.pingPong = pingPong;\n /**\n * Interpolates between min and max with smoothing at the limits.\n *\n * This export function interpolates between min and max in a similar way to Lerp. However, the interpolation will gradually speed up\n * from the start and slow down toward the end. This is useful for creating natural-looking animation, fading and other transitions.\n * @param from - from\n * @param to - to\n * @param tx - value\n * @returns the smooth stepped value\n */\n function smoothStep(from, to, tx) {\n let t = clamp(tx);\n t = -2.0 * t * t * t + 3.0 * t * t;\n return to * t + from * (1.0 - t);\n }\n Scalar.smoothStep = smoothStep;\n /**\n * Moves a value current towards target.\n *\n * This is essentially the same as Mathf.Lerp but instead the export function will ensure that the speed never exceeds maxDelta.\n * Negative values of maxDelta pushes the value away from target.\n * @param current - current value\n * @param target - target value\n * @param maxDelta - max distance to move\n * @returns resulting value\n */\n function moveTowards(current, target, maxDelta) {\n let result = 0;\n if (Math.abs(target - current) <= maxDelta) {\n result = target;\n }\n else {\n result = current + sign(target - current) * maxDelta;\n }\n return result;\n }\n Scalar.moveTowards = moveTowards;\n /**\n * Same as MoveTowards but makes sure the values interpolate correctly when they wrap around 360 degrees.\n *\n * Variables current and target are assumed to be in degrees. For optimization reasons, negative values of maxDelta\n * are not supported and may cause oscillation. To push current away from a target angle, add 180 to that angle instead.\n * @param current - current value\n * @param target - target value\n * @param maxDelta - max distance to move\n * @returns resulting angle\n */\n function moveTowardsAngle(current, target, maxDelta) {\n const num = deltaAngle(current, target);\n let result = 0;\n if (-maxDelta < num && num < maxDelta) {\n result = target;\n }\n else {\n result = moveTowards(current, current + num, maxDelta);\n }\n return result;\n }\n Scalar.moveTowardsAngle = moveTowardsAngle;\n /**\n * Creates a new scalar with values linearly interpolated of \"amount\" between the start scalar and the end scalar\n * @param start - start value\n * @param end - target value\n * @param amount - amount to lerp between\n * @returns the lerped value\n */\n function lerp(start, end, amount) {\n return start + (end - start) * amount;\n }\n Scalar.lerp = lerp;\n /**\n * Same as Lerp but makes sure the values interpolate correctly when they wrap around 360 degrees.\n * The parameter t is clamped to the range [0, 1]. Variables a and b are assumed to be in degrees.\n * @param start - start value\n * @param end - target value\n * @param amount - amount to lerp between\n * @returns the lerped value\n */\n function lerpAngle(start, end, amount) {\n let num = repeat(end - start, 360.0);\n if (num > 180.0) {\n num -= 360.0;\n }\n return start + num * clamp(amount);\n }\n Scalar.lerpAngle = lerpAngle;\n /**\n * Calculates the linear parameter t that produces the interpolant value within the range [a, b].\n * @param a - start value\n * @param b - target value\n * @param value - value between a and b\n * @returns the inverseLerp value\n */\n function inverseLerp(a, b, value) {\n let result = 0;\n if (a !== b) {\n result = clamp((value - a) / (b - a));\n }\n else {\n result = 0.0;\n }\n return result;\n }\n Scalar.inverseLerp = inverseLerp;\n /**\n * Returns a new scalar located for \"amount\" (float) on the Hermite spline defined by the scalars \"value1\", \"value3\", \"tangent1\", \"tangent2\".\n * {@link http://mathworld.wolfram.com/HermitePolynomial.html}\n * @param value1 - spline value\n * @param tangent1 - spline value\n * @param value2 - spline value\n * @param tangent2 - spline value\n * @param amount - input value\n * @returns hermite result\n */\n function hermite(value1, tangent1, value2, tangent2, amount) {\n const squared = amount * amount;\n const cubed = amount * squared;\n const part1 = 2.0 * cubed - 3.0 * squared + 1.0;\n const part2 = -2.0 * cubed + 3.0 * squared;\n const part3 = cubed - 2.0 * squared + amount;\n const part4 = cubed - squared;\n return value1 * part1 + value2 * part2 + tangent1 * part3 + tangent2 * part4;\n }\n Scalar.hermite = hermite;\n /**\n * Returns a random float number between and min and max values\n * @param min - min value of random\n * @param max - max value of random\n * @returns random value\n */\n function randomRange(min, max) {\n if (min === max) {\n return min;\n }\n return Math.random() * (max - min) + min;\n }\n Scalar.randomRange = randomRange;\n /**\n * This export function returns percentage of a number in a given range.\n *\n * RangeToPercent(40,20,60) will return 0.5 (50%)\n * RangeToPercent(34,0,100) will return 0.34 (34%)\n * @param num - to convert to percentage\n * @param min - min range\n * @param max - max range\n * @returns the percentage\n */\n function rangeToPercent(num, min, max) {\n return (num - min) / (max - min);\n }\n Scalar.rangeToPercent = rangeToPercent;\n /**\n * This export function returns number that corresponds to the percentage in a given range.\n *\n * PercentToRange(0.34,0,100) will return 34.\n * @param percent - to convert to number\n * @param min - min range\n * @param max - max range\n * @returns the number\n */\n function percentToRange(percent, min, max) {\n return (max - min) * percent + min;\n }\n Scalar.percentToRange = percentToRange;\n /**\n * Returns the angle converted to equivalent value between -Math.PI and Math.PI radians.\n * @param angle - The angle to normalize in radian.\n * @returns The converted angle.\n */\n function normalizeRadians(angle) {\n // More precise but slower version kept for reference.\n // tslint:disable:no-commented-out-code\n /*\n // angle = angle % Tools.TwoPi;\n // angle = (angle + Tools.TwoPi) % Tools.TwoPi;\n \n //if (angle > Math.PI) {\n //\tangle -= Tools.TwoPi;\n //}\n */\n return angle - Scalar.TwoPi * Math.floor((angle + Math.PI) / Scalar.TwoPi);\n }\n Scalar.normalizeRadians = normalizeRadians;\n})(Scalar = exports.Scalar || (exports.Scalar = {}));\n//# sourceMappingURL=Scalar.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vector3 = void 0;\nconst types_1 = require(\"./types\");\nconst Quaternion_1 = require(\"./Quaternion\");\nconst Scalar_1 = require(\"./Scalar\");\n/**\n * @public\n * Vector3 is a type and a namespace.\n * ```\n * // The namespace contains all types and functions to operates with Vector3\n * const next = Vector3.add(pointA, velocityA)\n * // The type Vector3 is an alias to Vector3.ReadonlyVector3\n * const readonlyPosition: Vector3 = Vector3.Zero()\n * readonlyPosition.x = 0.1 // this FAILS\n *\n * // For mutable usage, use `Vector3.Mutable`\n * const position: Vector3.Mutable = Vector3.One()\n * position.x = 3.0 // this WORKS\n * ```\n */\nvar Vector3;\n(function (Vector3) {\n /**\n * Gets a boolean indicating that the vector is non uniform meaning x, y or z are not all the same\n * @param vector - vector to check\n */\n function isNonUniform(vector) {\n const absX = Math.abs(vector.x);\n const absY = Math.abs(vector.y);\n if (absX !== absY) {\n return true;\n }\n const absZ = Math.abs(vector.z);\n if (absX !== absZ) {\n return true;\n }\n return false;\n }\n Vector3.isNonUniform = isNonUniform;\n /**\n * Creates a new Vector3 object from the given x, y, z (floats) coordinates.\n * @param x - defines the first coordinates (on X axis)\n * @param y - defines the second coordinates (on Y axis)\n * @param z - defines the third coordinates (on Z axis)\n */\n function create(\n /**\n * Defines the first coordinates (on X axis)\n */\n x = 0, \n /**\n * Defines the second coordinates (on Y axis)\n */\n y = 0, \n /**\n * Defines the third coordinates (on Z axis)\n */\n z = 0) {\n return { x, y, z };\n }\n Vector3.create = create;\n /**\n * Returns a new Vector3 as the result of the addition of the two given vectors.\n * @param vector1 - the first vector\n * @param vector2 - the second vector\n * @returns the resulting vector\n */\n function add(vector1, vector2) {\n return {\n x: vector1.x + vector2.x,\n y: vector1.y + vector2.y,\n z: vector1.z + vector2.z\n };\n }\n Vector3.add = add;\n /**\n * Add component by component the vector2 into dest\n * @param dest - the first vector and destination of addition\n * @param vector2 - the second vector\n */\n function addToRef(vector1, vector2, result) {\n result.x = vector1.x + vector2.x;\n result.y = vector1.y + vector2.y;\n result.z = vector1.z + vector2.z;\n }\n Vector3.addToRef = addToRef;\n /**\n * Returns a new Vector3 as the result of the substraction of the two given vectors.\n * @returns the resulting vector\n */\n function subtract(vector1, vector2) {\n return {\n x: vector1.x - vector2.x,\n y: vector1.y - vector2.y,\n z: vector1.z - vector2.z\n };\n }\n Vector3.subtract = subtract;\n /**\n * Returns a new Vector3 as the result of the substraction of the two given vectors.\n * @returns the resulting vector\n */\n function subtractToRef(vector1, vector2, result) {\n result.x = vector1.x - vector2.x;\n result.y = vector1.y - vector2.y;\n result.z = vector1.z - vector2.z;\n }\n Vector3.subtractToRef = subtractToRef;\n /**\n * Subtracts the given floats from the current Vector3 coordinates and set the given vector \"result\" with this result\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @param result - defines the Vector3 object where to store the result\n */\n function subtractFromFloatsToRef(vector1, x, y, z, result) {\n result.x = vector1.x - x;\n result.y = vector1.y - y;\n result.z = vector1.z - z;\n }\n Vector3.subtractFromFloatsToRef = subtractFromFloatsToRef;\n /**\n * Returns a new Vector3 with the other sign\n * @returns the resulting vector\n */\n function negate(value) {\n return { x: -value.x, y: -value.y, z: -value.z };\n }\n Vector3.negate = negate;\n /**\n * Copy source into dest\n *\n */\n function copyFrom(source, dest) {\n dest.x = source.x;\n dest.y = source.y;\n dest.z = source.z;\n }\n Vector3.copyFrom = copyFrom;\n /**\n * Sets the given vector \"dest\" with the given floats.\n * @param x - defines the x coordinate of the source\n * @param y - defines the y coordinate of the source\n * @param z - defines the z coordinate of the source\n * @param dest - defines the Vector3 where to store the result\n */\n function copyFromFloats(x, y, z, dest) {\n dest.x = x;\n dest.y = y;\n dest.z = z;\n }\n Vector3.copyFromFloats = copyFromFloats;\n /**\n * Returns a new Vector3 with the same value\n * @returns the resulting vector\n */\n function clone(source) {\n return create(source.x, source.y, source.z);\n }\n Vector3.clone = clone;\n /**\n * Get the clip factor between two vectors\n * @param vector0 - defines the first operand\n * @param vector1 - defines the second operand\n * @param axis - defines the axis to use\n * @param size - defines the size along the axis\n * @returns the clip factor\n */\n function getClipFactor(vector0, vector1, axis, size) {\n const d0 = dot(vector0, axis) - size;\n const d1 = dot(vector1, axis) - size;\n const s = d0 / (d0 - d1);\n return s;\n }\n Vector3.getClipFactor = getClipFactor;\n /**\n * Get angle between two vectors\n * @param vector0 - angle between vector0 and vector1\n * @param vector1 - angle between vector0 and vector1\n * @param normal - direction of the normal\n * @returns the angle between vector0 and vector1\n */\n function getAngleBetweenVectors(vector0, vector1, normal) {\n const v0 = normalize(vector0);\n const v1 = normalize(vector1);\n const v0v1dot = dot(v0, v1);\n const n = create();\n crossToRef(v0, v1, n);\n if (dot(n, normal) > 0) {\n return Math.acos(v0v1dot);\n }\n return -Math.acos(v0v1dot);\n }\n Vector3.getAngleBetweenVectors = getAngleBetweenVectors;\n /**\n * Returns a new Vector3 set from the index \"offset\" of the given array\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @returns the new Vector3\n */\n function fromArray(array, offset = 0) {\n return create(array[offset], array[offset + 1], array[offset + 2]);\n }\n Vector3.fromArray = fromArray;\n /**\n * Returns a new Vector3 set from the index \"offset\" of the given FloatArray\n * This function is deprecated. Use FromArray instead\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @returns the new Vector3\n */\n function fromFloatArray(array, offset) {\n return fromArray(array, offset);\n }\n Vector3.fromFloatArray = fromFloatArray;\n /**\n * Sets the given vector \"result\" with the element values from the index \"offset\" of the given array\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @param result - defines the Vector3 where to store the result\n */\n function fromArrayToRef(array, offset, result) {\n result.x = array[offset];\n result.y = array[offset + 1];\n result.z = array[offset + 2];\n }\n Vector3.fromArrayToRef = fromArrayToRef;\n /**\n * Sets the given vector \"result\" with the element values from the index \"offset\" of the given FloatArray\n * This function is deprecated. Use FromArrayToRef instead.\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @param result - defines the Vector3 where to store the result\n */\n function fromFloatArrayToRef(array, offset, result) {\n return fromArrayToRef(array, offset, result);\n }\n Vector3.fromFloatArrayToRef = fromFloatArrayToRef;\n // Properties\n /**\n * Gets the length of the Vector3\n * @returns the length of the Vector3\n */\n function length(vector) {\n return Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z);\n }\n Vector3.length = length;\n /**\n * Gets the squared length of the Vector3\n * @returns squared length of the Vector3\n */\n function lengthSquared(vector) {\n return vector.x * vector.x + vector.y * vector.y + vector.z * vector.z;\n }\n Vector3.lengthSquared = lengthSquared;\n /**\n * Returns a new Vector3 set with the current Vector3 coordinates multiplied by the float \"scale\"\n * @param scale - defines the multiplier factor\n * @returns a new Vector3\n */\n function scaleToRef(vector, scale, result) {\n result.x = vector.x * scale;\n result.y = vector.y * scale;\n result.z = vector.z * scale;\n }\n Vector3.scaleToRef = scaleToRef;\n /**\n * Returns a new Vector3 set with the current Vector3 coordinates multiplied by the float \"scale\"\n * @param scale - defines the multiplier factor\n * @returns a new Vector3\n */\n function scale(vector, scale) {\n return create(vector.x * scale, vector.y * scale, vector.z * scale);\n }\n Vector3.scale = scale;\n /**\n * Normalize the current Vector3 with the given input length.\n * Please note that this is an in place operation.\n * @param len - the length of the vector\n * @returns the current updated Vector3\n */\n function normalizeFromLength(vector, len) {\n const result = create(0, 0, 0);\n normalizeFromLengthToRef(vector, len, result);\n return result;\n }\n Vector3.normalizeFromLength = normalizeFromLength;\n /**\n * Normalize the current Vector3 with the given input length.\n * Please note that this is an in place operation.\n * @param len - the length of the vector\n * @returns the current updated Vector3\n */\n function normalizeFromLengthToRef(vector, len, result) {\n if (len === 0 || len === 1.0) {\n copyFrom(vector, result);\n return;\n }\n scaleToRef(vector, 1.0 / len, result);\n }\n Vector3.normalizeFromLengthToRef = normalizeFromLengthToRef;\n /**\n * Normalize the current Vector3.\n * Please note that this is an in place operation.\n * @returns the current updated Vector3\n */\n function normalize(vector) {\n return normalizeFromLength(vector, length(vector));\n }\n Vector3.normalize = normalize;\n /**\n * Normalize the current Vector3.\n * Please note that this is an in place operation.\n * @returns the current updated Vector3\n */\n function normalizeToRef(vector, result) {\n normalizeFromLengthToRef(vector, length(vector), result);\n }\n Vector3.normalizeToRef = normalizeToRef;\n /**\n * Returns the dot product (float) between the vectors \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the dot product\n */\n function dot(left, right) {\n return left.x * right.x + left.y * right.y + left.z * right.z;\n }\n Vector3.dot = dot;\n /**\n * Multiplies this vector (with an implicit 1 in the 4th dimension) and m, and divides by perspective\n * @param matrix - The transformation matrix\n * @returns result Vector3\n */\n function applyMatrix4(vector, matrix) {\n const result = clone(vector);\n applyMatrix4ToRef(vector, matrix, result);\n return result;\n }\n Vector3.applyMatrix4 = applyMatrix4;\n /**\n * Multiplies this vector (with an implicit 1 in the 4th dimension) and m, and divides by perspective and set the given vector \"result\" with this result\n * @param matrix - The transformation matrix\n * @param result - defines the Vector3 object where to store the result\n */\n function applyMatrix4ToRef(vector, matrix, result) {\n const { x, y, z } = vector;\n const m = matrix._m;\n const w = 1 / (m[3] * x + m[7] * y + m[11] * z + m[15]);\n result.x = (m[0] * x + m[4] * y + m[8] * z + m[12]) * w;\n result.y = (m[1] * x + m[5] * y + m[9] * z + m[13]) * w;\n result.z = (m[2] * x + m[6] * y + m[10] * z + m[14]) * w;\n }\n Vector3.applyMatrix4ToRef = applyMatrix4ToRef;\n /**\n * Rotates the current Vector3 based on the given quaternion\n * @param q - defines the Quaternion\n * @returns the current Vector3\n */\n function rotate(vector, q) {\n const result = create();\n rotateToRef(vector, q, result);\n return result;\n }\n Vector3.rotate = rotate;\n /**\n * Rotates current Vector3 based on the given quaternion, but applies the rotation to target Vector3.\n * @param q - defines the Quaternion\n * @param result - defines the target Vector3\n * @returns the current Vector3\n */\n function rotateToRef(vector, q, result) {\n const { x, y, z } = vector;\n const { x: qx, y: qy, z: qz, w: qw } = q;\n // calculate quat * vector\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n // calculate result * inverse quat\n result.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n result.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n result.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n }\n Vector3.rotateToRef = rotateToRef;\n /**\n * Returns a new Vector3 located for \"amount\" (float) on the linear interpolation between the vectors \"start\" and \"end\"\n * @param start - defines the start value\n * @param end - defines the end value\n * @param amount - max defines amount between both (between 0 and 1)\n * @returns the new Vector3\n */\n function lerp(start, end, amount) {\n const result = create(0, 0, 0);\n lerpToRef(start, end, amount, result);\n return result;\n }\n Vector3.lerp = lerp;\n /**\n * Sets the given vector \"result\" with the result of the linear interpolation from the vector \"start\" for \"amount\" to the vector \"end\"\n * @param start - defines the start value\n * @param end - defines the end value\n * @param amount - max defines amount between both (between 0 and 1)\n * @param result - defines the Vector3 where to store the result\n */\n function lerpToRef(start, end, amount, result) {\n result.x = start.x + (end.x - start.x) * amount;\n result.y = start.y + (end.y - start.y) * amount;\n result.z = start.z + (end.z - start.z) * amount;\n }\n Vector3.lerpToRef = lerpToRef;\n /**\n * Returns a new Vector3 as the cross product of the vectors \"left\" and \"right\"\n * The cross product is then orthogonal to both \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the cross product\n */\n function cross(left, right) {\n const result = Zero();\n crossToRef(left, right, result);\n return result;\n }\n Vector3.cross = cross;\n /**\n * Sets the given vector \"result\" with the cross product of \"left\" and \"right\"\n * The cross product is then orthogonal to both \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @param result - defines the Vector3 where to store the result\n */\n function crossToRef(left, right, result) {\n result.x = left.y * right.z - left.z * right.y;\n result.y = left.z * right.x - left.x * right.z;\n result.z = left.x * right.y - left.y * right.x;\n }\n Vector3.crossToRef = crossToRef;\n /**\n * Returns a new Vector3 set with the result of the transformation by the given matrix of the given vector.\n * This method computes tranformed coordinates only, not transformed direction vectors (ie. it takes translation in account)\n * @param vector - defines the Vector3 to transform\n * @param transformation - defines the transformation matrix\n * @returns the transformed Vector3\n */\n function transformCoordinates(vector, transformation) {\n const result = Zero();\n transformCoordinatesToRef(vector, transformation, result);\n return result;\n }\n Vector3.transformCoordinates = transformCoordinates;\n /**\n * Sets the given vector \"result\" coordinates with the result of the transformation by the given matrix of the given vector\n * This method computes tranformed coordinates only, not transformed direction vectors (ie. it takes translation in account)\n * @param vector - defines the Vector3 to transform\n * @param transformation - defines the transformation matrix\n * @param result - defines the Vector3 where to store the result\n */\n function transformCoordinatesToRef(vector, transformation, result) {\n return transformCoordinatesFromFloatsToRef(vector.x, vector.y, vector.z, transformation, result);\n }\n Vector3.transformCoordinatesToRef = transformCoordinatesToRef;\n /**\n * Sets the given vector \"result\" coordinates with the result of the transformation by the given matrix of the given floats (x, y, z)\n * This method computes tranformed coordinates only, not transformed direction vectors\n * @param x - define the x coordinate of the source vector\n * @param y - define the y coordinate of the source vector\n * @param z - define the z coordinate of the source vector\n * @param transformation - defines the transformation matrix\n * @param result - defines the Vector3 where to store the result\n */\n function transformCoordinatesFromFloatsToRef(x, y, z, transformation, result) {\n const m = transformation._m;\n const rx = x * m[0] + y * m[4] + z * m[8] + m[12];\n const ry = x * m[1] + y * m[5] + z * m[9] + m[13];\n const rz = x * m[2] + y * m[6] + z * m[10] + m[14];\n const rw = 1 / (x * m[3] + y * m[7] + z * m[11] + m[15]);\n result.x = rx * rw;\n result.y = ry * rw;\n result.z = rz * rw;\n }\n Vector3.transformCoordinatesFromFloatsToRef = transformCoordinatesFromFloatsToRef;\n /**\n * Returns a new Vector3 set with the result of the normal transformation by the given matrix of the given vector\n * This methods computes transformed normalized direction vectors only (ie. it does not apply translation)\n * @param vector - defines the Vector3 to transform\n * @param transformation - defines the transformation matrix\n * @returns the new Vector3\n */\n function transformNormal(vector, transformation) {\n const result = Zero();\n transformNormalToRef(vector, transformation, result);\n return result;\n }\n Vector3.transformNormal = transformNormal;\n /**\n * Sets the given vector \"result\" with the result of the normal transformation by the given matrix of the given vector\n * This methods computes transformed normalized direction vectors only (ie. it does not apply translation)\n * @param vector - defines the Vector3 to transform\n * @param transformation - defines the transformation matrix\n * @param result - defines the Vector3 where to store the result\n */\n function transformNormalToRef(vector, transformation, result) {\n transformNormalFromFloatsToRef(vector.x, vector.y, vector.z, transformation, result);\n }\n Vector3.transformNormalToRef = transformNormalToRef;\n /**\n * Sets the given vector \"result\" with the result of the normal transformation by the given matrix of the given floats (x, y, z)\n * This methods computes transformed normalized direction vectors only (ie. it does not apply translation)\n * @param x - define the x coordinate of the source vector\n * @param y - define the y coordinate of the source vector\n * @param z - define the z coordinate of the source vector\n * @param transformation - defines the transformation matrix\n * @param result - defines the Vector3 where to store the result\n */\n function transformNormalFromFloatsToRef(x, y, z, transformation, result) {\n const m = transformation._m;\n result.x = x * m[0] + y * m[4] + z * m[8];\n result.y = x * m[1] + y * m[5] + z * m[9];\n result.z = x * m[2] + y * m[6] + z * m[10];\n }\n Vector3.transformNormalFromFloatsToRef = transformNormalFromFloatsToRef;\n /**\n * Returns a new Vector3 located for \"amount\" on the CatmullRom interpolation spline defined by the vectors \"value1\", \"value2\", \"value3\", \"value4\"\n * @param value1 - defines the first control point\n * @param value2 - defines the second control point\n * @param value3 - defines the third control point\n * @param value4 - defines the fourth control point\n * @param amount - defines the amount on the spline to use\n * @returns the new Vector3\n */\n function catmullRom(value1, value2, value3, value4, amount) {\n const squared = amount * amount;\n const cubed = amount * squared;\n const x = 0.5 *\n (2.0 * value2.x +\n (-value1.x + value3.x) * amount +\n (2.0 * value1.x - 5.0 * value2.x + 4.0 * value3.x - value4.x) *\n squared +\n (-value1.x + 3.0 * value2.x - 3.0 * value3.x + value4.x) * cubed);\n const y = 0.5 *\n (2.0 * value2.y +\n (-value1.y + value3.y) * amount +\n (2.0 * value1.y - 5.0 * value2.y + 4.0 * value3.y - value4.y) *\n squared +\n (-value1.y + 3.0 * value2.y - 3.0 * value3.y + value4.y) * cubed);\n const z = 0.5 *\n (2.0 * value2.z +\n (-value1.z + value3.z) * amount +\n (2.0 * value1.z - 5.0 * value2.z + 4.0 * value3.z - value4.z) *\n squared +\n (-value1.z + 3.0 * value2.z - 3.0 * value3.z + value4.z) * cubed);\n return create(x, y, z);\n }\n Vector3.catmullRom = catmullRom;\n /**\n * Returns a new Vector3 set with the coordinates of \"value\", if the vector \"value\" is in the cube defined by the vectors \"min\" and \"max\"\n * If a coordinate value of \"value\" is lower than one of the \"min\" coordinate, then this \"value\" coordinate is set with the \"min\" one\n * If a coordinate value of \"value\" is greater than one of the \"max\" coordinate, then this \"value\" coordinate is set with the \"max\" one\n * @param value - defines the current value\n * @param min - defines the lower range value\n * @param max - defines the upper range value\n * @returns the new Vector3\n */\n function clamp(value, min, max) {\n const v = create();\n clampToRef(value, min, max, v);\n return v;\n }\n Vector3.clamp = clamp;\n /**\n * Sets the given vector \"result\" with the coordinates of \"value\", if the vector \"value\" is in the cube defined by the vectors \"min\" and \"max\"\n * If a coordinate value of \"value\" is lower than one of the \"min\" coordinate, then this \"value\" coordinate is set with the \"min\" one\n * If a coordinate value of \"value\" is greater than one of the \"max\" coordinate, then this \"value\" coordinate is set with the \"max\" one\n * @param value - defines the current value\n * @param min - defines the lower range value\n * @param max - defines the upper range value\n * @param result - defines the Vector3 where to store the result\n */\n function clampToRef(value, min, max, result) {\n let x = value.x;\n x = x > max.x ? max.x : x;\n x = x < min.x ? min.x : x;\n let y = value.y;\n y = y > max.y ? max.y : y;\n y = y < min.y ? min.y : y;\n let z = value.z;\n z = z > max.z ? max.z : z;\n z = z < min.z ? min.z : z;\n copyFromFloats(x, y, z, result);\n }\n Vector3.clampToRef = clampToRef;\n /**\n * Returns a new Vector3 located for \"amount\" (float) on the Hermite interpolation spline defined by the vectors \"value1\", \"tangent1\", \"value2\", \"tangent2\"\n * @param value1 - defines the first control point\n * @param tangent1 - defines the first tangent vector\n * @param value2 - defines the second control point\n * @param tangent2 - defines the second tangent vector\n * @param amount - defines the amount on the interpolation spline (between 0 and 1)\n * @returns the new Vector3\n */\n function hermite(value1, tangent1, value2, tangent2, amount) {\n const squared = amount * amount;\n const cubed = amount * squared;\n const part1 = 2.0 * cubed - 3.0 * squared + 1.0;\n const part2 = -2.0 * cubed + 3.0 * squared;\n const part3 = cubed - 2.0 * squared + amount;\n const part4 = cubed - squared;\n const x = value1.x * part1 +\n value2.x * part2 +\n tangent1.x * part3 +\n tangent2.x * part4;\n const y = value1.y * part1 +\n value2.y * part2 +\n tangent1.y * part3 +\n tangent2.y * part4;\n const z = value1.z * part1 +\n value2.z * part2 +\n tangent1.z * part3 +\n tangent2.z * part4;\n return create(x, y, z);\n }\n Vector3.hermite = hermite;\n /**\n * Gets the minimal coordinate values between two Vector3\n * @param left - defines the first operand\n * @param right - defines the second operand\n * @returns the new Vector3\n */\n function minimize(left, right) {\n const min = create();\n minimizeInPlaceFromFloatsToRef(right, left.x, left.y, left.z, min);\n return min;\n }\n Vector3.minimize = minimize;\n /**\n * Gets the maximal coordinate values between two Vector3\n * @param left - defines the first operand\n * @param right - defines the second operand\n * @returns the new Vector3\n */\n function maximize(left, right) {\n const max = create();\n maximizeInPlaceFromFloatsToRef(left, right.x, right.y, right.z, max);\n return max;\n }\n Vector3.maximize = maximize;\n /**\n * Returns the distance between the vectors \"value1\" and \"value2\"\n * @param value1 - defines the first operand\n * @param value2 - defines the second operand\n * @returns the distance\n */\n function distance(value1, value2) {\n return Math.sqrt(distanceSquared(value1, value2));\n }\n Vector3.distance = distance;\n /**\n * Returns the squared distance between the vectors \"value1\" and \"value2\"\n * @param value1 - defines the first operand\n * @param value2 - defines the second operand\n * @returns the squared distance\n */\n function distanceSquared(value1, value2) {\n const x = value1.x - value2.x;\n const y = value1.y - value2.y;\n const z = value1.z - value2.z;\n return x * x + y * y + z * z;\n }\n Vector3.distanceSquared = distanceSquared;\n /**\n * Returns a new Vector3 located at the center between \"value1\" and \"value2\"\n * @param value1 - defines the first operand\n * @param value2 - defines the second operand\n * @returns the new Vector3\n */\n function center(value1, value2) {\n const center = add(value1, value2);\n scaleToRef(center, 0.5, center);\n return center;\n }\n Vector3.center = center;\n /**\n * Given three orthogonal normalized left-handed oriented Vector3 axis in space (target system),\n * RotationFromAxis() returns the rotation Euler angles (ex : rotation.x, rotation.y, rotation.z) to apply\n * to something in order to rotate it from its local system to the given target system\n * Note: axis1, axis2 and axis3 are normalized during this operation\n * @param axis1 - defines the first axis\n * @param axis2 - defines the second axis\n * @param axis3 - defines the third axis\n * @returns a new Vector3\n */\n function rotationFromAxis(axis1, axis2, axis3) {\n const rotation = Zero();\n rotationFromAxisToRef(axis1, axis2, axis3, rotation);\n return rotation;\n }\n Vector3.rotationFromAxis = rotationFromAxis;\n /**\n * The same than RotationFromAxis but updates the given ref Vector3 parameter instead of returning a new Vector3\n * @param axis1 - defines the first axis\n * @param axis2 - defines the second axis\n * @param axis3 - defines the third axis\n * @param ref - defines the Vector3 where to store the result\n */\n function rotationFromAxisToRef(axis1, axis2, axis3, result) {\n const quat = Quaternion_1.Quaternion.create();\n Quaternion_1.Quaternion.fromAxisToRotationQuaternionToRef(axis1, axis2, axis3, quat);\n copyFrom(Quaternion_1.Quaternion.toEulerAngles(quat), result);\n }\n Vector3.rotationFromAxisToRef = rotationFromAxisToRef;\n /**\n * Creates a string representation of the Vector3\n * @returns a string with the Vector3 coordinates.\n */\n function toString(vector) {\n return `(${vector.x}, ${vector.y}, ${vector.z})`;\n }\n Vector3.toString = toString;\n /**\n * Creates the Vector3 hash code\n * @returns a number which tends to be unique between Vector3 instances\n */\n function getHashCode(vector) {\n let hash = vector.x || 0;\n hash = (hash * 397) ^ (vector.y || 0);\n hash = (hash * 397) ^ (vector.z || 0);\n return hash;\n }\n Vector3.getHashCode = getHashCode;\n /**\n * Returns true if the vector1 and the vector2 coordinates are strictly equal\n * @param vector1 - defines the first operand\n * @param vector2 - defines the second operand\n * @returns true if both vectors are equals\n */\n function equals(vector1, vector2) {\n return (vector1.x === vector2.x &&\n vector1.y === vector2.y &&\n vector1.z === vector2.z);\n }\n Vector3.equals = equals;\n /**\n * Returns true if the current Vector3 and the given vector coordinates are distant less than epsilon\n * @param otherVector - defines the second operand\n * @param epsilon - defines the minimal distance to define values as equals\n * @returns true if both vectors are distant less than epsilon\n */\n function equalsWithEpsilon(vector1, vector2, epsilon = types_1.Epsilon) {\n return (Scalar_1.Scalar.withinEpsilon(vector1.x, vector2.x, epsilon) &&\n Scalar_1.Scalar.withinEpsilon(vector1.y, vector2.y, epsilon) &&\n Scalar_1.Scalar.withinEpsilon(vector1.z, vector2.z, epsilon));\n }\n Vector3.equalsWithEpsilon = equalsWithEpsilon;\n /**\n * Returns true if the current Vector3 coordinates equals the given floats\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @returns true if both vectors are equals\n */\n function equalsToFloats(vector, x, y, z) {\n return vector.x === x && vector.y === y && vector.z === z;\n }\n Vector3.equalsToFloats = equalsToFloats;\n /**\n * Returns a new Vector3, result of the multiplication of vector1 by the vector2\n * @param vector1 - defines the first operand\n * @param vector2 - defines the second operand\n * @returns the new Vector3\n */\n function multiply(vector1, vector2) {\n const result = create();\n multiplyToRef(vector1, vector2, result);\n return result;\n }\n Vector3.multiply = multiply;\n /**\n * Multiplies the current Vector3 by the given one and stores the result in the given vector \"result\"\n * @param otherVector - defines the second operand\n * @param result - defines the Vector3 object where to store the result\n * @returns the current Vector3\n */\n function multiplyToRef(vector1, vector2, result) {\n result.x = vector1.x * vector2.x;\n result.y = vector1.y * vector2.y;\n result.z = vector1.z * vector2.z;\n }\n Vector3.multiplyToRef = multiplyToRef;\n /**\n * Returns a new Vector3 set with the result of the mulliplication of the current Vector3 coordinates by the given floats\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @returns the new Vector3\n */\n function multiplyByFloatsToRef(vector1, x, y, z, result) {\n result.x = vector1.x * x;\n result.y = vector1.y * y;\n result.z = vector1.z * z;\n }\n Vector3.multiplyByFloatsToRef = multiplyByFloatsToRef;\n /**\n * Returns a new Vector3 set with the result of the mulliplication of the current Vector3 coordinates by the given floats\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @returns the new Vector3\n */\n function multiplyByFloats(vector1, x, y, z) {\n const result = create();\n multiplyByFloatsToRef(vector1, x, y, z, result);\n return result;\n }\n Vector3.multiplyByFloats = multiplyByFloats;\n /**\n * Returns a new Vector3 set with the result of the division of the current Vector3 coordinates by the given ones\n * @param otherVector - defines the second operand\n * @returns the new Vector3\n */\n function divide(vector1, vector2) {\n return {\n x: vector1.x / vector2.x,\n y: vector1.y / vector2.y,\n z: vector1.z / vector2.z\n };\n }\n Vector3.divide = divide;\n /**\n * Divides the current Vector3 coordinates by the given ones and stores the result in the given vector \"result\"\n * @param otherVector - defines the second operand\n * @param result - defines the Vector3 object where to store the result\n * @returns the current Vector3\n */\n function divideToRef(vector1, vector2, result) {\n result.x = vector1.x / vector2.x;\n result.y = vector1.y / vector2.y;\n result.z = vector1.z / vector2.z;\n }\n Vector3.divideToRef = divideToRef;\n /**\n * Set result Vector3 with the maximal coordinate values between vector1 and the given coordinates\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @param result - the set Vector3\n */\n function maximizeInPlaceFromFloatsToRef(vector1, x, y, z, result) {\n if (x > vector1.x) {\n result.x = x;\n }\n else {\n result.x = vector1.x;\n }\n if (y > vector1.y) {\n result.y = y;\n }\n else {\n result.y = vector1.y;\n }\n if (z > vector1.z) {\n result.z = z;\n }\n else {\n result.z = vector1.z;\n }\n }\n Vector3.maximizeInPlaceFromFloatsToRef = maximizeInPlaceFromFloatsToRef;\n /**\n * Set result Vector3 with the minimal coordinate values between vector1 and the given coordinates\n * @param x - defines the x coordinate of the operand\n * @param y - defines the y coordinate of the operand\n * @param z - defines the z coordinate of the operand\n * @param result - the set Vector3\n */\n function minimizeInPlaceFromFloatsToRef(vector1, x, y, z, result) {\n if (x < vector1.x) {\n result.x = x;\n }\n else {\n result.x = vector1.x;\n }\n if (y < vector1.y) {\n result.y = y;\n }\n else {\n result.y = vector1.y;\n }\n if (z < vector1.z) {\n result.z = z;\n }\n else {\n result.z = vector1.z;\n }\n }\n Vector3.minimizeInPlaceFromFloatsToRef = minimizeInPlaceFromFloatsToRef;\n /**\n * Gets a new Vector3 from vector1 floored values\n * @returns a new Vector3\n */\n function floor(vector1) {\n return create(Math.floor(vector1.x), Math.floor(vector1.y), Math.floor(vector1.z));\n }\n Vector3.floor = floor;\n /**\n * Gets a new Vector3 from vector1 floored values\n * @returns a new Vector3\n */\n function fract(vector1) {\n return create(vector1.x - Math.floor(vector1.x), vector1.y - Math.floor(vector1.y), vector1.z - Math.floor(vector1.z));\n }\n Vector3.fract = fract;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, 0.0)\n * @returns a new empty Vector3\n */\n function Zero() {\n return create(0.0, 0.0, 0.0);\n }\n Vector3.Zero = Zero;\n /**\n * Returns a new Vector3 set to (1.0, 1.0, 1.0)\n * @returns a new unit Vector3\n */\n function One() {\n return create(1.0, 1.0, 1.0);\n }\n Vector3.One = One;\n /**\n * Returns a new Vector3 set tolengthSquared (0.0, 1.0, 0.0)\n * @returns a new up Vector3\n */\n function Up() {\n return create(0.0, 1.0, 0.0);\n }\n Vector3.Up = Up;\n /**\n * Returns a new Vector3 set to (0.0, -1.0, 0.0)\n * @returns a new down Vector3\n */\n function Down() {\n return create(0.0, -1.0, 0.0);\n }\n Vector3.Down = Down;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, 1.0)\n * @returns a new forward Vector3\n */\n function Forward() {\n return create(0.0, 0.0, 1.0);\n }\n Vector3.Forward = Forward;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, -1.0)\n * @returns a new forward Vector3\n */\n function Backward() {\n return create(0.0, 0.0, -1.0);\n }\n Vector3.Backward = Backward;\n /**\n * Returns a new Vector3 set to (1.0, 0.0, 0.0)\n * @returns a new right Vector3\n */\n function Right() {\n return create(1.0, 0.0, 0.0);\n }\n Vector3.Right = Right;\n /**\n * Returns a new Vector3 set to (-1.0, 0.0, 0.0)\n * @returns a new left Vector3\n */\n function Left() {\n return create(-1.0, 0.0, 0.0);\n }\n Vector3.Left = Left;\n /**\n * Returns a new random Vector3\n * @returns a random Vector3\n */\n function Random() {\n return create(Math.random(), Math.random(), Math.random());\n }\n Vector3.Random = Random;\n})(Vector3 = exports.Vector3 || (exports.Vector3 = {}));\n//# sourceMappingURL=Vector3.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Plane = void 0;\nconst Vector3_1 = require(\"./Vector3\");\nconst Matrix_1 = require(\"./Matrix\");\n/**\n * Represens a plane by the equation ax + by + cz + d = 0\n * @public\n */\nvar Plane;\n(function (Plane) {\n /**\n * Creates a Plane object according to the given floats a, b, c, d and the plane equation : ax + by + cz + d = 0\n * @param a - a component of the plane\n * @param b - b component of the plane\n * @param c - c component of the plane\n * @param d - d component of the plane\n */\n function create(a, b, c, d) {\n return {\n normal: Vector3_1.Vector3.create(a, b, c),\n d: d\n };\n }\n Plane.create = create;\n // Statics\n /**\n * Creates a plane from an array\n * @param array - the array to create a plane from\n * @returns a new Plane from the given array.\n */\n function fromArray(array) {\n return create(array[0], array[1], array[2], array[3]);\n }\n Plane.fromArray = fromArray;\n /**\n * Creates a plane from three points\n * @param point1 - point used to create the plane\n * @param point2 - point used to create the plane\n * @param point3 - point used to create the plane\n * @returns a new Plane defined by the three given points.\n */\n function fromPoints(_point1, _point2, _point3) {\n const result = create(0.0, 0.0, 0.0, 0.0);\n // TODO\n // result.copyFromPoints(point1, point2, point3)\n return result;\n }\n Plane.fromPoints = fromPoints;\n /**\n * Creates a plane from an origin point and a normal\n * @param origin - origin of the plane to be constructed\n * @param normal - normal of the plane to be constructed\n * @returns a new Plane the normal vector to this plane at the given origin point.\n * Note : the vector \"normal\" is updated because normalized.\n */\n function romPositionAndNormal(origin, normal) {\n const result = create(0.0, 0.0, 0.0, 0.0);\n result.normal = Vector3_1.Vector3.normalize(normal);\n result.d = -(normal.x * origin.x +\n normal.y * origin.y +\n normal.z * origin.z);\n return result;\n }\n Plane.romPositionAndNormal = romPositionAndNormal;\n /**\n * Calculates the distance from a plane and a point\n * @param origin - origin of the plane to be constructed\n * @param normal - normal of the plane to be constructed\n * @param point - point to calculate distance to\n * @returns the signed distance between the plane defined by the normal vector at the \"origin\"\" point and the given other point.\n */\n function signedDistanceToPlaneFromPositionAndNormal(origin, normal, point) {\n const d = -(normal.x * origin.x + normal.y * origin.y + normal.z * origin.z);\n return Vector3_1.Vector3.dot(point, normal) + d;\n }\n Plane.signedDistanceToPlaneFromPositionAndNormal = signedDistanceToPlaneFromPositionAndNormal;\n /**\n * @returns the plane coordinates as a new array of 4 elements [a, b, c, d].\n */\n function asArray(plane) {\n return [plane.normal.x, plane.normal.y, plane.normal.z, plane.d];\n }\n Plane.asArray = asArray;\n // Methods\n /**\n * @returns a new plane copied from the current Plane.\n */\n function clone(plane) {\n return create(plane.normal.x, plane.normal.y, plane.normal.z, plane.d);\n }\n Plane.clone = clone;\n /**\n * @returns the Plane hash code.\n */\n function getHashCode(_plane) {\n // TODO\n // let hash = plane.normal.getHashCode()\n // hash = (hash * 397) ^ (plane.d || 0)\n // return hash\n return 0;\n }\n Plane.getHashCode = getHashCode;\n /**\n * Normalize the current Plane in place.\n * @returns the updated Plane.\n */\n function normalize(plane) {\n const result = create(0, 0, 0, 0);\n const norm = Math.sqrt(plane.normal.x * plane.normal.x +\n plane.normal.y * plane.normal.y +\n plane.normal.z * plane.normal.z);\n let magnitude = 0.0;\n if (norm !== 0) {\n magnitude = 1.0 / norm;\n }\n result.normal.x = plane.normal.x * magnitude;\n result.normal.y = plane.normal.y * magnitude;\n result.normal.z = plane.normal.z * magnitude;\n result.d *= magnitude;\n return plane;\n }\n Plane.normalize = normalize;\n /**\n * Applies a transformation the plane and returns the result\n * @param transformation - the transformation matrix to be applied to the plane\n * @returns a new Plane as the result of the transformation of the current Plane by the given matrix.\n */\n function transform(plane, transformation) {\n const transposedMatrix = Matrix_1.Matrix.create();\n Matrix_1.Matrix.transposeToRef(transformation, transposedMatrix);\n const m = transposedMatrix._m;\n const x = plane.normal.x;\n const y = plane.normal.y;\n const z = plane.normal.z;\n const d = plane.d;\n const normalX = x * m[0] + y * m[1] + z * m[2] + d * m[3];\n const normalY = x * m[4] + y * m[5] + z * m[6] + d * m[7];\n const normalZ = x * m[8] + y * m[9] + z * m[10] + d * m[11];\n const finalD = x * m[12] + y * m[13] + z * m[14] + d * m[15];\n return create(normalX, normalY, normalZ, finalD);\n }\n Plane.transform = transform;\n /**\n * Calcualtte the dot product between the point and the plane normal\n * @param point - point to calculate the dot product with\n * @returns the dot product (float) of the point coordinates and the plane normal.\n */\n function dotCoordinate(plane, point) {\n return (plane.normal.x * point.x +\n plane.normal.y * point.y +\n plane.normal.z * point.z +\n plane.d);\n }\n Plane.dotCoordinate = dotCoordinate;\n /**\n * Updates the current Plane from the plane defined by the three given points.\n * @param point1 - one of the points used to contruct the plane\n * @param point2 - one of the points used to contruct the plane\n * @param point3 - one of the points used to contruct the plane\n * @returns the updated Plane.\n */\n function copyFromPoints(point1, point2, point3) {\n const x1 = point2.x - point1.x;\n const y1 = point2.y - point1.y;\n const z1 = point2.z - point1.z;\n const x2 = point3.x - point1.x;\n const y2 = point3.y - point1.y;\n const z2 = point3.z - point1.z;\n const yz = y1 * z2 - z1 * y2;\n const xz = z1 * x2 - x1 * z2;\n const xy = x1 * y2 - y1 * x2;\n const pyth = Math.sqrt(yz * yz + xz * xz + xy * xy);\n let invPyth;\n if (pyth !== 0) {\n invPyth = 1.0 / pyth;\n }\n else {\n invPyth = 0.0;\n }\n const normal = Vector3_1.Vector3.create(yz * invPyth, xz * invPyth, xy * invPyth);\n return {\n normal,\n d: -(normal.x * point1.x + normal.y * point1.y + normal.z * point1.z)\n };\n }\n Plane.copyFromPoints = copyFromPoints;\n /**\n * Checks if the plane is facing a given direction\n * @param direction - the direction to check if the plane is facing\n * @param epsilon - value the dot product is compared against (returns true if dot &lt;= epsilon)\n * @returns True is the vector \"direction\" is the same side than the plane normal.\n */\n function isFrontFacingTo(plane, direction, epsilon) {\n const dot = Vector3_1.Vector3.dot(plane.normal, direction);\n return dot <= epsilon;\n }\n Plane.isFrontFacingTo = isFrontFacingTo;\n /**\n * Calculates the distance to a point\n * @param point - point to calculate distance to\n * @returns the signed distance (float) from the given point to the Plane.\n */\n function signedDistanceTo(plane, point) {\n return Vector3_1.Vector3.dot(point, plane.normal) + plane.d;\n }\n Plane.signedDistanceTo = signedDistanceTo;\n})(Plane = exports.Plane || (exports.Plane = {}));\n//# sourceMappingURL=Plane.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Matrix = void 0;\nconst Vector3_1 = require(\"./Vector3\");\nconst Quaternion_1 = require(\"./Quaternion\");\nconst Plane_1 = require(\"./Plane\");\n/**\n * Class used to store matrix data (4x4)\n * @public\n */\nvar Matrix;\n(function (Matrix) {\n /**\n * Gets the internal data of the matrix\n */\n function m(self) {\n return self._m;\n }\n Matrix.m = m;\n let _updateFlagSeed = 0;\n const _identityReadonly = {};\n /**\n * Gets an identity matrix that must not be updated\n */\n function IdentityReadonly() {\n return _identityReadonly;\n }\n Matrix.IdentityReadonly = IdentityReadonly;\n /**\n * Creates an empty matrix (filled with zeros)\n */\n function create() {\n const newMatrix = {\n updateFlag: 0,\n isIdentity: false,\n isIdentity3x2: true,\n _isIdentityDirty: true,\n _isIdentity3x2Dirty: true,\n _m: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n };\n _updateIdentityStatus(newMatrix, false);\n return newMatrix;\n }\n Matrix.create = create;\n // Statics\n /**\n * Creates a matrix from an array\n * @param array - defines the source array\n * @param offset - defines an offset in the source array\n * @returns a new Matrix set from the starting index of the given array\n */\n function fromArray(array, offset = 0) {\n const result = create();\n fromArrayToRef(array, offset, result);\n return result;\n }\n Matrix.fromArray = fromArray;\n /**\n * Copy the content of an array into a given matrix\n * @param array - defines the source array\n * @param offset - defines an offset in the source array\n * @param result - defines the target matrix\n */\n function fromArrayToRef(array, offset, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] = array[index + offset];\n }\n _markAsUpdated(result);\n }\n Matrix.fromArrayToRef = fromArrayToRef;\n /**\n * Stores an array into a matrix after having multiplied each component by a given factor\n * @param array - defines the source array\n * @param offset - defines the offset in the source array\n * @param scale - defines the scaling factor\n * @param result - defines the target matrix\n */\n function fromFloatArrayToRefScaled(array, offset, scale, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] = array[index + offset] * scale;\n }\n _markAsUpdated(result);\n }\n Matrix.fromFloatArrayToRefScaled = fromFloatArrayToRefScaled;\n /**\n * Stores a list of values (16) inside a given matrix\n * @param initialM11 - defines 1st value of 1st row\n * @param initialM12 - defines 2nd value of 1st row\n * @param initialM13 - defines 3rd value of 1st row\n * @param initialM14 - defines 4th value of 1st row\n * @param initialM21 - defines 1st value of 2nd row\n * @param initialM22 - defines 2nd value of 2nd row\n * @param initialM23 - defines 3rd value of 2nd row\n * @param initialM24 - defines 4th value of 2nd row\n * @param initialM31 - defines 1st value of 3rd row\n * @param initialM32 - defines 2nd value of 3rd row\n * @param initialM33 - defines 3rd value of 3rd row\n * @param initialM34 - defines 4th value of 3rd row\n * @param initialM41 - defines 1st value of 4th row\n * @param initialM42 - defines 2nd value of 4th row\n * @param initialM43 - defines 3rd value of 4th row\n * @param initialM44 - defines 4th value of 4th row\n * @param result - defines the target matrix\n */\n function fromValuesToRef(initialM11, initialM12, initialM13, initialM14, initialM21, initialM22, initialM23, initialM24, initialM31, initialM32, initialM33, initialM34, initialM41, initialM42, initialM43, initialM44, result) {\n const m = result._m;\n m[0] = initialM11;\n m[1] = initialM12;\n m[2] = initialM13;\n m[3] = initialM14;\n m[4] = initialM21;\n m[5] = initialM22;\n m[6] = initialM23;\n m[7] = initialM24;\n m[8] = initialM31;\n m[9] = initialM32;\n m[10] = initialM33;\n m[11] = initialM34;\n m[12] = initialM41;\n m[13] = initialM42;\n m[14] = initialM43;\n m[15] = initialM44;\n _markAsUpdated(result);\n }\n Matrix.fromValuesToRef = fromValuesToRef;\n /**\n * Creates new matrix from a list of values (16)\n * @param initialM11 - defines 1st value of 1st row\n * @param initialM12 - defines 2nd value of 1st row\n * @param initialM13 - defines 3rd value of 1st row\n * @param initialM14 - defines 4th value of 1st row\n * @param initialM21 - defines 1st value of 2nd row\n * @param initialM22 - defines 2nd value of 2nd row\n * @param initialM23 - defines 3rd value of 2nd row\n * @param initialM24 - defines 4th value of 2nd row\n * @param initialM31 - defines 1st value of 3rd row\n * @param initialM32 - defines 2nd value of 3rd row\n * @param initialM33 - defines 3rd value of 3rd row\n * @param initialM34 - defines 4th value of 3rd row\n * @param initialM41 - defines 1st value of 4th row\n * @param initialM42 - defines 2nd value of 4th row\n * @param initialM43 - defines 3rd value of 4th row\n * @param initialM44 - defines 4th value of 4th row\n * @returns the new matrix\n */\n function fromValues(initialM11, initialM12, initialM13, initialM14, initialM21, initialM22, initialM23, initialM24, initialM31, initialM32, initialM33, initialM34, initialM41, initialM42, initialM43, initialM44) {\n const result = create();\n const m = result._m;\n m[0] = initialM11;\n m[1] = initialM12;\n m[2] = initialM13;\n m[3] = initialM14;\n m[4] = initialM21;\n m[5] = initialM22;\n m[6] = initialM23;\n m[7] = initialM24;\n m[8] = initialM31;\n m[9] = initialM32;\n m[10] = initialM33;\n m[11] = initialM34;\n m[12] = initialM41;\n m[13] = initialM42;\n m[14] = initialM43;\n m[15] = initialM44;\n _markAsUpdated(result);\n return result;\n }\n Matrix.fromValues = fromValues;\n /**\n * Creates a new matrix composed by merging scale (vector3), rotation (quaternion) and translation (vector3)\n * @param scale - defines the scale vector3\n * @param rotation - defines the rotation quaternion\n * @param translation - defines the translation vector3\n * @returns a new matrix\n */\n function compose(scale, rotation, translation) {\n const result = create();\n composeToRef(scale, rotation, translation, result);\n return result;\n }\n Matrix.compose = compose;\n /**\n * Sets a matrix to a value composed by merging scale (vector3), rotation (quaternion) and translation (vector3)\n * @param scale - defines the scale vector3\n * @param rotation - defines the rotation quaternion\n * @param translation - defines the translation vector3\n * @param result - defines the target matrix\n */\n function composeToRef(scale, rotation, translation, result) {\n const tmpMatrix = [create(), create(), create()];\n scalingToRef(scale.x, scale.y, scale.z, tmpMatrix[1]);\n fromQuaternionToRef(rotation, tmpMatrix[0]);\n multiplyToRef(tmpMatrix[1], tmpMatrix[0], result);\n setTranslation(result, translation);\n }\n Matrix.composeToRef = composeToRef;\n /**\n * Creates a new identity matrix\n * @returns a new identity matrix\n */\n function Identity() {\n const identity = fromValues(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0);\n _updateIdentityStatus(identity, true);\n return identity;\n }\n Matrix.Identity = Identity;\n /**\n * Creates a new identity matrix and stores the result in a given matrix\n * @param result - defines the target matrix\n */\n function IdentityToRef(result) {\n fromValuesToRef(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, true);\n }\n Matrix.IdentityToRef = IdentityToRef;\n /**\n * Creates a new zero matrix\n * @returns a new zero matrix\n */\n function Zero() {\n const zero = fromValues(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\n _updateIdentityStatus(zero, false);\n return zero;\n }\n Matrix.Zero = Zero;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the X axis\n * @param angle - defines the angle (in radians) to use\n * @returns the new matrix\n */\n function RotationX(angle) {\n const result = create();\n rotationXToRef(angle, result);\n return result;\n }\n Matrix.RotationX = RotationX;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the X axis and stores it in a given matrix\n * @param angle - defines the angle (in radians) to use\n * @param result - defines the target matrix\n */\n function rotationXToRef(angle, result) {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n fromValuesToRef(1.0, 0.0, 0.0, 0.0, 0.0, c, s, 0.0, 0.0, -s, c, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, c === 1 && s === 0);\n }\n Matrix.rotationXToRef = rotationXToRef;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the Y axis\n * @param angle - defines the angle (in radians) to use\n * @returns the new matrix\n */\n function rotationY(angle) {\n const result = create();\n rotationYToRef(angle, result);\n return result;\n }\n Matrix.rotationY = rotationY;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the Y axis and stores it in a given matrix\n * @param angle - defines the angle (in radians) to use\n * @param result - defines the target matrix\n */\n function rotationYToRef(angle, result) {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n fromValuesToRef(c, 0.0, -s, 0.0, 0.0, 1.0, 0.0, 0.0, s, 0.0, c, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, c === 1 && s === 0);\n }\n Matrix.rotationYToRef = rotationYToRef;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the Z axis\n * @param angle - defines the angle (in radians) to use\n * @returns the new matrix\n */\n function rotationZ(angle) {\n const result = create();\n rotationZToRef(angle, result);\n return result;\n }\n Matrix.rotationZ = rotationZ;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the Z axis and stores it in a given matrix\n * @param angle - defines the angle (in radians) to use\n * @param result - defines the target matrix\n */\n function rotationZToRef(angle, result) {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n fromValuesToRef(c, s, 0.0, 0.0, -s, c, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, c === 1 && s === 0);\n }\n Matrix.rotationZToRef = rotationZToRef;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the given axis\n * @param axis - defines the axis to use\n * @param angle - defines the angle (in radians) to use\n * @returns the new matrix\n */\n function rotationAxis(axis, angle) {\n const result = create();\n rotationAxisToRef(axis, angle, result);\n return result;\n }\n Matrix.rotationAxis = rotationAxis;\n /**\n * Creates a new rotation matrix for \"angle\" radians around the given axis and stores it in a given matrix\n * @param axis - defines the axis to use\n * @param angle - defines the angle (in radians) to use\n * @param result - defines the target matrix\n */\n function rotationAxisToRef(_axis, angle, result) {\n const s = Math.sin(-angle);\n const c = Math.cos(-angle);\n const c1 = 1 - c;\n const axis = Vector3_1.Vector3.normalize(_axis);\n const m = result._m;\n m[0] = axis.x * axis.x * c1 + c;\n m[1] = axis.x * axis.y * c1 - axis.z * s;\n m[2] = axis.x * axis.z * c1 + axis.y * s;\n m[3] = 0.0;\n m[4] = axis.y * axis.x * c1 + axis.z * s;\n m[5] = axis.y * axis.y * c1 + c;\n m[6] = axis.y * axis.z * c1 - axis.x * s;\n m[7] = 0.0;\n m[8] = axis.z * axis.x * c1 - axis.y * s;\n m[9] = axis.z * axis.y * c1 + axis.x * s;\n m[10] = axis.z * axis.z * c1 + c;\n m[11] = 0.0;\n m[12] = 0.0;\n m[13] = 0.0;\n m[14] = 0.0;\n m[15] = 1.0;\n _markAsUpdated(result);\n }\n Matrix.rotationAxisToRef = rotationAxisToRef;\n /**\n * Creates a rotation matrix\n * @param yaw - defines the yaw angle in radians (Y axis)\n * @param pitch - defines the pitch angle in radians (X axis)\n * @param roll - defines the roll angle in radians (X axis)\n * @returns the new rotation matrix\n */\n function rotationYawPitchRoll(yaw, pitch, roll) {\n const result = create();\n rotationYawPitchRollToRef(yaw, pitch, roll, result);\n return result;\n }\n Matrix.rotationYawPitchRoll = rotationYawPitchRoll;\n /**\n * Creates a rotation matrix and stores it in a given matrix\n * @param yaw - defines the yaw angle in radians (Y axis)\n * @param pitch - defines the pitch angle in radians (X axis)\n * @param roll - defines the roll angle in radians (X axis)\n * @param result - defines the target matrix\n */\n function rotationYawPitchRollToRef(yaw, pitch, roll, result) {\n const quaternionResult = Quaternion_1.Quaternion.Zero();\n Quaternion_1.Quaternion.fromRotationYawPitchRollToRef(yaw, pitch, roll, quaternionResult);\n fromQuaternionToRef(quaternionResult, result);\n }\n Matrix.rotationYawPitchRollToRef = rotationYawPitchRollToRef;\n /**\n * Creates a scaling matrix\n * @param x - defines the scale factor on X axis\n * @param y - defines the scale factor on Y axis\n * @param z - defines the scale factor on Z axis\n * @returns the new matrix\n */\n function scaling(x, y, z) {\n const result = create();\n scalingToRef(x, y, z, result);\n return result;\n }\n Matrix.scaling = scaling;\n /**\n * Creates a scaling matrix and stores it in a given matrix\n * @param x - defines the scale factor on X axis\n * @param y - defines the scale factor on Y axis\n * @param z - defines the scale factor on Z axis\n * @param result - defines the target matrix\n */\n function scalingToRef(x, y, z, result) {\n fromValuesToRef(x, 0.0, 0.0, 0.0, 0.0, y, 0.0, 0.0, 0.0, 0.0, z, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n _updateIdentityStatus(result, x === 1 && y === 1 && z === 1);\n }\n Matrix.scalingToRef = scalingToRef;\n /**\n * Creates a translation matrix\n * @param x - defines the translation on X axis\n * @param y - defines the translation on Y axis\n * @param z - defines the translationon Z axis\n * @returns the new matrix\n */\n function translation(x, y, z) {\n const result = create();\n translationToRef(x, y, z, result);\n return result;\n }\n Matrix.translation = translation;\n /**\n * Creates a translation matrix and stores it in a given matrix\n * @param x - defines the translation on X axis\n * @param y - defines the translation on Y axis\n * @param z - defines the translationon Z axis\n * @param result - defines the target matrix\n */\n function translationToRef(x, y, z, result) {\n fromValuesToRef(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, x, y, z, 1.0, result);\n _updateIdentityStatus(result, x === 0 && y === 0 && z === 0);\n }\n Matrix.translationToRef = translationToRef;\n /**\n * Returns a new Matrix whose values are the interpolated values for \"gradient\" (float) between the ones of the matrices \"startValue\" and \"endValue\".\n * @param startValue - defines the start value\n * @param endValue - defines the end value\n * @param gradient - defines the gradient factor\n * @returns the new matrix\n */\n function lerp(startValue, endValue, gradient) {\n const result = create();\n lerpToRef(startValue, endValue, gradient, result);\n return result;\n }\n Matrix.lerp = lerp;\n /**\n * Set the given matrix \"result\" as the interpolated values for \"gradient\" (float) between the ones of the matrices \"startValue\" and \"endValue\".\n * @param startValue - defines the start value\n * @param endValue - defines the end value\n * @param gradient - defines the gradient factor\n * @param result - defines the Matrix object where to store data\n */\n function lerpToRef(startValue, endValue, gradient, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] =\n startValue._m[index] * (1.0 - gradient) + endValue._m[index] * gradient;\n }\n _markAsUpdated(result);\n }\n Matrix.lerpToRef = lerpToRef;\n /**\n * Builds a new matrix whose values are computed by:\n * * decomposing the the \"startValue\" and \"endValue\" matrices into their respective scale, rotation and translation matrices\n * * interpolating for \"gradient\" (float) the values between each of these decomposed matrices between the start and the end\n * * recomposing a new matrix from these 3 interpolated scale, rotation and translation matrices\n * @param startValue - defines the first matrix\n * @param endValue - defines the second matrix\n * @param gradient - defines the gradient between the two matrices\n * @returns the new matrix\n */\n function decomposeLerp(startValue, endValue, gradient) {\n const result = create();\n decomposeLerpToRef(startValue, endValue, gradient, result);\n return result;\n }\n Matrix.decomposeLerp = decomposeLerp;\n /**\n * Update a matrix to values which are computed by:\n * * decomposing the the \"startValue\" and \"endValue\" matrices into their respective scale, rotation and translation matrices\n * * interpolating for \"gradient\" (float) the values between each of these decomposed matrices between the start and the end\n * * recomposing a new matrix from these 3 interpolated scale, rotation and translation matrices\n * @param startValue - defines the first matrix\n * @param endValue - defines the second matrix\n * @param gradient - defines the gradient between the two matrices\n * @param result - defines the target matrix\n */\n function decomposeLerpToRef(startValue, endValue, gradient, result) {\n const startScale = Vector3_1.Vector3.Zero();\n const startRotation = Quaternion_1.Quaternion.Zero();\n const startTranslation = Vector3_1.Vector3.Zero();\n decompose(startValue, startScale, startRotation, startTranslation);\n const endScale = Vector3_1.Vector3.Zero();\n const endRotation = Quaternion_1.Quaternion.Zero();\n const endTranslation = Vector3_1.Vector3.Zero();\n decompose(endValue, endScale, endRotation, endTranslation);\n const resultScale = Vector3_1.Vector3.Zero();\n Vector3_1.Vector3.lerpToRef(startScale, endScale, gradient, resultScale);\n const resultRotation = Quaternion_1.Quaternion.Zero();\n Quaternion_1.Quaternion.slerpToRef(startRotation, endRotation, gradient, resultRotation);\n const resultTranslation = Vector3_1.Vector3.Zero();\n Vector3_1.Vector3.lerpToRef(startTranslation, endTranslation, gradient, resultTranslation);\n composeToRef(resultScale, resultRotation, resultTranslation, result);\n }\n Matrix.decomposeLerpToRef = decomposeLerpToRef;\n /**\n * Gets a new rotation matrix used to rotate an entity so as it looks at the target vector3, from the eye vector3 position, the up vector3 being oriented like \"up\"\n * self function works in left handed mode\n * @param eye - defines the final position of the entity\n * @param target - defines where the entity should look at\n * @param up - defines the up vector for the entity\n * @returns the new matrix\n */\n function LookAtLH(eye, target, up) {\n const result = create();\n lookAtLHToRef(eye, target, up, result);\n return result;\n }\n Matrix.LookAtLH = LookAtLH;\n /**\n * Sets the given \"result\" Matrix to a rotation matrix used to rotate an entity so that it looks at the target vector3, from the eye vector3 position, the up vector3 being oriented like \"up\".\n * self function works in left handed mode\n * @param eye - defines the final position of the entity\n * @param target - defines where the entity should look at\n * @param up - defines the up vector for the entity\n * @param result - defines the target matrix\n */\n function lookAtLHToRef(eye, target, up, result) {\n const xAxis = Vector3_1.Vector3.Zero();\n const yAxis = Vector3_1.Vector3.Zero();\n const zAxis = Vector3_1.Vector3.Zero();\n // Z axis\n Vector3_1.Vector3.subtractToRef(target, eye, zAxis);\n Vector3_1.Vector3.normalizeToRef(zAxis, zAxis);\n // X axis\n Vector3_1.Vector3.crossToRef(up, zAxis, xAxis);\n const xSquareLength = Vector3_1.Vector3.lengthSquared(xAxis);\n if (xSquareLength === 0) {\n xAxis.x = 1.0;\n }\n else {\n Vector3_1.Vector3.normalizeFromLengthToRef(xAxis, Math.sqrt(xSquareLength), xAxis);\n }\n // Y axis\n Vector3_1.Vector3.crossToRef(zAxis, xAxis, yAxis);\n Vector3_1.Vector3.normalizeToRef(yAxis, yAxis);\n // Eye angles\n const ex = -Vector3_1.Vector3.dot(xAxis, eye);\n const ey = -Vector3_1.Vector3.dot(yAxis, eye);\n const ez = -Vector3_1.Vector3.dot(zAxis, eye);\n fromValuesToRef(xAxis.x, yAxis.x, zAxis.x, 0.0, xAxis.y, yAxis.y, zAxis.y, 0.0, xAxis.z, yAxis.z, zAxis.z, 0.0, ex, ey, ez, 1.0, result);\n }\n Matrix.lookAtLHToRef = lookAtLHToRef;\n /**\n * Gets a new rotation matrix used to rotate an entity so as it looks at the target vector3, from the eye vector3 position, the up vector3 being oriented like \"up\"\n * self function works in right handed mode\n * @param eye - defines the final position of the entity\n * @param target - defines where the entity should look at\n * @param up - defines the up vector for the entity\n * @returns the new matrix\n */\n function lookAtRH(eye, target, up) {\n const result = create();\n lookAtRHToRef(eye, target, up, result);\n return result;\n }\n Matrix.lookAtRH = lookAtRH;\n /**\n * Sets the given \"result\" Matrix to a rotation matrix used to rotate an entity so that it looks at the target vector3, from the eye vector3 position, the up vector3 being oriented like \"up\".\n * self function works in right handed mode\n * @param eye - defines the final position of the entity\n * @param target - defines where the entity should look at\n * @param up - defines the up vector for the entity\n * @param result - defines the target matrix\n */\n function lookAtRHToRef(eye, target, up, result) {\n const xAxis = Vector3_1.Vector3.Zero();\n const yAxis = Vector3_1.Vector3.Zero();\n const zAxis = Vector3_1.Vector3.Zero();\n // Z axis\n Vector3_1.Vector3.subtractToRef(eye, target, zAxis);\n Vector3_1.Vector3.normalizeToRef(zAxis, zAxis);\n // X axis\n Vector3_1.Vector3.crossToRef(up, zAxis, xAxis);\n const xSquareLength = Vector3_1.Vector3.lengthSquared(xAxis);\n if (xSquareLength === 0) {\n xAxis.x = 1.0;\n }\n else {\n Vector3_1.Vector3.normalizeFromLengthToRef(xAxis, Math.sqrt(xSquareLength), xAxis);\n }\n // Y axis\n Vector3_1.Vector3.crossToRef(zAxis, xAxis, yAxis);\n Vector3_1.Vector3.normalizeToRef(yAxis, yAxis);\n // Eye angles\n const ex = -Vector3_1.Vector3.dot(xAxis, eye);\n const ey = -Vector3_1.Vector3.dot(yAxis, eye);\n const ez = -Vector3_1.Vector3.dot(zAxis, eye);\n fromValuesToRef(xAxis.x, yAxis.x, zAxis.x, 0.0, xAxis.y, yAxis.y, zAxis.y, 0.0, xAxis.z, yAxis.z, zAxis.z, 0.0, ex, ey, ez, 1.0, result);\n }\n Matrix.lookAtRHToRef = lookAtRHToRef;\n /**\n * Create a left-handed orthographic projection matrix\n * @param width - defines the viewport width\n * @param height - defines the viewport height\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a left-handed orthographic projection matrix\n */\n function orthoLH(width, height, znear, zfar) {\n const matrix = create();\n orthoLHToRef(width, height, znear, zfar, matrix);\n return matrix;\n }\n Matrix.orthoLH = orthoLH;\n /**\n * Store a left-handed orthographic projection to a given matrix\n * @param width - defines the viewport width\n * @param height - defines the viewport height\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n */\n function orthoLHToRef(width, height, znear, zfar, result) {\n const n = znear;\n const f = zfar;\n const a = 2.0 / width;\n const b = 2.0 / height;\n const c = 2.0 / (f - n);\n const d = -(f + n) / (f - n);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, 0.0, 0.0, 0.0, d, 1.0, result);\n _updateIdentityStatus(result, a === 1 && b === 1 && c === 1 && d === 0);\n }\n Matrix.orthoLHToRef = orthoLHToRef;\n /**\n * Create a left-handed orthographic projection matrix\n * @param left - defines the viewport left coordinate\n * @param right - defines the viewport right coordinate\n * @param bottom - defines the viewport bottom coordinate\n * @param top - defines the viewport top coordinate\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a left-handed orthographic projection matrix\n */\n function OrthoOffCenterLH(left, right, bottom, top, znear, zfar) {\n const matrix = create();\n orthoOffCenterLHToRef(left, right, bottom, top, znear, zfar, matrix);\n return matrix;\n }\n Matrix.OrthoOffCenterLH = OrthoOffCenterLH;\n /**\n * Stores a left-handed orthographic projection into a given matrix\n * @param left - defines the viewport left coordinate\n * @param right - defines the viewport right coordinate\n * @param bottom - defines the viewport bottom coordinate\n * @param top - defines the viewport top coordinate\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n */\n function orthoOffCenterLHToRef(left, right, bottom, top, znear, zfar, result) {\n const n = znear;\n const f = zfar;\n const a = 2.0 / (right - left);\n const b = 2.0 / (top - bottom);\n const c = 2.0 / (f - n);\n const d = -(f + n) / (f - n);\n const i0 = (left + right) / (left - right);\n const i1 = (top + bottom) / (bottom - top);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, 0.0, i0, i1, d, 1.0, result);\n _markAsUpdated(result);\n }\n Matrix.orthoOffCenterLHToRef = orthoOffCenterLHToRef;\n /**\n * Creates a right-handed orthographic projection matrix\n * @param left - defines the viewport left coordinate\n * @param right - defines the viewport right coordinate\n * @param bottom - defines the viewport bottom coordinate\n * @param top - defines the viewport top coordinate\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a right-handed orthographic projection matrix\n */\n function orthoOffCenterRH(left, right, bottom, top, znear, zfar) {\n const matrix = create();\n orthoOffCenterRHToRef(left, right, bottom, top, znear, zfar, matrix);\n return matrix;\n }\n Matrix.orthoOffCenterRH = orthoOffCenterRH;\n /**\n * Stores a right-handed orthographic projection into a given matrix\n * @param left - defines the viewport left coordinate\n * @param right - defines the viewport right coordinate\n * @param bottom - defines the viewport bottom coordinate\n * @param top - defines the viewport top coordinate\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n */\n function orthoOffCenterRHToRef(left, right, bottom, top, znear, zfar, result) {\n orthoOffCenterLHToRef(left, right, bottom, top, znear, zfar, result);\n result._m[10] *= -1; // No need to call _markAsUpdated as previous function already called it and let _isIdentityDirty to true\n }\n Matrix.orthoOffCenterRHToRef = orthoOffCenterRHToRef;\n /**\n * Creates a left-handed perspective projection matrix\n * @param width - defines the viewport width\n * @param height - defines the viewport height\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a left-handed perspective projection matrix\n */\n function perspectiveLH(width, height, znear, zfar) {\n const matrix = create();\n const n = znear;\n const f = zfar;\n const a = (2.0 * n) / width;\n const b = (2.0 * n) / height;\n const c = (f + n) / (f - n);\n const d = (-2.0 * f * n) / (f - n);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, 1.0, 0.0, 0.0, d, 0.0, matrix);\n _updateIdentityStatus(matrix, false);\n return matrix;\n }\n Matrix.perspectiveLH = perspectiveLH;\n /**\n * Creates a left-handed perspective projection matrix\n * @param fov - defines the horizontal field of view\n * @param aspect - defines the aspect ratio\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a left-handed perspective projection matrix\n */\n function perspectiveFovLH(fov, aspect, znear, zfar) {\n const matrix = create();\n perspectiveFovLHToRef(fov, aspect, znear, zfar, matrix);\n return matrix;\n }\n Matrix.perspectiveFovLH = perspectiveFovLH;\n /**\n * Stores a left-handed perspective projection into a given matrix\n * @param fov - defines the horizontal field of view\n * @param aspect - defines the aspect ratio\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n * @param isVerticalFovFixed - defines it the fov is vertically fixed (default) or horizontally\n */\n function perspectiveFovLHToRef(fov, aspect, znear, zfar, result, isVerticalFovFixed = true) {\n const n = znear;\n const f = zfar;\n const t = 1.0 / Math.tan(fov * 0.5);\n const a = isVerticalFovFixed ? t / aspect : t;\n const b = isVerticalFovFixed ? t : t * aspect;\n const c = (f + n) / (f - n);\n const d = (-2.0 * f * n) / (f - n);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, 1.0, 0.0, 0.0, d, 0.0, result);\n _updateIdentityStatus(result, false);\n }\n Matrix.perspectiveFovLHToRef = perspectiveFovLHToRef;\n /**\n * Creates a right-handed perspective projection matrix\n * @param fov - defines the horizontal field of view\n * @param aspect - defines the aspect ratio\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @returns a new matrix as a right-handed perspective projection matrix\n */\n function PerspectiveFovRH(fov, aspect, znear, zfar) {\n const matrix = create();\n perspectiveFovRHToRef(fov, aspect, znear, zfar, matrix);\n return matrix;\n }\n Matrix.PerspectiveFovRH = PerspectiveFovRH;\n /**\n * Stores a right-handed perspective projection into a given matrix\n * @param fov - defines the horizontal field of view\n * @param aspect - defines the aspect ratio\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n * @param isVerticalFovFixed - defines it the fov is vertically fixed (default) or horizontally\n */\n function perspectiveFovRHToRef(fov, aspect, znear, zfar, result, isVerticalFovFixed = true) {\n /* alternatively self could be expressed as:\n // m = PerspectiveFovLHToRef\n // m[10] *= -1.0;\n // m[11] *= -1.0;\n */\n const n = znear;\n const f = zfar;\n const t = 1.0 / Math.tan(fov * 0.5);\n const a = isVerticalFovFixed ? t / aspect : t;\n const b = isVerticalFovFixed ? t : t * aspect;\n const c = -(f + n) / (f - n);\n const d = (-2 * f * n) / (f - n);\n fromValuesToRef(a, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, c, -1.0, 0.0, 0.0, d, 0.0, result);\n _updateIdentityStatus(result, false);\n }\n Matrix.perspectiveFovRHToRef = perspectiveFovRHToRef;\n /**\n * Stores a perspective projection for WebVR info a given matrix\n * @param fov - defines the field of view\n * @param znear - defines the near clip plane\n * @param zfar - defines the far clip plane\n * @param result - defines the target matrix\n * @param rightHanded - defines if the matrix must be in right-handed mode (false by default)\n */\n function perspectiveFovWebVRToRef(fov, znear, zfar, result, rightHanded = false) {\n const rightHandedFactor = rightHanded ? -1 : 1;\n const upTan = Math.tan((fov.upDegrees * Math.PI) / 180.0);\n const downTan = Math.tan((fov.downDegrees * Math.PI) / 180.0);\n const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180.0);\n const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180.0);\n const xScale = 2.0 / (leftTan + rightTan);\n const yScale = 2.0 / (upTan + downTan);\n const m = result._m;\n m[0] = xScale;\n m[1] = m[2] = m[3] = m[4] = 0.0;\n m[5] = yScale;\n m[6] = m[7] = 0.0;\n m[8] = (leftTan - rightTan) * xScale * 0.5;\n m[9] = -((upTan - downTan) * yScale * 0.5);\n m[10] = -zfar / (znear - zfar);\n m[11] = 1.0 * rightHandedFactor;\n m[12] = m[13] = m[15] = 0.0;\n m[14] = -(2.0 * zfar * znear) / (zfar - znear);\n _markAsUpdated(result);\n }\n Matrix.perspectiveFovWebVRToRef = perspectiveFovWebVRToRef;\n /**\n * Extracts a 2x2 matrix from a given matrix and store the result in a FloatArray\n * @param matrix - defines the matrix to use\n * @returns a new FloatArray array with 4 elements : the 2x2 matrix extracted from the given matrix\n */\n function GetAsMatrix2x2(matrix) {\n return [matrix._m[0], matrix._m[1], matrix._m[4], matrix._m[5]];\n }\n Matrix.GetAsMatrix2x2 = GetAsMatrix2x2;\n /**\n * Extracts a 3x3 matrix from a given matrix and store the result in a FloatArray\n * @param matrix - defines the matrix to use\n * @returns a new FloatArray array with 9 elements : the 3x3 matrix extracted from the given matrix\n */\n function GetAsMatrix3x3(matrix) {\n return [\n matrix._m[0],\n matrix._m[1],\n matrix._m[2],\n matrix._m[4],\n matrix._m[5],\n matrix._m[6],\n matrix._m[8],\n matrix._m[9],\n matrix._m[10]\n ];\n }\n Matrix.GetAsMatrix3x3 = GetAsMatrix3x3;\n /**\n * Compute the transpose of a given matrix\n * @param matrix - defines the matrix to transpose\n * @returns the new matrix\n */\n function transpose(matrix) {\n const result = create();\n transposeToRef(matrix, result);\n return result;\n }\n Matrix.transpose = transpose;\n /**\n * Compute the transpose of a matrix and store it in a target matrix\n * @param matrix - defines the matrix to transpose\n * @param result - defines the target matrix\n */\n function transposeToRef(matrix, result) {\n const rm = result._m;\n const mm = matrix._m;\n rm[0] = mm[0];\n rm[1] = mm[4];\n rm[2] = mm[8];\n rm[3] = mm[12];\n rm[4] = mm[1];\n rm[5] = mm[5];\n rm[6] = mm[9];\n rm[7] = mm[13];\n rm[8] = mm[2];\n rm[9] = mm[6];\n rm[10] = mm[10];\n rm[11] = mm[14];\n rm[12] = mm[3];\n rm[13] = mm[7];\n rm[14] = mm[11];\n rm[15] = mm[15];\n // identity-ness does not change when transposing\n _updateIdentityStatus(result, matrix.isIdentity, matrix._isIdentityDirty);\n }\n Matrix.transposeToRef = transposeToRef;\n /**\n * Computes a reflection matrix from a plane\n * @param plane - defines the reflection plane\n * @returns a new matrix\n */\n function reflection(plane) {\n const matrix = create();\n reflectionToRef(plane, matrix);\n return matrix;\n }\n Matrix.reflection = reflection;\n /**\n * Computes a reflection matrix from a plane\n * @param plane - defines the reflection plane\n * @param result - defines the target matrix\n */\n function reflectionToRef(_plane, result) {\n const plane = Plane_1.Plane.normalize(_plane);\n const x = plane.normal.x;\n const y = plane.normal.y;\n const z = plane.normal.z;\n const temp = -2 * x;\n const temp2 = -2 * y;\n const temp3 = -2 * z;\n fromValuesToRef(temp * x + 1, temp2 * x, temp3 * x, 0.0, temp * y, temp2 * y + 1, temp3 * y, 0.0, temp * z, temp2 * z, temp3 * z + 1, 0.0, temp * plane.d, temp2 * plane.d, temp3 * plane.d, 1.0, result);\n }\n Matrix.reflectionToRef = reflectionToRef;\n /**\n * Sets the given matrix as a rotation matrix composed from the 3 left handed axes\n * @param xaxis - defines the value of the 1st axis\n * @param yaxis - defines the value of the 2nd axis\n * @param zaxis - defines the value of the 3rd axis\n * @param result - defines the target matrix\n */\n function fromXYZAxesToRef(xaxis, yaxis, zaxis, result) {\n fromValuesToRef(xaxis.x, xaxis.y, xaxis.z, 0.0, yaxis.x, yaxis.y, yaxis.z, 0.0, zaxis.x, zaxis.y, zaxis.z, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n }\n Matrix.fromXYZAxesToRef = fromXYZAxesToRef;\n /**\n * Creates a rotation matrix from a quaternion and stores it in a target matrix\n * @param quat - defines the quaternion to use\n * @param result - defines the target matrix\n */\n function fromQuaternionToRef(quat, result) {\n const xx = quat.x * quat.x;\n const yy = quat.y * quat.y;\n const zz = quat.z * quat.z;\n const xy = quat.x * quat.y;\n const zw = quat.z * quat.w;\n const zx = quat.z * quat.x;\n const yw = quat.y * quat.w;\n const yz = quat.y * quat.z;\n const xw = quat.x * quat.w;\n result._m[0] = 1.0 - 2.0 * (yy + zz);\n result._m[1] = 2.0 * (xy + zw);\n result._m[2] = 2.0 * (zx - yw);\n result._m[3] = 0.0;\n result._m[4] = 2.0 * (xy - zw);\n result._m[5] = 1.0 - 2.0 * (zz + xx);\n result._m[6] = 2.0 * (yz + xw);\n result._m[7] = 0.0;\n result._m[8] = 2.0 * (zx + yw);\n result._m[9] = 2.0 * (yz - xw);\n result._m[10] = 1.0 - 2.0 * (yy + xx);\n result._m[11] = 0.0;\n result._m[12] = 0.0;\n result._m[13] = 0.0;\n result._m[14] = 0.0;\n result._m[15] = 1.0;\n _markAsUpdated(result);\n }\n Matrix.fromQuaternionToRef = fromQuaternionToRef;\n /** @internal */\n function _markAsUpdated(self) {\n self.updateFlag = _updateFlagSeed++;\n self.isIdentity = false;\n self.isIdentity3x2 = false;\n self._isIdentityDirty = true;\n self._isIdentity3x2Dirty = true;\n }\n // Properties\n /**\n * Check if the current matrix is identity\n * @returns true is the matrix is the identity matrix\n */\n function isIdentityUpdate(self) {\n if (self._isIdentityDirty) {\n self._isIdentityDirty = false;\n const m = self._m;\n self.isIdentity =\n m[0] === 1.0 &&\n m[1] === 0.0 &&\n m[2] === 0.0 &&\n m[3] === 0.0 &&\n m[4] === 0.0 &&\n m[5] === 1.0 &&\n m[6] === 0.0 &&\n m[7] === 0.0 &&\n m[8] === 0.0 &&\n m[9] === 0.0 &&\n m[10] === 1.0 &&\n m[11] === 0.0 &&\n m[12] === 0.0 &&\n m[13] === 0.0 &&\n m[14] === 0.0 &&\n m[15] === 1.0;\n }\n return self.isIdentity;\n }\n Matrix.isIdentityUpdate = isIdentityUpdate;\n /**\n * Check if the current matrix is identity as a texture matrix (3x2 store in 4x4)\n * @returns true is the matrix is the identity matrix\n */\n function isIdentityAs3x2Update(self) {\n if (self._isIdentity3x2Dirty) {\n self._isIdentity3x2Dirty = false;\n if (self._m[0] !== 1.0 || self._m[5] !== 1.0 || self._m[15] !== 1.0) {\n self.isIdentity3x2 = false;\n }\n else if (self._m[1] !== 0.0 ||\n self._m[2] !== 0.0 ||\n self._m[3] !== 0.0 ||\n self._m[4] !== 0.0 ||\n self._m[6] !== 0.0 ||\n self._m[7] !== 0.0 ||\n self._m[8] !== 0.0 ||\n self._m[9] !== 0.0 ||\n self._m[10] !== 0.0 ||\n self._m[11] !== 0.0 ||\n self._m[12] !== 0.0 ||\n self._m[13] !== 0.0 ||\n self._m[14] !== 0.0) {\n self.isIdentity3x2 = false;\n }\n else {\n self.isIdentity3x2 = true;\n }\n }\n return self.isIdentity3x2;\n }\n Matrix.isIdentityAs3x2Update = isIdentityAs3x2Update;\n /**\n * Gets the determinant of the matrix\n * @returns the matrix determinant\n */\n function determinant(self) {\n if (self.isIdentity === true) {\n return 1;\n }\n const m = self._m;\n // tslint:disable-next-line:one-variable-per-declaration\n const m00 = m[0], m01 = m[1], m02 = m[2], m03 = m[3];\n // tslint:disable-next-line:one-variable-per-declaration\n const m10 = m[4], m11 = m[5], m12 = m[6], m13 = m[7];\n // tslint:disable-next-line:one-variable-per-declaration\n const m20 = m[8], m21 = m[9], m22 = m[10], m23 = m[11];\n // tslint:disable-next-line:one-variable-per-declaration\n const m30 = m[12], m31 = m[13], m32 = m[14], m33 = m[15];\n /*\n // https://en.wikipedia.org/wiki/Laplace_expansion\n // to compute the deterrminant of a 4x4 Matrix we compute the cofactors of any row or column,\n // then we multiply each Cofactor by its corresponding matrix value and sum them all to get the determinant\n // Cofactor(i, j) = sign(i,j) * det(Minor(i, j))\n // where\n // - sign(i,j) = (i+j) % 2 === 0 ? 1 : -1\n // - Minor(i, j) is the 3x3 matrix we get by removing row i and column j from current Matrix\n //\n // Here we do that for the 1st row.\n */\n // tslint:disable:variable-name\n const det_22_33 = m22 * m33 - m32 * m23;\n const det_21_33 = m21 * m33 - m31 * m23;\n const det_21_32 = m21 * m32 - m31 * m22;\n const det_20_33 = m20 * m33 - m30 * m23;\n const det_20_32 = m20 * m32 - m22 * m30;\n const det_20_31 = m20 * m31 - m30 * m21;\n const cofact_00 = +(m11 * det_22_33 - m12 * det_21_33 + m13 * det_21_32);\n const cofact_01 = -(m10 * det_22_33 - m12 * det_20_33 + m13 * det_20_32);\n const cofact_02 = +(m10 * det_21_33 - m11 * det_20_33 + m13 * det_20_31);\n const cofact_03 = -(m10 * det_21_32 - m11 * det_20_32 + m12 * det_20_31);\n // tslint:enable:variable-name\n return m00 * cofact_00 + m01 * cofact_01 + m02 * cofact_02 + m03 * cofact_03;\n }\n Matrix.determinant = determinant;\n // Methods\n /**\n * Returns the matrix as a FloatArray\n * @returns the matrix underlying array\n */\n function toArray(self) {\n return self._m;\n }\n Matrix.toArray = toArray;\n /**\n * Returns the matrix as a FloatArray\n * @returns the matrix underlying array.\n */\n function asArray(self) {\n return self._m;\n }\n Matrix.asArray = asArray;\n /**\n * Sets all the matrix elements to zero\n * @returns the current matrix\n */\n function reset(self) {\n fromValuesToRef(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, self);\n _updateIdentityStatus(self, false);\n }\n Matrix.reset = reset;\n /**\n * Adds the current matrix with a second one\n * @param other - defines the matrix to add\n * @returns a new matrix as the addition of the current matrix and the given one\n */\n function add(self, other) {\n const result = create();\n addToRef(self, other, result);\n return result;\n }\n Matrix.add = add;\n /**\n * Sets the given matrix \"result\" to the addition of the current matrix and the given one\n * @param other - defines the matrix to add\n * @param result - defines the target matrix\n * @returns the current matrix\n */\n function addToRef(self, other, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] = self._m[index] + other._m[index];\n }\n _markAsUpdated(result);\n }\n Matrix.addToRef = addToRef;\n /**\n * Adds in place the given matrix to the current matrix\n * @param other - defines the second operand\n * @returns the current updated matrix\n */\n function addToSelf(self, other) {\n for (let index = 0; index < 16; index++) {\n self._m[index] += other._m[index];\n }\n _markAsUpdated(self);\n }\n Matrix.addToSelf = addToSelf;\n /**\n * Creates a new matrix as the invert of a given matrix\n * @param source - defines the source matrix\n * @returns the new matrix\n */\n function invert(source) {\n const result = create();\n invertToRef(source, result);\n return result;\n }\n Matrix.invert = invert;\n /**\n * Sets the given matrix to the current inverted Matrix\n * @param other - defines the target matrix\n * @returns the unmodified current matrix\n */\n function invertToRef(source, result) {\n if (source.isIdentity === true) {\n copy(source, result);\n return;\n }\n // the inverse of a Matrix is the transpose of cofactor matrix divided by the determinant\n const m = source._m;\n // tslint:disable:one-variable-per-declaration\n const m00 = m[0], m01 = m[1], m02 = m[2], m03 = m[3];\n const m10 = m[4], m11 = m[5], m12 = m[6], m13 = m[7];\n const m20 = m[8], m21 = m[9], m22 = m[10], m23 = m[11];\n const m30 = m[12], m31 = m[13], m32 = m[14], m33 = m[15];\n // tslint:enable:one-variable-per-declaration\n // tslint:disable:variable-name\n const det_22_33 = m22 * m33 - m32 * m23;\n const det_21_33 = m21 * m33 - m31 * m23;\n const det_21_32 = m21 * m32 - m31 * m22;\n const det_20_33 = m20 * m33 - m30 * m23;\n const det_20_32 = m20 * m32 - m22 * m30;\n const det_20_31 = m20 * m31 - m30 * m21;\n const cofact_00 = +(m11 * det_22_33 - m12 * det_21_33 + m13 * det_21_32);\n const cofact_01 = -(m10 * det_22_33 - m12 * det_20_33 + m13 * det_20_32);\n const cofact_02 = +(m10 * det_21_33 - m11 * det_20_33 + m13 * det_20_31);\n const cofact_03 = -(m10 * det_21_32 - m11 * det_20_32 + m12 * det_20_31);\n const det = m00 * cofact_00 + m01 * cofact_01 + m02 * cofact_02 + m03 * cofact_03;\n if (det === 0) {\n copy(source, result);\n return;\n }\n const detInv = 1 / det;\n const det_12_33 = m12 * m33 - m32 * m13;\n const det_11_33 = m11 * m33 - m31 * m13;\n const det_11_32 = m11 * m32 - m31 * m12;\n const det_10_33 = m10 * m33 - m30 * m13;\n const det_10_32 = m10 * m32 - m30 * m12;\n const det_10_31 = m10 * m31 - m30 * m11;\n const det_12_23 = m12 * m23 - m22 * m13;\n const det_11_23 = m11 * m23 - m21 * m13;\n const det_11_22 = m11 * m22 - m21 * m12;\n const det_10_23 = m10 * m23 - m20 * m13;\n const det_10_22 = m10 * m22 - m20 * m12;\n const det_10_21 = m10 * m21 - m20 * m11;\n const cofact_10 = -(m01 * det_22_33 - m02 * det_21_33 + m03 * det_21_32);\n const cofact_11 = +(m00 * det_22_33 - m02 * det_20_33 + m03 * det_20_32);\n const cofact_12 = -(m00 * det_21_33 - m01 * det_20_33 + m03 * det_20_31);\n const cofact_13 = +(m00 * det_21_32 - m01 * det_20_32 + m02 * det_20_31);\n const cofact_20 = +(m01 * det_12_33 - m02 * det_11_33 + m03 * det_11_32);\n const cofact_21 = -(m00 * det_12_33 - m02 * det_10_33 + m03 * det_10_32);\n const cofact_22 = +(m00 * det_11_33 - m01 * det_10_33 + m03 * det_10_31);\n const cofact_23 = -(m00 * det_11_32 - m01 * det_10_32 + m02 * det_10_31);\n const cofact_30 = -(m01 * det_12_23 - m02 * det_11_23 + m03 * det_11_22);\n const cofact_31 = +(m00 * det_12_23 - m02 * det_10_23 + m03 * det_10_22);\n const cofact_32 = -(m00 * det_11_23 - m01 * det_10_23 + m03 * det_10_21);\n const cofact_33 = +(m00 * det_11_22 - m01 * det_10_22 + m02 * det_10_21);\n fromValuesToRef(cofact_00 * detInv, cofact_10 * detInv, cofact_20 * detInv, cofact_30 * detInv, cofact_01 * detInv, cofact_11 * detInv, cofact_21 * detInv, cofact_31 * detInv, cofact_02 * detInv, cofact_12 * detInv, cofact_22 * detInv, cofact_32 * detInv, cofact_03 * detInv, cofact_13 * detInv, cofact_23 * detInv, cofact_33 * detInv, result);\n // tslint:enable:variable-name\n }\n Matrix.invertToRef = invertToRef;\n /**\n * add a value at the specified position in the current Matrix\n * @param index - the index of the value within the matrix. between 0 and 15.\n * @param value - the value to be added\n * @returns the current updated matrix\n */\n function addAtIndex(self, index, value) {\n self._m[index] += value;\n _markAsUpdated(self);\n }\n Matrix.addAtIndex = addAtIndex;\n /**\n * mutiply the specified position in the current Matrix by a value\n * @param index - the index of the value within the matrix. between 0 and 15.\n * @param value - the value to be added\n * @returns the current updated matrix\n */\n function multiplyAtIndex(self, index, value) {\n self._m[index] *= value;\n _markAsUpdated(self);\n return self;\n }\n Matrix.multiplyAtIndex = multiplyAtIndex;\n /**\n * Inserts the translation vector (using 3 floats) in the current matrix\n * @param x - defines the 1st component of the translation\n * @param y - defines the 2nd component of the translation\n * @param z - defines the 3rd component of the translation\n * @returns the current updated matrix\n */\n function setTranslationFromFloats(self, x, y, z) {\n self._m[12] = x;\n self._m[13] = y;\n self._m[14] = z;\n _markAsUpdated(self);\n }\n Matrix.setTranslationFromFloats = setTranslationFromFloats;\n /**\n * Inserts the translation vector in the current matrix\n * @param vector3 - defines the translation to insert\n * @returns the current updated matrix\n */\n function setTranslation(self, vector3) {\n setTranslationFromFloats(self, vector3.x, vector3.y, vector3.z);\n }\n Matrix.setTranslation = setTranslation;\n /**\n * Gets the translation value of the current matrix\n * @returns a new Vector3 as the extracted translation from the matrix\n */\n function getTranslation(self) {\n return Vector3_1.Vector3.create(self._m[12], self._m[13], self._m[14]);\n }\n Matrix.getTranslation = getTranslation;\n /**\n * Fill a Vector3 with the extracted translation from the matrix\n * @param result - defines the Vector3 where to store the translation\n * @returns the current matrix\n */\n function getTranslationToRef(self, result) {\n result.x = self._m[12];\n result.y = self._m[13];\n result.z = self._m[14];\n }\n Matrix.getTranslationToRef = getTranslationToRef;\n /**\n * Remove rotation and scaling part from the matrix\n * @returns the updated matrix\n */\n function removeRotationAndScaling(self) {\n const m = self._m;\n fromValuesToRef(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, m[12], m[13], m[14], m[15], self);\n _updateIdentityStatus(self, m[12] === 0 && m[13] === 0 && m[14] === 0 && m[15] === 1);\n return self;\n }\n Matrix.removeRotationAndScaling = removeRotationAndScaling;\n /**\n * Multiply two matrices\n * @param other - defines the second operand\n * @returns a new matrix set with the multiplication result of the current Matrix and the given one\n */\n function multiply(self, other) {\n const result = create();\n multiplyToRef(self, other, result);\n return result;\n }\n Matrix.multiply = multiply;\n /**\n * Copy the current matrix from the given one\n * @param other - defines the source matrix\n * @returns the current updated matrix\n */\n function copy(from, dest) {\n copyToArray(from, dest._m);\n _updateIdentityStatus(dest, from.isIdentity, from._isIdentityDirty, from.isIdentity3x2, from._isIdentity3x2Dirty);\n }\n Matrix.copy = copy;\n /**\n * Populates the given array from the starting index with the current matrix values\n * @param array - defines the target array\n * @param offset - defines the offset in the target array where to start storing values\n * @returns the current matrix\n */\n function copyToArray(self, arrayDest, offsetDest = 0) {\n for (let index = 0; index < 16; index++) {\n arrayDest[offsetDest + index] = self._m[index];\n }\n }\n Matrix.copyToArray = copyToArray;\n /**\n * Sets the given matrix \"result\" with the multiplication result of the current Matrix and the given one\n * @param other - defines the second operand\n * @param result - defines the matrix where to store the multiplication\n * @returns the current matrix\n */\n function multiplyToRef(self, other, result) {\n if (self.isIdentity) {\n copy(other, result);\n return;\n }\n if (other.isIdentity) {\n copy(self, result);\n return;\n }\n multiplyToArray(self, other, result._m, 0);\n _markAsUpdated(result);\n }\n Matrix.multiplyToRef = multiplyToRef;\n /**\n * Sets the FloatArray \"result\" from the given index \"offset\" with the multiplication of the current matrix and the given one\n * @param other - defines the second operand\n * @param result - defines the array where to store the multiplication\n * @param offset - defines the offset in the target array where to start storing values\n * @returns the current matrix\n */\n function multiplyToArray(self, other, result, offset) {\n const m = self._m;\n const otherM = other._m;\n // tslint:disable:one-variable-per-declaration\n const tm0 = m[0], tm1 = m[1], tm2 = m[2], tm3 = m[3];\n const tm4 = m[4], tm5 = m[5], tm6 = m[6], tm7 = m[7];\n const tm8 = m[8], tm9 = m[9], tm10 = m[10], tm11 = m[11];\n const tm12 = m[12], tm13 = m[13], tm14 = m[14], tm15 = m[15];\n const om0 = otherM[0], om1 = otherM[1], om2 = otherM[2], om3 = otherM[3];\n const om4 = otherM[4], om5 = otherM[5], om6 = otherM[6], om7 = otherM[7];\n const om8 = otherM[8], om9 = otherM[9], om10 = otherM[10], om11 = otherM[11];\n const om12 = otherM[12], om13 = otherM[13], om14 = otherM[14], om15 = otherM[15];\n // tslint:enable:one-variable-per-declaration\n result[offset] = tm0 * om0 + tm1 * om4 + tm2 * om8 + tm3 * om12;\n result[offset + 1] = tm0 * om1 + tm1 * om5 + tm2 * om9 + tm3 * om13;\n result[offset + 2] = tm0 * om2 + tm1 * om6 + tm2 * om10 + tm3 * om14;\n result[offset + 3] = tm0 * om3 + tm1 * om7 + tm2 * om11 + tm3 * om15;\n result[offset + 4] = tm4 * om0 + tm5 * om4 + tm6 * om8 + tm7 * om12;\n result[offset + 5] = tm4 * om1 + tm5 * om5 + tm6 * om9 + tm7 * om13;\n result[offset + 6] = tm4 * om2 + tm5 * om6 + tm6 * om10 + tm7 * om14;\n result[offset + 7] = tm4 * om3 + tm5 * om7 + tm6 * om11 + tm7 * om15;\n result[offset + 8] = tm8 * om0 + tm9 * om4 + tm10 * om8 + tm11 * om12;\n result[offset + 9] = tm8 * om1 + tm9 * om5 + tm10 * om9 + tm11 * om13;\n result[offset + 10] = tm8 * om2 + tm9 * om6 + tm10 * om10 + tm11 * om14;\n result[offset + 11] = tm8 * om3 + tm9 * om7 + tm10 * om11 + tm11 * om15;\n result[offset + 12] = tm12 * om0 + tm13 * om4 + tm14 * om8 + tm15 * om12;\n result[offset + 13] = tm12 * om1 + tm13 * om5 + tm14 * om9 + tm15 * om13;\n result[offset + 14] = tm12 * om2 + tm13 * om6 + tm14 * om10 + tm15 * om14;\n result[offset + 15] = tm12 * om3 + tm13 * om7 + tm14 * om11 + tm15 * om15;\n }\n Matrix.multiplyToArray = multiplyToArray;\n /**\n * Check equality between self matrix and a second one\n * @param value - defines the second matrix to compare\n * @returns true is the current matrix and the given one values are strictly equal\n */\n function equals(self, value) {\n const other = value;\n if (!other) {\n return false;\n }\n if (self.isIdentity || other.isIdentity) {\n if (!self._isIdentityDirty && !other._isIdentityDirty) {\n return self.isIdentity && other.isIdentity;\n }\n }\n const m = self._m;\n const om = other._m;\n return (m[0] === om[0] &&\n m[1] === om[1] &&\n m[2] === om[2] &&\n m[3] === om[3] &&\n m[4] === om[4] &&\n m[5] === om[5] &&\n m[6] === om[6] &&\n m[7] === om[7] &&\n m[8] === om[8] &&\n m[9] === om[9] &&\n m[10] === om[10] &&\n m[11] === om[11] &&\n m[12] === om[12] &&\n m[13] === om[13] &&\n m[14] === om[14] &&\n m[15] === om[15]);\n }\n Matrix.equals = equals;\n /**\n * Clone the current matrix\n * @returns a new matrix from the current matrix\n */\n function clone(self) {\n const result = create();\n copy(self, result);\n return result;\n }\n Matrix.clone = clone;\n /**\n * Gets the hash code of the current matrix\n * @returns the hash code\n */\n function getHashCode(self) {\n let hash = self._m[0] || 0;\n for (let i = 1; i < 16; i++) {\n hash = (hash * 397) ^ (self._m[i] || 0);\n }\n return hash;\n }\n Matrix.getHashCode = getHashCode;\n /**\n * Decomposes the current Matrix into a translation, rotation and scaling components\n * @param scale - defines the scale vector3 given as a reference to update\n * @param rotation - defines the rotation quaternion given as a reference to update\n * @param translation - defines the translation vector3 given as a reference to update\n * @returns true if operation was successful\n */\n function decompose(self, scale, rotation, translation) {\n if (self.isIdentity) {\n if (translation) {\n translation = Vector3_1.Vector3.create(0, 0, 0);\n }\n if (scale) {\n scale = Vector3_1.Vector3.create(0, 0, 0);\n }\n if (rotation) {\n rotation = Quaternion_1.Quaternion.create(0, 0, 0, 1);\n }\n return true;\n }\n const m = self._m;\n if (translation) {\n translation = Vector3_1.Vector3.create(m[12], m[13], m[14]);\n }\n const usedScale = scale || Vector3_1.Vector3.Zero();\n usedScale.x = Math.sqrt(m[0] * m[0] + m[1] * m[1] + m[2] * m[2]);\n usedScale.y = Math.sqrt(m[4] * m[4] + m[5] * m[5] + m[6] * m[6]);\n usedScale.z = Math.sqrt(m[8] * m[8] + m[9] * m[9] + m[10] * m[10]);\n if (determinant(self) <= 0) {\n usedScale.y *= -1;\n }\n if (usedScale.x === 0 || usedScale.y === 0 || usedScale.z === 0) {\n if (rotation) {\n rotation = Quaternion_1.Quaternion.create(0, 0, 0, 1);\n }\n return false;\n }\n if (rotation) {\n // tslint:disable-next-line:one-variable-per-declaration\n const sx = 1 / usedScale.x, sy = 1 / usedScale.y, sz = 1 / usedScale.z;\n const tmpMatrix = create();\n fromValuesToRef(m[0] * sx, m[1] * sx, m[2] * sx, 0.0, m[4] * sy, m[5] * sy, m[6] * sy, 0.0, m[8] * sz, m[9] * sz, m[10] * sz, 0.0, 0.0, 0.0, 0.0, 1.0, tmpMatrix);\n Quaternion_1.Quaternion.fromRotationMatrixToRef(tmpMatrix, rotation);\n }\n return true;\n }\n Matrix.decompose = decompose;\n /**\n * Gets specific row of the matrix\n * @param index - defines the number of the row to get\n * @returns the index-th row of the current matrix as a new Vector4\n */\n // TODO\n // export function getRow(index: number): Nullable<Vector4> {\n // if (index < 0 || index > 3) {\n // return null\n // }\n // const i = index * 4\n // return new Vector4(\n // self._m[i + 0],\n // self._m[i + 1],\n // self._m[i + 2],\n // self._m[i + 3]\n // )\n // }\n /**\n * Sets the index-th row of the current matrix to the vector4 values\n * @param index - defines the number of the row to set\n * @param row - defines the target vector4\n * @returns the updated current matrix\n */\n // TODO\n // export function setRow(index: number, row: Vector4): MutableMatrix {\n // return setRowFromFloats(index, row.x, row.y, row.z, row.w)\n // }\n /**\n * Sets the index-th row of the current matrix with the given 4 x float values\n * @param index - defines the row index\n * @param x - defines the x component to set\n * @param y - defines the y component to set\n * @param z - defines the z component to set\n * @param w - defines the w component to set\n * @returns the updated current matrix\n */\n function setRowFromFloats(self, index, x, y, z, w) {\n if (index < 0 || index > 3) {\n return;\n }\n const i = index * 4;\n self._m[i + 0] = x;\n self._m[i + 1] = y;\n self._m[i + 2] = z;\n self._m[i + 3] = w;\n _markAsUpdated(self);\n }\n Matrix.setRowFromFloats = setRowFromFloats;\n /**\n * Compute a new matrix set with the current matrix values multiplied by scale (float)\n * @param scale - defines the scale factor\n * @returns a new matrix\n */\n function scale(self, scale) {\n const result = create();\n scaleToRef(self, scale, result);\n return result;\n }\n Matrix.scale = scale;\n /**\n * Scale the current matrix values by a factor to a given result matrix\n * @param scale - defines the scale factor\n * @param result - defines the matrix to store the result\n * @returns the current matrix\n */\n function scaleToRef(self, scale, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] = self._m[index] * scale;\n }\n _markAsUpdated(result);\n }\n Matrix.scaleToRef = scaleToRef;\n /**\n * Scale the current matrix values by a factor and add the result to a given matrix\n * @param scale - defines the scale factor\n * @param result - defines the Matrix to store the result\n * @returns the current matrix\n */\n function scaleAndAddToRef(self, scale, result) {\n for (let index = 0; index < 16; index++) {\n result._m[index] += self._m[index] * scale;\n }\n _markAsUpdated(result);\n }\n Matrix.scaleAndAddToRef = scaleAndAddToRef;\n /**\n * Writes to the given matrix a normal matrix, computed from self one (using values from identity matrix for fourth row and column).\n * @param ref - matrix to store the result\n */\n function normalMatrixToRef(self, ref) {\n const tmp = create();\n invertToRef(self, tmp);\n transposeToRef(tmp, ref);\n const m = ref._m;\n fromValuesToRef(m[0], m[1], m[2], 0.0, m[4], m[5], m[6], 0.0, m[8], m[9], m[10], 0.0, 0.0, 0.0, 0.0, 1.0, ref);\n }\n Matrix.normalMatrixToRef = normalMatrixToRef;\n /**\n * Gets only rotation part of the current matrix\n * @returns a new matrix sets to the extracted rotation matrix from the current one\n */\n function getRotationMatrix(self) {\n const result = create();\n getRotationMatrixToRef(self, result);\n return result;\n }\n Matrix.getRotationMatrix = getRotationMatrix;\n /**\n * Extracts the rotation matrix from the current one and sets it as the given \"result\"\n * @param result - defines the target matrix to store data to\n * @returns the current matrix\n */\n function getRotationMatrixToRef(self, result) {\n const scale = Vector3_1.Vector3.Zero();\n if (!decompose(self, scale)) {\n result = Identity();\n return;\n }\n const m = self._m;\n // tslint:disable-next-line:one-variable-per-declaration\n const sx = 1 / scale.x, sy = 1 / scale.y, sz = 1 / scale.z;\n fromValuesToRef(m[0] * sx, m[1] * sx, m[2] * sx, 0.0, m[4] * sy, m[5] * sy, m[6] * sy, 0.0, m[8] * sz, m[9] * sz, m[10] * sz, 0.0, 0.0, 0.0, 0.0, 1.0, result);\n }\n Matrix.getRotationMatrixToRef = getRotationMatrixToRef;\n /**\n * Toggles model matrix from being right handed to left handed in place and vice versa\n */\n function toggleModelMatrixHandInPlace(self) {\n self._m[2] *= -1;\n self._m[6] *= -1;\n self._m[8] *= -1;\n self._m[9] *= -1;\n self._m[14] *= -1;\n _markAsUpdated(self);\n }\n Matrix.toggleModelMatrixHandInPlace = toggleModelMatrixHandInPlace;\n /**\n * Toggles projection matrix from being right handed to left handed in place and vice versa\n */\n function toggleProjectionMatrixHandInPlace(self) {\n self._m[8] *= -1;\n self._m[9] *= -1;\n self._m[10] *= -1;\n self._m[11] *= -1;\n _markAsUpdated(self);\n }\n Matrix.toggleProjectionMatrixHandInPlace = toggleProjectionMatrixHandInPlace;\n /** @internal */\n function _updateIdentityStatus(self, isIdentity, isIdentityDirty = false, isIdentity3x2 = false, isIdentity3x2Dirty = true) {\n self.updateFlag = _updateFlagSeed++;\n self.isIdentity = isIdentity;\n self.isIdentity3x2 = isIdentity || isIdentity3x2;\n self._isIdentityDirty = self.isIdentity ? false : isIdentityDirty;\n self._isIdentity3x2Dirty = self.isIdentity3x2 ? false : isIdentity3x2Dirty;\n }\n})(Matrix = exports.Matrix || (exports.Matrix = {}));\n//# sourceMappingURL=Matrix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quaternion = void 0;\nconst Vector3_1 = require(\"./Vector3\");\nconst Scalar_1 = require(\"./Scalar\");\nconst types_1 = require(\"./types\");\nconst Matrix_1 = require(\"./Matrix\");\n/**\n * @public\n * Quaternion is a type and a namespace.\n * ```\n * // The namespace contains all types and functions to operates with Quaternion\n * const next = Quaternion.add(pointA, velocityA)\n * // The type Quaternion is an alias to Quaternion.ReadonlyQuaternion\n * const readonlyRotation: Quaternion = Quaternion.Zero()\n * readonlyRotation.x = 0.1 // this FAILS\n *\n * // For mutable usage, use `Quaternion.Mutable`\n * const rotation: Quaternion.Mutable = Quaternion.Identity()\n * rotation.x = 3.0 // this WORKS\n * ```\n */\nvar Quaternion;\n(function (Quaternion) {\n /**\n * Creates a new Quaternion from the given floats\n * @param x - defines the first component (0 by default)\n * @param y - defines the second component (0 by default)\n * @param z - defines the third component (0 by default)\n * @param w - defines the fourth component (1.0 by default)\n */\n function create(\n /** defines the first component (0 by default) */\n x = 0.0, \n /** defines the second component (0 by default) */\n y = 0.0, \n /** defines the third component (0 by default) */\n z = 0.0, \n /** defines the fourth component (1.0 by default) */\n w = 1.0) {\n return { x, y, z, w };\n }\n Quaternion.create = create;\n /**\n * Returns a new Quaternion as the result of the addition of the two given quaternions.\n * @param q1 - the first quaternion\n * @param q2 - the second quaternion\n * @returns the resulting quaternion\n */\n function add(q1, q2) {\n return { x: q1.x + q2.x, y: q1.y + q2.y, z: q1.z + q2.z, w: q1.w + q2.w };\n }\n Quaternion.add = add;\n /**\n * Creates a new rotation from the given Euler float angles (y, x, z) and stores it in the target quaternion\n * @param yaw - defines the rotation around Y axis (radians)\n * @param pitch - defines the rotation around X axis (radians)\n * @param roll - defines the rotation around Z axis (radians)\n * @returns result quaternion\n */\n function fromRotationYawPitchRoll(yaw, pitch, roll) {\n // Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n const halfPitch = pitch * 0.5;\n const halfYaw = yaw * 0.5;\n const halfRoll = roll * 0.5;\n const c1 = Math.cos(halfPitch);\n const c2 = Math.cos(halfYaw);\n const c3 = Math.cos(halfRoll);\n const s1 = Math.sin(halfPitch);\n const s2 = Math.sin(halfYaw);\n const s3 = Math.sin(halfRoll);\n return create(c2 * s1 * c3 + s2 * c1 * s3, s2 * c1 * c3 - c2 * s1 * s3, c2 * c1 * s3 - s2 * s1 * c3, c2 * c1 * c3 + s2 * s1 * s3);\n }\n Quaternion.fromRotationYawPitchRoll = fromRotationYawPitchRoll;\n /**\n * Returns a rotation that rotates z degrees around the z axis, x degrees around the x axis, and y degrees around the y axis.\n * @param x - the rotation on the x axis in euler degrees\n * @param y - the rotation on the y axis in euler degrees\n * @param z - the rotation on the z axis in euler degrees\n */\n function fromEulerDegrees(x, y, z) {\n return fromRotationYawPitchRoll(y * types_1.DEG2RAD, x * types_1.DEG2RAD, z * types_1.DEG2RAD);\n }\n Quaternion.fromEulerDegrees = fromEulerDegrees;\n /**\n * Gets length of current quaternion\n * @returns the quaternion length (float)\n */\n function length(q) {\n return Math.sqrt(lengthSquared(q));\n }\n Quaternion.length = length;\n /**\n * Gets length of current quaternion\n * @returns the quaternion length (float)\n */\n function lengthSquared(q) {\n return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n }\n Quaternion.lengthSquared = lengthSquared;\n /**\n * Returns the dot product (float) between the quaternions \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the dot product\n */\n function dot(left, right) {\n return (left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w);\n }\n Quaternion.dot = dot;\n /**\n * Returns the angle in degrees between two rotations a and b.\n * @param quat1 - defines the first quaternion\n * @param quat2 - defines the second quaternion\n * @returns the degrees angle\n */\n function angle(quat1, quat2) {\n const dotVal = dot(quat1, quat2);\n return Math.acos(Math.min(Math.abs(dotVal), 1)) * 2 * types_1.RAD2DEG;\n }\n Quaternion.angle = angle;\n /**\n * The from quaternion is rotated towards to by an angular step of maxDegreesDelta.\n * @param from - defines the first quaternion\n * @param to - defines the second quaternion\n * @param maxDegreesDelta - the interval step\n */\n function rotateTowards(from, to, maxDegreesDelta) {\n const num = angle(from, to);\n if (num === 0) {\n return to;\n }\n const t = Math.min(1, maxDegreesDelta / num);\n return slerp(from, to, t);\n }\n Quaternion.rotateTowards = rotateTowards;\n /**\n * Creates a rotation with the specified forward and upwards directions.\n * @param forward - the direction to look in\n * @param up - the vector that defines in which direction up is\n */\n function lookRotation(forward, up = { x: 0.0, y: 1.0, z: 0.0 }) {\n const forwardNew = Vector3_1.Vector3.normalize(forward);\n const right = Vector3_1.Vector3.normalize(Vector3_1.Vector3.cross(up, forwardNew));\n const upNew = Vector3_1.Vector3.cross(forwardNew, right);\n const m00 = right.x;\n const m01 = right.y;\n const m02 = right.z;\n const m10 = upNew.x;\n const m11 = upNew.y;\n const m12 = upNew.z;\n const m20 = forwardNew.x;\n const m21 = forwardNew.y;\n const m22 = forwardNew.z;\n const num8 = m00 + m11 + m22;\n const quaternion = create();\n if (num8 > 0) {\n let num = Math.sqrt(num8 + 1);\n quaternion.w = num * 0.5;\n num = 0.5 / num;\n quaternion.x = (m12 - m21) * num;\n quaternion.y = (m20 - m02) * num;\n quaternion.z = (m01 - m10) * num;\n return quaternion;\n }\n if (m00 >= m11 && m00 >= m22) {\n const num7 = Math.sqrt(1 + m00 - m11 - m22);\n const num4 = 0.5 / num7;\n quaternion.x = 0.5 * num7;\n quaternion.y = (m01 + m10) * num4;\n quaternion.z = (m02 + m20) * num4;\n quaternion.w = (m12 - m21) * num4;\n return quaternion;\n }\n if (m11 > m22) {\n const num6 = Math.sqrt(1 + m11 - m00 - m22);\n const num3 = 0.5 / num6;\n quaternion.x = (m10 + m01) * num3;\n quaternion.y = 0.5 * num6;\n quaternion.z = (m21 + m12) * num3;\n quaternion.w = (m20 - m02) * num3;\n return quaternion;\n }\n const num5 = Math.sqrt(1 + m22 - m00 - m11);\n const num2 = 0.5 / num5;\n quaternion.x = (m20 + m02) * num2;\n quaternion.y = (m21 + m12) * num2;\n quaternion.z = 0.5 * num5;\n quaternion.w = (m01 - m10) * num2;\n return quaternion;\n }\n Quaternion.lookRotation = lookRotation;\n /**\n * Normalize in place the current quaternion\n * @returns the current updated quaternion\n */\n function normalize(q) {\n const qLength = 1.0 / length(q);\n return create(q.x * qLength, q.y * qLength, q.z * qLength, q.w * qLength);\n }\n Quaternion.normalize = normalize;\n /**\n * Creates a rotation which rotates from fromDirection to toDirection.\n * @param from - defines the first direction Vector\n * @param to - defines the target direction Vector\n */\n function fromToRotation(from, to, up = Vector3_1.Vector3.Up()) {\n // Unity-based calculations implemented from https://forum.unity.com/threads/quaternion-lookrotation-around-an-axis.608470/#post-4069888\n const v0 = Vector3_1.Vector3.normalize(from);\n const v1 = Vector3_1.Vector3.normalize(to);\n const a = Vector3_1.Vector3.cross(v0, v1);\n const w = Math.sqrt(Vector3_1.Vector3.lengthSquared(v0) * Vector3_1.Vector3.lengthSquared(v1)) +\n Vector3_1.Vector3.dot(v0, v1);\n if (Vector3_1.Vector3.lengthSquared(a) < 0.0001) {\n // the vectors are parallel, check w to find direction\n // if w is 0 then values are opposite, and we sould rotate 180 degrees around the supplied axis\n // otherwise the vectors in the same direction and no rotation should occur\n return Math.abs(w) < 0.0001\n ? normalize(create(up.x, up.y, up.z, 0))\n : Identity();\n }\n else {\n return normalize(create(a.x, a.y, a.z, w));\n }\n }\n Quaternion.fromToRotation = fromToRotation;\n /**\n * Creates an identity quaternion\n * @returns - the identity quaternion\n */\n function Identity() {\n return create(0.0, 0.0, 0.0, 1.0);\n }\n Quaternion.Identity = Identity;\n /**\n * Gets or sets the euler angle representation of the rotation.\n * Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n * @public\n * @returns a new Vector3 with euler angles degrees\n */\n function toEulerAngles(q) {\n const out = Vector3_1.Vector3.create();\n // if the input quaternion is normalized, this is exactly one. Otherwise, this acts as a correction factor for the quaternion's not-normalizedness\n const unit = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n // q will have a magnitude of 0.5 or greater if and only if q is a singularity case\n const test = q.x * q.w - q.y * q.z;\n if (test > 0.4995 * unit) {\n // singularity at north pole\n out.x = Math.PI / 2;\n out.y = 2 * Math.atan2(q.y, q.x);\n out.z = 0;\n }\n else if (test < -0.4995 * unit) {\n // singularity at south pole\n out.x = -Math.PI / 2;\n out.y = -2 * Math.atan2(q.y, q.x);\n out.z = 0;\n }\n else {\n // no singularity - q is the majority of cases\n out.x = Math.asin(2 * (q.w * q.x - q.y * q.z));\n out.y = Math.atan2(2 * q.w * q.y + 2 * q.z * q.x, 1 - 2 * (q.x * q.x + q.y * q.y));\n out.z = Math.atan2(2 * q.w * q.z + 2 * q.x * q.y, 1 - 2 * (q.z * q.z + q.x * q.x));\n }\n out.x *= types_1.RAD2DEG;\n out.y *= types_1.RAD2DEG;\n out.z *= types_1.RAD2DEG;\n // ensure the degree values are between 0 and 360\n out.x = Scalar_1.Scalar.repeat(out.x, 360);\n out.y = Scalar_1.Scalar.repeat(out.y, 360);\n out.z = Scalar_1.Scalar.repeat(out.z, 360);\n return out;\n }\n Quaternion.toEulerAngles = toEulerAngles;\n /**\n * Creates a new rotation from the given Euler float angles (y, x, z) and stores it in the target quaternion\n * @param yaw - defines the rotation around Y axis (radians)\n * @param pitch - defines the rotation around X axis (radians)\n * @param roll - defines the rotation around Z axis (radians)\n * @param result - defines the target quaternion\n */\n function fromRotationYawPitchRollToRef(yaw, pitch, roll, result) {\n // Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n const halfPitch = pitch * 0.5;\n const halfYaw = yaw * 0.5;\n const halfRoll = roll * 0.5;\n const c1 = Math.cos(halfPitch);\n const c2 = Math.cos(halfYaw);\n const c3 = Math.cos(halfRoll);\n const s1 = Math.sin(halfPitch);\n const s2 = Math.sin(halfYaw);\n const s3 = Math.sin(halfRoll);\n result.x = c2 * s1 * c3 + s2 * c1 * s3;\n result.y = s2 * c1 * c3 - c2 * s1 * s3;\n result.z = c2 * c1 * s3 - s2 * s1 * c3;\n result.w = c2 * c1 * c3 + s2 * s1 * s3;\n }\n Quaternion.fromRotationYawPitchRollToRef = fromRotationYawPitchRollToRef;\n /**\n * Updates the given quaternion with the given rotation matrix values\n * @param matrix - defines the source matrix\n * @param result - defines the target quaternion\n */\n function fromRotationMatrixToRef(matrix, result) {\n const data = matrix._m;\n // tslint:disable:one-variable-per-declaration\n const m11 = data[0], m12 = data[4], m13 = data[8];\n const m21 = data[1], m22 = data[5], m23 = data[9];\n const m31 = data[2], m32 = data[6], m33 = data[10];\n // tslint:enable:one-variable-per-declaration\n const trace = m11 + m22 + m33;\n let s;\n if (trace > 0) {\n s = 0.5 / Math.sqrt(trace + 1.0);\n result.w = 0.25 / s;\n result.x = (m32 - m23) * s;\n result.y = (m13 - m31) * s;\n result.z = (m21 - m12) * s;\n }\n else if (m11 > m22 && m11 > m33) {\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n result.w = (m32 - m23) / s;\n result.x = 0.25 * s;\n result.y = (m12 + m21) / s;\n result.z = (m13 + m31) / s;\n }\n else if (m22 > m33) {\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n result.w = (m13 - m31) / s;\n result.x = (m12 + m21) / s;\n result.y = 0.25 * s;\n result.z = (m23 + m32) / s;\n }\n else {\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n result.w = (m21 - m12) / s;\n result.x = (m13 + m31) / s;\n result.y = (m23 + m32) / s;\n result.z = 0.25 * s;\n }\n }\n Quaternion.fromRotationMatrixToRef = fromRotationMatrixToRef;\n /**\n * Interpolates between two quaternions\n * @param left - defines first quaternion\n * @param right - defines second quaternion\n * @param amount - defines the gradient to use\n * @returns the new interpolated quaternion\n */\n function slerp(left, right, amount) {\n const result = Quaternion.Identity();\n Quaternion.slerpToRef(left, right, amount, result);\n return result;\n }\n Quaternion.slerp = slerp;\n /**\n * Interpolates between two quaternions and stores it into a target quaternion\n * @param left - defines first quaternion\n * @param right - defines second quaternion\n * @param amount - defines the gradient to use\n * @param result - defines the target quaternion\n */\n function slerpToRef(left, right, amount, result) {\n let num2;\n let num3;\n let num4 = left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w;\n let flag = false;\n if (num4 < 0) {\n flag = true;\n num4 = -num4;\n }\n if (num4 > 0.999999) {\n num3 = 1 - amount;\n num2 = flag ? -amount : amount;\n }\n else {\n const num5 = Math.acos(num4);\n const num6 = 1.0 / Math.sin(num5);\n num3 = Math.sin((1.0 - amount) * num5) * num6;\n num2 = flag\n ? -Math.sin(amount * num5) * num6\n : Math.sin(amount * num5) * num6;\n }\n result.x = num3 * left.x + num2 * right.x;\n result.y = num3 * left.y + num2 * right.y;\n result.z = num3 * left.z + num2 * right.z;\n result.w = num3 * left.w + num2 * right.w;\n }\n Quaternion.slerpToRef = slerpToRef;\n /**\n * Multiplies two quaternions\n * @param self - defines the first operand\n * @param q1 - defines the second operand\n * @returns a new quaternion set as the multiplication result of the self one with the given one \"q1\"\n */\n function multiply(self, q1) {\n const result = create(0, 0, 0, 1.0);\n multiplyToRef(self, q1, result);\n return result;\n }\n Quaternion.multiply = multiply;\n /**\n * Sets the given \"result\" as the the multiplication result of the self one with the given one \"q1\"\n * @param self - defines the first operand\n * @param q1 - defines the second operand\n * @param result - defines the target quaternion\n * @returns the current quaternion\n */\n function multiplyToRef(self, q1, result) {\n result.x = self.x * q1.w + self.y * q1.z - self.z * q1.y + self.w * q1.x;\n result.y = -self.x * q1.z + self.y * q1.w + self.z * q1.x + self.w * q1.y;\n result.z = self.x * q1.y - self.y * q1.x + self.z * q1.w + self.w * q1.z;\n result.w = -self.x * q1.x - self.y * q1.y - self.z * q1.z + self.w * q1.w;\n }\n Quaternion.multiplyToRef = multiplyToRef;\n /**\n *\n * @param degrees - the angle degrees\n * @param axis - vector3\n * @returns a new Quaternion\n */\n function fromAngleAxis(degrees, axis) {\n if (Vector3_1.Vector3.lengthSquared(axis) === 0) {\n return Quaternion.Identity();\n }\n const result = Identity();\n let radians = degrees * types_1.DEG2RAD;\n radians *= 0.5;\n const a2 = Vector3_1.Vector3.normalize(axis);\n Vector3_1.Vector3.scaleToRef(a2, Math.sin(radians), a2);\n result.x = a2.x;\n result.y = a2.y;\n result.z = a2.z;\n result.w = Math.cos(radians);\n return normalize(result);\n }\n Quaternion.fromAngleAxis = fromAngleAxis;\n /**\n * Creates a new quaternion containing the rotation value to reach the target (axis1, axis2, axis3) orientation as a rotated XYZ system (axis1, axis2 and axis3 are normalized during this operation)\n * @param axis1 - defines the first axis\n * @param axis2 - defines the second axis\n * @param axis3 - defines the third axis\n * @returns the new quaternion\n */\n function fromAxisToRotationQuaternion(axis1, axis2, axis3) {\n const quat = Quaternion.create(0.0, 0.0, 0.0, 0.0);\n fromAxisToRotationQuaternionToRef(axis1, axis2, axis3, quat);\n return quat;\n }\n Quaternion.fromAxisToRotationQuaternion = fromAxisToRotationQuaternion;\n /**\n * Creates a rotation value to reach the target (axis1, axis2, axis3) orientation as a rotated XYZ system (axis1, axis2 and axis3 are normalized during this operation) and stores it in the target quaternion\n * @param axis1 - defines the first axis\n * @param axis2 - defines the second axis\n * @param axis3 - defines the third axis\n * @param ref - defines the target quaternion\n */\n function fromAxisToRotationQuaternionToRef(axis1, axis2, axis3, ref) {\n const rotMat = Matrix_1.Matrix.create();\n Matrix_1.Matrix.fromXYZAxesToRef(Vector3_1.Vector3.normalize(axis1), Vector3_1.Vector3.normalize(axis2), Vector3_1.Vector3.normalize(axis3), rotMat);\n Quaternion.fromRotationMatrixToRef(rotMat, ref);\n }\n Quaternion.fromAxisToRotationQuaternionToRef = fromAxisToRotationQuaternionToRef;\n /**\n * Returns a zero filled quaternion\n */\n function Zero() {\n return create(0.0, 0.0, 0.0, 0.0);\n }\n Quaternion.Zero = Zero;\n /**\n * @public\n * Rotates the transform so the forward vector points at target's current position.\n */\n function fromLookAt(position, target, worldUp = Vector3_1.Vector3.Up()) {\n const result = Quaternion.Identity();\n fromLookAtToRef(position, target, worldUp, result);\n return result;\n }\n Quaternion.fromLookAt = fromLookAt;\n /**\n * @public\n * Rotates the transform so the forward vector points at target's current position.\n */\n function fromLookAtToRef(position, target, worldUp = Vector3_1.Vector3.Up(), result) {\n const m = Matrix_1.Matrix.Identity();\n Matrix_1.Matrix.lookAtLHToRef(position, target, worldUp, m);\n Matrix_1.Matrix.invertToRef(m, m);\n Quaternion.fromRotationMatrixToRef(m, result);\n }\n Quaternion.fromLookAtToRef = fromLookAtToRef;\n})(Quaternion = exports.Quaternion || (exports.Quaternion = {}));\n//# sourceMappingURL=Quaternion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Color4 = void 0;\nconst Scalar_1 = require(\"./Scalar\");\nconst types_1 = require(\"./types\");\n/**\n * @public\n * Color4 is a type and a namespace.\n * ```\n * // The namespace contains all types and functions to operates with Color4\n * Color4.add(blue, red) // sum component by component resulting pink\n * // The type Color4 is an alias to Color4.ReadonlyColor4\n * const readonlyBlue: Color4 = Color4.Blue()\n * readonlyBlue.a = 0.1 // this FAILS\n *\n * // For mutable usage, use `Color4.Mutable`\n * const blue: Color4.Mutable = Color4.Blue()\n * blue.a = 0.1 // this WORKS\n * ```\n */\nvar Color4;\n(function (Color4) {\n /**\n * Creates create mutable Color4 from red, green, blue values, all between 0 and 1\n * @param r - defines the red component (between 0 and 1, default is 0)\n * @param g - defines the green component (between 0 and 1, default is 0)\n * @param b - defines the blue component (between 0 and 1, default is 0)\n * @param a - defines the alpha component (between 0 and 1, default is 1)\n */\n function create(\n /**\n * Defines the red component (between 0 and 1, default is 0)\n */\n r = 0, \n /**\n * Defines the green component (between 0 and 1, default is 0)\n */\n g = 0, \n /**\n * Defines the blue component (between 0 and 1, default is 0)\n */\n b = 0, \n /**\n * Defines the alpha component (between 0 and 1, default is 1)\n */\n a = 1) {\n return { r, g, b, a };\n }\n Color4.create = create;\n // Statics\n /**\n * Creates a Color4 from the string containing valid hexadecimal values\n * @param hex - defines a string containing valid hexadecimal values\n * @returns create mutable Color4\n */\n function fromHexString(hex) {\n if (hex.substring(0, 1) !== '#' || hex.length !== 9) {\n return create(0.0, 0.0, 0.0, 0.0);\n }\n const r = parseInt(hex.substring(1, 3), 16);\n const g = parseInt(hex.substring(3, 5), 16);\n const b = parseInt(hex.substring(5, 7), 16);\n const a = parseInt(hex.substring(7, 9), 16);\n return Color4.fromInts(r, g, b, a);\n }\n Color4.fromHexString = fromHexString;\n /**\n * Creates create mutable Color4 set with the linearly interpolated values of \"amount\" between the left Color4 object and the right Color4 object\n * @param left - defines the start value\n * @param right - defines the end value\n * @param amount - defines the gradient factor\n * @returns create mutable Color4\n */\n function lerp(left, right, amount) {\n const result = create(0.0, 0.0, 0.0, 0.0);\n Color4.lerpToRef(left, right, amount, result);\n return result;\n }\n Color4.lerp = lerp;\n /**\n * Set the given \"result\" with the linearly interpolated values of \"amount\" between the left Color4 object and the right Color4 object\n * @param left - defines the start value\n * @param right - defines the end value\n * @param amount - defines the gradient factor\n * @param result - defines the Color4 object where to store data\n */\n function lerpToRef(left, right, amount, result) {\n result.r = left.r + (right.r - left.r) * amount;\n result.g = left.g + (right.g - left.g) * amount;\n result.b = left.b + (right.b - left.b) * amount;\n result.a = left.a + (right.a - left.a) * amount;\n }\n Color4.lerpToRef = lerpToRef;\n /**\n * Returns a Color4 value containing a red color\n * @returns a new Color4\n */\n function Red() {\n return create(1.0, 0, 0, 1.0);\n }\n Color4.Red = Red;\n /**\n * Returns a Color4 value containing a green color\n * @returns create mutable Color4\n */\n function Green() {\n return create(0, 1.0, 0, 1.0);\n }\n Color4.Green = Green;\n /**\n * Returns a Color4 value containing a blue color\n * @returns create mutable Color4\n */\n function Blue() {\n return create(0, 0, 1.0, 1.0);\n }\n Color4.Blue = Blue;\n /**\n * Returns a Color4 value containing a black color\n * @returns create mutable Color4\n */\n function Black() {\n return create(0, 0, 0, 1);\n }\n Color4.Black = Black;\n /**\n * Returns a Color4 value containing a white color\n * @returns create mutable Color4\n */\n function White() {\n return create(1, 1, 1, 1);\n }\n Color4.White = White;\n /**\n * Returns a Color4 value containing a purple color\n * @returns create mutable Color4\n */\n function Purple() {\n return create(0.5, 0, 0.5, 1);\n }\n Color4.Purple = Purple;\n /**\n * Returns a Color4 value containing a magenta color\n * @returns create mutable Color4\n */\n function Magenta() {\n return create(1, 0, 1, 1);\n }\n Color4.Magenta = Magenta;\n /**\n * Returns a Color4 value containing a yellow color\n * @returns create mutable Color4\n */\n function Yellow() {\n return create(1, 1, 0, 1);\n }\n Color4.Yellow = Yellow;\n /**\n * Returns a Color4 value containing a gray color\n * @returns create mutable Color4\n */\n function Gray() {\n return create(0.5, 0.5, 0.5, 1.0);\n }\n Color4.Gray = Gray;\n /**\n * Returns a Color4 value containing a teal color\n * @returns create mutable Color4\n */\n function Teal() {\n return create(0, 1.0, 1.0, 1.0);\n }\n Color4.Teal = Teal;\n /**\n * Returns a Color4 value containing a transparent color\n * @returns create mutable Color4\n */\n function Clear() {\n return create(0, 0, 0, 0);\n }\n Color4.Clear = Clear;\n /**\n * Creates a Color4 from a Color3 and an alpha value\n * @param color3 - defines the source Color3 to read from\n * @param alpha - defines the alpha component (1.0 by default)\n * @returns create mutable Color4\n */\n function fromColor3(color3, alpha = 1.0) {\n return create(color3.r, color3.g, color3.b, alpha);\n }\n Color4.fromColor3 = fromColor3;\n /**\n * Creates a Color4 from the starting index element of the given array\n * @param array - defines the source array to read from\n * @param offset - defines the offset in the source array\n * @returns create mutable Color4\n */\n function fromArray(array, offset = 0) {\n return create(array[offset], array[offset + 1], array[offset + 2], array[offset + 3]);\n }\n Color4.fromArray = fromArray;\n /**\n * Creates a new Color3 from integer values (less than 256)\n * @param r - defines the red component to read from (value between 0 and 255)\n * @param g - defines the green component to read from (value between 0 and 255)\n * @param b - defines the blue component to read from (value between 0 and 255)\n * @param a - defines the alpha component to read from (value between 0 and 255)\n * @returns a new Color4\n */\n function fromInts(r, g, b, a) {\n return create(r / 255.0, g / 255.0, b / 255.0, a / 255.0);\n }\n Color4.fromInts = fromInts;\n /**\n * Check the content of a given array and convert it to an array containing RGBA data\n * If the original array was already containing count * 4 values then it is returned directly\n * @param colors - defines the array to check\n * @param count - defines the number of RGBA data to expect\n * @returns an array containing count * 4 values (RGBA)\n */\n function checkColors4(colors, count) {\n // Check if color3 was used\n if (colors.length === count * 3) {\n const colors4 = [];\n for (let index = 0; index < colors.length; index += 3) {\n const newIndex = (index / 3) * 4;\n colors4[newIndex] = colors[index];\n colors4[newIndex + 1] = colors[index + 1];\n colors4[newIndex + 2] = colors[index + 2];\n colors4[newIndex + 3] = 1.0;\n }\n return colors4;\n }\n return colors;\n }\n Color4.checkColors4 = checkColors4;\n // Operators\n /**\n * Adds the given Color4 values to the ref Color4 object\n * @param a - defines the first operand\n * @param b - defines the second operand\n * @param ref - defines the result rference\n * @returns\n */\n function addToRef(a, b, ref) {\n ref.r = a.r + b.r;\n ref.g = a.g + b.g;\n ref.b = a.b + b.b;\n ref.a = a.a + b.a;\n }\n Color4.addToRef = addToRef;\n /**\n * Stores from the starting index in the given array the Color4 successive values\n * @param array - defines the array where to store the r,g,b components\n * @param index - defines an optional index in the target array to define where to start storing values\n * @returns the current Color4 object\n */\n function toArray(value, array, index = 0) {\n array[index] = value.r;\n array[index + 1] = value.g;\n array[index + 2] = value.b;\n array[index + 3] = value.a;\n }\n Color4.toArray = toArray;\n /**\n * Creates a Color4 set with the added values of the current Color4 and of the given one\n * @param right - defines the second operand\n * @returns create mutable Color4\n */\n function add(value, right) {\n const ret = Clear();\n addToRef(value, right, ret);\n return ret;\n }\n Color4.add = add;\n /**\n * Creates a Color4 set with the subtracted values of the given one from the current Color4\n * @param right - defines the second operand\n * @returns create mutable Color4\n */\n function subtract(value, right) {\n const ret = Clear();\n subtractToRef(value, right, ret);\n return ret;\n }\n Color4.subtract = subtract;\n /**\n * Subtracts the given ones from the current Color4 values and stores the results in \"result\"\n * @param right - defines the second operand\n * @param result - defines the Color4 object where to store the result\n * @returns the current Color4 object\n */\n function subtractToRef(a, b, result) {\n result.r = a.r - b.r;\n result.g = a.g - b.g;\n result.b = a.b - b.b;\n result.a = a.a - b.a;\n }\n Color4.subtractToRef = subtractToRef;\n /**\n * Creates a Color4 with the current Color4 values multiplied by scale\n * @param scale - defines the scaling factor to apply\n * @returns create mutable Color4\n */\n function scale(value, scale) {\n return create(value.r * scale, value.g * scale, value.b * scale, value.a * scale);\n }\n Color4.scale = scale;\n /**\n * Multiplies the current Color4 values by scale and stores the result in \"result\"\n * @param scale - defines the scaling factor to apply\n * @param result - defines the Color4 object where to store the result\n */\n function scaleToRef(value, scale, result) {\n result.r = value.r * scale;\n result.g = value.g * scale;\n result.b = value.b * scale;\n result.a = value.a * scale;\n }\n Color4.scaleToRef = scaleToRef;\n /**\n * Scale the current Color4 values by a factor and add the result to a given Color4\n * @param scale - defines the scale factor\n * @param result - defines the Color4 object where to store the result\n */\n function scaleAndAddToRef(value, scale, result) {\n result.r += value.r * scale;\n result.g += value.g * scale;\n result.b += value.b * scale;\n result.a += value.a * scale;\n }\n Color4.scaleAndAddToRef = scaleAndAddToRef;\n /**\n * Clamps the rgb values by the min and max values and stores the result into \"result\"\n * @param min - defines minimum clamping value (default is 0)\n * @param max - defines maximum clamping value (default is 1)\n * @param result - defines color to store the result into.\n */\n function clampToRef(value, min = 0, max = 1, result) {\n result.r = Scalar_1.Scalar.clamp(value.r, min, max);\n result.g = Scalar_1.Scalar.clamp(value.g, min, max);\n result.b = Scalar_1.Scalar.clamp(value.b, min, max);\n result.a = Scalar_1.Scalar.clamp(value.a, min, max);\n }\n Color4.clampToRef = clampToRef;\n /**\n * Multipy an Color4 value by another and return create mutable Color4\n * @param color - defines the Color4 value to multiply by\n * @returns create mutable Color4\n */\n function multiply(value, color) {\n return create(value.r * color.r, value.g * color.g, value.b * color.b, value.a * color.a);\n }\n Color4.multiply = multiply;\n /**\n * Multipy a Color4 value by another and push the result in a reference value\n * @param color - defines the Color4 value to multiply by\n * @param result - defines the Color4 to fill the result in\n * @returns the result Color4\n */\n function multiplyToRef(value, color, result) {\n result.r = value.r * color.r;\n result.g = value.g * color.g;\n result.b = value.b * color.b;\n result.a = value.a * color.a;\n }\n Color4.multiplyToRef = multiplyToRef;\n /**\n * Creates a string with the Color4 current values\n * @returns the string representation of the Color4 object\n */\n function toString(value) {\n return ('{R: ' +\n value.r +\n ' G:' +\n value.g +\n ' B:' +\n value.b +\n ' A:' +\n value.a +\n '}');\n }\n Color4.toString = toString;\n /**\n * Compute the Color4 hash code\n * @returns an unique number that can be used to hash Color4 objects\n */\n function getHashCode(value) {\n let hash = value.r || 0;\n hash = (hash * 397) ^ (value.g || 0);\n hash = (hash * 397) ^ (value.b || 0);\n hash = (hash * 397) ^ (value.a || 0);\n return hash;\n }\n Color4.getHashCode = getHashCode;\n /**\n * Creates a Color4 copied from the current one\n * @returns create mutable Color4\n */\n function clone(value) {\n return create(value.r, value.g, value.b, value.a);\n }\n Color4.clone = clone;\n /**\n * Copies the given Color4 values into the destination\n * @param source - defines the source Color4 object\n * @param dest - defines the destination Color4 object\n * @returns\n */\n function copyFrom(source, dest) {\n dest.r = source.r;\n dest.g = source.g;\n dest.b = source.b;\n dest.a = source.a;\n }\n Color4.copyFrom = copyFrom;\n /**\n * Copies the given float values into the current one\n * @param r - defines the red component to read from\n * @param g - defines the green component to read from\n * @param b - defines the blue component to read from\n * @param a - defines the alpha component to read from\n * @returns the current updated Color4 object\n */\n function copyFromFloats(r, g, b, a, dest) {\n dest.r = r;\n dest.g = g;\n dest.b = b;\n dest.a = a;\n }\n Color4.copyFromFloats = copyFromFloats;\n /**\n * Copies the given float values into the current one\n * @param r - defines the red component to read from\n * @param g - defines the green component to read from\n * @param b - defines the blue component to read from\n * @param a - defines the alpha component to read from\n * @returns the current updated Color4 object\n */\n function set(r, g, b, a, dest) {\n dest.r = r;\n dest.g = g;\n dest.b = b;\n dest.a = a;\n }\n Color4.set = set;\n /**\n * Compute the Color4 hexadecimal code as a string\n * @returns a string containing the hexadecimal representation of the Color4 object\n */\n function toHexString(value) {\n const intR = (value.r * 255) | 0;\n const intG = (value.g * 255) | 0;\n const intB = (value.b * 255) | 0;\n const intA = (value.a * 255) | 0;\n return ('#' +\n Scalar_1.Scalar.toHex(intR) +\n Scalar_1.Scalar.toHex(intG) +\n Scalar_1.Scalar.toHex(intB) +\n Scalar_1.Scalar.toHex(intA));\n }\n Color4.toHexString = toHexString;\n /**\n * Computes a Color4 converted from the current one to linear space\n * @returns create mutable Color4\n */\n function toLinearSpace(value) {\n const convertedColor = create();\n toLinearSpaceToRef(value, convertedColor);\n return convertedColor;\n }\n Color4.toLinearSpace = toLinearSpace;\n /**\n * Converts the Color4 values to linear space and stores the result in \"convertedColor\"\n * @param convertedColor - defines the Color4 object where to store the linear space version\n * @returns the unmodified Color4\n */\n function toLinearSpaceToRef(value, ref) {\n ref.r = Math.pow(value.r, types_1.ToLinearSpace);\n ref.g = Math.pow(value.g, types_1.ToLinearSpace);\n ref.b = Math.pow(value.b, types_1.ToLinearSpace);\n ref.a = value.a;\n }\n Color4.toLinearSpaceToRef = toLinearSpaceToRef;\n /**\n * Computes a Color4 converted from the current one to gamma space\n * @returns create mutable Color4\n */\n function toGammaSpace(value) {\n const convertedColor = create();\n toGammaSpaceToRef(value, convertedColor);\n return convertedColor;\n }\n Color4.toGammaSpace = toGammaSpace;\n /**\n * Converts the Color4 values to gamma space and stores the result in \"convertedColor\"\n * @param convertedColor - defines the Color4 object where to store the gamma space version\n * @returns the unmodified Color4\n */\n function toGammaSpaceToRef(value, convertedColor) {\n convertedColor.r = Math.pow(value.r, types_1.ToGammaSpace);\n convertedColor.g = Math.pow(value.g, types_1.ToGammaSpace);\n convertedColor.b = Math.pow(value.b, types_1.ToGammaSpace);\n convertedColor.a = value.a;\n }\n Color4.toGammaSpaceToRef = toGammaSpaceToRef;\n})(Color4 = exports.Color4 || (exports.Color4 = {}));\n//# sourceMappingURL=Color4.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Color3 = void 0;\nconst types_1 = require(\"./types\");\nconst Color4_1 = require(\"./Color4\");\nconst Scalar_1 = require(\"./Scalar\");\n/**\n * @public\n * Color3 is a type and a namespace.\n * ```\n * // The namespace contains all types and functions to operates with Color3\n * Color3.add(blue, red) // sum component by component resulting pink\n * // The type Color3 is an alias to Color3.ReadonlyColor3\n * const readonlyBlue: Color3 = Color3.Blue()\n * readonlyBlue.r = 0.1 // this FAILS\n *\n * // For mutable usage, use `Color3.Mutable`\n * const blue: Color3.Mutable = Color3.Blue()\n * blue.r = 0.1 // this WORKS\n * ```\n */\nvar Color3;\n(function (Color3) {\n /**\n * Creates Color3 object from red, green, blue values, all between 0 and 1\n * @param r - defines the red component (between 0 and 1, default is 0)\n * @param g - defines the green component (between 0 and 1, default is 0)\n * @param b - defines the blue component (between 0 and 1, default is 0)\n */\n function create(\n /**\n * Defines the red component (between 0 and 1, default is 0)\n */\n r = 0, \n /**\n * Defines the green component (between 0 and 1, default is 0)\n */\n g = 0, \n /**\n * Defines the blue component (between 0 and 1, default is 0)\n */\n b = 0) {\n return { r, g, b };\n }\n Color3.create = create;\n /**\n * Creates a Vector3 from the string containing valid hexadecimal values\n * @param hex - defines a string containing valid hexadecimal values\n * @returns a new Vector3\n */\n function fromHexString(hex) {\n if (hex.substring(0, 1) !== '#' || hex.length !== 7) {\n return create(0, 0, 0);\n }\n const r = parseInt(hex.substring(1, 3), 16);\n const g = parseInt(hex.substring(3, 5), 16);\n const b = parseInt(hex.substring(5, 7), 16);\n return fromInts(r, g, b);\n }\n Color3.fromHexString = fromHexString;\n /**\n * Creates a new Vector3 from the starting index of the given array\n * @param array - defines the source array\n * @param offset - defines an offset in the source array\n * @returns a new Vector3\n */\n function fromArray(array, offset = 0) {\n return create(array[offset], array[offset + 1], array[offset + 2]);\n }\n Color3.fromArray = fromArray;\n /**\n * Creates a Vector3 from integer values (less than 256)\n * @param r - defines the red component to read from (value between 0 and 255)\n * @param g - defines the green component to read from (value between 0 and 255)\n * @param b - defines the blue component to read from (value between 0 and 255)\n * @returns a new Vector3\n */\n function fromInts(r, g, b) {\n return create(r / 255.0, g / 255.0, b / 255.0);\n }\n Color3.fromInts = fromInts;\n /**\n * Creates a Vector3 with values linearly interpolated of \"amount\" between the start Color3 and the end Color3\n * @param start - defines the start Color3 value\n * @param end - defines the end Color3 value\n * @param amount - defines the gradient value between start and end\n * @returns a new Vector3\n */\n function lerp(start, end, amount) {\n const result = create(0.0, 0.0, 0.0);\n Color3.lerpToRef(start, end, amount, result);\n return result;\n }\n Color3.lerp = lerp;\n /**\n * Creates a Vector3 with values linearly interpolated of \"amount\" between the start Color3 and the end Color3\n * @param left - defines the start value\n * @param right - defines the end value\n * @param amount - defines the gradient factor\n * @param result - defines the Color3 object where to store the result\n */\n function lerpToRef(left, right, amount, result) {\n result.r = left.r + (right.r - left.r) * amount;\n result.g = left.g + (right.g - left.g) * amount;\n result.b = left.b + (right.b - left.b) * amount;\n }\n Color3.lerpToRef = lerpToRef;\n /**\n * Returns a Color3 value containing a red color\n * @returns a new Vector3\n */\n function Red() {\n return create(1, 0, 0);\n }\n Color3.Red = Red;\n /**\n * Returns a Color3 value containing a green color\n * @returns a new Vector3\n */\n function Green() {\n return create(0, 1, 0);\n }\n Color3.Green = Green;\n /**\n * Returns a Color3 value containing a blue color\n * @returns a new Vector3\n */\n function Blue() {\n return create(0, 0, 1);\n }\n Color3.Blue = Blue;\n /**\n * Returns a Color3 value containing a black color\n * @returns a new Vector3\n */\n function Black() {\n return create(0, 0, 0);\n }\n Color3.Black = Black;\n /**\n * Returns a Color3 value containing a white color\n * @returns a new Vector3\n */\n function White() {\n return create(1, 1, 1);\n }\n Color3.White = White;\n /**\n * Returns a Color3 value containing a purple color\n * @returns a new Vector3\n */\n function Purple() {\n return create(0.5, 0, 0.5);\n }\n Color3.Purple = Purple;\n /**\n * Returns a Color3 value containing a magenta color\n * @returns a new Vector3\n */\n function Magenta() {\n return create(1, 0, 1);\n }\n Color3.Magenta = Magenta;\n /**\n * Returns a Color3 value containing a yellow color\n * @returns a new Vector3\n */\n function Yellow() {\n return create(1, 1, 0);\n }\n Color3.Yellow = Yellow;\n /**\n * Returns a Color3 value containing a gray color\n * @returns a new Vector3\n */\n function Gray() {\n return create(0.5, 0.5, 0.5);\n }\n Color3.Gray = Gray;\n /**\n * Returns a Color3 value containing a teal color\n * @returns a new Vector3\n */\n function Teal() {\n return create(0, 1.0, 1.0);\n }\n Color3.Teal = Teal;\n /**\n * Returns a Color3 value containing a random color\n * @returns a new Vector3\n */\n function Random() {\n return create(Math.random(), Math.random(), Math.random());\n }\n Color3.Random = Random;\n /**\n * Creates a string with the Color3 current values\n * @returns the string representation of the Color3 object\n */\n function toString(value) {\n return '{R: ' + value.r + ' G:' + value.g + ' B:' + value.b + '}';\n }\n Color3.toString = toString;\n /**\n * Compute the Color3 hash code\n * @returns an unique number that can be used to hash Color3 objects\n */\n function getHashCode(value) {\n let hash = value.r || 0;\n hash = (hash * 397) ^ (value.g || 0);\n hash = (hash * 397) ^ (value.b || 0);\n return hash;\n }\n Color3.getHashCode = getHashCode;\n // Operators\n /**\n * Stores in the given array from the given starting index the red, green, blue values as successive elements\n * @param array - defines the array where to store the r,g,b components\n * @param index - defines an optional index in the target array to define where to start storing values\n *\n */\n function toArray(value, array, index = 0) {\n array[index] = value.r;\n array[index + 1] = value.g;\n array[index + 2] = value.b;\n }\n Color3.toArray = toArray;\n /**\n * Returns a new Color4 object from the current Color3 and the given alpha\n * @param alpha - defines the alpha component on the new Color4 object (default is 1)\n * @returns a new Color4 object\n */\n function toColor4(value, alpha = 1) {\n return Color4_1.Color4.create(value.r, value.g, value.b, alpha);\n }\n Color3.toColor4 = toColor4;\n /**\n * Returns a new array populated with 3 numeric elements : red, green and blue values\n * @returns the new array\n */\n function asArray(value) {\n const result = new Array();\n toArray(value, result, 0);\n return result;\n }\n Color3.asArray = asArray;\n /**\n * Returns the luminance value\n * @returns a float value\n */\n function toLuminance(value) {\n return value.r * 0.3 + value.g * 0.59 + value.b * 0.11;\n }\n Color3.toLuminance = toLuminance;\n /**\n * Multiply each Color3 rgb values by the given Color3 rgb values in Color3 object\n * @param otherColor - defines the second operand\n * @returns the create object\n */\n function multiply(value, otherColor) {\n return create(value.r * otherColor.r, value.g * otherColor.g, value.b * otherColor.b);\n }\n Color3.multiply = multiply;\n /**\n * Multiply the rgb values of the Color3 and the given Color3 and stores the result in the object \"result\"\n * @param otherColor - defines the second operand\n * @param result - defines the Color3 object where to store the result\n * @returns the current Color3\n */\n function multiplyToRef(value, otherColor, result) {\n result.r = value.r * otherColor.r;\n result.g = value.g * otherColor.g;\n result.b = value.b * otherColor.b;\n }\n Color3.multiplyToRef = multiplyToRef;\n /**\n * Determines equality between Color3 objects\n * @param otherColor - defines the second operand\n * @returns true if the rgb values are equal to the given ones\n */\n function equals(value, otherColor) {\n return (otherColor &&\n value.r === otherColor.r &&\n value.g === otherColor.g &&\n value.b === otherColor.b);\n }\n Color3.equals = equals;\n /**\n * Determines equality between the current Color3 object and a set of r,b,g values\n * @param r - defines the red component to check\n * @param g - defines the green component to check\n * @param b - defines the blue component to check\n * @returns true if the rgb values are equal to the given ones\n */\n function equalsFloats(value, r, g, b) {\n return value.r === r && value.g === g && value.b === b;\n }\n Color3.equalsFloats = equalsFloats;\n /**\n * Multiplies in place each rgb value by scale\n * @param scale - defines the scaling factor\n * @returns the updated Color3\n */\n function scale(value, scale) {\n return create(value.r * scale, value.g * scale, value.b * scale);\n }\n Color3.scale = scale;\n /**\n * Multiplies the rgb values by scale and stores the result into \"result\"\n * @param scale - defines the scaling factor\n * @param result - defines the Color3 object where to store the result\n * @returns the unmodified current Color3\n */\n function scaleToRef(value, scale, result) {\n result.r = value.r * scale;\n result.g = value.g * scale;\n result.b = value.b * scale;\n }\n Color3.scaleToRef = scaleToRef;\n /**\n * Scale the current Color3 values by a factor and add the result to a given Color3\n * @param scale - defines the scale factor\n * @param result - defines color to store the result into\n * @returns the unmodified current Color3\n */\n function scaleAndAddToRef(value, scale, result) {\n result.r += value.r * scale;\n result.g += value.g * scale;\n result.b += value.b * scale;\n }\n Color3.scaleAndAddToRef = scaleAndAddToRef;\n /**\n * Clamps the rgb values by the min and max values and stores the result into \"result\"\n * @param min - defines minimum clamping value (default is 0)\n * @param max - defines maximum clamping value (default is 1)\n * @param result - defines color to store the result into\n * @returns the original Color3\n */\n function clampToRef(value, min = 0, max = 1, result) {\n result.r = Scalar_1.Scalar.clamp(value.r, min, max);\n result.g = Scalar_1.Scalar.clamp(value.g, min, max);\n result.b = Scalar_1.Scalar.clamp(value.b, min, max);\n }\n Color3.clampToRef = clampToRef;\n /**\n * Clamps the rgb values by the min and max values and returns the result\n * @param min - defines minimum clamping value (default is 0)\n * @param max - defines maximum clamping value (default is 1)\n * @returns result\n */\n function clamp(value, min = 0, max = 1) {\n const result = Color3.Black();\n clampToRef(value, min, max, result);\n return result;\n }\n Color3.clamp = clamp;\n /**\n * Creates Color3 set with the added values of the current Color3 and of the given one\n * @param otherColor - defines the second operand\n * @returns the create\n */\n function add(value, otherColor) {\n return create(value.r + otherColor.r, value.g + otherColor.g, value.b + otherColor.b);\n }\n Color3.add = add;\n /**\n * Stores the result of the addition of the current Color3 and given one rgb values into \"result\"\n * @param otherColor - defines the second operand\n * @param result - defines Color3 object to store the result into\n * @returns the unmodified current Color3\n */\n function addToRef(value, otherColor, result) {\n result.r = value.r + otherColor.r;\n result.g = value.g + otherColor.g;\n result.b = value.b + otherColor.b;\n }\n Color3.addToRef = addToRef;\n /**\n * Returns Color3 set with the subtracted values of the given one from the current Color3\n * @param otherColor - defines the second operand\n * @returns the create\n */\n function subtract(value, otherColor) {\n return create(value.r - otherColor.r, value.g - otherColor.g, value.b - otherColor.b);\n }\n Color3.subtract = subtract;\n /**\n * Stores the result of the subtraction of given one from the current Color3 rgb values into \"result\"\n * @param otherColor - defines the second operand\n * @param result - defines Color3 object to store the result into\n * @returns the unmodified current Color3\n */\n function subtractToRef(value, otherColor, result) {\n result.r = value.r - otherColor.r;\n result.g = value.g - otherColor.g;\n result.b = value.b - otherColor.b;\n }\n Color3.subtractToRef = subtractToRef;\n /**\n * Copy the current object\n * @returns Color3 copied the current one\n */\n function clone(value) {\n return create(value.r, value.g, value.b);\n }\n Color3.clone = clone;\n /**\n * Copies the rgb values from the source in the current Color3\n * @param source - defines the source Color3 object\n * @returns the updated Color3 object\n */\n function copyFrom(source, dest) {\n dest.r = source.r;\n dest.g = source.g;\n dest.b = source.b;\n }\n Color3.copyFrom = copyFrom;\n /**\n * Updates the Color3 rgb values from the given floats\n * @param dest -\n * @param r - defines the red component to read from\n * @param g - defines the green component to read from\n * @param b - defines the blue component to read from\n * @returns\n */\n function set(dest, r, g, b) {\n dest.r = r;\n dest.g = g;\n dest.b = b;\n }\n Color3.set = set;\n /**\n * Compute the Color3 hexadecimal code as a string\n * @returns a string containing the hexadecimal representation of the Color3 object\n */\n function toHexString(value) {\n const intR = (value.r * 255) | 0;\n const intG = (value.g * 255) | 0;\n const intB = (value.b * 255) | 0;\n return '#' + Scalar_1.Scalar.toHex(intR) + Scalar_1.Scalar.toHex(intG) + Scalar_1.Scalar.toHex(intB);\n }\n Color3.toHexString = toHexString;\n /**\n * Computes Color3 converted from the current one to linear space\n * @returns a new Vector3\n */\n function toLinearSpace(value) {\n const convertedColor = create();\n toLinearSpaceToRef(value, convertedColor);\n return convertedColor;\n }\n Color3.toLinearSpace = toLinearSpace;\n /**\n * Converts the Color3 values to linear space and stores the result in \"convertedColor\"\n * @param convertedColor - defines the Color3 object where to store the linear space version\n * @returns the unmodified Color3\n */\n function toLinearSpaceToRef(value, convertedColor) {\n convertedColor.r = Math.pow(value.r, types_1.ToLinearSpace);\n convertedColor.g = Math.pow(value.g, types_1.ToLinearSpace);\n convertedColor.b = Math.pow(value.b, types_1.ToLinearSpace);\n }\n Color3.toLinearSpaceToRef = toLinearSpaceToRef;\n /**\n * Computes Color3 converted from the current one to gamma space\n * @returns a new Vector3\n */\n function toGammaSpace(value) {\n const convertedColor = create();\n toGammaSpaceToRef(value, convertedColor);\n return convertedColor;\n }\n Color3.toGammaSpace = toGammaSpace;\n /**\n * Converts the Color3 values to gamma space and stores the result in \"convertedColor\"\n * @param convertedColor - defines the Color3 object where to store the gamma space version\n * @returns the unmodified Color3\n */\n function toGammaSpaceToRef(value, convertedColor) {\n convertedColor.r = Math.pow(value.r, types_1.ToGammaSpace);\n convertedColor.g = Math.pow(value.g, types_1.ToGammaSpace);\n convertedColor.b = Math.pow(value.b, types_1.ToGammaSpace);\n }\n Color3.toGammaSpaceToRef = toGammaSpaceToRef;\n})(Color3 = exports.Color3 || (exports.Color3 = {}));\n//# sourceMappingURL=Color3.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./Quaternion\"), exports);\n__exportStar(require(\"./Vector3\"), exports);\n__exportStar(require(\"./Color3\"), exports);\n__exportStar(require(\"./Color4\"), exports);\n__exportStar(require(\"./Vector3\"), exports);\n__exportStar(require(\"./Scalar\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./index\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBAnimator {\n states: PBAnimationState[]\n}\n\nexport interface PBAnimationState {\n name: string\n clip: string\n playing?: boolean | undefined\n /** default=1.0s */\n weight?: number | undefined\n /** default=1.0 */\n speed?: number | undefined\n /** default=true */\n loop?: boolean | undefined\n shouldReset?: boolean | undefined\n}\n\nfunction createBasePBAnimator(): PBAnimator {\n return { states: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBAnimator = {\n encode(message: PBAnimator, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.states) {\n PBAnimationState.encode(v!, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAnimator {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAnimator()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.states.push(PBAnimationState.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBAnimationState(): PBAnimationState {\n return {\n name: '',\n clip: '',\n playing: undefined,\n weight: undefined,\n speed: undefined,\n loop: undefined,\n shouldReset: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBAnimationState = {\n encode(message: PBAnimationState, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.name !== '') {\n writer.uint32(10).string(message.name)\n }\n if (message.clip !== '') {\n writer.uint32(18).string(message.clip)\n }\n if (message.playing !== undefined) {\n writer.uint32(24).bool(message.playing)\n }\n if (message.weight !== undefined) {\n writer.uint32(37).float(message.weight)\n }\n if (message.speed !== undefined) {\n writer.uint32(45).float(message.speed)\n }\n if (message.loop !== undefined) {\n writer.uint32(48).bool(message.loop)\n }\n if (message.shouldReset !== undefined) {\n writer.uint32(56).bool(message.shouldReset)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAnimationState {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAnimationState()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.name = reader.string()\n break\n case 2:\n message.clip = reader.string()\n break\n case 3:\n message.playing = reader.bool()\n break\n case 4:\n message.weight = reader.float()\n break\n case 5:\n message.speed = reader.float()\n break\n case 6:\n message.loop = reader.bool()\n break\n case 7:\n message.shouldReset = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAnimator } from './pb/decentraland/sdk/components/animator.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1042\n\n/**\n * @internal\n */\nexport const AnimatorSchema: ISchema<PBAnimator> = {\n serialize(value: PBAnimator, builder: ByteBuffer): void {\n const writer = PBAnimator.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAnimator {\n return PBAnimator.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAnimator {\n // TODO: this is a hack.\n return PBAnimator.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBAudioSource {\n playing?: boolean | undefined\n /** default=1.0f */\n volume?: number | undefined\n loop?: boolean | undefined\n /** default=1.0f */\n pitch?: number | undefined\n audioClipUrl: string\n}\n\nfunction createBasePBAudioSource(): PBAudioSource {\n return { playing: undefined, volume: undefined, loop: undefined, pitch: undefined, audioClipUrl: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBAudioSource = {\n encode(message: PBAudioSource, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.playing !== undefined) {\n writer.uint32(8).bool(message.playing)\n }\n if (message.volume !== undefined) {\n writer.uint32(21).float(message.volume)\n }\n if (message.loop !== undefined) {\n writer.uint32(24).bool(message.loop)\n }\n if (message.pitch !== undefined) {\n writer.uint32(37).float(message.pitch)\n }\n if (message.audioClipUrl !== '') {\n writer.uint32(42).string(message.audioClipUrl)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAudioSource {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAudioSource()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.playing = reader.bool()\n break\n case 2:\n message.volume = reader.float()\n break\n case 3:\n message.loop = reader.bool()\n break\n case 4:\n message.pitch = reader.float()\n break\n case 5:\n message.audioClipUrl = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAudioSource } from './pb/decentraland/sdk/components/audio_source.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1020\n\n/**\n * @internal\n */\nexport const AudioSourceSchema: ISchema<PBAudioSource> = {\n serialize(value: PBAudioSource, builder: ByteBuffer): void {\n const writer = PBAudioSource.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAudioSource {\n return PBAudioSource.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAudioSource {\n // TODO: this is a hack.\n return PBAudioSource.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBAudioStream {\n playing?: boolean | undefined\n /** default=1.0f */\n volume?: number | undefined\n url: string\n}\n\nfunction createBasePBAudioStream(): PBAudioStream {\n return { playing: undefined, volume: undefined, url: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBAudioStream = {\n encode(message: PBAudioStream, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.playing !== undefined) {\n writer.uint32(8).bool(message.playing)\n }\n if (message.volume !== undefined) {\n writer.uint32(21).float(message.volume)\n }\n if (message.url !== '') {\n writer.uint32(26).string(message.url)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAudioStream {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAudioStream()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.playing = reader.bool()\n break\n case 2:\n message.volume = reader.float()\n break\n case 3:\n message.url = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAudioStream } from './pb/decentraland/sdk/components/audio_stream.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1021\n\n/**\n * @internal\n */\nexport const AudioStreamSchema: ISchema<PBAudioStream> = {\n serialize(value: PBAudioStream, builder: ByteBuffer): void {\n const writer = PBAudioStream.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAudioStream {\n return PBAudioStream.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAudioStream {\n // TODO: this is a hack.\n return PBAudioStream.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum AvatarAnchorPointType {\n AAPT_POSITION = 0,\n AAPT_NAME_TAG = 1,\n AAPT_LEFT_HAND = 2,\n AAPT_RIGHT_HAND = 3\n}\n\nexport interface PBAvatarAttach {\n avatarId: string\n anchorPointId: AvatarAnchorPointType\n}\n\nfunction createBasePBAvatarAttach(): PBAvatarAttach {\n return { avatarId: '', anchorPointId: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarAttach = {\n encode(message: PBAvatarAttach, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.avatarId !== '') {\n writer.uint32(10).string(message.avatarId)\n }\n if (message.anchorPointId !== 0) {\n writer.uint32(16).int32(message.anchorPointId)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarAttach {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarAttach()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.avatarId = reader.string()\n break\n case 2:\n message.anchorPointId = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarAttach } from './pb/decentraland/sdk/components/avatar_attach.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1073\n\n/**\n * @internal\n */\nexport const AvatarAttachSchema: ISchema<PBAvatarAttach> = {\n serialize(value: PBAvatarAttach, builder: ByteBuffer): void {\n const writer = PBAvatarAttach.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarAttach {\n return PBAvatarAttach.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarAttach {\n // TODO: this is a hack.\n return PBAvatarAttach.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.common'\n\nexport interface Position {\n x: number\n y: number\n z: number\n}\n\nexport interface Vector3 {\n x: number\n y: number\n z: number\n}\n\nexport interface Vector2 {\n x: number\n y: number\n}\n\nfunction createBasePosition(): Position {\n return { x: 0, y: 0, z: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Position = {\n encode(message: Position, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x)\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y)\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Position {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePosition()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.x = reader.float()\n break\n case 2:\n message.y = reader.float()\n break\n case 3:\n message.z = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseVector3(): Vector3 {\n return { x: 0, y: 0, z: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Vector3 = {\n encode(message: Vector3, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x)\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y)\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Vector3 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseVector3()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.x = reader.float()\n break\n case 2:\n message.y = reader.float()\n break\n case 3:\n message.z = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseVector2(): Vector2 {\n return { x: 0, y: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Vector2 = {\n encode(message: Vector2, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x)\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Vector2 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseVector2()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.x = reader.float()\n break\n case 2:\n message.y = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport { Vector3 } from '../../common/vectors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum AvatarModifierType {\n AMT_HIDE_AVATARS = 0,\n AMT_DISABLE_PASSPORTS = 1\n}\n\nexport interface PBAvatarModifierArea {\n area: Vector3 | undefined\n excludeIds: string[]\n modifiers: AvatarModifierType[]\n}\n\nfunction createBasePBAvatarModifierArea(): PBAvatarModifierArea {\n return { area: undefined, excludeIds: [], modifiers: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarModifierArea = {\n encode(message: PBAvatarModifierArea, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim()\n }\n for (const v of message.excludeIds) {\n writer.uint32(18).string(v!)\n }\n writer.uint32(26).fork()\n for (const v of message.modifiers) {\n writer.int32(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarModifierArea {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarModifierArea()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.area = Vector3.decode(reader, reader.uint32())\n break\n case 2:\n message.excludeIds.push(reader.string())\n break\n case 3:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.modifiers.push(reader.int32() as any)\n }\n } else {\n message.modifiers.push(reader.int32() as any)\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarModifierArea } from './pb/decentraland/sdk/components/avatar_modifier_area.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1070\n\n/**\n * @internal\n */\nexport const AvatarModifierAreaSchema: ISchema<PBAvatarModifierArea> = {\n serialize(value: PBAvatarModifierArea, builder: ByteBuffer): void {\n const writer = PBAvatarModifierArea.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarModifierArea {\n return PBAvatarModifierArea.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarModifierArea {\n // TODO: this is a hack.\n return PBAvatarModifierArea.decode(new Uint8Array())\n }\n}\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.<number>} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.<number>} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.<number>} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.<number>} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.<number>} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.<number>} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.common'\n\nexport interface Color3 {\n r: number\n g: number\n b: number\n}\n\nexport interface Color4 {\n r: number\n g: number\n b: number\n a: number\n}\n\nfunction createBaseColor3(): Color3 {\n return { r: 0, g: 0, b: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Color3 = {\n encode(message: Color3, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r)\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g)\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Color3 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseColor3()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.r = reader.float()\n break\n case 2:\n message.g = reader.float()\n break\n case 3:\n message.b = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseColor4(): Color4 {\n return { r: 0, g: 0, b: 0, a: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Color4 = {\n encode(message: Color4, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r)\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g)\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b)\n }\n if (message.a !== 0) {\n writer.uint32(37).float(message.a)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Color4 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseColor4()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.r = reader.float()\n break\n case 2:\n message.g = reader.float()\n break\n case 3:\n message.b = reader.float()\n break\n case 4:\n message.a = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport Long from 'long'\nimport { Color3 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBAvatarShape {\n id: string\n /** default = NPC */\n name?: string | undefined\n /** default = urn:decentraland:off-chain:base-avatars:BaseFemale */\n bodyShape?: string | undefined\n /** default = decentraland.common.Color3(R = 0.6f, G = 0.462f, B = 0.356f) */\n skinColor?: Color3 | undefined\n /** default = decentraland.common.Color3(R = 0.283f, G = 0.142f, B = 0f) */\n hairColor?: Color3 | undefined\n /** default = decentraland.common.Color3(R = 0.6f, G = 0.462f, B = 0.356f) */\n eyeColor?: Color3 | undefined\n expressionTriggerId?: string | undefined\n /** default = timestamp */\n expressionTriggerTimestamp?: number | undefined\n talking?: boolean | undefined\n /**\n * default = [\"urn:decentraland:off-chain:base-avatars:f_eyes_00\",\n * \"urn:decentraland:off-chain:base-avatars:f_eyebrows_00\",\n * \"urn:decentraland:off-chain:base-avatars:f_mouth_00\"\n * \"urn:decentraland:off-chain:base-avatars:standard_hair\",\n * \"urn:decentraland:off-chain:base-avatars:f_simple_yellow_tshirt\",\n * \"urn:decentraland:off-chain:base-avatars:f_brown_trousers\",\n * \"urn:decentraland:off-chain:base-avatars:bun_shoes\"]\n */\n wearables: string[]\n /** default = [] */\n emotes: string[]\n}\n\nfunction createBasePBAvatarShape(): PBAvatarShape {\n return {\n id: '',\n name: undefined,\n bodyShape: undefined,\n skinColor: undefined,\n hairColor: undefined,\n eyeColor: undefined,\n expressionTriggerId: undefined,\n expressionTriggerTimestamp: undefined,\n talking: undefined,\n wearables: [],\n emotes: []\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarShape = {\n encode(message: PBAvatarShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.id !== '') {\n writer.uint32(10).string(message.id)\n }\n if (message.name !== undefined) {\n writer.uint32(18).string(message.name)\n }\n if (message.bodyShape !== undefined) {\n writer.uint32(26).string(message.bodyShape)\n }\n if (message.skinColor !== undefined) {\n Color3.encode(message.skinColor, writer.uint32(34).fork()).ldelim()\n }\n if (message.hairColor !== undefined) {\n Color3.encode(message.hairColor, writer.uint32(42).fork()).ldelim()\n }\n if (message.eyeColor !== undefined) {\n Color3.encode(message.eyeColor, writer.uint32(50).fork()).ldelim()\n }\n if (message.expressionTriggerId !== undefined) {\n writer.uint32(58).string(message.expressionTriggerId)\n }\n if (message.expressionTriggerTimestamp !== undefined) {\n writer.uint32(64).int64(message.expressionTriggerTimestamp)\n }\n if (message.talking !== undefined) {\n writer.uint32(72).bool(message.talking)\n }\n for (const v of message.wearables) {\n writer.uint32(82).string(v!)\n }\n for (const v of message.emotes) {\n writer.uint32(90).string(v!)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.id = reader.string()\n break\n case 2:\n message.name = reader.string()\n break\n case 3:\n message.bodyShape = reader.string()\n break\n case 4:\n message.skinColor = Color3.decode(reader, reader.uint32())\n break\n case 5:\n message.hairColor = Color3.decode(reader, reader.uint32())\n break\n case 6:\n message.eyeColor = Color3.decode(reader, reader.uint32())\n break\n case 7:\n message.expressionTriggerId = reader.string()\n break\n case 8:\n message.expressionTriggerTimestamp = longToNumber(reader.int64() as Long)\n break\n case 9:\n message.talking = reader.bool()\n break\n case 10:\n message.wearables.push(reader.string())\n break\n case 11:\n message.emotes.push(reader.string())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\ndeclare var self: any | undefined\ndeclare var window: any | undefined\ndeclare var global: any | undefined\nvar globalThis: any = (() => {\n if (typeof globalThis !== 'undefined') return globalThis\n if (typeof self !== 'undefined') return self\n if (typeof window !== 'undefined') return window\n if (typeof global !== 'undefined') return global\n throw 'Unable to locate global object'\n})()\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER')\n }\n return long.toNumber()\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any\n _m0.configure()\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarShape } from './pb/decentraland/sdk/components/avatar_shape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1080\n\n/**\n * @internal\n */\nexport const AvatarShapeSchema: ISchema<PBAvatarShape> = {\n serialize(value: PBAvatarShape, builder: ByteBuffer): void {\n const writer = PBAvatarShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarShape {\n return PBAvatarShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarShape {\n // TODO: this is a hack.\n return PBAvatarShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum BillboardMode {\n BM_ALL_AXES = 0,\n BM_Y_AXE = 1\n}\n\nexport interface PBBillboard {\n /** default=BM_ALL_AXES */\n billboardMode?: BillboardMode | undefined\n /** default=false */\n oppositeDirection?: boolean | undefined\n}\n\nfunction createBasePBBillboard(): PBBillboard {\n return { billboardMode: undefined, oppositeDirection: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBBillboard = {\n encode(message: PBBillboard, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.billboardMode !== undefined) {\n writer.uint32(8).int32(message.billboardMode)\n }\n if (message.oppositeDirection !== undefined) {\n writer.uint32(16).bool(message.oppositeDirection)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBBillboard {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBBillboard()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.billboardMode = reader.int32() as any\n break\n case 2:\n message.oppositeDirection = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBBillboard } from './pb/decentraland/sdk/components/billboard.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1090\n\n/**\n * @internal\n */\nexport const BillboardSchema: ISchema<PBBillboard> = {\n serialize(value: PBBillboard, builder: ByteBuffer): void {\n const writer = PBBillboard.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBBillboard {\n return PBBillboard.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBBillboard {\n // TODO: this is a hack.\n return PBBillboard.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { CameraType } from './common/camera_type.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBCameraMode {\n mode: CameraType\n}\n\nfunction createBasePBCameraMode(): PBCameraMode {\n return { mode: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBCameraMode = {\n encode(message: PBCameraMode, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.mode !== 0) {\n writer.uint32(8).int32(message.mode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBCameraMode {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBCameraMode()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.mode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBCameraMode } from './pb/decentraland/sdk/components/camera_mode.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1072\n\n/**\n * @internal\n */\nexport const CameraModeSchema: ISchema<PBCameraMode> = {\n serialize(value: PBCameraMode, builder: ByteBuffer): void {\n const writer = PBCameraMode.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBCameraMode {\n return PBCameraMode.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBCameraMode {\n // TODO: this is a hack.\n return PBCameraMode.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { CameraType } from './common/camera_type.gen'\nimport { Vector3 } from '../../common/vectors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBCameraModeArea {\n area: Vector3 | undefined\n mode: CameraType\n}\n\nfunction createBasePBCameraModeArea(): PBCameraModeArea {\n return { area: undefined, mode: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBCameraModeArea = {\n encode(message: PBCameraModeArea, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim()\n }\n if (message.mode !== 0) {\n writer.uint32(16).int32(message.mode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBCameraModeArea {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBCameraModeArea()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.area = Vector3.decode(reader, reader.uint32())\n break\n case 2:\n message.mode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBCameraModeArea } from './pb/decentraland/sdk/components/camera_mode_area.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1071\n\n/**\n * @internal\n */\nexport const CameraModeAreaSchema: ISchema<PBCameraModeArea> = {\n serialize(value: PBCameraModeArea, builder: ByteBuffer): void {\n const writer = PBCameraModeArea.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBCameraModeArea {\n return PBCameraModeArea.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBCameraModeArea {\n // TODO: this is a hack.\n return PBCameraModeArea.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBGltfContainer {\n /** which file to load */\n src: string\n}\n\nfunction createBasePBGltfContainer(): PBGltfContainer {\n return { src: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBGltfContainer = {\n encode(message: PBGltfContainer, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.src !== '') {\n writer.uint32(10).string(message.src)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBGltfContainer {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBGltfContainer()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.src = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBGltfContainer } from './pb/decentraland/sdk/components/gltf_container.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1041\n\n/**\n * @internal\n */\nexport const GltfContainerSchema: ISchema<PBGltfContainer> = {\n serialize(value: PBGltfContainer, builder: ByteBuffer): void {\n const writer = PBGltfContainer.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBGltfContainer {\n return PBGltfContainer.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBGltfContainer {\n // TODO: this is a hack.\n return PBGltfContainer.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.common'\n\nexport const enum TextureWrapMode {\n TWM_REPEAT = 0,\n TWM_CLAMP = 1,\n TWM_MIRROR = 2,\n TWM_MIRROR_ONCE = 3\n}\n\nexport const enum TextureFilterMode {\n TFM_POINT = 0,\n TFM_BILINEAR = 1,\n TFM_TRILINEAR = 2\n}\n\nexport interface Texture {\n src: string\n /** default = TextureWrapMode.Clamp */\n wrapMode?: TextureWrapMode | undefined\n /** default = FilterMode.Bilinear */\n filterMode?: TextureFilterMode | undefined\n}\n\nexport interface AvatarTexture {\n userId: string\n /** default = TextureWrapMode.Clamp */\n wrapMode?: TextureWrapMode | undefined\n /** default = FilterMode.Bilinear */\n filterMode?: TextureFilterMode | undefined\n}\n\nexport interface TextureUnion {\n tex?: { $case: 'texture'; texture: Texture } | { $case: 'avatarTexture'; avatarTexture: AvatarTexture }\n}\n\nfunction createBaseTexture(): Texture {\n return { src: '', wrapMode: undefined, filterMode: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const Texture = {\n encode(message: Texture, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.src !== '') {\n writer.uint32(10).string(message.src)\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode)\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Texture {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseTexture()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.src = reader.string()\n break\n case 2:\n message.wrapMode = reader.int32() as any\n break\n case 3:\n message.filterMode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseAvatarTexture(): AvatarTexture {\n return { userId: '', wrapMode: undefined, filterMode: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const AvatarTexture = {\n encode(message: AvatarTexture, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.userId !== '') {\n writer.uint32(10).string(message.userId)\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode)\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): AvatarTexture {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseAvatarTexture()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.userId = reader.string()\n break\n case 2:\n message.wrapMode = reader.int32() as any\n break\n case 3:\n message.filterMode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseTextureUnion(): TextureUnion {\n return { tex: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const TextureUnion = {\n encode(message: TextureUnion, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.tex?.$case === 'texture') {\n Texture.encode(message.tex.texture, writer.uint32(10).fork()).ldelim()\n }\n if (message.tex?.$case === 'avatarTexture') {\n AvatarTexture.encode(message.tex.avatarTexture, writer.uint32(18).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TextureUnion {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseTextureUnion()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.tex = { $case: 'texture', texture: Texture.decode(reader, reader.uint32()) }\n break\n case 2:\n message.tex = { $case: 'avatarTexture', avatarTexture: AvatarTexture.decode(reader, reader.uint32()) }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport { TextureUnion } from '../../common/texture.gen'\nimport { Color3 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum MaterialTransparencyMode {\n MTM_OPAQUE = 0,\n MTM_ALPHA_TEST = 1,\n MTM_ALPHA_BLEND = 2,\n MTM_ALPHA_TEST_AND_ALPHA_BLEND = 3,\n MTM_AUTO = 4\n}\n\nexport interface PBMaterial {\n material?: { $case: 'unlit'; unlit: PBMaterial_UnlitMaterial } | { $case: 'pbr'; pbr: PBMaterial_PbrMaterial }\n}\n\nexport interface PBMaterial_UnlitMaterial {\n /** default = null */\n texture?: TextureUnion | undefined\n /** default = 0.5. range value: from 0 to 1 */\n alphaTest?: number | undefined\n /** default = true */\n castShadows?: boolean | undefined\n}\n\nexport interface PBMaterial_PbrMaterial {\n /** default = null */\n texture?: TextureUnion | undefined\n /** default = 0.5. range value: from 0 to 1 */\n alphaTest?: number | undefined\n /** default = true */\n castShadows?: boolean | undefined\n /** default = null */\n alphaTexture?: TextureUnion | undefined\n /** default = null */\n emissiveTexture?: TextureUnion | undefined\n /** default = null */\n bumpTexture?: TextureUnion | undefined\n /** default = white; */\n albedoColor?: Color3 | undefined\n /** default = black; */\n emissiveColor?: Color3 | undefined\n /** default = white; */\n reflectivityColor?: Color3 | undefined\n /** default = TransparencyMode.Auto */\n transparencyMode?: MaterialTransparencyMode | undefined\n /** default = 0.5 */\n metallic?: number | undefined\n /** default = 0.5 */\n roughness?: number | undefined\n /** default = 1 */\n glossiness?: number | undefined\n /** default = 1 */\n specularIntensity?: number | undefined\n /** default = 2 */\n emissiveIntensity?: number | undefined\n /** default = 1 */\n directIntensity?: number | undefined\n}\n\nfunction createBasePBMaterial(): PBMaterial {\n return { material: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMaterial = {\n encode(message: PBMaterial, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.material?.$case === 'unlit') {\n PBMaterial_UnlitMaterial.encode(message.material.unlit, writer.uint32(10).fork()).ldelim()\n }\n if (message.material?.$case === 'pbr') {\n PBMaterial_PbrMaterial.encode(message.material.pbr, writer.uint32(18).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMaterial {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMaterial()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.material = { $case: 'unlit', unlit: PBMaterial_UnlitMaterial.decode(reader, reader.uint32()) }\n break\n case 2:\n message.material = { $case: 'pbr', pbr: PBMaterial_PbrMaterial.decode(reader, reader.uint32()) }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMaterial_UnlitMaterial(): PBMaterial_UnlitMaterial {\n return { texture: undefined, alphaTest: undefined, castShadows: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMaterial_UnlitMaterial = {\n encode(message: PBMaterial_UnlitMaterial, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(10).fork()).ldelim()\n }\n if (message.alphaTest !== undefined) {\n writer.uint32(21).float(message.alphaTest)\n }\n if (message.castShadows !== undefined) {\n writer.uint32(24).bool(message.castShadows)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMaterial_UnlitMaterial {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMaterial_UnlitMaterial()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.texture = TextureUnion.decode(reader, reader.uint32())\n break\n case 2:\n message.alphaTest = reader.float()\n break\n case 3:\n message.castShadows = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMaterial_PbrMaterial(): PBMaterial_PbrMaterial {\n return {\n texture: undefined,\n alphaTest: undefined,\n castShadows: undefined,\n alphaTexture: undefined,\n emissiveTexture: undefined,\n bumpTexture: undefined,\n albedoColor: undefined,\n emissiveColor: undefined,\n reflectivityColor: undefined,\n transparencyMode: undefined,\n metallic: undefined,\n roughness: undefined,\n glossiness: undefined,\n specularIntensity: undefined,\n emissiveIntensity: undefined,\n directIntensity: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBMaterial_PbrMaterial = {\n encode(message: PBMaterial_PbrMaterial, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(10).fork()).ldelim()\n }\n if (message.alphaTest !== undefined) {\n writer.uint32(21).float(message.alphaTest)\n }\n if (message.castShadows !== undefined) {\n writer.uint32(24).bool(message.castShadows)\n }\n if (message.alphaTexture !== undefined) {\n TextureUnion.encode(message.alphaTexture, writer.uint32(34).fork()).ldelim()\n }\n if (message.emissiveTexture !== undefined) {\n TextureUnion.encode(message.emissiveTexture, writer.uint32(42).fork()).ldelim()\n }\n if (message.bumpTexture !== undefined) {\n TextureUnion.encode(message.bumpTexture, writer.uint32(50).fork()).ldelim()\n }\n if (message.albedoColor !== undefined) {\n Color3.encode(message.albedoColor, writer.uint32(58).fork()).ldelim()\n }\n if (message.emissiveColor !== undefined) {\n Color3.encode(message.emissiveColor, writer.uint32(66).fork()).ldelim()\n }\n if (message.reflectivityColor !== undefined) {\n Color3.encode(message.reflectivityColor, writer.uint32(74).fork()).ldelim()\n }\n if (message.transparencyMode !== undefined) {\n writer.uint32(80).int32(message.transparencyMode)\n }\n if (message.metallic !== undefined) {\n writer.uint32(93).float(message.metallic)\n }\n if (message.roughness !== undefined) {\n writer.uint32(101).float(message.roughness)\n }\n if (message.glossiness !== undefined) {\n writer.uint32(109).float(message.glossiness)\n }\n if (message.specularIntensity !== undefined) {\n writer.uint32(117).float(message.specularIntensity)\n }\n if (message.emissiveIntensity !== undefined) {\n writer.uint32(125).float(message.emissiveIntensity)\n }\n if (message.directIntensity !== undefined) {\n writer.uint32(133).float(message.directIntensity)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMaterial_PbrMaterial {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMaterial_PbrMaterial()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.texture = TextureUnion.decode(reader, reader.uint32())\n break\n case 2:\n message.alphaTest = reader.float()\n break\n case 3:\n message.castShadows = reader.bool()\n break\n case 4:\n message.alphaTexture = TextureUnion.decode(reader, reader.uint32())\n break\n case 5:\n message.emissiveTexture = TextureUnion.decode(reader, reader.uint32())\n break\n case 6:\n message.bumpTexture = TextureUnion.decode(reader, reader.uint32())\n break\n case 7:\n message.albedoColor = Color3.decode(reader, reader.uint32())\n break\n case 8:\n message.emissiveColor = Color3.decode(reader, reader.uint32())\n break\n case 9:\n message.reflectivityColor = Color3.decode(reader, reader.uint32())\n break\n case 10:\n message.transparencyMode = reader.int32() as any\n break\n case 11:\n message.metallic = reader.float()\n break\n case 12:\n message.roughness = reader.float()\n break\n case 13:\n message.glossiness = reader.float()\n break\n case 14:\n message.specularIntensity = reader.float()\n break\n case 15:\n message.emissiveIntensity = reader.float()\n break\n case 16:\n message.directIntensity = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBMaterial } from './pb/decentraland/sdk/components/material.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1017\n\n/**\n * @internal\n */\nexport const MaterialSchema: ISchema<PBMaterial> = {\n serialize(value: PBMaterial, builder: ByteBuffer): void {\n const writer = PBMaterial.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBMaterial {\n return PBMaterial.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBMaterial {\n // TODO: this is a hack.\n return PBMaterial.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum ColliderLayer {\n CL_NONE = 0,\n CL_POINTER = 1,\n CL_PHYSICS = 2\n}\n\nexport interface PBMeshCollider {\n /** default = ColliderLayer.Physics | ColliderLayer.Pointer */\n collisionMask?: number | undefined\n mesh?:\n | { $case: 'box'; box: PBMeshCollider_BoxMesh }\n | { $case: 'sphere'; sphere: PBMeshCollider_SphereMesh }\n | { $case: 'cylinder'; cylinder: PBMeshCollider_CylinderMesh }\n | { $case: 'plane'; plane: PBMeshCollider_PlaneMesh }\n}\n\nexport interface PBMeshCollider_BoxMesh {}\n\nexport interface PBMeshCollider_CylinderMesh {\n /** default=1.0 */\n radiusTop?: number | undefined\n /** default=1.0 */\n radiusBottom?: number | undefined\n}\n\nexport interface PBMeshCollider_PlaneMesh {}\n\nexport interface PBMeshCollider_SphereMesh {}\n\nfunction createBasePBMeshCollider(): PBMeshCollider {\n return { collisionMask: undefined, mesh: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider = {\n encode(message: PBMeshCollider, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.collisionMask !== undefined) {\n writer.uint32(8).int32(message.collisionMask)\n }\n if (message.mesh?.$case === 'box') {\n PBMeshCollider_BoxMesh.encode(message.mesh.box, writer.uint32(18).fork()).ldelim()\n }\n if (message.mesh?.$case === 'sphere') {\n PBMeshCollider_SphereMesh.encode(message.mesh.sphere, writer.uint32(26).fork()).ldelim()\n }\n if (message.mesh?.$case === 'cylinder') {\n PBMeshCollider_CylinderMesh.encode(message.mesh.cylinder, writer.uint32(34).fork()).ldelim()\n }\n if (message.mesh?.$case === 'plane') {\n PBMeshCollider_PlaneMesh.encode(message.mesh.plane, writer.uint32(42).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.collisionMask = reader.int32()\n break\n case 2:\n message.mesh = { $case: 'box', box: PBMeshCollider_BoxMesh.decode(reader, reader.uint32()) }\n break\n case 3:\n message.mesh = { $case: 'sphere', sphere: PBMeshCollider_SphereMesh.decode(reader, reader.uint32()) }\n break\n case 4:\n message.mesh = { $case: 'cylinder', cylinder: PBMeshCollider_CylinderMesh.decode(reader, reader.uint32()) }\n break\n case 5:\n message.mesh = { $case: 'plane', plane: PBMeshCollider_PlaneMesh.decode(reader, reader.uint32()) }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshCollider_BoxMesh(): PBMeshCollider_BoxMesh {\n return {}\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider_BoxMesh = {\n encode(_: PBMeshCollider_BoxMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider_BoxMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider_BoxMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshCollider_CylinderMesh(): PBMeshCollider_CylinderMesh {\n return { radiusTop: undefined, radiusBottom: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider_CylinderMesh = {\n encode(message: PBMeshCollider_CylinderMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.radiusTop !== undefined) {\n writer.uint32(13).float(message.radiusTop)\n }\n if (message.radiusBottom !== undefined) {\n writer.uint32(21).float(message.radiusBottom)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider_CylinderMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider_CylinderMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.radiusTop = reader.float()\n break\n case 2:\n message.radiusBottom = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshCollider_PlaneMesh(): PBMeshCollider_PlaneMesh {\n return {}\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider_PlaneMesh = {\n encode(_: PBMeshCollider_PlaneMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider_PlaneMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider_PlaneMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshCollider_SphereMesh(): PBMeshCollider_SphereMesh {\n return {}\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshCollider_SphereMesh = {\n encode(_: PBMeshCollider_SphereMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshCollider_SphereMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshCollider_SphereMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBMeshCollider } from './pb/decentraland/sdk/components/mesh_collider.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1019\n\n/**\n * @internal\n */\nexport const MeshColliderSchema: ISchema<PBMeshCollider> = {\n serialize(value: PBMeshCollider, builder: ByteBuffer): void {\n const writer = PBMeshCollider.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBMeshCollider {\n return PBMeshCollider.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBMeshCollider {\n // TODO: this is a hack.\n return PBMeshCollider.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBMeshRenderer {\n mesh?:\n | { $case: 'box'; box: PBMeshRenderer_BoxMesh }\n | { $case: 'sphere'; sphere: PBMeshRenderer_SphereMesh }\n | { $case: 'cylinder'; cylinder: PBMeshRenderer_CylinderMesh }\n | { $case: 'plane'; plane: PBMeshRenderer_PlaneMesh }\n}\n\nexport interface PBMeshRenderer_BoxMesh {\n uvs: number[]\n}\n\nexport interface PBMeshRenderer_CylinderMesh {\n /** default=1.0 */\n radiusTop?: number | undefined\n /** default=1.0 */\n radiusBottom?: number | undefined\n}\n\nexport interface PBMeshRenderer_PlaneMesh {\n uvs: number[]\n}\n\nexport interface PBMeshRenderer_SphereMesh {}\n\nfunction createBasePBMeshRenderer(): PBMeshRenderer {\n return { mesh: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer = {\n encode(message: PBMeshRenderer, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.mesh?.$case === 'box') {\n PBMeshRenderer_BoxMesh.encode(message.mesh.box, writer.uint32(10).fork()).ldelim()\n }\n if (message.mesh?.$case === 'sphere') {\n PBMeshRenderer_SphereMesh.encode(message.mesh.sphere, writer.uint32(18).fork()).ldelim()\n }\n if (message.mesh?.$case === 'cylinder') {\n PBMeshRenderer_CylinderMesh.encode(message.mesh.cylinder, writer.uint32(26).fork()).ldelim()\n }\n if (message.mesh?.$case === 'plane') {\n PBMeshRenderer_PlaneMesh.encode(message.mesh.plane, writer.uint32(34).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.mesh = { $case: 'box', box: PBMeshRenderer_BoxMesh.decode(reader, reader.uint32()) }\n break\n case 2:\n message.mesh = { $case: 'sphere', sphere: PBMeshRenderer_SphereMesh.decode(reader, reader.uint32()) }\n break\n case 3:\n message.mesh = { $case: 'cylinder', cylinder: PBMeshRenderer_CylinderMesh.decode(reader, reader.uint32()) }\n break\n case 4:\n message.mesh = { $case: 'plane', plane: PBMeshRenderer_PlaneMesh.decode(reader, reader.uint32()) }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshRenderer_BoxMesh(): PBMeshRenderer_BoxMesh {\n return { uvs: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer_BoxMesh = {\n encode(message: PBMeshRenderer_BoxMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n writer.uint32(10).fork()\n for (const v of message.uvs) {\n writer.float(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer_BoxMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer_BoxMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.uvs.push(reader.float())\n }\n } else {\n message.uvs.push(reader.float())\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshRenderer_CylinderMesh(): PBMeshRenderer_CylinderMesh {\n return { radiusTop: undefined, radiusBottom: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer_CylinderMesh = {\n encode(message: PBMeshRenderer_CylinderMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.radiusTop !== undefined) {\n writer.uint32(13).float(message.radiusTop)\n }\n if (message.radiusBottom !== undefined) {\n writer.uint32(21).float(message.radiusBottom)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer_CylinderMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer_CylinderMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.radiusTop = reader.float()\n break\n case 2:\n message.radiusBottom = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshRenderer_PlaneMesh(): PBMeshRenderer_PlaneMesh {\n return { uvs: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer_PlaneMesh = {\n encode(message: PBMeshRenderer_PlaneMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n writer.uint32(10).fork()\n for (const v of message.uvs) {\n writer.float(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer_PlaneMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer_PlaneMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.uvs.push(reader.float())\n }\n } else {\n message.uvs.push(reader.float())\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBMeshRenderer_SphereMesh(): PBMeshRenderer_SphereMesh {\n return {}\n}\n\n\n/**\n * @internal\n */\nexport const PBMeshRenderer_SphereMesh = {\n encode(_: PBMeshRenderer_SphereMesh, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBMeshRenderer_SphereMesh {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBMeshRenderer_SphereMesh()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBMeshRenderer } from './pb/decentraland/sdk/components/mesh_renderer.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1018\n\n/**\n * @internal\n */\nexport const MeshRendererSchema: ISchema<PBMeshRenderer> = {\n serialize(value: PBMeshRenderer, builder: ByteBuffer): void {\n const writer = PBMeshRenderer.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBMeshRenderer {\n return PBMeshRenderer.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBMeshRenderer {\n // TODO: this is a hack.\n return PBMeshRenderer.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color3 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum NftFrameType {\n NFT_CLASSIC = 0,\n NFT_BAROQUE_ORNAMENT = 1,\n NFT_DIAMOND_ORNAMENT = 2,\n NFT_MINIMAL_WIDE = 3,\n NFT_MINIMAL_GREY = 4,\n NFT_BLOCKY = 5,\n NFT_GOLD_EDGES = 6,\n NFT_GOLD_CARVED = 7,\n NFT_GOLD_WIDE = 8,\n NFT_GOLD_ROUNDED = 9,\n NFT_METAL_MEDIUM = 10,\n NFT_METAL_WIDE = 11,\n NFT_METAL_SLIM = 12,\n NFT_METAL_ROUNDED = 13,\n NFT_PINS = 14,\n NFT_MINIMAL_BLACK = 15,\n NFT_MINIMAL_WHITE = 16,\n NFT_TAPE = 17,\n NFT_WOOD_SLIM = 18,\n NFT_WOOD_WIDE = 19,\n NFT_WOOD_TWIGS = 20,\n NFT_CANVAS = 21,\n NFT_NONE = 22\n}\n\nexport interface PBNftShape {\n src: string\n /** default = PictureFrameStyle.Classic */\n style?: NftFrameType | undefined\n /** default = decentraland.common.Color3(0.6404918, 0.611472, 0.8584906) */\n color?: Color3 | undefined\n}\n\nfunction createBasePBNftShape(): PBNftShape {\n return { src: '', style: undefined, color: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBNftShape = {\n encode(message: PBNftShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.src !== '') {\n writer.uint32(10).string(message.src)\n }\n if (message.style !== undefined) {\n writer.uint32(16).int32(message.style)\n }\n if (message.color !== undefined) {\n Color3.encode(message.color, writer.uint32(26).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBNftShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBNftShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.src = reader.string()\n break\n case 2:\n message.style = reader.int32() as any\n break\n case 3:\n message.color = Color3.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBNftShape } from './pb/decentraland/sdk/components/nft_shape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1040\n\n/**\n * @internal\n */\nexport const NftShapeSchema: ISchema<PBNftShape> = {\n serialize(value: PBNftShape, builder: ByteBuffer): void {\n const writer = PBNftShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBNftShape {\n return PBNftShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBNftShape {\n // TODO: this is a hack.\n return PBNftShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport Long from 'long'\nimport { Vector3 } from '../../common/vectors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBRaycastResult {\n timestamp: number\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n hits: RaycastHit[]\n}\n\n/** Position will be relative to the scene */\nexport interface RaycastHit {\n position: Vector3 | undefined\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n normalHit: Vector3 | undefined\n length: number\n meshName?: string | undefined\n entityId?: number | undefined\n}\n\nfunction createBasePBRaycastResult(): PBRaycastResult {\n return { timestamp: 0, origin: undefined, direction: undefined, hits: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBRaycastResult = {\n encode(message: PBRaycastResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.timestamp !== 0) {\n writer.uint32(8).int32(message.timestamp)\n }\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(18).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim()\n }\n for (const v of message.hits) {\n RaycastHit.encode(v!, writer.uint32(34).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBRaycastResult {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBRaycastResult()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.timestamp = reader.int32()\n break\n case 2:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 3:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 4:\n message.hits.push(RaycastHit.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBaseRaycastHit(): RaycastHit {\n return {\n position: undefined,\n origin: undefined,\n direction: undefined,\n normalHit: undefined,\n length: 0,\n meshName: undefined,\n entityId: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const RaycastHit = {\n encode(message: RaycastHit, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.position !== undefined) {\n Vector3.encode(message.position, writer.uint32(10).fork()).ldelim()\n }\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(18).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim()\n }\n if (message.normalHit !== undefined) {\n Vector3.encode(message.normalHit, writer.uint32(34).fork()).ldelim()\n }\n if (message.length !== 0) {\n writer.uint32(45).float(message.length)\n }\n if (message.meshName !== undefined) {\n writer.uint32(50).string(message.meshName)\n }\n if (message.entityId !== undefined) {\n writer.uint32(56).int64(message.entityId)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): RaycastHit {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseRaycastHit()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.position = Vector3.decode(reader, reader.uint32())\n break\n case 2:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 3:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 4:\n message.normalHit = Vector3.decode(reader, reader.uint32())\n break\n case 5:\n message.length = reader.float()\n break\n case 6:\n message.meshName = reader.string()\n break\n case 7:\n message.entityId = longToNumber(reader.int64() as Long)\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\ndeclare var self: any | undefined\ndeclare var window: any | undefined\ndeclare var global: any | undefined\nvar globalThis: any = (() => {\n if (typeof globalThis !== 'undefined') return globalThis\n if (typeof self !== 'undefined') return self\n if (typeof window !== 'undefined') return window\n if (typeof global !== 'undefined') return global\n throw 'Unable to locate global object'\n})()\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER')\n }\n return long.toNumber()\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any\n _m0.configure()\n}\n","/* eslint-disable */\nimport { InputAction } from './common/input_action.gen'\nimport { PointerEventType } from './pointer_hover_feedback.gen'\nimport { RaycastHit } from './raycast_result.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\n/** the renderer will set this component to the root entity once per frame with all the events */\nexport interface PBPointerEventsResult {\n /** a list of the last N pointer commands (from the engine) */\n commands: PBPointerEventsResult_PointerCommand[]\n}\n\n/** this message represents a pointer event, used both for UP and DOWN actions */\nexport interface PBPointerEventsResult_PointerCommand {\n /** identifier of the input */\n button: InputAction\n hit: RaycastHit | undefined\n state: PointerEventType\n /** could be a Lamport timestamp */\n timestamp: number\n /** if the input is analog then we store it here */\n analog?: number | undefined\n}\n\nfunction createBasePBPointerEventsResult(): PBPointerEventsResult {\n return { commands: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerEventsResult = {\n encode(message: PBPointerEventsResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.commands) {\n PBPointerEventsResult_PointerCommand.encode(v!, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerEventsResult {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerEventsResult()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.commands.push(PBPointerEventsResult_PointerCommand.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBPointerEventsResult_PointerCommand(): PBPointerEventsResult_PointerCommand {\n return { button: 0, hit: undefined, state: 0, timestamp: 0, analog: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerEventsResult_PointerCommand = {\n encode(message: PBPointerEventsResult_PointerCommand, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(8).int32(message.button)\n }\n if (message.hit !== undefined) {\n RaycastHit.encode(message.hit, writer.uint32(18).fork()).ldelim()\n }\n if (message.state !== 0) {\n writer.uint32(32).int32(message.state)\n }\n if (message.timestamp !== 0) {\n writer.uint32(40).int32(message.timestamp)\n }\n if (message.analog !== undefined) {\n writer.uint32(53).float(message.analog)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerEventsResult_PointerCommand {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerEventsResult_PointerCommand()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.button = reader.int32() as any\n break\n case 2:\n message.hit = RaycastHit.decode(reader, reader.uint32())\n break\n case 4:\n message.state = reader.int32() as any\n break\n case 5:\n message.timestamp = reader.int32()\n break\n case 6:\n message.analog = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBPointerEventsResult } from './pb/decentraland/sdk/components/pointer_events_result.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1063\n\n/**\n * @internal\n */\nexport const PointerEventsResultSchema: ISchema<PBPointerEventsResult> = {\n serialize(value: PBPointerEventsResult, builder: ByteBuffer): void {\n const writer = PBPointerEventsResult.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBPointerEventsResult {\n return PBPointerEventsResult.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBPointerEventsResult {\n // TODO: this is a hack.\n return PBPointerEventsResult.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { InputAction } from './common/input_action.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum PointerEventType {\n PET_UP = 0,\n PET_DOWN = 1,\n PET_HOVER_ENTER = 2,\n PET_HOVER_LEAVE = 3\n}\n\nexport interface PBPointerHoverFeedback {\n pointerEvents: PBPointerHoverFeedback_Entry[]\n}\n\nexport interface PBPointerHoverFeedback_Info {\n /** default=InputAction.ANY */\n button?: InputAction | undefined\n /** default='Interact' */\n hoverText?: string | undefined\n /** default=10 */\n maxDistance?: number | undefined\n /** default=true */\n showFeedback?: boolean | undefined\n}\n\nexport interface PBPointerHoverFeedback_Entry {\n eventType: PointerEventType\n eventInfo: PBPointerHoverFeedback_Info | undefined\n}\n\nfunction createBasePBPointerHoverFeedback(): PBPointerHoverFeedback {\n return { pointerEvents: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerHoverFeedback = {\n encode(message: PBPointerHoverFeedback, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.pointerEvents) {\n PBPointerHoverFeedback_Entry.encode(v!, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerHoverFeedback {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerHoverFeedback()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.pointerEvents.push(PBPointerHoverFeedback_Entry.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBPointerHoverFeedback_Info(): PBPointerHoverFeedback_Info {\n return { button: undefined, hoverText: undefined, maxDistance: undefined, showFeedback: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerHoverFeedback_Info = {\n encode(message: PBPointerHoverFeedback_Info, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== undefined) {\n writer.uint32(8).int32(message.button)\n }\n if (message.hoverText !== undefined) {\n writer.uint32(18).string(message.hoverText)\n }\n if (message.maxDistance !== undefined) {\n writer.uint32(29).float(message.maxDistance)\n }\n if (message.showFeedback !== undefined) {\n writer.uint32(32).bool(message.showFeedback)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerHoverFeedback_Info {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerHoverFeedback_Info()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.button = reader.int32() as any\n break\n case 2:\n message.hoverText = reader.string()\n break\n case 3:\n message.maxDistance = reader.float()\n break\n case 4:\n message.showFeedback = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBPointerHoverFeedback_Entry(): PBPointerHoverFeedback_Entry {\n return { eventType: 0, eventInfo: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerHoverFeedback_Entry = {\n encode(message: PBPointerHoverFeedback_Entry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.eventType !== 0) {\n writer.uint32(8).int32(message.eventType)\n }\n if (message.eventInfo !== undefined) {\n PBPointerHoverFeedback_Info.encode(message.eventInfo, writer.uint32(18).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerHoverFeedback_Entry {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerHoverFeedback_Entry()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.eventType = reader.int32() as any\n break\n case 2:\n message.eventInfo = PBPointerHoverFeedback_Info.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBPointerHoverFeedback } from './pb/decentraland/sdk/components/pointer_hover_feedback.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1062\n\n/**\n * @internal\n */\nexport const PointerHoverFeedbackSchema: ISchema<PBPointerHoverFeedback> = {\n serialize(value: PBPointerHoverFeedback, builder: ByteBuffer): void {\n const writer = PBPointerHoverFeedback.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBPointerHoverFeedback {\n return PBPointerHoverFeedback.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBPointerHoverFeedback {\n // TODO: this is a hack.\n return PBPointerHoverFeedback.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBPointerLock {\n isPointerLocked: boolean\n}\n\nfunction createBasePBPointerLock(): PBPointerLock {\n return { isPointerLocked: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBPointerLock = {\n encode(message: PBPointerLock, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.isPointerLocked === true) {\n writer.uint32(8).bool(message.isPointerLocked)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPointerLock {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPointerLock()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.isPointerLocked = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBPointerLock } from './pb/decentraland/sdk/components/pointer_lock.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1074\n\n/**\n * @internal\n */\nexport const PointerLockSchema: ISchema<PBPointerLock> = {\n serialize(value: PBPointerLock, builder: ByteBuffer): void {\n const writer = PBPointerLock.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBPointerLock {\n return PBPointerLock.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBPointerLock {\n // TODO: this is a hack.\n return PBPointerLock.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Vector3 } from '../../common/vectors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum RaycastQueryType {\n RQT_HIT_FIRST = 0,\n RQT_QUERY_ALL = 1\n}\n\nexport interface PBRaycast {\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n maxDistance: number\n queryType: RaycastQueryType\n}\n\nfunction createBasePBRaycast(): PBRaycast {\n return { origin: undefined, direction: undefined, maxDistance: 0, queryType: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBRaycast = {\n encode(message: PBRaycast, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(18).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim()\n }\n if (message.maxDistance !== 0) {\n writer.uint32(37).float(message.maxDistance)\n }\n if (message.queryType !== 0) {\n writer.uint32(40).int32(message.queryType)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBRaycast {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBRaycast()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 2:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 3:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 4:\n message.maxDistance = reader.float()\n break\n case 5:\n message.queryType = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBRaycast } from './pb/decentraland/sdk/components/raycast.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1067\n\n/**\n * @internal\n */\nexport const RaycastSchema: ISchema<PBRaycast> = {\n serialize(value: PBRaycast, builder: ByteBuffer): void {\n const writer = PBRaycast.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBRaycast {\n return PBRaycast.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBRaycast {\n // TODO: this is a hack.\n return PBRaycast.decode(new Uint8Array())\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBRaycastResult } from './pb/decentraland/sdk/components/raycast_result.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1068\n\n/**\n * @internal\n */\nexport const RaycastResultSchema: ISchema<PBRaycastResult> = {\n serialize(value: PBRaycastResult, builder: ByteBuffer): void {\n const writer = PBRaycastResult.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBRaycastResult {\n return PBRaycastResult.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBRaycastResult {\n // TODO: this is a hack.\n return PBRaycastResult.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Font, TextAlignMode } from './common/texts.gen'\nimport { Color3, Color4 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBTextShape {\n text: string\n /** default=F_SANS_SERIF */\n font?: Font | undefined\n /** default=10 */\n fontSize?: number | undefined\n fontAutoSize?: boolean | undefined\n /** default=TAM_CENTER_CENTER */\n textAlign?: TextAlignMode | undefined\n /** default=1 */\n width?: number | undefined\n /** default=1 */\n height?: number | undefined\n paddingTop?: number | undefined\n paddingRight?: number | undefined\n paddingBottom?: number | undefined\n paddingLeft?: number | undefined\n lineSpacing?: number | undefined\n lineCount?: number | undefined\n textWrapping?: boolean | undefined\n shadowBlur?: number | undefined\n shadowOffsetX?: number | undefined\n shadowOffsetY?: number | undefined\n outlineWidth?: number | undefined\n /** default=(1.0,1.0,1.0) */\n shadowColor?: Color3 | undefined\n /** default=(1.0,1.0,1.0) */\n outlineColor?: Color3 | undefined\n /** default=(1.0,1.0,1.0) */\n textColor?: Color4 | undefined\n}\n\nfunction createBasePBTextShape(): PBTextShape {\n return {\n text: '',\n font: undefined,\n fontSize: undefined,\n fontAutoSize: undefined,\n textAlign: undefined,\n width: undefined,\n height: undefined,\n paddingTop: undefined,\n paddingRight: undefined,\n paddingBottom: undefined,\n paddingLeft: undefined,\n lineSpacing: undefined,\n lineCount: undefined,\n textWrapping: undefined,\n shadowBlur: undefined,\n shadowOffsetX: undefined,\n shadowOffsetY: undefined,\n outlineWidth: undefined,\n shadowColor: undefined,\n outlineColor: undefined,\n textColor: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBTextShape = {\n encode(message: PBTextShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.text !== '') {\n writer.uint32(10).string(message.text)\n }\n if (message.font !== undefined) {\n writer.uint32(16).int32(message.font)\n }\n if (message.fontSize !== undefined) {\n writer.uint32(29).float(message.fontSize)\n }\n if (message.fontAutoSize !== undefined) {\n writer.uint32(32).bool(message.fontAutoSize)\n }\n if (message.textAlign !== undefined) {\n writer.uint32(40).int32(message.textAlign)\n }\n if (message.width !== undefined) {\n writer.uint32(53).float(message.width)\n }\n if (message.height !== undefined) {\n writer.uint32(61).float(message.height)\n }\n if (message.paddingTop !== undefined) {\n writer.uint32(69).float(message.paddingTop)\n }\n if (message.paddingRight !== undefined) {\n writer.uint32(77).float(message.paddingRight)\n }\n if (message.paddingBottom !== undefined) {\n writer.uint32(85).float(message.paddingBottom)\n }\n if (message.paddingLeft !== undefined) {\n writer.uint32(93).float(message.paddingLeft)\n }\n if (message.lineSpacing !== undefined) {\n writer.uint32(101).float(message.lineSpacing)\n }\n if (message.lineCount !== undefined) {\n writer.uint32(104).int32(message.lineCount)\n }\n if (message.textWrapping !== undefined) {\n writer.uint32(112).bool(message.textWrapping)\n }\n if (message.shadowBlur !== undefined) {\n writer.uint32(125).float(message.shadowBlur)\n }\n if (message.shadowOffsetX !== undefined) {\n writer.uint32(133).float(message.shadowOffsetX)\n }\n if (message.shadowOffsetY !== undefined) {\n writer.uint32(141).float(message.shadowOffsetY)\n }\n if (message.outlineWidth !== undefined) {\n writer.uint32(149).float(message.outlineWidth)\n }\n if (message.shadowColor !== undefined) {\n Color3.encode(message.shadowColor, writer.uint32(154).fork()).ldelim()\n }\n if (message.outlineColor !== undefined) {\n Color3.encode(message.outlineColor, writer.uint32(162).fork()).ldelim()\n }\n if (message.textColor !== undefined) {\n Color4.encode(message.textColor, writer.uint32(170).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBTextShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBTextShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.text = reader.string()\n break\n case 2:\n message.font = reader.int32() as any\n break\n case 3:\n message.fontSize = reader.float()\n break\n case 4:\n message.fontAutoSize = reader.bool()\n break\n case 5:\n message.textAlign = reader.int32() as any\n break\n case 6:\n message.width = reader.float()\n break\n case 7:\n message.height = reader.float()\n break\n case 8:\n message.paddingTop = reader.float()\n break\n case 9:\n message.paddingRight = reader.float()\n break\n case 10:\n message.paddingBottom = reader.float()\n break\n case 11:\n message.paddingLeft = reader.float()\n break\n case 12:\n message.lineSpacing = reader.float()\n break\n case 13:\n message.lineCount = reader.int32()\n break\n case 14:\n message.textWrapping = reader.bool()\n break\n case 15:\n message.shadowBlur = reader.float()\n break\n case 16:\n message.shadowOffsetX = reader.float()\n break\n case 17:\n message.shadowOffsetY = reader.float()\n break\n case 18:\n message.outlineWidth = reader.float()\n break\n case 19:\n message.shadowColor = Color3.decode(reader, reader.uint32())\n break\n case 20:\n message.outlineColor = Color3.decode(reader, reader.uint32())\n break\n case 21:\n message.textColor = Color4.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBTextShape } from './pb/decentraland/sdk/components/text_shape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1030\n\n/**\n * @internal\n */\nexport const TextShapeSchema: ISchema<PBTextShape> = {\n serialize(value: PBTextShape, builder: ByteBuffer): void {\n const writer = PBTextShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBTextShape {\n return PBTextShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBTextShape {\n // TODO: this is a hack.\n return PBTextShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color4 } from '../../common/colors.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBUiBackground {\n /** default=(0.0, 0.0, 0.0, 0.0) */\n backgroundColor?: Color4 | undefined\n}\n\nfunction createBasePBUiBackground(): PBUiBackground {\n return { backgroundColor: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBUiBackground = {\n encode(message: PBUiBackground, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.backgroundColor !== undefined) {\n Color4.encode(message.backgroundColor, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBUiBackground {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBUiBackground()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.backgroundColor = Color4.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBUiBackground } from './pb/decentraland/sdk/components/ui_background.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1053\n\n/**\n * @internal\n */\nexport const UiBackgroundSchema: ISchema<PBUiBackground> = {\n serialize(value: PBUiBackground, builder: ByteBuffer): void {\n const writer = PBUiBackground.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBUiBackground {\n return PBUiBackground.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBUiBackground {\n // TODO: this is a hack.\n return PBUiBackground.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color4 } from '../../common/colors.gen'\nimport { TextAlignMode, Font } from './common/texts.gen'\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBUiText {\n value: string\n /** default=(1.0,1.0,1.0,1.0) */\n color?: Color4 | undefined\n /** default='center' */\n textAlign?: TextAlignMode | undefined\n /** default=0 */\n font?: Font | undefined\n /** default=10 */\n fontSize?: number | undefined\n}\n\nfunction createBasePBUiText(): PBUiText {\n return { value: '', color: undefined, textAlign: undefined, font: undefined, fontSize: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBUiText = {\n encode(message: PBUiText, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.value !== '') {\n writer.uint32(10).string(message.value)\n }\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(18).fork()).ldelim()\n }\n if (message.textAlign !== undefined) {\n writer.uint32(24).int32(message.textAlign)\n }\n if (message.font !== undefined) {\n writer.uint32(32).int32(message.font)\n }\n if (message.fontSize !== undefined) {\n writer.uint32(40).int32(message.fontSize)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBUiText {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBUiText()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.value = reader.string()\n break\n case 2:\n message.color = Color4.decode(reader, reader.uint32())\n break\n case 3:\n message.textAlign = reader.int32() as any\n break\n case 4:\n message.font = reader.int32() as any\n break\n case 5:\n message.fontSize = reader.int32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBUiText } from './pb/decentraland/sdk/components/ui_text.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1052\n\n/**\n * @internal\n */\nexport const UiTextSchema: ISchema<PBUiText> = {\n serialize(value: PBUiText, builder: ByteBuffer): void {\n const writer = PBUiText.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBUiText {\n return PBUiText.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBUiText {\n // TODO: this is a hack.\n return PBUiText.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport const enum YGPositionType {\n YGPT_RELATIVE = 0,\n YGPT_ABSOLUTE = 1\n}\n\nexport const enum YGAlign {\n YGA_AUTO = 0,\n YGA_FLEX_START = 1,\n YGA_CENTER = 2,\n YGA_FLEX_END = 3,\n YGA_STRETCH = 4,\n YGA_BASELINE = 5,\n YGA_SPACE_BETWEEN = 6,\n YGA_SPACE_AROUND = 7\n}\n\nexport const enum YGUnit {\n YGU_UNDEFINED = 0,\n YGU_POINT = 1,\n YGU_PERCENT = 2,\n YGU_AUTO = 3\n}\n\nexport const enum YGFlexDirection {\n YGFD_ROW = 0,\n YGFD_COLUMN = 1,\n YGFD_COLUMN_REVERSE = 2,\n YGFD_ROW_REVERSE = 3\n}\n\nexport const enum YGWrap {\n YGW_NO_WRAP = 0,\n YGW_WRAP = 1,\n YGW_WRAP_REVERSE = 2\n}\n\nexport const enum YGJustify {\n YGJ_FLEX_START = 0,\n YGJ_CENTER = 1,\n YGJ_FLEX_END = 2,\n YGJ_SPACE_BETWEEN = 3,\n YGJ_SPACE_AROUND = 4,\n YGJ_SPACE_EVENLY = 5\n}\n\nexport const enum YGOverflow {\n YGO_VISIBLE = 0,\n YGO_HIDDEN = 1,\n YGO_SCROLL = 2\n}\n\nexport const enum YGDisplay {\n YGD_FLEX = 0,\n YGD_NONE = 1\n}\n\nexport const enum YGEdge {\n YGE_LEFT = 0,\n YGE_TOP = 1,\n YGE_RIGHT = 2,\n YGE_BOTTOM = 3,\n YGE_START = 4,\n YGE_END = 5,\n YGE_HORIZONTAL = 6,\n YGE_VERTICAL = 7,\n YGE_ALL = 8\n}\n\nexport interface PBUiTransform {\n parent: number\n rightOf: number\n /** default: YGAlign.YGA_FLEX_START */\n alignContent?: YGAlign | undefined\n /** default: YGAlign.YGA_STRETCH */\n alignItems?: YGAlign | undefined\n /** default: YGWrap.YGW_WRAP */\n flexWrap?: YGWrap | undefined\n /** default: 1 */\n flexShrink?: number | undefined\n /** YGPositionType.YGPT_RELATIVE */\n positionType: YGPositionType\n /** YGAlign.YGA_AUTO */\n alignSelf: YGAlign\n /** YGFlexDirection.YGFD_ROW */\n flexDirection: YGFlexDirection\n /** YGJustify.YGJ_FLEX_START */\n justifyContent: YGJustify\n /** YGOverflow.YGO_VISIBLE */\n overflow: YGOverflow\n /** YGDisplay.YGD_FLEX */\n display: YGDisplay\n /** YGUnit.YGU_UNDEFINED */\n flexBasisUnit: YGUnit\n flexBasis: number\n flexGrow: number\n /** YGUnit.YGU_UNDEFINED */\n widthUnit: YGUnit\n width: number\n /** YGUnit.YGU_UNDEFINED */\n heightUnit: YGUnit\n height: number\n /** YGUnit.YGU_UNDEFINED */\n minWidthUnit: YGUnit\n minWidth: number\n /** YGUnit.YGU_UNDEFINED */\n minHeightUnit: YGUnit\n minHeight: number\n /** YGUnit.YGU_UNDEFINED */\n maxWidthUnit: YGUnit\n maxWidth: number\n /** YGUnit.YGU_UNDEFINED */\n maxHeightUnit: YGUnit\n maxHeight: number\n /** YGUnit.YGU_UNDEFINED */\n positionLeftUnit: YGUnit\n positionLeft: number\n /** YGUnit.YGU_UNDEFINED */\n positionTopUnit: YGUnit\n positionTop: number\n /** YGUnit.YGU_UNDEFINED */\n positionRightUnit: YGUnit\n positionRight: number\n /** YGUnit.YGU_UNDEFINED */\n positionBottomUnit: YGUnit\n positionBottom: number\n /** YGUnit.YGU_UNDEFINED */\n marginLeftUnit: YGUnit\n marginLeft: number\n /** YGUnit.YGU_UNDEFINED */\n marginTopUnit: YGUnit\n marginTop: number\n /** YGUnit.YGU_UNDEFINED */\n marginRightUnit: YGUnit\n marginRight: number\n /** YGUnit.YGU_UNDEFINED */\n marginBottomUnit: YGUnit\n marginBottom: number\n /** YGUnit.YGU_UNDEFINED */\n paddingLeftUnit: YGUnit\n paddingLeft: number\n /** YGUnit.YGU_UNDEFINED */\n paddingTopUnit: YGUnit\n paddingTop: number\n /** YGUnit.YGU_UNDEFINED */\n paddingRightUnit: YGUnit\n paddingRight: number\n /** YGUnit.YGU_UNDEFINED */\n paddingBottomUnit: YGUnit\n paddingBottom: number\n}\n\nfunction createBasePBUiTransform(): PBUiTransform {\n return {\n parent: 0,\n rightOf: 0,\n alignContent: undefined,\n alignItems: undefined,\n flexWrap: undefined,\n flexShrink: undefined,\n positionType: 0,\n alignSelf: 0,\n flexDirection: 0,\n justifyContent: 0,\n overflow: 0,\n display: 0,\n flexBasisUnit: 0,\n flexBasis: 0,\n flexGrow: 0,\n widthUnit: 0,\n width: 0,\n heightUnit: 0,\n height: 0,\n minWidthUnit: 0,\n minWidth: 0,\n minHeightUnit: 0,\n minHeight: 0,\n maxWidthUnit: 0,\n maxWidth: 0,\n maxHeightUnit: 0,\n maxHeight: 0,\n positionLeftUnit: 0,\n positionLeft: 0,\n positionTopUnit: 0,\n positionTop: 0,\n positionRightUnit: 0,\n positionRight: 0,\n positionBottomUnit: 0,\n positionBottom: 0,\n marginLeftUnit: 0,\n marginLeft: 0,\n marginTopUnit: 0,\n marginTop: 0,\n marginRightUnit: 0,\n marginRight: 0,\n marginBottomUnit: 0,\n marginBottom: 0,\n paddingLeftUnit: 0,\n paddingLeft: 0,\n paddingTopUnit: 0,\n paddingTop: 0,\n paddingRightUnit: 0,\n paddingRight: 0,\n paddingBottomUnit: 0,\n paddingBottom: 0\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBUiTransform = {\n encode(message: PBUiTransform, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.parent !== 0) {\n writer.uint32(8).int32(message.parent)\n }\n if (message.rightOf !== 0) {\n writer.uint32(16).int32(message.rightOf)\n }\n if (message.alignContent !== undefined) {\n writer.uint32(24).int32(message.alignContent)\n }\n if (message.alignItems !== undefined) {\n writer.uint32(32).int32(message.alignItems)\n }\n if (message.flexWrap !== undefined) {\n writer.uint32(40).int32(message.flexWrap)\n }\n if (message.flexShrink !== undefined) {\n writer.uint32(53).float(message.flexShrink)\n }\n if (message.positionType !== 0) {\n writer.uint32(56).int32(message.positionType)\n }\n if (message.alignSelf !== 0) {\n writer.uint32(64).int32(message.alignSelf)\n }\n if (message.flexDirection !== 0) {\n writer.uint32(72).int32(message.flexDirection)\n }\n if (message.justifyContent !== 0) {\n writer.uint32(80).int32(message.justifyContent)\n }\n if (message.overflow !== 0) {\n writer.uint32(88).int32(message.overflow)\n }\n if (message.display !== 0) {\n writer.uint32(96).int32(message.display)\n }\n if (message.flexBasisUnit !== 0) {\n writer.uint32(104).int32(message.flexBasisUnit)\n }\n if (message.flexBasis !== 0) {\n writer.uint32(117).float(message.flexBasis)\n }\n if (message.flexGrow !== 0) {\n writer.uint32(125).float(message.flexGrow)\n }\n if (message.widthUnit !== 0) {\n writer.uint32(128).int32(message.widthUnit)\n }\n if (message.width !== 0) {\n writer.uint32(141).float(message.width)\n }\n if (message.heightUnit !== 0) {\n writer.uint32(144).int32(message.heightUnit)\n }\n if (message.height !== 0) {\n writer.uint32(157).float(message.height)\n }\n if (message.minWidthUnit !== 0) {\n writer.uint32(160).int32(message.minWidthUnit)\n }\n if (message.minWidth !== 0) {\n writer.uint32(173).float(message.minWidth)\n }\n if (message.minHeightUnit !== 0) {\n writer.uint32(176).int32(message.minHeightUnit)\n }\n if (message.minHeight !== 0) {\n writer.uint32(189).float(message.minHeight)\n }\n if (message.maxWidthUnit !== 0) {\n writer.uint32(192).int32(message.maxWidthUnit)\n }\n if (message.maxWidth !== 0) {\n writer.uint32(205).float(message.maxWidth)\n }\n if (message.maxHeightUnit !== 0) {\n writer.uint32(208).int32(message.maxHeightUnit)\n }\n if (message.maxHeight !== 0) {\n writer.uint32(221).float(message.maxHeight)\n }\n if (message.positionLeftUnit !== 0) {\n writer.uint32(224).int32(message.positionLeftUnit)\n }\n if (message.positionLeft !== 0) {\n writer.uint32(237).float(message.positionLeft)\n }\n if (message.positionTopUnit !== 0) {\n writer.uint32(240).int32(message.positionTopUnit)\n }\n if (message.positionTop !== 0) {\n writer.uint32(253).float(message.positionTop)\n }\n if (message.positionRightUnit !== 0) {\n writer.uint32(256).int32(message.positionRightUnit)\n }\n if (message.positionRight !== 0) {\n writer.uint32(269).float(message.positionRight)\n }\n if (message.positionBottomUnit !== 0) {\n writer.uint32(272).int32(message.positionBottomUnit)\n }\n if (message.positionBottom !== 0) {\n writer.uint32(285).float(message.positionBottom)\n }\n if (message.marginLeftUnit !== 0) {\n writer.uint32(288).int32(message.marginLeftUnit)\n }\n if (message.marginLeft !== 0) {\n writer.uint32(301).float(message.marginLeft)\n }\n if (message.marginTopUnit !== 0) {\n writer.uint32(304).int32(message.marginTopUnit)\n }\n if (message.marginTop !== 0) {\n writer.uint32(317).float(message.marginTop)\n }\n if (message.marginRightUnit !== 0) {\n writer.uint32(320).int32(message.marginRightUnit)\n }\n if (message.marginRight !== 0) {\n writer.uint32(333).float(message.marginRight)\n }\n if (message.marginBottomUnit !== 0) {\n writer.uint32(336).int32(message.marginBottomUnit)\n }\n if (message.marginBottom !== 0) {\n writer.uint32(349).float(message.marginBottom)\n }\n if (message.paddingLeftUnit !== 0) {\n writer.uint32(352).int32(message.paddingLeftUnit)\n }\n if (message.paddingLeft !== 0) {\n writer.uint32(365).float(message.paddingLeft)\n }\n if (message.paddingTopUnit !== 0) {\n writer.uint32(368).int32(message.paddingTopUnit)\n }\n if (message.paddingTop !== 0) {\n writer.uint32(381).float(message.paddingTop)\n }\n if (message.paddingRightUnit !== 0) {\n writer.uint32(384).int32(message.paddingRightUnit)\n }\n if (message.paddingRight !== 0) {\n writer.uint32(397).float(message.paddingRight)\n }\n if (message.paddingBottomUnit !== 0) {\n writer.uint32(400).int32(message.paddingBottomUnit)\n }\n if (message.paddingBottom !== 0) {\n writer.uint32(413).float(message.paddingBottom)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBUiTransform {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBUiTransform()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.parent = reader.int32()\n break\n case 2:\n message.rightOf = reader.int32()\n break\n case 3:\n message.alignContent = reader.int32() as any\n break\n case 4:\n message.alignItems = reader.int32() as any\n break\n case 5:\n message.flexWrap = reader.int32() as any\n break\n case 6:\n message.flexShrink = reader.float()\n break\n case 7:\n message.positionType = reader.int32() as any\n break\n case 8:\n message.alignSelf = reader.int32() as any\n break\n case 9:\n message.flexDirection = reader.int32() as any\n break\n case 10:\n message.justifyContent = reader.int32() as any\n break\n case 11:\n message.overflow = reader.int32() as any\n break\n case 12:\n message.display = reader.int32() as any\n break\n case 13:\n message.flexBasisUnit = reader.int32() as any\n break\n case 14:\n message.flexBasis = reader.float()\n break\n case 15:\n message.flexGrow = reader.float()\n break\n case 16:\n message.widthUnit = reader.int32() as any\n break\n case 17:\n message.width = reader.float()\n break\n case 18:\n message.heightUnit = reader.int32() as any\n break\n case 19:\n message.height = reader.float()\n break\n case 20:\n message.minWidthUnit = reader.int32() as any\n break\n case 21:\n message.minWidth = reader.float()\n break\n case 22:\n message.minHeightUnit = reader.int32() as any\n break\n case 23:\n message.minHeight = reader.float()\n break\n case 24:\n message.maxWidthUnit = reader.int32() as any\n break\n case 25:\n message.maxWidth = reader.float()\n break\n case 26:\n message.maxHeightUnit = reader.int32() as any\n break\n case 27:\n message.maxHeight = reader.float()\n break\n case 28:\n message.positionLeftUnit = reader.int32() as any\n break\n case 29:\n message.positionLeft = reader.float()\n break\n case 30:\n message.positionTopUnit = reader.int32() as any\n break\n case 31:\n message.positionTop = reader.float()\n break\n case 32:\n message.positionRightUnit = reader.int32() as any\n break\n case 33:\n message.positionRight = reader.float()\n break\n case 34:\n message.positionBottomUnit = reader.int32() as any\n break\n case 35:\n message.positionBottom = reader.float()\n break\n case 36:\n message.marginLeftUnit = reader.int32() as any\n break\n case 37:\n message.marginLeft = reader.float()\n break\n case 38:\n message.marginTopUnit = reader.int32() as any\n break\n case 39:\n message.marginTop = reader.float()\n break\n case 40:\n message.marginRightUnit = reader.int32() as any\n break\n case 41:\n message.marginRight = reader.float()\n break\n case 42:\n message.marginBottomUnit = reader.int32() as any\n break\n case 43:\n message.marginBottom = reader.float()\n break\n case 44:\n message.paddingLeftUnit = reader.int32() as any\n break\n case 45:\n message.paddingLeft = reader.float()\n break\n case 46:\n message.paddingTopUnit = reader.int32() as any\n break\n case 47:\n message.paddingTop = reader.float()\n break\n case 48:\n message.paddingRightUnit = reader.int32() as any\n break\n case 49:\n message.paddingRight = reader.float()\n break\n case 50:\n message.paddingBottomUnit = reader.int32() as any\n break\n case 51:\n message.paddingBottom = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBUiTransform } from './pb/decentraland/sdk/components/ui_transform.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1050\n\n/**\n * @internal\n */\nexport const UiTransformSchema: ISchema<PBUiTransform> = {\n serialize(value: PBUiTransform, builder: ByteBuffer): void {\n const writer = PBUiTransform.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBUiTransform {\n return PBUiTransform.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBUiTransform {\n // TODO: this is a hack.\n return PBUiTransform.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport _m0 from 'protobufjs/minimal'\n\nconst protobufPackage = 'decentraland.sdk.components'\n\nexport interface PBVisibilityComponent {\n /** default=true */\n visible?: boolean | undefined\n}\n\nfunction createBasePBVisibilityComponent(): PBVisibilityComponent {\n return { visible: undefined }\n}\n\n\n/**\n * @internal\n */\nexport const PBVisibilityComponent = {\n encode(message: PBVisibilityComponent, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.visible !== undefined) {\n writer.uint32(8).bool(message.visible)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBVisibilityComponent {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBVisibilityComponent()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.visible = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { ISchema } from '../../schemas/ISchema'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBVisibilityComponent } from './pb/decentraland/sdk/components/visibility_component.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1081\n\n/**\n * @internal\n */\nexport const VisibilityComponentSchema: ISchema<PBVisibilityComponent> = {\n serialize(value: PBVisibilityComponent, builder: ByteBuffer): void {\n const writer = PBVisibilityComponent.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBVisibilityComponent {\n return PBVisibilityComponent.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBVisibilityComponent {\n // TODO: this is a hack.\n return PBVisibilityComponent.decode(new Uint8Array())\n }\n}\n","import type { IEngine } from '../../engine/types'\nimport * as TransformSchema from '../legacy/Transform'\nimport * as AnimatorSchema from './Animator.gen'\nimport * as AudioSourceSchema from './AudioSource.gen'\nimport * as AudioStreamSchema from './AudioStream.gen'\nimport * as AvatarAttachSchema from './AvatarAttach.gen'\nimport * as AvatarModifierAreaSchema from './AvatarModifierArea.gen'\nimport * as AvatarShapeSchema from './AvatarShape.gen'\nimport * as BillboardSchema from './Billboard.gen'\nimport * as CameraModeSchema from './CameraMode.gen'\nimport * as CameraModeAreaSchema from './CameraModeArea.gen'\nimport * as GltfContainerSchema from './GltfContainer.gen'\nimport * as MaterialSchema from './Material.gen'\nimport * as MeshColliderSchema from './MeshCollider.gen'\nimport * as MeshRendererSchema from './MeshRenderer.gen'\nimport * as NftShapeSchema from './NftShape.gen'\nimport * as PointerEventsResultSchema from './PointerEventsResult.gen'\nimport * as PointerHoverFeedbackSchema from './PointerHoverFeedback.gen'\nimport * as PointerLockSchema from './PointerLock.gen'\nimport * as RaycastSchema from './Raycast.gen'\nimport * as RaycastResultSchema from './RaycastResult.gen'\nimport * as TextShapeSchema from './TextShape.gen'\nimport * as UiBackgroundSchema from './UiBackground.gen'\nimport * as UiTextSchema from './UiText.gen'\nimport * as UiTransformSchema from './UiTransform.gen'\nimport * as VisibilityComponentSchema from './VisibilityComponent.gen'\nexport * from './pb/decentraland/sdk/components/animator.gen'\nexport * from './pb/decentraland/sdk/components/audio_source.gen'\nexport * from './pb/decentraland/sdk/components/audio_stream.gen'\nexport * from './pb/decentraland/sdk/components/avatar_attach.gen'\nexport * from './pb/decentraland/sdk/components/avatar_modifier_area.gen'\nexport * from './pb/decentraland/sdk/components/avatar_shape.gen'\nexport * from './pb/decentraland/sdk/components/billboard.gen'\nexport * from './pb/decentraland/sdk/components/camera_mode.gen'\nexport * from './pb/decentraland/sdk/components/camera_mode_area.gen'\nexport * from './pb/decentraland/sdk/components/gltf_container.gen'\nexport * from './pb/decentraland/sdk/components/material.gen'\nexport * from './pb/decentraland/sdk/components/mesh_collider.gen'\nexport * from './pb/decentraland/sdk/components/mesh_renderer.gen'\nexport * from './pb/decentraland/sdk/components/nft_shape.gen'\nexport * from './pb/decentraland/sdk/components/pointer_events_result.gen'\nexport * from './pb/decentraland/sdk/components/pointer_hover_feedback.gen'\nexport * from './pb/decentraland/sdk/components/pointer_lock.gen'\nexport * from './pb/decentraland/sdk/components/raycast.gen'\nexport * from './pb/decentraland/sdk/components/raycast_result.gen'\nexport * from './pb/decentraland/sdk/components/text_shape.gen'\nexport * from './pb/decentraland/sdk/components/ui_background.gen'\nexport * from './pb/decentraland/sdk/components/ui_text.gen'\nexport * from './pb/decentraland/sdk/components/ui_transform.gen'\nexport * from './pb/decentraland/sdk/components/visibility_component.gen'\n\nexport function defineLibraryComponents({\n defineComponentFromSchema\n}: Pick<IEngine, 'defineComponentFromSchema'>) {\n return {\n\t\tAnimator: defineComponentFromSchema(AnimatorSchema.AnimatorSchema, AnimatorSchema.COMPONENT_ID),\n\t\tAudioSource: defineComponentFromSchema(AudioSourceSchema.AudioSourceSchema, AudioSourceSchema.COMPONENT_ID),\n\t\tAudioStream: defineComponentFromSchema(AudioStreamSchema.AudioStreamSchema, AudioStreamSchema.COMPONENT_ID),\n\t\tAvatarAttach: defineComponentFromSchema(AvatarAttachSchema.AvatarAttachSchema, AvatarAttachSchema.COMPONENT_ID),\n\t\tAvatarModifierArea: defineComponentFromSchema(AvatarModifierAreaSchema.AvatarModifierAreaSchema, AvatarModifierAreaSchema.COMPONENT_ID),\n\t\tAvatarShape: defineComponentFromSchema(AvatarShapeSchema.AvatarShapeSchema, AvatarShapeSchema.COMPONENT_ID),\n\t\tBillboard: defineComponentFromSchema(BillboardSchema.BillboardSchema, BillboardSchema.COMPONENT_ID),\n\t\tCameraMode: defineComponentFromSchema(CameraModeSchema.CameraModeSchema, CameraModeSchema.COMPONENT_ID),\n\t\tCameraModeArea: defineComponentFromSchema(CameraModeAreaSchema.CameraModeAreaSchema, CameraModeAreaSchema.COMPONENT_ID),\n\t\tGltfContainer: defineComponentFromSchema(GltfContainerSchema.GltfContainerSchema, GltfContainerSchema.COMPONENT_ID),\n\t\tMaterial: defineComponentFromSchema(MaterialSchema.MaterialSchema, MaterialSchema.COMPONENT_ID),\n\t\tMeshCollider: defineComponentFromSchema(MeshColliderSchema.MeshColliderSchema, MeshColliderSchema.COMPONENT_ID),\n\t\tMeshRenderer: defineComponentFromSchema(MeshRendererSchema.MeshRendererSchema, MeshRendererSchema.COMPONENT_ID),\n\t\tNftShape: defineComponentFromSchema(NftShapeSchema.NftShapeSchema, NftShapeSchema.COMPONENT_ID),\n\t\tPointerEventsResult: defineComponentFromSchema(PointerEventsResultSchema.PointerEventsResultSchema, PointerEventsResultSchema.COMPONENT_ID),\n\t\tPointerHoverFeedback: defineComponentFromSchema(PointerHoverFeedbackSchema.PointerHoverFeedbackSchema, PointerHoverFeedbackSchema.COMPONENT_ID),\n\t\tPointerLock: defineComponentFromSchema(PointerLockSchema.PointerLockSchema, PointerLockSchema.COMPONENT_ID),\n\t\tRaycast: defineComponentFromSchema(RaycastSchema.RaycastSchema, RaycastSchema.COMPONENT_ID),\n\t\tRaycastResult: defineComponentFromSchema(RaycastResultSchema.RaycastResultSchema, RaycastResultSchema.COMPONENT_ID),\n\t\tTextShape: defineComponentFromSchema(TextShapeSchema.TextShapeSchema, TextShapeSchema.COMPONENT_ID),\n\t\tUiBackground: defineComponentFromSchema(UiBackgroundSchema.UiBackgroundSchema, UiBackgroundSchema.COMPONENT_ID),\n\t\tUiText: defineComponentFromSchema(UiTextSchema.UiTextSchema, UiTextSchema.COMPONENT_ID),\n\t\tUiTransform: defineComponentFromSchema(UiTransformSchema.UiTransformSchema, UiTransformSchema.COMPONENT_ID),\n\t\tVisibilityComponent: defineComponentFromSchema(VisibilityComponentSchema.VisibilityComponentSchema, VisibilityComponentSchema.COMPONENT_ID),\n }\n}\n","import type { ISchema } from '../../schemas/ISchema'\nimport { Entity } from '../../engine/entity'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ComponentDefinition, IEngine } from '../../engine'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1\n\n/**\n * @public\n */\nexport type TransformType = {\n position: { x: number; y: number; z: number }\n rotation: { x: number; y: number; z: number; w: number }\n scale: { x: number; y: number; z: number }\n parent?: Entity\n}\n\n/** @internal */\nexport const TRANSFORM_LENGTH = 44\n\n/** @internal */\nexport const TransformSchema: ISchema<TransformType> = {\n serialize(value: TransformType, builder: ByteBuffer): void {\n const ptr = builder.incrementWriteOffset(TRANSFORM_LENGTH)\n builder.setFloat32(ptr, value.position.x)\n builder.setFloat32(ptr + 4, value.position.y)\n builder.setFloat32(ptr + 8, value.position.z)\n builder.setFloat32(ptr + 12, value.rotation.x)\n builder.setFloat32(ptr + 16, value.rotation.y)\n builder.setFloat32(ptr + 20, value.rotation.z)\n builder.setFloat32(ptr + 24, value.rotation.w)\n builder.setFloat32(ptr + 28, value.scale.x)\n builder.setFloat32(ptr + 32, value.scale.y)\n builder.setFloat32(ptr + 36, value.scale.z)\n builder.setUint32(ptr + 40, value.parent || 0)\n },\n deserialize(reader: ByteBuffer): TransformType {\n const ptr = reader.incrementReadOffset(TRANSFORM_LENGTH)\n return {\n position: {\n x: reader.getFloat32(ptr),\n y: reader.getFloat32(ptr + 4),\n z: reader.getFloat32(ptr + 8)\n },\n rotation: {\n x: reader.getFloat32(ptr + 12),\n y: reader.getFloat32(ptr + 16),\n z: reader.getFloat32(ptr + 20),\n w: reader.getFloat32(ptr + 24)\n },\n scale: {\n x: reader.getFloat32(ptr + 28),\n y: reader.getFloat32(ptr + 32),\n z: reader.getFloat32(ptr + 36)\n },\n parent: reader.getUint32(ptr + 40) as Entity\n }\n },\n create(): TransformType {\n return {\n position: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n rotation: { x: 0, y: 0, z: 0, w: 1 }\n }\n }\n}\n\nexport function defineTransformComponent({\n defineComponentFromSchema\n}: Pick<IEngine, 'defineComponentFromSchema'>): ComponentDefinition<\n ISchema<TransformType>,\n Partial<TransformType>\n> {\n return defineComponentFromSchema(TransformSchema, COMPONENT_ID)\n}\n","import { ComponentDefinition, Entity, IEngine, ISchema } from '../../engine'\nimport {\n PBAnimationState,\n PBAnimator\n} from '../generated/pb/decentraland/sdk/components/animator.gen'\nimport * as AnimatorSchema from './../generated/Animator.gen'\n\n/**\n * @public\n */\nexport type AnimatorComponentDefinition = ComponentDefinition<\n ISchema<PBAnimator>,\n PBAnimator\n>\n\n/**\n * @public\n */\nexport interface AnimatorComponentDefinitionExtended\n extends AnimatorComponentDefinition {\n /**\n * @public\n *\n * Get a `mutable` version of animator clip\n * @param entity - entity with Animator component\n * @param name - the field `name` of the component\n * @returns the clip or fails if it isn't found\n */\n getClip(entity: Entity, name: string): PBAnimationState\n\n /**\n * @public\n *\n * Get a `mutable` version of animator clip\n * @param entity - entity with Animator component\n * @param name - the field `name` of the component\n * @returns the clip or null if it isn't found\n */\n getClipOrNull(entity: Entity, name: string): PBAnimationState | null\n\n /**\n * @public\n *\n * Set playing=true the animation `$name`\n * @param entity - entity with Animator component\n * @param name - animation name\n * @param resetCursor - the animation starts at 0 or continues from the current cursor position\n * @returns true in successful playing, false if it doesn't find the Animator or clip\n */\n playSingleAnimation(\n entity: Entity,\n name: string,\n resetCursor?: boolean\n ): boolean\n\n /**\n * @public\n *\n * Set playing=false all animations\n * @param entity - entity with Animator component\n * @param resetCursor - the animation stops at 0 or at the current cursor position\n * @returns true in successful playing, false if it doesn't find the Animator\n */\n stopAllAnimations(entity: Entity, resetCursor?: boolean): boolean\n}\n\nexport function defineAnimatorComponent(\n engine: Pick<IEngine, 'getComponent'>\n): AnimatorComponentDefinitionExtended {\n const Animator = engine.getComponent<typeof AnimatorSchema.AnimatorSchema>(\n AnimatorSchema.COMPONENT_ID\n )\n\n /**\n * @returns The tuple [animator, clip]\n */\n function getClipAndAnimator(\n entity: Entity,\n name: string\n ): [PBAnimator | null, PBAnimationState | null] {\n const anim = Animator.getMutableOrNull(entity)\n if (!anim) return [null, null]\n\n const state = anim.states.find(\n (item) => item.name === name || item.clip === name\n )\n if (!state) return [anim, null]\n return [anim, state]\n }\n\n return {\n ...Animator,\n getClipOrNull(entity: Entity, name: string): PBAnimationState | null {\n const [_, state] = getClipAndAnimator(entity, name)\n return state\n },\n getClip(entity: Entity, name: string): PBAnimationState {\n const [animator, state] = getClipAndAnimator(entity, name)\n\n if (!animator) {\n throw new Error(`There is no Animator found in the entity ${entity}`)\n }\n\n if (!state) {\n throw new Error(\n `The Animator component of ${entity} has no the state ${name}`\n )\n }\n\n return state\n },\n playSingleAnimation(\n entity: Entity,\n name: string,\n shouldReset: boolean = true\n ): boolean {\n const [animator, state] = getClipAndAnimator(entity, name)\n if (!animator || !state) return false\n\n // Reset all other animations\n for (const state of animator.states) {\n state.playing = false\n state.shouldReset = true\n }\n\n state.playing = true\n state.shouldReset = shouldReset\n\n return true\n },\n\n stopAllAnimations(entity: Entity, resetCursor: boolean = true): boolean {\n // Get the mutable to modifying\n const animator = Animator.getMutableOrNull(entity)\n if (!animator) return false\n\n // Reset all other animations\n for (const state of animator.states) {\n state.playing = false\n state.shouldReset = resetCursor\n }\n\n return true\n }\n }\n}\n","import { ComponentDefinition, Entity, IEngine, ISchema } from '../../engine'\nimport { ColliderLayer, PBMeshCollider } from '../generated/index.gen'\nimport * as MeshColliderSchema from './../generated/MeshCollider.gen'\n\n/**\n * @public\n */\nexport type MeshColliderComponentDefinition = ComponentDefinition<\n ISchema<PBMeshCollider>,\n PBMeshCollider\n>\n\n/**\n * @public\n */\nexport interface MeshColliderComponentDefinitionExtended\n extends MeshColliderComponentDefinition {\n /**\n * @public\n * Set a box in the MeshCollider component\n * @param entity - entity to create or replace the MeshCollider component\n * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer\n */\n setBox(entity: Entity, colliderLayers?: ColliderLayer | ColliderLayer[]): void\n\n /**\n * @public\n * Set a plane in the MeshCollider component\n * @param entity - entity to create or replace the MeshCollider component\n * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer\n */\n setPlane(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void\n\n /**\n * @public\n * Set a cylinder in the MeshCollider component\n * @param entity - entity to create or replace the MeshCollider component\n * @param radiusBottom - radius of bottom of cylinder\n * @param radiusTop - radius of top of cylinder\n * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer\n */\n setCylinder(\n entity: Entity,\n radiusBottom?: number,\n radiusTop?: number,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void\n\n /**\n * @public\n * Set a sphere in the MeshCollider component\n * @param entity - entity to create or replace the MeshCollider component\n * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer\n */\n setSphere(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void\n}\n\nexport function defineMeshColliderComponent(\n engine: Pick<IEngine, 'getComponent'>\n): MeshColliderComponentDefinitionExtended {\n const MeshCollider = engine.getComponent<\n typeof MeshColliderSchema.MeshColliderSchema\n >(MeshColliderSchema.COMPONENT_ID)\n\n function getCollisionMask(layers?: ColliderLayer | ColliderLayer[]) {\n if (Array.isArray(layers)) {\n return layers\n .map((item) => item as number)\n .reduce((prev, item) => prev | item, 0)\n } else if (layers) {\n return layers\n }\n }\n\n return {\n ...MeshCollider,\n setBox(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void {\n MeshCollider.createOrReplace(entity, {\n mesh: { $case: 'box', box: {} },\n collisionMask: getCollisionMask(colliderLayers)\n })\n },\n setPlane(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void {\n MeshCollider.createOrReplace(entity, {\n mesh: { $case: 'plane', plane: {} },\n collisionMask: getCollisionMask(colliderLayers)\n })\n },\n setCylinder(\n entity: Entity,\n radiusBottom?: number,\n radiusTop?: number,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void {\n MeshCollider.createOrReplace(entity, {\n mesh: { $case: 'cylinder', cylinder: { radiusBottom, radiusTop } },\n collisionMask: getCollisionMask(colliderLayers)\n })\n },\n setSphere(\n entity: Entity,\n colliderLayers?: ColliderLayer | ColliderLayer[]\n ): void {\n MeshCollider.createOrReplace(entity, {\n mesh: { $case: 'sphere', sphere: {} },\n collisionMask: getCollisionMask(colliderLayers)\n })\n }\n }\n}\n","import { ComponentDefinition, Entity, IEngine, ISchema } from '../../engine'\nimport { PBMeshRenderer } from '../generated/index.gen'\nimport * as MeshRendererSchema from './../generated/MeshRenderer.gen'\n\n/**\n * @public\n */\nexport type MeshRendererComponentDefinition = ComponentDefinition<\n ISchema<PBMeshRenderer>,\n PBMeshRenderer\n>\n/**\n * @public\n */\nexport interface MeshRendererComponentDefinitionExtended\n extends MeshRendererComponentDefinition {\n /**\n * @public\n * Set a box in the MeshRenderer component\n * @param entity - entity to create or replace the MeshRenderer component\n * @param uvs - uvs coord\n */\n setBox(entity: Entity, uvs?: number[]): void\n\n /**\n * @public\n * Set a plane in the MeshRenderer component\n * @param entity - entity to create or replace the MeshRenderer component\n * @param uvs - uvs coord\n */\n setPlane(entity: Entity, uvs?: number[]): void\n\n /**\n * @public\n * Set a cylinder in the MeshRenderer component\n * @param entity - entity to create or replace the MeshRenderer component\n * @param radiusBottom -\n * @param radiusTop -\n */\n setCylinder(entity: Entity, radiusBottom?: number, radiusTop?: number): void\n\n /**\n * @public\n * Set a sphere in the MeshRenderer component\n * @param entity - entity to create or replace the MeshRenderer component\n */\n setSphere(entity: Entity): void\n}\n\nexport function defineMeshRendererComponent(\n engine: Pick<IEngine, 'getComponent'>\n): MeshRendererComponentDefinitionExtended {\n const MeshRenderer = engine.getComponent<\n typeof MeshRendererSchema.MeshRendererSchema\n >(MeshRendererSchema.COMPONENT_ID)\n\n return {\n ...MeshRenderer,\n setBox(entity: Entity, uvs?: number[]): void {\n MeshRenderer.createOrReplace(entity, {\n mesh: { $case: 'box', box: { uvs: uvs || [] } }\n })\n },\n setPlane(entity: Entity, uvs?: number[]): void {\n MeshRenderer.createOrReplace(entity, {\n mesh: { $case: 'plane', plane: { uvs: uvs || [] } }\n })\n },\n setCylinder(entity: Entity, radiusBottom: number, radiusTop: number): void {\n MeshRenderer.createOrReplace(entity, {\n mesh: { $case: 'cylinder', cylinder: { radiusBottom, radiusTop } }\n })\n },\n setSphere(entity: Entity): void {\n MeshRenderer.createOrReplace(entity, {\n mesh: { $case: 'sphere', sphere: {} }\n })\n }\n }\n}\n","import { ComponentDefinition, Entity, IEngine, ISchema } from '../../engine'\nimport {\n PBMaterial,\n PBMaterial_PbrMaterial,\n PBMaterial_UnlitMaterial\n} from '../generated/index.gen'\nimport * as MaterialSchema from '../generated/Material.gen'\nimport { AvatarTexture, Texture, TextureUnion } from '../generated/types.gen'\n\n/**\n * @public\n */\nexport type MaterialComponentDefinition = ComponentDefinition<\n ISchema<PBMaterial>,\n PBMaterial\n>\n\n/**\n * @public\n */\nexport type TextureHelper = {\n /**\n * @returns a common texture with a source file\n */\n Common: (texture: Texture) => TextureUnion\n\n /**\n * @returns the avatar texture of userId specified\n */\n Avatar: (avatarTexture: AvatarTexture) => TextureUnion\n}\n\n/**\n * @public\n */\nexport interface MaterialComponentDefinitionExtended\n extends MaterialComponentDefinition {\n /**\n * Texture helpers with constructor\n */\n Texture: TextureHelper\n\n /**\n * Create or replace the component Material in the entity specified\n * @param entity - the entity to link the component\n * @param material - the Unlit data for this material\n */\n setBasicMaterial: (entity: Entity, material: PBMaterial_UnlitMaterial) => void\n\n /**\n * Create or replace the component Material in the entity specified\n * @param entity - the entity to link the component\n * @param material - the PBR data for this material\n */\n setPbrMaterial: (entity: Entity, material: PBMaterial_PbrMaterial) => void\n}\n\nconst TextureHelper: TextureHelper = {\n Common(texture: Texture) {\n return {\n tex: {\n $case: 'texture',\n texture\n }\n }\n },\n Avatar(avatarTexture: AvatarTexture) {\n return {\n tex: {\n $case: 'avatarTexture',\n avatarTexture\n }\n }\n }\n}\n\nexport function defineMaterialComponent(\n engine: Pick<IEngine, 'getComponent'>\n): MaterialComponentDefinitionExtended {\n const Material = engine.getComponent<typeof MaterialSchema.MaterialSchema>(\n MaterialSchema.COMPONENT_ID\n )\n\n return {\n ...Material,\n Texture: TextureHelper,\n setBasicMaterial(entity: Entity, material: PBMaterial_UnlitMaterial) {\n Material.createOrReplace(entity, {\n material: {\n $case: 'unlit',\n unlit: material\n }\n })\n },\n setPbrMaterial(entity: Entity, material: PBMaterial_PbrMaterial) {\n Material.createOrReplace(entity, {\n material: {\n $case: 'pbr',\n pbr: material\n }\n })\n }\n }\n}\n","import { IEngine } from '../engine'\nimport { defineLibraryComponents } from './generated/index.gen'\nimport { defineTransformComponent } from './legacy/Transform'\nimport { defineAnimatorComponent } from './extended/Animator'\nimport { defineMeshColliderComponent } from './extended/MeshCollider'\nimport { defineMeshRendererComponent } from './extended/MeshRenderer'\nimport { defineMaterialComponent } from './extended/Material'\n\nexport function defineSdkComponents(\n engine: Pick<IEngine, 'defineComponentFromSchema' | 'getComponent'>\n) {\n const autogeneratedComponents = defineLibraryComponents(engine)\n return {\n ...autogeneratedComponents,\n Material: defineMaterialComponent(engine),\n Animator: defineAnimatorComponent(engine),\n MeshRenderer: defineMeshRendererComponent(engine),\n MeshCollider: defineMeshColliderComponent(engine),\n Transform: defineTransformComponent(engine)\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { ISchema } from './ISchema'\n\n/**\n * @public\n */\nexport function IArray<T>(type: ISchema<T>): ISchema<Array<T>> {\n return {\n serialize(value: Array<T>, builder: ByteBuffer): void {\n builder.writeUint32(value.length)\n for (const item of value) {\n type.serialize(item, builder)\n }\n },\n deserialize(reader: ByteBuffer): Array<T> {\n const newArray: Array<T> = []\n const length = reader.readUint32()\n for (let index = 0; index < length; index++) {\n newArray.push(type.deserialize(reader))\n }\n return newArray\n },\n create() {\n return []\n }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const Bool: ISchema<boolean> = {\n serialize(value: boolean, builder: ByteBuffer): void {\n builder.writeInt8(value ? 1 : 0)\n },\n deserialize(reader: ByteBuffer): boolean {\n return reader.readInt8() === 1\n },\n create() {\n return false\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport function IEnum<T>(type: ISchema<any>): ISchema<T> {\n return {\n serialize(value: T, builder: ByteBuffer): void {\n type.serialize(value, builder)\n },\n deserialize(reader: ByteBuffer): T {\n return type.deserialize(reader)\n },\n create() {\n return type.create()\n }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const Float32: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeFloat32(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readFloat32()\n },\n create() {\n return 0.0\n }\n}\n\n/**\n * @public\n */\nexport const Float64: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeFloat64(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readFloat64()\n },\n create() {\n return 0.0\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const Int64: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt64(BigInt(value))\n },\n deserialize(reader: ByteBuffer): number {\n return Number(reader.readInt64())\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int32: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt32(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt32()\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int16: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt16(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt16()\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int8: ISchema<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt8(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt8()\n },\n create() {\n return 0\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const FlatString: ISchema<string> = {\n serialize(value: string, builder: ByteBuffer): void {\n builder.writeBuffer(new TextEncoder().encode(value))\n },\n deserialize(reader: ByteBuffer): string {\n return new TextDecoder().decode(reader.readBuffer())\n },\n create() {\n return ''\n }\n}\n\n/**\n * @public\n */\nexport const EcsString = FlatString\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport type Color3Type = { r: number; g: number; b: number }\n\n/**\n * @public\n */\nexport const Color3Schema: ISchema<Color3Type> = {\n serialize(value: Color3Type, builder: ByteBuffer): void {\n builder.writeFloat32(value.r)\n builder.writeFloat32(value.g)\n builder.writeFloat32(value.b)\n },\n deserialize(reader: ByteBuffer): Color3Type {\n return {\n r: reader.readFloat32(),\n g: reader.readFloat32(),\n b: reader.readFloat32()\n }\n },\n create() {\n return { r: 0, g: 0, b: 0 }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport type Color4Type = { r: number; g: number; b: number; a: number }\n\n/**\n * @public\n */\nexport const Color4Schema: ISchema<Color4Type> = {\n serialize(value: Color4Type, builder: ByteBuffer): void {\n builder.writeFloat32(value.r)\n builder.writeFloat32(value.g)\n builder.writeFloat32(value.b)\n builder.writeFloat32(value.a)\n },\n deserialize(reader: ByteBuffer): Color4Type {\n return {\n r: reader.readFloat32(),\n g: reader.readFloat32(),\n b: reader.readFloat32(),\n a: reader.readFloat32()\n }\n },\n create() {\n return { r: 0, g: 0, b: 0, a: 0 }\n }\n}\n","import { Entity } from '../../engine'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport const EntitySchema: ISchema<Entity> = {\n serialize(value: Entity, builder: ByteBuffer): void {\n builder.writeInt32(value)\n },\n deserialize(reader: ByteBuffer): Entity {\n return reader.readInt32() as Entity\n },\n create() {\n return 0 as Entity\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport type QuaternionType = { x: number; y: number; z: number; w: number }\n\n/**\n * @public\n */\nexport const QuaternionSchema: ISchema<QuaternionType> = {\n serialize(value: QuaternionType, builder: ByteBuffer): void {\n builder.writeFloat32(value.x)\n builder.writeFloat32(value.y)\n builder.writeFloat32(value.z)\n builder.writeFloat32(value.w)\n },\n deserialize(reader: ByteBuffer): QuaternionType {\n return {\n x: reader.readFloat32(),\n y: reader.readFloat32(),\n z: reader.readFloat32(),\n w: reader.readFloat32()\n }\n },\n create() {\n return { x: 0, y: 0, z: 0, w: 0 }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { ISchema } from '../ISchema'\n\n/**\n * @public\n */\nexport type Vector3Type = { x: number; y: number; z: number }\n\n/**\n * @public\n */\nexport const Vector3Schema: ISchema<Vector3Type> = {\n serialize(value: Vector3Type, builder: ByteBuffer): void {\n builder.writeFloat32(value.x)\n builder.writeFloat32(value.y)\n builder.writeFloat32(value.z)\n },\n deserialize(reader: ByteBuffer): Vector3Type {\n return {\n x: reader.readFloat32(),\n y: reader.readFloat32(),\n z: reader.readFloat32()\n }\n },\n create() {\n return { x: 0, y: 0, z: 0 }\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { ISchema } from './ISchema'\nimport { ToOptional } from './typing'\n\n/**\n * @public\n */\nexport interface Spec {\n [key: string]: ISchema\n}\n\n/**\n * @public\n */\nexport type Result<T extends Spec> = ToOptional<{\n [K in keyof T]: T[K] extends ISchema\n ? ReturnType<T[K]['deserialize']>\n : T[K] extends Spec\n ? Result<T[K]>\n : never\n}>\n\nexport type MapSchemaType<T extends Spec> = ISchema<Result<T>>\n\n/**\n * @public\n */\nexport function IMap<T extends Spec>(spec: T): ISchema<Result<T>> {\n return {\n serialize(value: Result<T>, builder: ByteBuffer): void {\n for (const key in spec) {\n // TODO: as any\n spec[key].serialize((value as any)[key], builder)\n }\n },\n deserialize(reader: ByteBuffer): Result<T> {\n const newValue: Result<T> = {} as any\n for (const key in spec) {\n // TODO: as any\n ;(newValue as any)[key] = spec[key].deserialize(reader)\n }\n return newValue\n },\n create() {\n const newValue: Result<T> = {} as any\n for (const key in spec) {\n // TODO: as any\n ;(newValue as any)[key] = spec[key].create()\n }\n return newValue\n }\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { ISchema } from './ISchema'\n\n/**\n * @public\n */\nexport function IOptional<T>(spec: ISchema<T>): ISchema<T | undefined> {\n return {\n serialize(value: T | undefined, builder: ByteBuffer): void {\n if (value) {\n builder.writeInt8(1)\n spec.serialize(value, builder)\n } else {\n builder.writeInt8(0)\n }\n },\n deserialize(reader: ByteBuffer): T | undefined {\n const exists = reader.readInt8()\n if (exists) {\n return spec.deserialize(reader)\n }\n },\n create() {\n return undefined\n }\n }\n}\n","import { IArray } from './Array'\nimport { Bool } from './basic/Boolean'\nimport { IEnum } from './basic/Enum'\nimport { Float32, Float64 } from './basic/Float'\nimport { Int16, Int32, Int8, Int64 as iInt64 } from './basic/Integer'\nimport { EcsString } from './basic/String'\nimport { Color3Schema } from './custom/Color3'\nimport { Color4Schema } from './custom/Color4'\nimport { EntitySchema } from './custom/Entity'\nimport { QuaternionSchema } from './custom/Quaternion'\nimport { Vector3Schema } from './custom/Vector3'\nimport { ISchema } from './ISchema'\nimport { IMap } from './Map'\nimport { IOptional } from './Optional'\n\nexport type { IOptional } from './Optional'\nexport type { IMap } from './Map'\nexport type { IArray } from './Array'\nexport type { IEnum } from './basic/Enum'\nexport type { Vector3Type } from './custom/Vector3'\nexport type { QuaternionType } from './custom/Quaternion'\nexport type { Color3Type } from './custom/Color3'\nexport type { Color4Type } from './custom/Color4'\n\n/**\n * @public\n */\nexport namespace Schemas {\n export type SchemaType = ISchema\n\n export const Boolean = Bool\n\n export const String = EcsString\n\n export const Float = Float32\n export const Double = Float64\n\n export const Byte = Int8\n export const Short = Int16\n export const Int = Int32\n export const Int64 = iInt64\n\n export const Number = Float32\n\n export const Vector3 = Vector3Schema\n export const Quaternion = QuaternionSchema\n export const Color3 = Color3Schema\n export const Color4 = Color4Schema\n\n export const Entity = EntitySchema\n\n export const Enum = IEnum\n export const Array = IArray\n export const Map = IMap\n export const Optional = IOptional\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0IG9mIHRoZSBtZXNzYWdlIHRoYXQncyBiZWluZyB0cmFuc2ZlcmVkIGJldHdlZW4gY2xpZW50cy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZTxUID0gdW5rbm93bj4gPSB7XG4gIGtleTE6IG51bWJlclxuICBrZXkyOiBudW1iZXJcbiAgdGltZXN0YW1wOiBudW1iZXJcbiAgZGF0YTogVCB8IG51bGxcbn1cblxuLyoqXG4gKiBQYXlsb2FkIHRoYXQgaXRzIGJlaW5nIHN0b3JlZCBpbiB0aGUgc3RhdGUuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFBheWxvYWQ8VCA9IHVua25vd24+ID0ge1xuICB0aW1lc3RhbXA6IG51bWJlclxuICBkYXRhOiBUIHwgbnVsbFxufVxuXG4vKipcbiAqIExvY2FsIHN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFN0YXRlPFQgPSB1bmtub3duPiA9IE1hcDxudW1iZXIsIE1hcDxudW1iZXIsIFBheWxvYWQ8VD4gfCBudWxsPj5cblxuLyoqXG4gKiBDUkRUIHJldHVybiB0eXBlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENSRFQ8VCA9IHVua25vd24+ID0ge1xuICBjcmVhdGVFdmVudChrZXkxOiBudW1iZXIsIGtleTI6IG51bWJlciwgZGF0YTogVCB8IG51bGwpOiBNZXNzYWdlPFQ+XG4gIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2U8VD4pOiBNZXNzYWdlPFQ+XG4gIGdldFN0YXRlKCk6IFN0YXRlPFQ+XG59XG4iXX0=","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crdtProtocol = exports.stateIterator = exports.sameData = void 0;\n__exportStar(require(\"./types\"), exports);\nconst globalBuffer = globalThis.Buffer;\n/**\n * Compare raw data.\n * @internal\n */\nfunction sameData(a, b) {\n // At reference level\n if (a === b)\n return true;\n if (a instanceof Uint8Array && b instanceof Uint8Array) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n if (globalBuffer) {\n if (a instanceof globalBuffer && b instanceof globalBuffer) {\n // Deep level\n return a.equals(b);\n }\n }\n return false;\n}\nexports.sameData = sameData;\n/**\n * State iterator\n * @internal\n */\nfunction* stateIterator(state) {\n for (const [key1, value1] of state.entries()) {\n for (const [key2, value2] of value1.entries()) {\n yield [key1, key2, value2];\n }\n }\n}\nexports.stateIterator = stateIterator;\n/**\n * @public\n * CRDT protocol.\n * Stores the latest state, and decides whenever we have\n * to process and store the new data in case its an update, or\n * to discard and send our local value cause remote it's outdated.\n */\nfunction crdtProtocol() {\n /**\n * Local state where we store the latest lamport timestamp\n * and the raw data value\n * @internal\n */\n const state = new Map();\n /**\n * We should call this fn in order to update the state\n * @internal\n */\n function updateState(key1, key2, data, remoteTimestamp) {\n const key1Value = state.get(key1);\n const timestamp = Math.max(remoteTimestamp, key1Value?.get(key2)?.timestamp || 0);\n if (key1Value) {\n key1Value.set(key2, { timestamp, data });\n }\n else {\n const newKey1Value = new Map();\n newKey1Value.set(key2, { timestamp, data });\n state.set(key1, newKey1Value);\n }\n return { timestamp, data };\n }\n /**\n * Create an event for the specified key and store the new data and\n * lamport timestmap incremented by one in the state.\n * @public\n */\n function createEvent(key1, key2, data) {\n // Increment the timestamp\n const timestamp = (state.get(key1)?.get(key2)?.timestamp || 0) + 1;\n updateState(key1, key2, data, timestamp);\n return { key1, key2, data, timestamp };\n }\n /**\n * Process the received message only if the lamport number recieved is higher\n * than the stored one. If its lower, we spread it to the network to correct the peer.\n * If they are equal, the bigger raw data wins.\n \n * Returns the recieved data if the lamport number was bigger than ours.\n * If it was an outdated message, then we return void\n * @public\n */\n function processMessage(message) {\n const { key1, key2, data, timestamp } = message;\n const current = state.get(key1)?.get(key2);\n // The received message is > than our current value, update our state.\n if (!current || current.timestamp < timestamp) {\n updateState(key1, key2, data, timestamp);\n return message;\n }\n // Outdated Message. Resend our state message through the wire.\n if (current.timestamp > timestamp) {\n return {\n key1,\n key2,\n data: current.data,\n timestamp: current.timestamp\n };\n }\n // Same data, same timestamp. Weirdo echo message.\n if (sameData(current.data, data)) {\n return message;\n }\n // Race condition, same timestamp diff data.\n function compareData(current, data) {\n return current > data;\n }\n if (compareData(current.data, data)) {\n return {\n key1,\n key2,\n data: current.data,\n timestamp: current.timestamp\n };\n }\n updateState(key1, key2, data, timestamp).data;\n return message;\n }\n /**\n * Returns the current state\n * @public\n */\n function getState() {\n return state;\n }\n return {\n createEvent,\n processMessage,\n getState\n };\n}\nexports.crdtProtocol = crdtProtocol;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLDBDQUF1QjtBQUV2QixNQUFNLFlBQVksR0FBSSxVQUFrQixDQUFDLE1BQU0sQ0FBQTtBQUUvQzs7O0dBR0c7QUFDSCxTQUFnQixRQUFRLENBQUksQ0FBSSxFQUFFLENBQUk7SUFDcEMscUJBQXFCO0lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUV4QixJQUFJLENBQUMsWUFBWSxVQUFVLElBQUksQ0FBQyxZQUFZLFVBQVUsRUFBRTtRQUN0RCxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRTtZQUNqQyxPQUFPLEtBQUssQ0FBQTtTQUNiO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQixPQUFPLEtBQUssQ0FBQTthQUNiO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQTtLQUNaO0lBRUQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsSUFBSSxDQUFDLFlBQVksWUFBWSxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUU7WUFDMUQsYUFBYTtZQUNiLE9BQVEsQ0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUM1QjtLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBekJELDRCQXlCQztBQUVEOzs7R0FHRztBQUNILFFBQWUsQ0FBQyxDQUFDLGFBQWEsQ0FDNUIsS0FBZTtJQUVmLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7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QUcsSUFBSyxDQUFBO1FBQ3pCLENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ25DLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixJQUFJO2dCQUNKLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2FBQzdCLENBQUE7U0FDRjtRQUNELFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDN0MsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsUUFBUTtRQUNmLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELE9BQU87UUFDTCxXQUFXO1FBQ1gsY0FBYztRQUNkLFFBQVE7S0FDVCxDQUFBO0FBQ0gsQ0FBQztBQWhIRCxvQ0FnSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDUkRULCBNZXNzYWdlLCBQYXlsb2FkLCBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBnbG9iYWxCdWZmZXIgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLkJ1ZmZlclxuXG4vKipcbiAqIENvbXBhcmUgcmF3IGRhdGEuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbWVEYXRhPFQ+KGE6IFQsIGI6IFQpOiBib29sZWFuIHtcbiAgLy8gQXQgcmVmZXJlbmNlIGxldmVsXG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZVxuXG4gIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBiIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIGlmIChhLmJ5dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoZ2xvYmFsQnVmZmVyKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBnbG9iYWxCdWZmZXIgJiYgYiBpbnN0YW5jZW9mIGdsb2JhbEJ1ZmZlcikge1xuICAgICAgLy8gRGVlcCBsZXZlbFxuICAgICAgcmV0dXJuIChhIGFzIGFueSkuZXF1YWxzKGIpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogU3RhdGUgaXRlcmF0b3JcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24qIHN0YXRlSXRlcmF0b3I8VD4oXG4gIHN0YXRlOiBTdGF0ZTxUPlxuKTogSXRlcmFibGVJdGVyYXRvcjxbbnVtYmVyLCBudW1iZXIsIFBheWxvYWQ8VD4gfCBudWxsXT4ge1xuICBmb3IgKGNvbnN0IFtrZXkxLCB2YWx1ZTFdIG9mIHN0YXRlLmVudHJpZXMoKSkge1xuICAgIGZvciAoY29uc3QgW2tleTIsIHZhbHVlMl0gb2YgdmFsdWUxLmVudHJpZXMoKSkge1xuICAgICAgeWllbGQgW2tleTEsIGtleTIsIHZhbHVlMl1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDUkRUIHByb3RvY29sLlxuICogU3RvcmVzIHRoZSBsYXRlc3Qgc3RhdGUsIGFuZCBkZWNpZGVzIHdoZW5ldmVyIHdlIGhhdmVcbiAqIHRvIHByb2Nlc3MgYW5kIHN0b3JlIHRoZSBuZXcgZGF0YSBpbiBjYXNlIGl0cyBhbiB1cGRhdGUsIG9yXG4gKiB0byBkaXNjYXJkIGFuZCBzZW5kIG91ciBsb2NhbCB2YWx1ZSBjYXVzZSByZW1vdGUgaXQncyBvdXRkYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZHRQcm90b2NvbDxcbiAgVCBleHRlbmRzIG51bWJlciB8IFVpbnQ4QXJyYXkgfCBzdHJpbmdcbj4oKTogQ1JEVDxUPiB7XG4gIC8qKlxuICAgKiBMb2NhbCBzdGF0ZSB3aGVyZSB3ZSBzdG9yZSB0aGUgbGF0ZXN0IGxhbXBvcnQgdGltZXN0YW1wXG4gICAqIGFuZCB0aGUgcmF3IGRhdGEgdmFsdWVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdCBzdGF0ZTogU3RhdGU8VD4gPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogV2Ugc2hvdWxkIGNhbGwgdGhpcyBmbiBpbiBvcmRlciB0byB1cGRhdGUgdGhlIHN0YXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlU3RhdGUoXG4gICAga2V5MTogbnVtYmVyLFxuICAgIGtleTI6IG51bWJlcixcbiAgICBkYXRhOiBUIHwgbnVsbCxcbiAgICByZW1vdGVUaW1lc3RhbXA6IG51bWJlclxuICApOiBQYXlsb2FkPFQ+IHtcbiAgICBjb25zdCBrZXkxVmFsdWUgPSBzdGF0ZS5nZXQoa2V5MSlcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLm1heChcbiAgICAgIHJlbW90ZVRpbWVzdGFtcCxcbiAgICAgIGtleTFWYWx1ZT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMFxuICAgIClcbiAgICBpZiAoa2V5MVZhbHVlKSB7XG4gICAgICBrZXkxVmFsdWUuc2V0KGtleTIsIHsgdGltZXN0YW1wLCBkYXRhIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld0tleTFWYWx1ZSA9IG5ldyBNYXAoKVxuICAgICAgbmV3S2V5MVZhbHVlLnNldChrZXkyLCB7IHRpbWVzdGFtcCwgZGF0YSB9KVxuICAgICAgc3RhdGUuc2V0KGtleTEsIG5ld0tleTFWYWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHsgdGltZXN0YW1wLCBkYXRhIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXZlbnQgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGFuZCBzdG9yZSB0aGUgbmV3IGRhdGEgYW5kXG4gICAqIGxhbXBvcnQgdGltZXN0bWFwIGluY3JlbWVudGVkIGJ5IG9uZSBpbiB0aGUgc3RhdGUuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KGtleTE6IG51bWJlciwga2V5MjogbnVtYmVyLCBkYXRhOiBUIHwgbnVsbCk6IE1lc3NhZ2U8VD4ge1xuICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXN0YW1wXG4gICAgY29uc3QgdGltZXN0YW1wID0gKHN0YXRlLmdldChrZXkxKT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMCkgKyAxXG4gICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKVxuXG4gICAgcmV0dXJuIHsga2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoZSByZWNlaXZlZCBtZXNzYWdlIG9ubHkgaWYgdGhlIGxhbXBvcnQgbnVtYmVyIHJlY2lldmVkIGlzIGhpZ2hlclxuICAgKiB0aGFuIHRoZSBzdG9yZWQgb25lLiBJZiBpdHMgbG93ZXIsIHdlIHNwcmVhZCBpdCB0byB0aGUgbmV0d29yayB0byBjb3JyZWN0IHRoZSBwZWVyLlxuICAgKiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIGJpZ2dlciByYXcgZGF0YSB3aW5zLlxuXG4gICAqIFJldHVybnMgdGhlIHJlY2lldmVkIGRhdGEgaWYgdGhlIGxhbXBvcnQgbnVtYmVyIHdhcyBiaWdnZXIgdGhhbiBvdXJzLlxuICAgKiBJZiBpdCB3YXMgYW4gb3V0ZGF0ZWQgbWVzc2FnZSwgdGhlbiB3ZSByZXR1cm4gdm9pZFxuICAgKiBAcHVibGljXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlPFQ+KTogTWVzc2FnZTxUPiB7XG4gICAgY29uc3QgeyBrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2VcbiAgICBjb25zdCBjdXJyZW50ID0gc3RhdGUuZ2V0KGtleTEpPy5nZXQoa2V5MilcblxuICAgIC8vIFRoZSByZWNlaXZlZCBtZXNzYWdlIGlzID4gdGhhbiBvdXIgY3VycmVudCB2YWx1ZSwgdXBkYXRlIG91ciBzdGF0ZS5cbiAgICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC50aW1lc3RhbXAgPCB0aW1lc3RhbXApIHtcbiAgICAgIHVwZGF0ZVN0YXRlKGtleTEsIGtleTIsIGRhdGEsIHRpbWVzdGFtcClcbiAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgfVxuXG4gICAgLy8gT3V0ZGF0ZWQgTWVzc2FnZS4gUmVzZW5kIG91ciBzdGF0ZSBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmUuXG4gICAgaWYgKGN1cnJlbnQudGltZXN0YW1wID4gdGltZXN0YW1wKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXkxLFxuICAgICAgICBrZXkyLFxuICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEsXG4gICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTYW1lIGRhdGEsIHNhbWUgdGltZXN0YW1wLiBXZWlyZG8gZWNobyBtZXNzYWdlLlxuICAgIGlmIChzYW1lRGF0YShjdXJyZW50LmRhdGEsIGRhdGEpKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZVxuICAgIH1cblxuICAgIC8vIFJhY2UgY29uZGl0aW9uLCBzYW1lIHRpbWVzdGFtcCBkaWZmIGRhdGEuXG4gICAgZnVuY3Rpb24gY29tcGFyZURhdGEoY3VycmVudDogVCB8IG51bGwsIGRhdGE6IFQgfCBudWxsKSB7XG4gICAgICByZXR1cm4gY3VycmVudCEgPiBkYXRhIVxuICAgIH1cblxuICAgIGlmIChjb21wYXJlRGF0YShjdXJyZW50LmRhdGEsIGRhdGEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXkxLFxuICAgICAgICBrZXkyLFxuICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEsXG4gICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKS5kYXRhXG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCk6IFN0YXRlPFQ+IHtcbiAgICByZXR1cm4gc3RhdGVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlRXZlbnQsXG4gICAgcHJvY2Vzc01lc3NhZ2UsXG4gICAgZ2V0U3RhdGVcbiAgfVxufVxuIl19","/**\n * Take the max between currentSize and intendedSize and then plus 1024. Then,\n * find the next nearer multiple of 1024.\n * @param currentSize - number\n * @param intendedSize - number\n * @returns the calculated number\n */\nfunction getNextSize(currentSize: number, intendedSize: number) {\n const minNewSize = Math.max(currentSize, intendedSize) + 1024\n return Math.ceil(minNewSize / 1024) * 1024\n}\n\n/**\n * @param writing - writing option, see object specs.\n * @param reading - reading option, see object specs.\n * @param initialCapacity - Initial capacity of buffer to allocate, ignored if you use writing or reading options\n */\nexport interface CreateByteBufferOptions {\n /**\n * @param buffer - a buffer already allocated to read from there.\n * @param currentOffset - set the cursor where begins to read. Default 0\n * @param length - delimite where the valid data ends. Default: buffer.length\n */\n reading?: {\n buffer: Uint8Array\n length?: number\n currentOffset: number\n }\n\n /**\n * @param buffer - a buffer already allocated to write there.\n * @param currentOffset - set the cursor to not start writing from the begin of it. Default 0\n */\n writing?: {\n buffer: Uint8Array\n currentOffset?: number\n }\n\n initialCapacity?: number\n}\n\nconst defaultInitialCapacity = 10240\n\n/**\n * ByteBuffer is a wrapper of DataView which also adds a read and write offset.\n * Also in a write operation it resizes the buffer is being used if it needs.\n *\n * - Use read and write function to generate or consume data.\n * - Use set and get only if you are sure that you're doing.\n */\nexport function createByteBuffer(\n options: CreateByteBufferOptions = {}\n): ByteBuffer {\n const initialROffset: number = options.reading?.currentOffset || 0\n let initialBuffer: Uint8Array | null = null\n let initialWOffset: number = 0\n\n if (options.writing) {\n initialBuffer = options.writing.buffer\n if (options.writing.currentOffset) {\n initialWOffset = options.writing.currentOffset\n }\n } else if (options.reading) {\n initialBuffer = options.reading.buffer\n initialWOffset = options.reading.length || options.reading.buffer.length\n } else {\n initialBuffer = new Uint8Array(\n options.initialCapacity || defaultInitialCapacity\n )\n }\n\n let buffer: Uint8Array = initialBuffer!\n let view: DataView = new DataView(buffer.buffer, buffer.byteOffset)\n let woffset: number = initialWOffset\n let roffset: number = initialROffset\n\n /**\n * Increement the write offset and resize the buffer if it needs.\n */\n const woAdd = (amount: number) => {\n if (woffset + amount > buffer.byteLength) {\n const newsize = getNextSize(buffer.byteLength, woffset + amount)\n const newBuffer = new Uint8Array(newsize)\n newBuffer.set(buffer)\n buffer = newBuffer\n view = new DataView(buffer.buffer)\n }\n\n woffset += amount\n return woffset - amount\n }\n\n /**\n * Increment the read offset and throw an error if it's trying to read\n * outside the bounds.\n */\n const roAdd = (amount: number) => {\n if (roffset + amount > woffset) {\n throw new Error('Outside of the bounds of writen data.')\n }\n\n roffset += amount\n return roffset - amount\n }\n\n return {\n buffer(): Uint8Array {\n return buffer\n },\n bufferLength(): number {\n return buffer.length\n },\n resetBuffer(): void {\n roffset = 0\n woffset = 0\n },\n currentReadOffset(): number {\n return roffset\n },\n currentWriteOffset(): number {\n return woffset\n },\n incrementReadOffset(amount: number): number {\n return roAdd(amount)\n },\n remainingBytes(): number {\n return woffset - roffset\n },\n readFloat32(): number {\n return view.getFloat32(roAdd(4))\n },\n readFloat64(): number {\n return view.getFloat64(roAdd(8))\n },\n readInt8(): number {\n return view.getInt8(roAdd(1))\n },\n readInt16(): number {\n return view.getInt16(roAdd(2))\n },\n readInt32(): number {\n return view.getInt32(roAdd(4))\n },\n readInt64(): bigint {\n return view.getBigInt64(roAdd(8))\n },\n readUint8(): number {\n return view.getUint8(roAdd(1))\n },\n readUint16(): number {\n return view.getUint16(roAdd(2))\n },\n readUint32(): number {\n return view.getUint32(roAdd(4))\n },\n readUint64(): bigint {\n return view.getBigUint64(roAdd(8))\n },\n readBuffer() {\n const length = view.getUint32(roAdd(4))\n return buffer.subarray(roAdd(length), roAdd(0))\n },\n incrementWriteOffset(amount: number): number {\n return woAdd(amount)\n },\n size(): number {\n return woffset\n },\n toBinary() {\n return buffer.subarray(0, woffset)\n },\n toCopiedBinary() {\n return new Uint8Array(this.toBinary())\n },\n writeBuffer(value: Uint8Array, writeLength: boolean = true) {\n if (writeLength) {\n this.writeUint32(value.byteLength)\n }\n\n const o = woAdd(value.byteLength)\n buffer.set(value, o)\n },\n writeFloat32(value: number): void {\n const o = woAdd(4)\n view.setFloat32(o, value)\n },\n writeFloat64(value: number): void {\n const o = woAdd(8)\n view.setFloat64(o, value)\n },\n writeInt8(value: number): void {\n const o = woAdd(1)\n view.setInt8(o, value)\n },\n writeInt16(value: number): void {\n const o = woAdd(2)\n view.setInt16(o, value)\n },\n writeInt32(value: number): void {\n const o = woAdd(4)\n view.setInt32(o, value)\n },\n writeInt64(value: bigint): void {\n const o = woAdd(8)\n view.setBigInt64(o, value)\n },\n writeUint8(value: number): void {\n const o = woAdd(1)\n view.setUint8(o, value)\n },\n writeUint16(value: number): void {\n const o = woAdd(2)\n view.setUint16(o, value)\n },\n writeUint32(value: number): void {\n const o = woAdd(4)\n view.setUint32(o, value)\n },\n writeUint64(value: bigint): void {\n const o = woAdd(8)\n view.setBigUint64(o, value)\n },\n // Dataview Proxy\n getFloat32(offset: number): number {\n return view.getFloat32(offset)\n },\n getFloat64(offset: number): number {\n return view.getFloat64(offset)\n },\n getInt8(offset: number): number {\n return view.getInt8(offset)\n },\n getInt16(offset: number): number {\n return view.getInt16(offset)\n },\n getInt32(offset: number): number {\n return view.getInt32(offset)\n },\n getInt64(offset: number): bigint {\n return view.getBigInt64(offset)\n },\n getUint8(offset: number): number {\n return view.getUint8(offset)\n },\n getUint16(offset: number): number {\n return view.getUint16(offset)\n },\n getUint32(offset: number): number {\n return view.getUint32(offset)\n },\n getUint64(offset: number): bigint {\n return view.getBigUint64(offset)\n },\n setFloat32(offset: number, value: number): void {\n view.setFloat32(offset, value)\n },\n setFloat64(offset: number, value: number): void {\n view.setFloat64(offset, value)\n },\n setInt8(offset: number, value: number): void {\n view.setInt8(offset, value)\n },\n setInt16(offset: number, value: number): void {\n view.setInt16(offset, value)\n },\n setInt32(offset: number, value: number): void {\n view.setInt32(offset, value)\n },\n setInt64(offset: number, value: bigint): void {\n view.setBigInt64(offset, value)\n },\n setUint8(offset: number, value: number): void {\n view.setUint8(offset, value)\n },\n setUint16(offset: number, value: number): void {\n view.setUint16(offset, value)\n },\n setUint32(offset: number, value: number): void {\n view.setUint32(offset, value)\n },\n setUint64(offset: number, value: bigint): void {\n view.setBigUint64(offset, value)\n }\n }\n}\n\n/**\n * @public\n */\nexport type ByteBuffer = {\n /**\n * @returns The entire current Uint8Array.\n *\n * WARNING: if the buffer grows, the view had changed itself,\n * and the reference will be a invalid one.\n */\n buffer(): Uint8Array\n /**\n * @returns The capacity of the current buffer\n */\n bufferLength(): number\n /**\n * Resets byteBuffer to avoid creating a new one\n */\n resetBuffer(): void\n /**\n * @returns The current read offset\n */\n currentReadOffset(): number\n /**\n * @returns The current write offset\n */\n currentWriteOffset(): number\n /**\n * Reading purpose\n * Returns the previuos offsset size before incrementing\n */\n incrementReadOffset(amount: number): number\n /**\n * @returns How many bytes are available to read.\n */\n remainingBytes(): number\n readFloat32(): number\n readFloat64(): number\n readInt8(): number\n readInt16(): number\n readInt32(): number\n readInt64(): bigint\n readUint8(): number\n readUint16(): number\n readUint32(): number\n readUint64(): bigint\n readBuffer(): Uint8Array\n /**\n * Writing purpose\n */\n /**\n * Increment offset\n * @param amount - how many bytes\n * @returns The offset when this reserving starts.\n */\n incrementWriteOffset(amount: number): number\n /**\n * @returns The total number of bytes writen in the buffer.\n */\n size(): number\n /**\n * Take care using this function, if you modify the data after, the\n * returned subarray will change too. If you'll modify the content of the\n * bytebuffer, maybe you want to use toCopiedBinary()\n *\n * @returns The subarray from 0 to offset as reference.\n */\n toBinary(): Uint8Array\n\n /**\n * Safe copied buffer of the current data of ByteBuffer\n *\n * @returns The subarray from 0 to offset.\n */\n toCopiedBinary(): Uint8Array\n\n writeBuffer(value: Uint8Array, writeLength?: boolean): void\n writeFloat32(value: number): void\n writeFloat64(value: number): void\n writeInt8(value: number): void\n writeInt16(value: number): void\n writeInt32(value: number): void\n writeInt64(value: bigint): void\n writeUint8(value: number): void\n writeUint16(value: number): void\n writeUint32(value: number): void\n writeUint64(value: bigint): void\n // Dataview Proxy\n getFloat32(offset: number): number\n getFloat64(offset: number): number\n getInt8(offset: number): number\n getInt16(offset: number): number\n getInt32(offset: number): number\n getInt64(offset: number): bigint\n getUint8(offset: number): number\n getUint16(offset: number): number\n getUint32(offset: number): number\n getUint64(offset: number): bigint\n setFloat32(offset: number, value: number): void\n setFloat64(offset: number, value: number): void\n setInt8(offset: number, value: number): void\n setInt16(offset: number, value: number): void\n setInt32(offset: number, value: number): void\n setInt64(offset: number, value: bigint): void\n setUint8(offset: number, value: number): void\n setUint16(offset: number, value: number): void\n setUint32(offset: number, value: number): void\n setUint64(offset: number, value: bigint): void\n}\n","/**\n * The wire message is the top-level message that can be packed\n * inside it can contain a data with another structure or protocol\n *\n * Each wire message has three primitive property that it'll never change\n * ---> length uint32 (message size up to 4,294,967,295)\n * ---> version uint32 (for now just a number which is zero)\n * ---> message type uint32\n * The length indicates how many bytes are above self, the version in\n * combination with message type defines the set of handlers that will be\n * available to process the message\n *\n */\n\nimport { ByteBuffer } from './ByteBuffer'\n\nexport namespace WireMessage {\n export type Uint32 = number\n export enum Enum {\n RESERVED = 0,\n\n // Component Operation\n PUT_COMPONENT = 1,\n DELETE_COMPONENT = 2,\n\n MAX_MESSAGE_TYPE\n }\n\n /**\n * @param length - Uint32 the length of all message (including the header)\n * @param type - define the function which handles the data\n */\n export type Header = {\n length: Uint32\n type: Uint32\n }\n\n export const HEADER_LENGTH = 8\n /**\n * Validate if the message incoming is completed\n * @param buf - ByteBuffer\n */\n export function validate(buf: ByteBuffer) {\n const rem = buf.remainingBytes()\n if (rem < HEADER_LENGTH) {\n return false\n }\n\n const messageLength = buf.getUint32(buf.currentReadOffset())\n if (rem < messageLength) {\n return false\n }\n\n return true\n }\n\n export function readHeader(buf: ByteBuffer): Header | null {\n if (!validate(buf)) {\n return null\n }\n\n return {\n length: buf.readUint32(),\n type: buf.readUint32() as Enum\n }\n }\n}\n\nexport default WireMessage\n","import { ComponentDefinition } from '../../engine/component'\nimport { Entity } from '../../engine/entity'\nimport { ByteBuffer } from '../ByteBuffer'\nimport WireMessage from '../wireMessage'\n\nexport namespace ComponentOperation {\n /**\n * @param entity - Uint32 number of the entity\n * @param componentId - Uint32 number of id\n * @param timestamp - Uint64 Lamport timestamp\n * @param data - Uint8[] data of component\n */\n export type IPutComponent = {\n entity: Entity\n componentId: number\n timestamp: number\n data: Uint8Array\n }\n export type IDeleteComponent = {\n entity: Entity\n componentId: number\n timestamp: number\n data?: undefined\n }\n\n export const MESSAGE_HEADER_LENGTH = 20\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n export function write(\n type: WireMessage.Enum,\n entity: Entity,\n timestamp: number,\n componentDefinition: ComponentDefinition,\n buf: ByteBuffer\n ) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(\n WireMessage.HEADER_LENGTH + MESSAGE_HEADER_LENGTH\n )\n\n // write body\n if (type === WireMessage.Enum.PUT_COMPONENT) {\n componentDefinition.writeToByteBuffer(entity, buf)\n }\n const messageLength = buf.size() - startMessageOffset\n\n // Write WireMessage header\n buf.setUint32(startMessageOffset, messageLength)\n buf.setUint32(startMessageOffset + 4, type)\n\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity)\n buf.setUint32(startMessageOffset + 12, componentDefinition._id)\n buf.setUint64(startMessageOffset + 16, BigInt(timestamp))\n buf.setUint32(\n startMessageOffset + 24,\n messageLength - MESSAGE_HEADER_LENGTH - WireMessage.HEADER_LENGTH\n )\n }\n\n export function read(\n buf: ByteBuffer\n ): (WireMessage.Header & (IPutComponent | IDeleteComponent)) | null {\n const header = WireMessage.readHeader(buf)\n\n if (!header) {\n return null\n }\n\n const common = {\n ...header,\n entity: buf.readUint32() as Entity,\n componentId: buf.readInt32(),\n timestamp: Number(buf.readUint64())\n }\n\n if (header.type === WireMessage.Enum.DELETE_COMPONENT) {\n return common\n }\n\n return {\n ...common,\n data: buf.readBuffer()\n }\n }\n}\n","import { Entity } from './entity'\n\nexport namespace EntityUtils {\n /**\n * Range is the first element and the last possible element, they both are included in the interval.\n * [start, end]\n */\n export type EntityRange = readonly [number, number]\n\n export const MAX_ENTITIES = 0xffffffff\n export const DYNAMIC_ENTITIES_START_AT = 100e3\n export const RESERVED_STATIC_ENTITIES = 512\n\n export const RESERVED_ENTITIES_RANGE: EntityRange = [\n 0,\n RESERVED_STATIC_ENTITIES - 1\n ]\n\n export const STATIC_ENTITIES_RANGE: EntityRange = [\n RESERVED_STATIC_ENTITIES,\n DYNAMIC_ENTITIES_START_AT - 1\n ]\n\n export const DYNAMIC_ENTITIES_RANGE: EntityRange = [\n DYNAMIC_ENTITIES_START_AT,\n MAX_ENTITIES\n ]\n\n function isInRange(entity: Entity, range: EntityRange): boolean {\n return entity >= range[0] && entity <= range[1]\n }\n\n export function isDynamicEntity(entity: Entity) {\n return isInRange(entity, DYNAMIC_ENTITIES_RANGE)\n }\n\n export function isStaticEntity(entity: Entity) {\n return isInRange(entity, STATIC_ENTITIES_RANGE)\n }\n\n export function isReservedEntity(entity: Entity) {\n return isInRange(entity, RESERVED_ENTITIES_RANGE)\n }\n}\n\nexport default EntityUtils\n","import { crdtProtocol, Message as CrdtMessage } from '@dcl/crdt'\n\nimport type { IEngine } from '../../engine'\nimport { Entity } from '../../engine/entity'\nimport { createByteBuffer } from '../../serialization/ByteBuffer'\nimport { ComponentOperation as Message } from '../../serialization/crdt/componentOperation'\nimport WireMessage from '../../serialization/wireMessage'\nimport { Transport } from './transports/types'\nimport { ReceiveMessage, TransportMessage } from './types'\n\nexport function crdtSceneSystem(engine: Pick<IEngine, 'getComponent'>) {\n const transports: Transport[] = []\n\n // CRDT Client\n const crdtClient = crdtProtocol<Uint8Array>()\n // Messages that we received at transport.onMessage waiting to be processed\n const receivedMessages: ReceiveMessage[] = []\n // Messages already processed by the engine but that we need to broadcast to other transports.\n const transportMessages: TransportMessage[] = []\n // Map of entities already processed at least once\n\n /**\n *\n * @param transportType tranport id to identiy messages\n * @returns a function to process received messages\n */\n function parseChunkMessage(transportType: string) {\n /**\n * Receives a chunk of binary messages and stores all the valid\n * Component Operation Messages at messages queue\n * @param chunkMessage A chunk of binary messages\n */\n return function parseChunkMessage(chunkMessage: Uint8Array) {\n const buffer = createByteBuffer({\n reading: { buffer: chunkMessage, currentOffset: 0 }\n })\n\n while (WireMessage.validate(buffer)) {\n const offset = buffer.currentReadOffset()\n const message = Message.read(buffer)!\n\n const { type, entity, componentId, data, timestamp } = message\n receivedMessages.push({\n type,\n entity,\n componentId,\n data,\n timestamp,\n transportType,\n messageBuffer: buffer\n .buffer()\n .subarray(offset, buffer.currentReadOffset())\n })\n }\n }\n }\n\n /**\n * Return and clear the messaes queue\n * @returns messages recieved by the transport to process on the next tick\n */\n function getMessages<T = unknown>(value: T[]) {\n const messagesToProcess = Array.from(value)\n value.length = 0\n return messagesToProcess\n }\n\n /**\n * This fn will be called on every tick.\n * Process all the messages queue received by the transport\n */\n function receiveMessages() {\n const messagesToProcess = getMessages(receivedMessages)\n for (const transport of transports) {\n const buffer = createByteBuffer()\n for (const message of messagesToProcess) {\n const { data, timestamp, componentId, entity, type } = message\n const crdtMessage: CrdtMessage<Uint8Array> = {\n key1: entity,\n key2: componentId,\n data: data || null,\n timestamp: timestamp\n }\n const component = engine.getComponent(componentId)\n const current = crdtClient.processMessage(crdtMessage)\n\n // CRDT outdated message. Resend this message through the wire\n if (crdtMessage !== current) {\n const type = component.has(entity)\n ? WireMessage.Enum.PUT_COMPONENT\n : WireMessage.Enum.DELETE_COMPONENT\n Message.write(type, entity, current.timestamp, component, buffer)\n } else {\n // Process CRDT Message\n if (type === WireMessage.Enum.DELETE_COMPONENT) {\n component.deleteFrom(entity)\n } else {\n const opts = {\n reading: { buffer: message.data!, currentOffset: 0 }\n }\n const bb = createByteBuffer(opts)\n\n // Update engine component\n component.upsertFromBinary(message.entity, bb)\n component.clearDirty()\n }\n // Add message to transport queue to be processed by others transports\n transportMessages.push(message)\n }\n }\n\n if (buffer.size()) {\n transport.send(buffer.toBinary())\n }\n }\n }\n\n /**\n * Iterates the dirty map and generates crdt messages to be send\n * @param dirtyMap a map of { entities: [componentId] }\n */\n function createMessages(dirtyMap: Map<Entity, Set<number>>) {\n // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages\n const crdtMessages = getMessages(transportMessages)\n const buffer = createByteBuffer()\n\n for (const [entity, componentsId] of dirtyMap) {\n for (const componentId of componentsId) {\n const component = engine.getComponent(componentId)\n const entityComponent = component.has(entity)\n ? component.toBinary(entity).toBinary()\n : null\n const event = crdtClient.createEvent(\n entity,\n componentId,\n entityComponent\n )\n const offset = buffer.currentWriteOffset()\n const type = component.has(entity)\n ? WireMessage.Enum.PUT_COMPONENT\n : WireMessage.Enum.DELETE_COMPONENT\n const transportMessage: Omit<TransportMessage, 'messageBuffer'> = {\n type,\n componentId,\n entity,\n timestamp: event.timestamp\n }\n if (transports.some((t) => t.filter(transportMessage))) {\n Message.write(type, entity, event.timestamp, component, buffer)\n crdtMessages.push({\n ...transportMessage,\n messageBuffer: buffer\n .buffer()\n .subarray(offset, buffer.currentWriteOffset())\n })\n }\n }\n }\n\n // Send messages to transports\n const transportBuffer = createByteBuffer()\n for (const transport of transports) {\n transportBuffer.resetBuffer()\n for (const message of crdtMessages) {\n if (transport.filter(message)) {\n transportBuffer.writeBuffer(message.messageBuffer, false)\n }\n }\n if (transportBuffer.size()) {\n transport.send(transportBuffer.toBinary())\n } else {\n transport.send(new Uint8Array([]))\n }\n }\n }\n\n function addTransport(transport: Transport) {\n transports.push(transport)\n transport.onmessage = parseChunkMessage(transport.type)\n }\n\n return {\n createMessages,\n receiveMessages,\n addTransport\n }\n}\n","import { ComponentDefinition } from './component'\n\n/**\n * @public\n */\nexport type DeepReadonlyMap<K, V> = ReadonlyMap<\n DeepReadonly<K>,\n DeepReadonly<V>\n>\n/**\n * @public\n */\nexport type DeepReadonlySet<T> = ReadonlySet<DeepReadonly<T>>\n/**\n * @public\n */\nexport type DeepReadonlyObject<T> = {\n readonly [K in keyof T]: DeepReadonly<T[K]>\n}\n/**\n * @public\n */\nexport type ReadonlyPrimitive =\n | number\n | string\n | number[]\n | string[]\n | boolean\n | boolean[]\n\n/**\n * @public\n */\nexport type ReadonlyComponentSchema<\n T extends [ComponentDefinition, ...ComponentDefinition[]]\n> = {\n [K in keyof T]: T[K] extends ComponentDefinition\n ? ReturnType<T[K]['get']>\n : never\n}\n\n/**\n * @public\n */\nexport type DeepReadonly<T> = T extends ReadonlyPrimitive\n ? T\n : T extends Map<infer K, infer V>\n ? DeepReadonlyMap<K, V>\n : T extends Set<infer M>\n ? DeepReadonlySet<M>\n : DeepReadonlyObject<T>\n\n/**\n * @internal\n */\nexport function deepReadonly<T extends Record<string, unknown>>(\n val: T\n): DeepReadonly<T> {\n return Object.freeze({ ...val }) as DeepReadonly<T>\n}\n","import type { ISchema } from '../schemas/ISchema'\nimport { ByteBuffer, createByteBuffer } from '../serialization/ByteBuffer'\nimport { Entity } from './entity'\nimport { deepReadonly, DeepReadonly } from './readonly'\n\n/**\n * @public\n */\nexport type EcsResult<T extends ISchema> = T extends ISchema\n ? ReturnType<T['deserialize']>\n : never\n\n/**\n * @public\n */\nexport type ComponentType<T extends ISchema> = EcsResult<T>\n\n/**\n * @public\n */\nexport type ComponentDefinition<\n T extends ISchema = ISchema<any>,\n ConstructorType = ComponentType<T>\n> = {\n _id: number\n\n /**\n * Return the default value of the current component\n */\n default(): DeepReadonly<ComponentType<T>>\n\n /**\n * Get if the entity has this component\n * @param entity\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.has(myEntity) // return false\n * Transform.create(myEntity)\n * Transform.has(myEntity) // return true\n * ```\n */\n has(entity: Entity): boolean\n\n /**\n * Get the readonly component of the entity (to mutate it, use getMutable instead), throw an error if the entity doesn't have the component.\n * @param entity\n * @return\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity)\n * const transform = Transform.get(myEntity) // return true\n * log(transform.position.x === 0) // log 'true'\n *\n * transform.position.y = 10 // illegal statement, to mutate the component use getMutable\n * ```\n *\n * ```ts\n * const otherEntity = engine.addEntity()\n * Transform.get(otherEntity) // throw an error!!\n * ```\n */\n get(entity: Entity): DeepReadonly<ComponentType<T>>\n\n /**\n * Get the readonly component of the entity (to mutate it, use getMutable instead), or null if the entity doesn't have the component.\n * @param entity\n * @return\n *\n * Example:\n * ```ts\n * const otherEntity = engine.addEntity()\n * log(Transform.get(otherEntity) === null) // log 'true'\n * ```\n */\n getOrNull(entity: Entity): DeepReadonly<ComponentType<T>> | null\n\n /**\n * Add the current component to an entity, throw an error if the component already exists (use `createOrReplace` instead).\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n * @param val The initial value\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity, { ...Transform.default(), position: {x: 4, y: 0, z: 4} }) // ok!\n * Transform.create(myEntity) // throw an error, the `Transform` component already exists in `myEntity`\n * ````\n */\n create(entity: Entity, val?: ConstructorType): ComponentType<T>\n /**\n * Add the current component to an entity or replace the content if the entity already has the component\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n * @param val The initial or new value\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity) // ok!\n * Transform.createOrReplace(myEntity, { ...Transform.default(), position: {x: 4, y: 0, z: 4} }) // ok!\n * ````\n */\n createOrReplace(entity: Entity, val?: ConstructorType): ComponentType<T>\n\n /**\n * Delete the current component to an entity, return null if the entity doesn't have the current component.\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity) // ok!\n * Transform.deleteFrom(myEntity) // return the component\n * Transform.deleteFrom(myEntity) // return null\n * ````\n */\n deleteFrom(entity: Entity): ComponentType<T> | null\n\n /**\n * Get the mutable component of the entity, throw an error if the entity doesn't have the component.\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n *\n * Example:\n * ```ts\n * const myEntity = engine.addEntity()\n * Transform.create(myEntity)\n * Transform.getMutable(myEntity).position = {x: 4, y: 0, z: 4}\n * ````\n */\n getMutable(entity: Entity): ComponentType<T>\n\n /**\n * Get the mutable component of the entity, return null if the entity doesn't have the component.\n * - Internal comment: This method adds the <entity,component> to the list to be reviewed next frame\n * @param entity\n *\n * Example:\n * ```ts\n * const transform = Transform.getMutableOrNull(myEntity)\n * if (transform) {\n * transform.position = {x: 4, y: 0, z: 4}\n * }\n * ````\n */\n getMutableOrNull(entity: Entity): ComponentType<T> | null\n\n /**\n * @internal\n * @param entity\n * @param data\n */\n upsertFromBinary(entity: Entity, data: ByteBuffer): ComponentType<T> | null\n /**\n * @internal\n * @param entity\n * @param data\n */\n updateFromBinary(entity: Entity, data: ByteBuffer): ComponentType<T> | null\n\n // allocates a buffer and returns new buffer\n /**\n * @internal\n * @param entity\n */\n toBinary(entity: Entity): ByteBuffer\n\n // writes to a pre-allocated buffer\n writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void\n\n /**\n * @internal Use engine.getEntitiesWith(Component) instead.\n * Get the iterator to every entity has the component\n */\n iterator(): Iterable<[Entity, ComponentType<T>]>\n\n // Dirty\n /**\n * @internal\n */\n dirtyIterator(): Iterable<Entity>\n /**\n * @internal\n */\n clearDirty(): void\n /**\n * @internal\n */\n isDirty(entity: Entity): boolean\n}\n\nexport function defineComponent<\n T extends ISchema,\n ConstructorType = ComponentType<T>\n>(\n componentId: number,\n spec: T,\n constructorDefault?: ConstructorType\n // meta: { syncFlags }\n): ComponentDefinition<T, ConstructorType> {\n const data = new Map<Entity, ComponentType<T>>()\n const dirtyIterator = new Set<Entity>()\n\n const defaultBuffer = createByteBuffer()\n if (constructorDefault) {\n spec.serialize(constructorDefault, defaultBuffer)\n }\n\n function getDefaultValue() {\n if (constructorDefault) {\n return spec.deserialize(\n createByteBuffer({\n writing: {\n buffer: defaultBuffer.buffer(),\n currentOffset: defaultBuffer.currentWriteOffset()\n }\n })\n )\n } else {\n return spec.create()\n }\n }\n\n function prefillValue(value: ConstructorType) {\n return { ...getDefaultValue(), ...value }\n }\n\n return {\n _id: componentId,\n default: function () {\n return getDefaultValue()\n },\n isDirty: function (entity: Entity): boolean {\n return dirtyIterator.has(entity)\n },\n has: function (entity: Entity): boolean {\n return data.has(entity)\n },\n deleteFrom: function (entity: Entity): ComponentType<T> | null {\n const component = data.get(entity)\n data.delete(entity)\n dirtyIterator.add(entity)\n return component || null\n },\n getOrNull: function (\n entity: Entity\n ): DeepReadonly<ComponentType<T>> | null {\n const component = data.get(entity)\n return component ? deepReadonly(component) : null\n },\n get: function (entity: Entity): DeepReadonly<ComponentType<T>> {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[getFrom] Component ${componentId} for ${entity} not found`\n )\n }\n return deepReadonly(component)\n },\n create: function (\n entity: Entity,\n value?: ConstructorType\n ): ComponentType<T> {\n const component = data.get(entity)\n if (component) {\n throw new Error(\n `[create] Component ${componentId} for ${entity} already exists`\n )\n }\n const usedValue =\n value === undefined ? getDefaultValue() : prefillValue(value)\n data.set(entity, usedValue)\n dirtyIterator.add(entity)\n return usedValue\n },\n createOrReplace: function (\n entity: Entity,\n value?: ConstructorType\n ): ComponentType<T> {\n const usedValue =\n value === undefined ? getDefaultValue() : prefillValue(value)\n data.set(entity, usedValue!)\n dirtyIterator.add(entity)\n return usedValue!\n },\n getMutableOrNull: function (entity: Entity): ComponentType<T> | null {\n const component = data.get(entity)\n if (!component) {\n return null\n }\n dirtyIterator.add(entity)\n return component\n },\n getMutable: function (entity: Entity): ComponentType<T> {\n const component = this.getMutableOrNull(entity)\n if (component === null) {\n throw new Error(\n `[mutable] Component ${componentId} for ${entity} not found`\n )\n }\n return component\n },\n iterator: function* (): Iterable<[Entity, ComponentType<T>]> {\n for (const [entity, component] of data) {\n yield [entity, component]\n }\n },\n dirtyIterator: function* (): Iterable<Entity> {\n for (const entity of dirtyIterator) {\n yield entity\n }\n },\n toBinary(entity: Entity): ByteBuffer {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[toBinary] Component ${componentId} for ${entity} not found`\n )\n }\n\n const writeBuffer = createByteBuffer()\n spec.serialize(component, writeBuffer)\n return writeBuffer\n },\n writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[writeToByteBuffer] Component ${componentId} for ${entity} not found`\n )\n }\n\n spec.serialize(component, buffer)\n },\n updateFromBinary(\n entity: Entity,\n buffer: ByteBuffer\n ): ComponentType<T> | null {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[updateFromBinary] Component ${componentId} for ${entity} not found`\n )\n }\n return this.upsertFromBinary(entity, buffer)\n },\n upsertFromBinary(\n entity: Entity,\n buffer: ByteBuffer\n ): ComponentType<T> | null {\n const newValue = spec.deserialize(buffer)\n data.set(entity, newValue)\n dirtyIterator.add(entity)\n return newValue\n },\n clearDirty: function () {\n dirtyIterator.clear()\n }\n }\n}\n","import { EntityUtils } from './entity-utils'\n\ndeclare const entitySymbol: unique symbol\n/**\n * @public\n */\nexport type Entity = number & { [entitySymbol]: true }\n\nexport function EntityContainer() {\n const staticEntity = Entity(EntityUtils.STATIC_ENTITIES_RANGE)\n const dynamicEntity = Entity(EntityUtils.DYNAMIC_ENTITIES_RANGE)\n return {\n generateEntity(dynamic: boolean = false): Entity {\n if (dynamic) {\n return dynamicEntity.generateEntity()\n } else {\n return staticEntity.generateEntity()\n }\n },\n removeEntity(entity: Entity): boolean {\n return (\n staticEntity.removeEntity(entity) || dynamicEntity.removeEntity(entity)\n )\n },\n entityExists(entity: Entity): boolean {\n return (\n EntityUtils.isReservedEntity(entity) ||\n staticEntity.getExistingEntities().has(entity) ||\n dynamicEntity.getExistingEntities().has(entity)\n )\n },\n getExistingEntities(): Set<Entity> {\n return new Set([\n ...staticEntity.getExistingEntities(),\n ...dynamicEntity.getExistingEntities()\n ])\n }\n }\n}\n\nfunction Entity(range: EntityUtils.EntityRange) {\n function createEntity(entity: number): Entity {\n return entity as Entity\n }\n\n let entityCounter = range[0]\n const usedEntities: Set<Entity> = new Set()\n\n function generateEntity(): Entity {\n if (entityCounter >= range[1]) {\n throw new Error(\n `It fails trying to generate an entity out of range [${range[0]}, ${range[1]}].`\n )\n }\n\n const entity = createEntity(entityCounter)\n entityCounter++\n\n usedEntities.add(entity)\n return entity\n }\n\n function removeEntity(entity: Entity) {\n return usedEntities.delete(entity)\n }\n\n return {\n getExistingEntities() {\n return new Set(usedEntities)\n },\n generateEntity,\n removeEntity\n }\n}\n","/**\n * @public\n */\nexport type SystemFn = (dt: number) => void\n\nexport const SYSTEMS_REGULAR_PRIORITY = 100e3\n\ntype System = {\n fn: SystemFn\n priority: number\n name?: string\n}\n\nexport function SystemContainer() {\n const systems: System[] = []\n\n function sort() {\n systems.sort((a, b) => b.priority - a.priority)\n }\n\n function add(fn: SystemFn, priority: number, name?: string): void {\n if (systems.find((item) => item.fn === fn)) {\n throw new Error('System already added')\n } else if (name && systems.find((item) => item.name === name)) {\n throw new Error('System name already used')\n }\n\n systems.push({\n fn,\n priority,\n name\n })\n sort()\n }\n\n function remove(selector: string | SystemFn) {\n let index = -1\n\n if (typeof selector === 'string') {\n index = systems.findIndex((item) => item.name === selector)\n } else {\n index = systems.findIndex((item) => item.fn === selector)\n }\n\n if (index === -1) {\n return false\n }\n\n systems.splice(index, 1)\n sort()\n return true\n }\n\n return {\n add,\n remove,\n getSystems() {\n return systems\n }\n }\n}\n","import { defineSdkComponents } from '../components'\nimport { Schemas } from '../schemas'\nimport { ISchema } from '../schemas/ISchema'\nimport { Result, Spec } from '../schemas/Map'\nimport { ByteBuffer } from '../serialization/ByteBuffer'\nimport { crdtSceneSystem } from '../systems/crdt'\nimport {\n ComponentDefinition,\n ComponentType,\n defineComponent as defComponent\n} from './component'\nimport { Entity, EntityContainer } from './entity'\nimport { SystemContainer, SYSTEMS_REGULAR_PRIORITY, SystemFn } from './systems'\nimport type { IEngineParams, IEngine } from './types'\nimport { ReadonlyComponentSchema } from './readonly'\n\nexport * from './readonly'\nexport * from './types'\nexport { ComponentType, Entity, ByteBuffer, ComponentDefinition }\n\nfunction preEngine() {\n const entityContainer = EntityContainer()\n const componentsDefinition = new Map<number, ComponentDefinition<any>>()\n const systems = SystemContainer()\n\n function addSystem(\n fn: SystemFn,\n priority: number = SYSTEMS_REGULAR_PRIORITY,\n name?: string\n ) {\n systems.add(fn, priority, name)\n }\n\n function removeSystem(selector: string | SystemFn) {\n return systems.remove(selector)\n }\n\n function addEntity(dynamic: boolean = false) {\n // entitiesCompnonent.set(entity, new Set())\n const entity = entityContainer.generateEntity(dynamic)\n return entity\n }\n\n function entityExists(entity: Entity) {\n return entityContainer.entityExists(entity)\n }\n\n function addDynamicEntity() {\n return addEntity(true)\n }\n\n function removeEntity(entity: Entity) {\n for (const [, component] of componentsDefinition) {\n if (component.has(entity)) {\n component.deleteFrom(entity)\n }\n }\n\n return entityContainer.removeEntity(entity)\n }\n\n function defineComponentFromSchema<\n T extends ISchema,\n ConstructorType = ComponentType<T>\n >(\n spec: T,\n componentId: number,\n constructorDefault?: ConstructorType\n ): ComponentDefinition<T, ConstructorType> {\n if (componentsDefinition.get(componentId)) {\n throw new Error(`Component ${componentId} already declared`)\n }\n const newComponent = defComponent<T, ConstructorType>(\n componentId,\n spec,\n constructorDefault\n )\n componentsDefinition.set(componentId, newComponent)\n return newComponent\n }\n\n function defineComponent<\n T extends Spec,\n ConstructorType = Partial<Result<T>>\n >(\n spec: T,\n componentId: number,\n constructorDefault?: ConstructorType\n ): ComponentDefinition<ISchema<Result<T>>, ConstructorType> {\n return defineComponentFromSchema(\n Schemas.Map(spec),\n componentId,\n constructorDefault\n )\n }\n\n function getComponent<T extends ISchema>(\n componentId: number\n ): ComponentDefinition<T> {\n const component = componentsDefinition.get(componentId)\n if (!component) {\n throw new Error(\n `Component ${componentId} not found. You need to declare the components at the beginnig of the engine declaration`\n )\n }\n return component\n }\n\n function* getEntitiesWith<\n T extends [ComponentDefinition, ...ComponentDefinition[]]\n >(...components: T): Iterable<[Entity, ...ReadonlyComponentSchema<T>]> {\n for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {\n yield [entity, ...groupComp.map((c) => c.get(entity))] as [\n Entity,\n ...ReadonlyComponentSchema<T>\n ]\n }\n }\n\n function* getComponentDefGroup<T extends ComponentDefinition[]>(\n ...args: T\n ): Iterable<[Entity, ...T]> {\n const [firstComponentDef, ...componentDefinitions] = args\n for (const [entity] of firstComponentDef.iterator()) {\n let matches = true\n for (const componentDef of componentDefinitions) {\n if (!componentDef.has(entity)) {\n matches = false\n break\n }\n }\n\n if (matches) {\n yield [entity, ...args]\n }\n }\n }\n\n function getSystems() {\n return systems.getSystems()\n }\n\n function removeComponentDefinition(componentId: number) {\n componentsDefinition.delete(componentId)\n }\n\n return {\n entityExists,\n componentsDefinition,\n addEntity,\n addDynamicEntity,\n removeEntity,\n addSystem,\n getSystems,\n removeSystem,\n defineComponent,\n defineComponentFromSchema,\n getEntitiesWith,\n getComponent,\n removeComponentDefinition\n }\n}\n\n/**\n * @public\n */\nexport function Engine({ transports }: IEngineParams = {}): IEngine {\n const engine = preEngine()\n const crdtSystem = crdtSceneSystem(engine)\n const baseComponents = defineSdkComponents(engine)\n\n if (transports) {\n for (const tranport of transports) {\n crdtSystem.addTransport(tranport)\n }\n }\n\n function update(dt: number) {\n crdtSystem.receiveMessages()\n\n for (const system of engine.getSystems()) {\n system.fn(dt)\n }\n\n // TODO: Perf tip\n // Should we add some dirtyIteratorSet at engine level so we dont have\n // to iterate all the component definitions to get the dirty ones ?\n const dirtySet = new Map<Entity, Set<number>>()\n for (const [componentId, definition] of engine.componentsDefinition) {\n for (const entity of definition.dirtyIterator()) {\n if (!dirtySet.has(entity)) {\n dirtySet.set(entity, new Set())\n }\n dirtySet.get(entity)!.add(componentId)\n }\n }\n crdtSystem.createMessages(dirtySet)\n\n for (const [_componentId, definition] of engine.componentsDefinition) {\n definition.clearDirty()\n }\n }\n\n function* getTreeEntityArray(\n firstEntity: Entity,\n proccesedEntities: Entity[]\n ): Generator<Entity> {\n // This avoid infinite loop when there is a cyclic parenting\n if (proccesedEntities.find((value) => firstEntity === value)) return\n proccesedEntities.push(firstEntity)\n\n for (const [entity, value] of engine.getEntitiesWith(\n baseComponents.Transform\n )) {\n if (value.parent === firstEntity) {\n yield* getTreeEntityArray(entity, proccesedEntities)\n }\n }\n\n yield firstEntity\n }\n\n function removeEntityWithChildren(firstEntity: Entity) {\n for (const entity of getTreeEntityArray(firstEntity, [])) {\n engine.removeEntity(entity)\n }\n }\n\n return {\n addEntity: engine.addEntity,\n addDynamicEntity: engine.addDynamicEntity,\n removeEntity: engine.removeEntity,\n removeEntityWithChildren,\n addSystem: engine.addSystem,\n removeSystem: engine.removeSystem,\n defineComponent: engine.defineComponent,\n defineComponentFromSchema: engine.defineComponentFromSchema,\n getEntitiesWith: engine.getEntitiesWith,\n getComponent: engine.getComponent,\n removeComponentDefinition: engine.removeComponentDefinition,\n update,\n RootEntity: 0 as Entity,\n PlayerEntity: 1 as Entity,\n CameraEntity: 2 as Entity,\n baseComponents,\n entityExists: engine.entityExists,\n addTransport: crdtSystem.addTransport\n }\n}\n","import { IEngine } from '../engine'\n\nexport type Task<T = unknown> = () => Promise<T>\n\nfunction getAndClean<T = unknown>(value: T[]) {\n const messagesToProcess = Array.from(value)\n value.length = 0\n return messagesToProcess\n}\n\nexport function taskSystem(engine: IEngine) {\n const tasks: Task[] = []\n\n async function runTask(task: Task) {\n try {\n const resp = await task()\n return resp\n } catch (e: any) {\n dcl.error(`executeTask: FAILED. ${e.toString()}`, e)\n }\n }\n\n function executeTasks() {\n getAndClean(tasks).forEach((task) => runTask(task))\n }\n\n engine.addSystem(executeTasks)\n\n return {\n executeTask(task: Task) {\n tasks.push(task)\n }\n }\n}\n","/** @public */\nexport enum ECSComponentIDs {\n\tTransform = 1,\n\tAnimator = 1042,\n\tAudioSource = 1020,\n\tAudioStream = 1021,\n\tAvatarAttach = 1073,\n\tAvatarModifierArea = 1070,\n\tAvatarShape = 1080,\n\tBillboard = 1090,\n\tCameraMode = 1072,\n\tCameraModeArea = 1071,\n\tGltfContainer = 1041,\n\tMaterial = 1017,\n\tMeshCollider = 1019,\n\tMeshRenderer = 1018,\n\tNftShape = 1040,\n\tPointerEventsResult = 1063,\n\tPointerHoverFeedback = 1062,\n\tPointerLock = 1074,\n\tRaycast = 1067,\n\tRaycastResult = 1068,\n\tTextShape = 1030,\n\tUiBackground = 1053,\n\tUiText = 1052,\n\tUiTransform = 1050,\n\tVisibilityComponent = 1081,\n}\n","import { TransportMessage } from '../types'\nimport { Transport } from './types'\nimport { ECSComponentIDs } from '../../../components/generated/ids.gen'\n\nconst componentIds = Object.values(ECSComponentIDs)\n .filter((a) => typeof a === 'number')\n .map(Number)\n\nexport function createRendererTransport(): Transport {\n if (typeof dcl === 'undefined') {\n // TODO: replace with new rpc\n throw new Error(\n 'Cannot create createRendererTransport without global dcl object'\n )\n }\n\n async function sendToRenderer(message: Uint8Array) {\n const response = await dcl.callRpc(\n '~system/EngineApi',\n 'crdtSendToRenderer',\n [{ data: new Uint8Array(message) }]\n )\n\n if (response && response.data && response.data.length) {\n if (rendererTransport.onmessage) {\n for (const byteArray of response.data) {\n rendererTransport.onmessage(byteArray)\n }\n }\n }\n }\n\n const type = 'renderer'\n const rendererTransport: Transport = {\n type,\n send(message: Uint8Array): void {\n sendToRenderer(message).catch(dcl.error)\n },\n filter(message: TransportMessage): boolean {\n // Echo message, ignore them\n if (message.transportType === type) {\n return false\n }\n\n // Only send renderer components (Proto Generated)\n if (!componentIds.includes(message.componentId)) {\n return false\n }\n\n return !!message\n }\n }\n\n return rendererTransport\n}\n","import { InputAction } from '../components/generated/pb/decentraland/sdk/components/common/input_action.gen'\nimport { PBPointerEventsResult_PointerCommand } from '../components/generated/pb/decentraland/sdk/components/pointer_events_result.gen'\nimport { PointerEventType } from '../components/generated/pb/decentraland/sdk/components/pointer_hover_feedback.gen'\nimport { Entity, IEngine, IInput } from '../engine'\n\ndeclare const engine: IEngine\n\nexport type EventsSystem = typeof EventsSystem\nexport namespace EventsSystem {\n export type Callback = (\n event: PBPointerEventsResult_PointerCommand\n ) => void | Promise<void>\n\n export type Options = {\n button?: InputAction\n hoverText?: string\n maxDistance?: number\n }\n\n enum EventType {\n Click,\n Down,\n Up\n }\n type EventMapType = Map<EventType, { cb: Callback; opts: Required<Options> }>\n\n const getDefaultOpts = (opts: Options = {}): Required<Options> => ({\n button: InputAction.IA_ANY,\n hoverText: 'Interact',\n maxDistance: 100,\n ...opts\n })\n\n const eventsMap = new Map<Entity, EventMapType>()\n\n function getEvent(entity: Entity) {\n return (\n eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity)!\n )\n }\n\n function setHoverFeedback(\n entity: Entity,\n type: PointerEventType,\n opts: Options\n ) {\n const { PointerHoverFeedback } = engine.baseComponents\n if (opts.hoverText) {\n const pointerEvent =\n PointerHoverFeedback.getMutableOrNull(entity) ||\n PointerHoverFeedback.create(entity)\n\n pointerEvent.pointerEvents.push({\n eventType: type,\n eventInfo: {\n button: opts.button,\n showFeedback: true,\n hoverText: opts.hoverText,\n maxDistance: opts.maxDistance\n }\n })\n }\n }\n\n function removeHoverFeedback(\n entity: Entity,\n type: PointerEventType,\n button: InputAction\n ) {\n const { PointerHoverFeedback } = engine.baseComponents\n const pointerEvent = PointerHoverFeedback.getMutableOrNull(entity)\n if (!pointerEvent) return\n pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter(\n (pointer) =>\n !(pointer.eventInfo?.button === button && pointer.eventType === type)\n )\n }\n\n function getPointerEvent(eventType: EventType) {\n if (eventType === EventType.Up) {\n return PointerEventType.PET_UP\n }\n return PointerEventType.PET_DOWN\n }\n\n function removeEvent(entity: Entity, type: EventType) {\n const event = getEvent(entity)\n const pointerEvent = event.get(type)\n\n if (pointerEvent?.opts.hoverText) {\n removeHoverFeedback(\n entity,\n getPointerEvent(type),\n pointerEvent.opts.button\n )\n }\n\n event.delete(type)\n }\n\n /**\n * @internal\n * Remove the callback for onClick event\n * @param entity Entity where the callback was attached\n */\n export function removeOnClick(entity: Entity) {\n removeEvent(entity, EventType.Click)\n }\n\n /**\n * @public\n * Remove the callback for onPointerDown event\n * @param entity Entity where the callback was attached\n */\n export function removeOnPointerDown(entity: Entity) {\n removeEvent(entity, EventType.Down)\n }\n\n /**\n * @public\n * Remove the callback for onPointerUp event\n * @param entity Entity where the callback was attached\n */\n export function removeOnPointerUp(entity: Entity) {\n removeEvent(entity, EventType.Up)\n }\n\n /**\n * @internal\n * Execute callback when the user clicks the entity.\n * @param entity Entity to attach the callback\n * @param cb Function to execute when onPointerDown fires\n * @param opts Opts to trigger Feedback and Button\n */\n export function onClick(entity: Entity, cb: Callback, opts?: Options) {\n const options = getDefaultOpts(opts)\n // Clear previous event with over feedback included\n removeEvent(entity, EventType.Click)\n\n // Set new event\n getEvent(entity).set(EventType.Click, { cb, opts: options })\n setHoverFeedback(entity, PointerEventType.PET_DOWN, options)\n }\n\n /**\n * @public\n * Execute callback when the user press the InputButton pointing at the entity\n * @param entity Entity to attach the callback\n * @param cb Function to execute when click fires\n * @param opts Opts to trigger Feedback and Button\n */\n export function onPointerDown(entity: Entity, cb: Callback, opts?: Options) {\n const options = getDefaultOpts(opts)\n removeEvent(entity, EventType.Down)\n getEvent(entity).set(EventType.Down, { cb, opts: options })\n setHoverFeedback(entity, PointerEventType.PET_DOWN, options)\n }\n\n /**\n * @public\n * Execute callback when the user releases the InputButton pointing at the entity\n * @param entity Entity to attach the callback\n * @param cb Function to execute when click fires\n * @param opts Opts to trigger Feedback and Button\n */\n export function onPointerUp(entity: Entity, cb: Callback, opts?: Options) {\n const options = getDefaultOpts(opts)\n removeEvent(entity, EventType.Up)\n getEvent(entity).set(EventType.Up, { cb, opts: options })\n setHoverFeedback(entity, PointerEventType.PET_UP, options)\n }\n\n // @internal\n export function update(Input: IInput) {\n return function () {\n for (const [entity, event] of eventsMap) {\n if (!engine.entityExists(entity)) {\n eventsMap.delete(entity)\n continue\n }\n\n for (const [eventType, { cb, opts }] of event) {\n if (eventType === EventType.Click) {\n const command = Input.getClick(opts.button, entity)\n if (command) void cb(command.up)\n }\n\n if (eventType === EventType.Down || eventType === EventType.Up) {\n const command = Input.getInputCommand(\n opts.button,\n getPointerEvent(eventType),\n entity\n )\n if (command) {\n void cb(command)\n }\n }\n }\n }\n }\n }\n}\n","import { InputAction } from '../components/generated/pb/decentraland/sdk/components/common/input_action.gen'\nimport { PointerEventType } from '../components/generated/pb/decentraland/sdk/components/pointer_hover_feedback.gen'\nimport { PBPointerEventsResult_PointerCommand } from '../components/generated/pb/decentraland/sdk/components/pointer_events_result.gen'\nimport { Schemas } from '../schemas'\nimport { Entity } from './entity'\nimport { IEngine } from './types'\n\nconst InputCommands: InputAction[] = [\n InputAction.IA_POINTER,\n InputAction.IA_PRIMARY,\n InputAction.IA_SECONDARY,\n InputAction.IA_FORWARD,\n InputAction.IA_BACKWARD,\n InputAction.IA_RIGHT,\n InputAction.IA_LEFT,\n InputAction.IA_JUMP,\n InputAction.IA_WALK,\n InputAction.IA_ACTION_3,\n InputAction.IA_ACTION_4,\n InputAction.IA_ACTION_5,\n InputAction.IA_ACTION_6\n]\n/**\n * @public\n */\nexport type IInput = {\n /**\n * @internal\n * Check if a click was emmited in the current tick for the input action.\n * This is defined when an UP event is triggered with a previously DOWN state.\n * @param inputAction - the input action to query\n * @param entity - the entity to query, ignore for global events.\n * @returns true if the entity was clicked in the last tick-update\n */\n isClicked: (inputAction: InputAction, entity?: Entity) => boolean\n\n /**\n * @public\n * Check if a pointer event has been emitted in the last tick-update.\n * @param inputAction - the input action to query\n * @param pointerEventType - the pointer event type to query\n * @param entity - the entity to query, ignore for global\n * @returns boolean\n */\n isTriggered: (\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ) => boolean\n\n /**\n * @public\n * Check if an input action is currently being pressed.\n * @param inputAction - the input action to query\n * @returns boolean\n */\n isPressed: (inputAction: InputAction) => boolean\n\n /**\n * @internal\n * Get the click info if a click was emmited in the current tick for the input action.\n * This is defined when an UP event is triggered with a previously DOWN state.\n * @param inputAction - the input action to query\n * @param entity - the entity to query, ignore for global events.\n * @returns the click info or undefined if there is no command in the last tick-update\n */\n getClick: (\n inputAction: InputAction,\n entity?: Entity\n ) => {\n up: PBPointerEventsResult_PointerCommand\n down: PBPointerEventsResult_PointerCommand\n } | null\n\n /**\n * @public\n * Get the input command info if a pointer event has been emitted in the last tick-update.\n * @param inputAction - the input action to query\n * @param pointerEventType - the pointer event type to query\n * @param entity - the entity to query, ignore for global\n * @returns the input command info or undefined if there is no command in the last tick-update\n */\n getInputCommand: (\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ) => PBPointerEventsResult_PointerCommand | null\n}\n\nconst InternalInputStateSchema = {\n timestampLastUpdate: Schemas.Number,\n currentTimestamp: Schemas.Number,\n buttonState: Schemas.Array(\n Schemas.Map({\n value: Schemas.Boolean,\n ts: Schemas.Number\n })\n )\n}\n\nconst InternalInputStateComponentId = 1500\nconst TimestampUpdateSystemPriority = 1 << 20\nconst ButtonStateUpdateSystemPriority = 0\n\nexport function createInput(engine: IEngine): IInput {\n const InternalInputStateComponent = engine.defineComponent(\n InternalInputStateSchema,\n InternalInputStateComponentId\n )\n\n InternalInputStateComponent.create(engine.RootEntity, {\n buttonState: Array.from({ length: InputCommands.length }, () => ({\n ts: 0,\n value: false\n }))\n })\n\n function timestampUpdateSystem() {\n const state = InternalInputStateComponent.get(engine.RootEntity)\n if (state.currentTimestamp > state.timestampLastUpdate) {\n InternalInputStateComponent.getMutable(\n engine.RootEntity\n ).timestampLastUpdate = state.currentTimestamp\n }\n }\n\n function buttonStateUpdateSystem() {\n const component = engine.baseComponents.PointerEventsResult.getOrNull(\n engine.RootEntity\n )\n\n if (!component) return\n\n const state = InternalInputStateComponent.getMutable(engine.RootEntity)\n\n for (const command of component.commands) {\n if (command.timestamp > state.buttonState[command.button].ts) {\n if (command.state === PointerEventType.PET_DOWN) {\n state.buttonState[command.button].value = true\n } else if (command.state === PointerEventType.PET_UP) {\n state.buttonState[command.button].value = false\n }\n }\n }\n }\n\n engine.addSystem(buttonStateUpdateSystem, ButtonStateUpdateSystemPriority)\n engine.addSystem(timestampUpdateSystem, TimestampUpdateSystemPriority)\n\n function getClick(inputAction: InputAction, entity?: Entity) {\n if (inputAction !== InputAction.IA_ANY) {\n return findClick(inputAction, entity)\n }\n\n for (const input of InputCommands) {\n const cmd = findClick(input, entity)\n if (cmd) return cmd\n }\n return null\n }\n\n function findClick(inputAction: InputAction, entity?: Entity) {\n const component = engine.baseComponents.PointerEventsResult.getOrNull(\n engine.RootEntity\n )\n\n if (!component) return null\n const commands = component.commands\n\n // We search the last DOWN command sorted by timestamp\n const down = findLastAction(\n commands,\n PointerEventType.PET_DOWN,\n inputAction,\n entity\n )\n // We search the last UP command sorted by timestamp\n if (!down) return null\n\n const up = findLastAction(\n commands,\n PointerEventType.PET_UP,\n inputAction,\n entity\n )\n\n if (!up) return null\n\n const state = InternalInputStateComponent.get(engine.RootEntity)\n\n // If the DOWN command has happen before the UP commands, it means that that a clicked has happen\n if (\n down.timestamp < up.timestamp &&\n up.timestamp > state.timestampLastUpdate\n ) {\n InternalInputStateComponent.getMutable(\n engine.RootEntity\n ).currentTimestamp = Math.max(up.timestamp, state.currentTimestamp)\n return { up, down }\n }\n return null\n }\n\n function getInputCommand(\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ): PBPointerEventsResult_PointerCommand | null {\n if (inputAction !== InputAction.IA_ANY) {\n return findInputCommand(inputAction, pointerEventType, entity)\n }\n\n for (const input of InputCommands) {\n const cmd = findInputCommand(input, pointerEventType, entity)\n if (cmd) return cmd\n }\n return null\n }\n\n function findInputCommand(\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ): PBPointerEventsResult_PointerCommand | null {\n const component = engine.baseComponents.PointerEventsResult.getOrNull(\n engine.RootEntity\n )\n if (!component) return null\n\n // We search the last pointer Event command sorted by timestamp\n const command = findLastAction(\n component.commands,\n pointerEventType,\n inputAction,\n entity\n )\n if (!command) return null\n\n const state = InternalInputStateComponent.get(engine.RootEntity)\n if (command.timestamp > state.timestampLastUpdate) {\n InternalInputStateComponent.getMutable(\n engine.RootEntity\n ).currentTimestamp = Math.max(command.timestamp, state.currentTimestamp)\n return command\n } else {\n return null\n }\n }\n\n function isClicked(inputAction: InputAction, entity?: Entity) {\n return getClick(inputAction, entity) !== null\n }\n\n function isTriggered(\n inputAction: InputAction,\n pointerEventType: PointerEventType,\n entity?: Entity\n ) {\n return getInputCommand(inputAction, pointerEventType, entity) !== null\n }\n\n function isPressed(inputAction: InputAction) {\n return InternalInputStateComponent.get(engine.RootEntity).buttonState[\n inputAction\n ].value\n }\n\n return {\n // @public\n isPressed,\n // @internal\n getClick,\n // @public\n getInputCommand,\n // @internal\n isClicked,\n // @public\n isTriggered\n }\n}\n\nfunction findLastAction(\n commands: readonly PBPointerEventsResult_PointerCommand[],\n pointerEventType: PointerEventType,\n inputAction: InputAction,\n entity?: Entity\n): PBPointerEventsResult_PointerCommand | undefined {\n let commandToReturn: PBPointerEventsResult_PointerCommand | undefined =\n undefined\n\n for (const command of commands) {\n if (\n command.button === inputAction &&\n command.state === pointerEventType &&\n (!entity || (command.hit && entity === command.hit.entityId))\n ) {\n if (!commandToReturn || command.timestamp >= commandToReturn.timestamp)\n commandToReturn = command\n }\n }\n\n return commandToReturn\n}\n","declare let Promise: any\n\n/**\n * A class serves as a medium between the observable and its observers\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed\n */\nexport class ObserverEventState {\n /**\n * An Observer can set this property to true to prevent subsequent observers of being notified\n */\n public skipNextObservers!: boolean\n\n /**\n * Get the mask value that were used to trigger the event corresponding to this EventState object\n */\n public mask!: number\n\n /**\n * The object that originally notified the event\n */\n public target?: any\n\n /**\n * The current object in the bubbling phase\n */\n public currentTarget?: any\n\n /**\n * This will be populated with the return value of the last function that was executed.\n * If it is the first function in the callback chain it will be the event data.\n */\n public lastReturnValue?: any\n\n /**\n * Create a new EventState\n * @param mask - defines the mask associated with this state\n * @param skipNextObservers - defines a flag which will instruct the observable to skip following observers when set to true\n * @param target - defines the original target of the state\n * @param currentTarget - defines the current target of the state\n */\n constructor(\n mask: number,\n skipNextObservers = false,\n target?: any,\n currentTarget?: any\n ) {\n this.initalize(mask, skipNextObservers, target, currentTarget)\n }\n\n /**\n * Initialize the current event state\n * @param mask - defines the mask associated with this state\n * @param skipNextObservers - defines a flag which will instruct the observable to skip following observers when set to true\n * @param target - defines the original target of the state\n * @param currentTarget - defines the current target of the state\n * @returns the current event state\n */\n public initalize(\n mask: number,\n skipNextObservers = false,\n target?: any,\n currentTarget?: any\n ): ObserverEventState {\n this.mask = mask\n this.skipNextObservers = skipNextObservers\n this.target = target\n this.currentTarget = currentTarget\n return this\n }\n}\n\n/**\n * Represent an Observer registered to a given Observable object.\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed\n */\nexport class Observer<T> {\n /**\n * Gets or sets a property defining that the observer as to be unregistered after the next notification\n */\n public unregisterOnNextCall = false\n\n /** For internal usage */\n public _willBeUnregistered = false\n\n /**\n * Creates a new observer\n * @param callback - defines the callback to call when the observer is notified\n * @param mask - defines the mask of the observer (used to filter notifications)\n * @param scope - defines the current scope used to restore the JS context\n */\n constructor(\n /**\n * Defines the callback to call when the observer is notified\n */\n public callback: (eventData: T, eventState: ObserverEventState) => void,\n /**\n * Defines the mask of the observer (used to filter notifications)\n */\n public mask: number,\n /**\n * Defines the current scope used to restore the JS context\n */\n public scope: any = null\n ) {}\n}\n\n/**\n * The Observable class is a simple implementation of the Observable pattern.\n *\n * There's one slight particularity though: a given Observable can notify its observer using a particular mask value, only the Observers registered with this mask value will be notified.\n * This enable a more fine grained execution without having to rely on multiple different Observable objects.\n * For instance you may have a given Observable that have four different types of notifications: Move (mask = 0x01), Stop (mask = 0x02), Turn Right (mask = 0X04), Turn Left (mask = 0X08).\n * A given observer can register itself with only Move and Stop (mask = 0x03), then it will only be notified when one of these two occurs and will never be for Turn Left/Right.\n *\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed\n */\nexport class Observable<T> {\n private _observers = new Array<Observer<T>>()\n\n private _eventState: ObserverEventState\n\n private _onObserverAdded: null | ((observer: Observer<T>) => void) = null\n\n /**\n * Creates a new observable\n * @param onObserverAdded - defines a callback to call when a new observer is added\n */\n constructor(onObserverAdded?: (observer: Observer<T>) => void) {\n this._eventState = new ObserverEventState(0)\n\n if (onObserverAdded) {\n this._onObserverAdded = onObserverAdded\n }\n }\n\n /**\n * Create a new Observer with the specified callback\n * @param callback - the callback that will be executed for that Observer\n * @param mask - the mask used to filter observers\n * @param insertFirst - if true the callback will be inserted at the first position, hence executed before the others ones. If false (default behavior) the callback will be inserted at the last position, executed after all the others already present.\n * @param scope - optional scope for the callback to be called from\n * @param unregisterOnFirstCall - defines if the observer as to be unregistered after the next notification\n * @returns the new observer created for the callback\n */\n public add(\n callback: (eventData: T, eventState: ObserverEventState) => void,\n mask: number = -1,\n insertFirst = false,\n scope: any = null,\n unregisterOnFirstCall = false\n ): null | Observer<T> {\n if (!callback) {\n return null\n }\n\n const observer = new Observer(callback, mask, scope)\n observer.unregisterOnNextCall = unregisterOnFirstCall\n\n if (insertFirst) {\n this._observers.unshift(observer)\n } else {\n this._observers.push(observer)\n }\n\n if (this._onObserverAdded) {\n this._onObserverAdded(observer)\n }\n\n return observer\n }\n\n /**\n * Create a new Observer with the specified callback and unregisters after the next notification\n * @param callback - the callback that will be executed for that Observer\n * @returns the new observer created for the callback\n */\n public addOnce(\n callback: (eventData: T, eventState: ObserverEventState) => void\n ): null | Observer<T> {\n return this.add(callback, undefined, undefined, undefined, true)\n }\n\n /**\n * Remove an Observer from the Observable object\n * @param observer - the instance of the Observer to remove\n * @returns false if it doesn't belong to this Observable\n */\n public remove(observer: null | Observer<T>): boolean {\n if (!observer) {\n return false\n }\n\n const index = this._observers.indexOf(observer)\n\n if (index !== -1) {\n this._deferUnregister(observer)\n return true\n }\n\n return false\n }\n\n /**\n * Remove a callback from the Observable object\n * @param callback - the callback to remove\n * @param scope - optional scope. If used only the callbacks with this scope will be removed\n * @returns false if it doesn't belong to this Observable\n */\n public removeCallback(\n callback: (eventData: T, eventState: ObserverEventState) => void,\n scope?: any\n ): boolean {\n for (let index = 0; index < this._observers.length; index++) {\n if (\n this._observers[index].callback === callback &&\n (!scope || scope === this._observers[index].scope)\n ) {\n this._deferUnregister(this._observers[index])\n return true\n }\n }\n\n return false\n }\n\n /**\n * Notify all Observers by calling their respective callback with the given data\n * Will return true if all observers were executed, false if an observer set skipNextObservers to true, then prevent the subsequent ones to execute\n * @param eventData - defines the data to send to all observers\n * @param mask - defines the mask of the current notification (observers with incompatible mask (ie mask & observer.mask === 0) will not be notified)\n * @param target - defines the original target of the state\n * @param currentTarget - defines the current target of the state\n * @returns false if the complete observer chain was not processed (because one observer set the skipNextObservers to true)\n */\n public notifyObservers(\n eventData: T,\n mask: number = -1,\n target?: any,\n currentTarget?: any\n ): boolean {\n if (!this._observers.length) {\n return true\n }\n\n const state = this._eventState\n state.mask = mask\n state.target = target\n state.currentTarget = currentTarget\n state.skipNextObservers = false\n state.lastReturnValue = eventData\n\n for (const obs of this._observers) {\n if (obs._willBeUnregistered) {\n continue\n }\n\n if (obs.mask & mask) {\n if (obs.scope) {\n state.lastReturnValue = obs.callback.apply(obs.scope, [\n eventData,\n state\n ])\n } else {\n state.lastReturnValue = obs.callback(eventData, state)\n }\n\n if (obs.unregisterOnNextCall) {\n this._deferUnregister(obs)\n }\n }\n if (state.skipNextObservers) {\n return false\n }\n }\n return true\n }\n\n /**\n * Calling this will execute each callback, expecting it to be a promise or return a value.\n * If at any point in the chain one function fails, the promise will fail and the execution will not continue.\n * This is useful when a chain of events (sometimes async events) is needed to initialize a certain object\n * and it is crucial that all callbacks will be executed.\n * The order of the callbacks is kept, callbacks are not executed parallel.\n *\n * @param eventData - The data to be sent to each callback\n * @param mask - is used to filter observers defaults to -1\n * @param target - defines the callback target (see EventState)\n * @param currentTarget - defines he current object in the bubbling phase\n * @returns will return a Promise than resolves when all callbacks executed successfully.\n */\n public notifyObserversWithPromise(\n eventData: T,\n mask: number = -1,\n target?: any,\n currentTarget?: any\n ): Promise<T> {\n // create an empty promise\n let p: Promise<any> = Promise.resolve(eventData)\n\n // no observers? return this promise.\n if (!this._observers.length) {\n return p\n }\n\n const state = this._eventState\n state.mask = mask\n state.target = target\n state.currentTarget = currentTarget\n state.skipNextObservers = false\n\n // execute one callback after another (not using Promise.all, the order is important)\n this._observers.forEach((obs) => {\n if (state.skipNextObservers) {\n return\n }\n if (obs._willBeUnregistered) {\n return\n }\n if (obs.mask & mask) {\n if (obs.scope) {\n p = p.then((lastReturnedValue) => {\n state.lastReturnValue = lastReturnedValue\n return obs.callback.apply(obs.scope, [eventData, state])\n })\n } else {\n p = p.then((lastReturnedValue) => {\n state.lastReturnValue = lastReturnedValue\n return obs.callback(eventData, state)\n })\n }\n if (obs.unregisterOnNextCall) {\n this._deferUnregister(obs)\n }\n }\n })\n\n // return the eventData\n return p.then(() => {\n return eventData\n })\n }\n\n /**\n * Notify a specific observer\n * @param observer - defines the observer to notify\n * @param eventData - defines the data to be sent to each callback\n * @param mask - is used to filter observers defaults to -1\n */\n public notifyObserver(\n observer: Observer<T>,\n eventData: T,\n mask: number = -1\n ): void {\n const state = this._eventState\n state.mask = mask\n state.skipNextObservers = false\n\n observer.callback(eventData, state)\n }\n\n /**\n * Gets a boolean indicating if the observable has at least one observer\n * @returns true is the Observable has at least one Observer registered\n */\n public hasObservers(): boolean {\n return this._observers.length > 0\n }\n\n /**\n * Clear the list of observers\n */\n public clear(): void {\n this._observers = new Array<Observer<T>>()\n this._onObserverAdded = null\n }\n\n /**\n * Clone the current observable\n * @returns a new observable\n */\n public clone(): Observable<T> {\n const result = new Observable<T>()\n\n result._observers = this._observers.slice(0)\n\n return result\n }\n\n /**\n * Does this observable handles observer registered with a given mask\n * @param mask - defines the mask to be tested\n * @returns whether or not one observer registered with the given mask is handeled\n */\n public hasSpecificMask(mask: number = -1): boolean {\n for (const obs of this._observers) {\n if (obs.mask & mask || obs.mask === mask) {\n return true\n }\n }\n return false\n }\n\n private _deferUnregister(observer: Observer<T>): void {\n observer.unregisterOnNextCall = false\n observer._willBeUnregistered = true\n Promise.resolve().then.bind(Promise.resolve())(async () =>\n this._remove(observer)\n )\n }\n\n // This should only be called when not iterating over _observers to avoid callback skipping.\n // Removes an observer from the _observer Array.\n private _remove(observer: null | Observer<T>): boolean {\n if (!observer) {\n return false\n }\n\n const index = this._observers.indexOf(observer)\n\n if (index !== -1) {\n this._observers.splice(index, 1)\n return true\n }\n\n return false\n }\n}\n","import { Observable } from './temp-fp/Observable'\n\n/**\n * @internal\n * This function generates a callback that is passed to the Observable\n * constructor to subscribe to the events of the DecentralandInterface\n */\nfunction createSubscriber(eventName: keyof IEvents) {\n return () => {\n if (typeof dcl !== 'undefined') dcl.subscribe(eventName)\n }\n}\n\n/**\n * These events are triggered after your character enters the scene.\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onEnterSceneObservable = new Observable<IEvents['onEnterScene']>(\n createSubscriber('onEnterScene')\n)\n\n/** @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed. Use onEnterSceneObservable instead. */\nexport const onEnterScene = onEnterSceneObservable\n\n/**\n * These events are triggered after your character leaves the scene.\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onLeaveSceneObservable = new Observable<IEvents['onLeaveScene']>(\n createSubscriber('onLeaveScene')\n)\n\n/** @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed. Use onLeaveSceneObservable instead. */\nexport const onLeaveScene = onLeaveSceneObservable\n\n/**\n * This event is triggered after all the resources of the scene were loaded (models, textures, etc...)\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onSceneReadyObservable = new Observable<IEvents['sceneStart']>(\n createSubscriber('sceneStart')\n)\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onPlayerExpressionObservable = new Observable<\n IEvents['playerExpression']\n>(createSubscriber('playerExpression'))\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onVideoEvent = new Observable<IEvents['videoEvent']>(\n createSubscriber('videoEvent')\n)\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onProfileChanged = new Observable<IEvents['profileChanged']>(\n createSubscriber('profileChanged')\n)\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onPlayerConnectedObservable = new Observable<\n IEvents['playerConnected']\n>(createSubscriber('playerConnected'))\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onPlayerDisconnectedObservable = new Observable<\n IEvents['playerDisconnected']\n>(createSubscriber('playerDisconnected'))\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onRealmChangedObservable = new Observable<\n IEvents['onRealmChanged']\n>(createSubscriber('onRealmChanged'))\n\n/**\n * @public\n * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.\n */\nexport const onPlayerClickedObservable = new Observable<\n IEvents['playerClicked']\n>(createSubscriber('playerClicked'))\n\n/**\n * @internal\n * This function adds _one_ listener to the onEvent event of dcl interface.\n * Leveraging a switch to route events to the Observable handlers.\n */\nexport function _initEventObservables() {\n if (typeof dcl !== 'undefined') {\n dcl.onEvent((event) => {\n switch (event.type) {\n case 'onEnterScene': {\n onEnterSceneObservable.notifyObservers(\n event.data as IEvents['onEnterScene']\n )\n return\n }\n case 'onLeaveScene': {\n onLeaveSceneObservable.notifyObservers(\n event.data as IEvents['onLeaveScene']\n )\n return\n }\n case 'sceneStart': {\n onSceneReadyObservable.notifyObservers(\n event.data as IEvents['sceneStart']\n )\n return\n }\n case 'playerExpression': {\n onPlayerExpressionObservable.notifyObservers(\n event.data as IEvents['playerExpression']\n )\n return\n }\n case 'videoEvent': {\n const videoData = event.data as IEvents['videoEvent']\n onVideoEvent.notifyObservers(videoData)\n return\n }\n case 'profileChanged': {\n onProfileChanged.notifyObservers(\n event.data as IEvents['profileChanged']\n )\n return\n }\n case 'playerConnected': {\n onPlayerConnectedObservable.notifyObservers(\n event.data as IEvents['playerConnected']\n )\n return\n }\n case 'playerDisconnected': {\n onPlayerDisconnectedObservable.notifyObservers(\n event.data as IEvents['playerDisconnected']\n )\n return\n }\n case 'onRealmChanged': {\n onRealmChangedObservable.notifyObservers(\n event.data as IEvents['onRealmChanged']\n )\n return\n }\n case 'playerClicked': {\n onPlayerClickedObservable.notifyObservers(\n event.data as IEvents['playerClicked']\n )\n return\n }\n }\n })\n }\n}\n","import { IEngine } from '../../engine'\nimport { _initEventObservables } from '../observables'\n\nexport function initializeDcl(engine: IEngine) {\n if (typeof dcl !== 'undefined') {\n dcl.loadModule('~system/EngineApi', {}).catch(dcl.error)\n\n dcl.onUpdate((dt: number) => {\n engine.update(dt)\n })\n\n _initEventObservables()\n\n return {\n log: dcl.log,\n error: dcl.error\n }\n }\n\n return {\n log: voidFn,\n error: voidFn\n }\n}\n\nfunction voidFn() {}\n","/**\n * @alpha * This file initialization is an alpha one. This is based on the old-ecs\n * init and it'll be changing.\n */\n\nimport { Engine } from '../../engine'\nimport { Task, taskSystem } from '../../systems/async-task'\nimport { createRendererTransport } from '../../systems/crdt/transports/rendererTransport'\nimport { EventsSystem } from '../../systems/events'\nimport { createInput } from './../../engine/input'\nimport { initializeDcl } from './dcl'\n\nconst rendererTransport = createRendererTransport()\nexport const engine = Engine({\n transports: [rendererTransport]\n})\n\n// Dcl Interface\nconst dclInterface = initializeDcl(engine)\n/**\n * Log function. Only works in debug mode, otherwise it does nothing.\n * @param args - any loggable parameter\n * @public\n */\nexport const log = dclInterface.log\n\n/**\n * Error function. Prints a console error. Only works in debug mode, otherwise it does nothing.\n * @param error - string or Error object.\n * @param data - any debug information.\n * @public\n */\nexport const error = dclInterface.error\n\n// INPUT Manager\n/**\n * @public\n */\nexport const Input = createInput(engine)\n\n/**\n * @public\n * Execute async task\n */\nexport const executeTask = taskSystem(engine).executeTask\nexport type { Task }\nexport { EventsSystem }\nengine.addSystem(EventsSystem.update(Input))\n","import { IEngine } from '../engine/types'\n\n/**\n * Transform parenting: cyclic dependency checker\n * It checks only in modified Transforms\n *\n * Add this system with:\n * ```ts\n * engine.addSystem(cyclicParentingChecker(engine))\n * ````\n * And then it will check every tick the parenting.\n *\n * @public\n *\n * @params engine\n * @returns a system\n */\nexport function cyclicParentingChecker(engine: IEngine) {\n const Transform = engine.baseComponents.Transform\n return () => {\n for (const entity of Transform.dirtyIterator()) {\n let transform = Transform.getOrNull(entity)\n while (transform && transform.parent) {\n if (transform.parent === entity) {\n dcl.error(`There is a cyclic parent with entity ${entity}`)\n break\n } else {\n transform = Transform.getOrNull(transform.parent)\n }\n }\n }\n }\n}\n","import { engine } from '../../runtime/initialization'\n\n/** @public */\nexport const Transform = engine.baseComponents.Transform\n/** @public */\nexport const Animator = engine.baseComponents.Animator\n/** @public */\nexport const AudioSource = engine.baseComponents.AudioSource\n/** @public */\nexport const AudioStream = engine.baseComponents.AudioStream\n/** @public */\nexport const AvatarAttach = engine.baseComponents.AvatarAttach\n/** @public */\nexport const AvatarModifierArea = engine.baseComponents.AvatarModifierArea\n/** @public */\nexport const AvatarShape = engine.baseComponents.AvatarShape\n/** @public */\nexport const Billboard = engine.baseComponents.Billboard\n/** @public */\nexport const CameraMode = engine.baseComponents.CameraMode\n/** @public */\nexport const CameraModeArea = engine.baseComponents.CameraModeArea\n/** @public */\nexport const GltfContainer = engine.baseComponents.GltfContainer\n/** @public */\nexport const Material = engine.baseComponents.Material\n/** @public */\nexport const MeshCollider = engine.baseComponents.MeshCollider\n/** @public */\nexport const MeshRenderer = engine.baseComponents.MeshRenderer\n/** @public */\nexport const NftShape = engine.baseComponents.NftShape\n/** @public */\nexport const PointerEventsResult = engine.baseComponents.PointerEventsResult\n/** @public */\nexport const PointerHoverFeedback = engine.baseComponents.PointerHoverFeedback\n/** @public */\nexport const PointerLock = engine.baseComponents.PointerLock\n/** @public */\nexport const Raycast = engine.baseComponents.Raycast\n/** @public */\nexport const RaycastResult = engine.baseComponents.RaycastResult\n/** @public */\nexport const TextShape = engine.baseComponents.TextShape\n/** @public */\nexport const UiBackground = engine.baseComponents.UiBackground\n/** @public */\nexport const UiText = engine.baseComponents.UiText\n/** @public */\nexport const UiTransform = engine.baseComponents.UiTransform\n/** @public */\nexport const VisibilityComponent = engine.baseComponents.VisibilityComponent\n","import { engine } from '../../runtime/initialization'\n/** @public */\nexport namespace Components {\n\t/** @public */\n\texport const Transform = engine.baseComponents.Transform\n\t/** @public */\n\texport const Animator = engine.baseComponents.Animator\n\t/** @public */\n\texport const AudioSource = engine.baseComponents.AudioSource\n\t/** @public */\n\texport const AudioStream = engine.baseComponents.AudioStream\n\t/** @public */\n\texport const AvatarAttach = engine.baseComponents.AvatarAttach\n\t/** @public */\n\texport const AvatarModifierArea = engine.baseComponents.AvatarModifierArea\n\t/** @public */\n\texport const AvatarShape = engine.baseComponents.AvatarShape\n\t/** @public */\n\texport const Billboard = engine.baseComponents.Billboard\n\t/** @public */\n\texport const CameraMode = engine.baseComponents.CameraMode\n\t/** @public */\n\texport const CameraModeArea = engine.baseComponents.CameraModeArea\n\t/** @public */\n\texport const GltfContainer = engine.baseComponents.GltfContainer\n\t/** @public */\n\texport const Material = engine.baseComponents.Material\n\t/** @public */\n\texport const MeshCollider = engine.baseComponents.MeshCollider\n\t/** @public */\n\texport const MeshRenderer = engine.baseComponents.MeshRenderer\n\t/** @public */\n\texport const NftShape = engine.baseComponents.NftShape\n\t/** @public */\n\texport const PointerEventsResult = engine.baseComponents.PointerEventsResult\n\t/** @public */\n\texport const PointerHoverFeedback = engine.baseComponents.PointerHoverFeedback\n\t/** @public */\n\texport const PointerLock = engine.baseComponents.PointerLock\n\t/** @public */\n\texport const Raycast = engine.baseComponents.Raycast\n\t/** @public */\n\texport const RaycastResult = engine.baseComponents.RaycastResult\n\t/** @public */\n\texport const TextShape = engine.baseComponents.TextShape\n\t/** @public */\n\texport const UiBackground = engine.baseComponents.UiBackground\n\t/** @public */\n\texport const UiText = engine.baseComponents.UiText\n\t/** @public */\n\texport const UiTransform = engine.baseComponents.UiTransform\n\t/** @public */\n\texport const VisibilityComponent = engine.baseComponents.VisibilityComponent\n}\n","import { Observable, Observer } from './temp-fp/Observable'\n\nlet communicationsController: ModuleDescriptor | null = null\nlet communicationsControllerPromise: PromiseLike<ModuleDescriptor> | null = null\n\nlet _messageObserver: null | Observable<IEvents['comms']> = null\n\n/**\n * @internal\n */\nexport function getMessageObserver() {\n if (!_messageObserver) {\n _messageObserver = new Observable<IEvents['comms']>()\n }\n return _messageObserver\n}\n\nfunction ensureCommunicationsController() {\n if (!communicationsControllerPromise) {\n communicationsControllerPromise = dcl.loadModule(\n '~system/CommunicationsController',\n {}\n )\n\n void communicationsControllerPromise.then(($) => {\n communicationsController = $\n })\n\n const observer = getMessageObserver()\n\n dcl.subscribe('comms')\n dcl.onEvent((event) => {\n if (event.type === 'comms') {\n observer.notifyObservers(event.data as any)\n }\n })\n }\n return communicationsControllerPromise\n}\n\n/**\n * @public\n * @deprecated\n */\nexport class MessageBus {\n private messageQueue: string[] = []\n private connected = false\n private flushing = false\n\n constructor() {\n void ensureCommunicationsController().then(() => {\n this.connected = true\n this.flush()\n })\n }\n\n on(\n message: string,\n callback: (value: any, sender: string) => void\n ): Observer<IEvents['comms']> {\n return getMessageObserver().add((e) => {\n try {\n const m = JSON.parse(e.message)\n\n if (m.message === message) {\n callback(m.payload, e.sender)\n }\n } catch (e) {\n dcl.error(\n 'Error parsing comms message ' + ((e as Error).message || ''),\n e\n )\n }\n })!\n }\n\n // @internal\n sendRaw(message: string) {\n this.messageQueue.push(message)\n\n if (this.connected) {\n this.flush()\n }\n }\n\n emit(message: string, payload: Record<any, any>) {\n const messageToSend = JSON.stringify({ message, payload })\n this.sendRaw(messageToSend)\n getMessageObserver().notifyObservers({\n message: messageToSend,\n sender: 'self'\n })\n }\n\n private flush() {\n if (this.messageQueue.length === 0) return\n if (!this.connected) return\n if (!communicationsController) return\n if (this.flushing) return\n\n const message = this.messageQueue.shift()\n\n this.flushing = true\n\n dcl.callRpc(communicationsController.rpcHandle, 'send', [message]).then(\n (_) => {\n this.flushing = false\n this.flush()\n },\n (_) => {\n this.flushing = false\n }\n )\n }\n}\n","/* eslint-disable */\nconst protobufPackage = 'decentraland.sdk.components.common'\n\nexport const enum CameraType {\n CT_FIRST_PERSON = 0,\n CT_THIRD_PERSON = 1\n}\n","/* eslint-disable */\nconst protobufPackage = 'decentraland.sdk.components.common'\n\nexport const enum InputAction {\n IA_POINTER = 0,\n IA_PRIMARY = 1,\n IA_SECONDARY = 2,\n IA_ANY = 3,\n IA_FORWARD = 4,\n IA_BACKWARD = 5,\n IA_RIGHT = 6,\n IA_LEFT = 7,\n IA_JUMP = 8,\n IA_WALK = 9,\n IA_ACTION_3 = 10,\n IA_ACTION_4 = 11,\n IA_ACTION_5 = 12,\n IA_ACTION_6 = 13\n}\n","/* eslint-disable */\nconst protobufPackage = 'decentraland.sdk.components.common'\n\nexport const enum TextAlignMode {\n TAM_TOP_LEFT = 0,\n TAM_TOP_CENTER = 1,\n TAM_TOP_RIGHT = 2,\n TAM_MIDDLE_LEFT = 3,\n TAM_MIDDLE_CENTER = 4,\n TAM_MIDDLE_RIGHT = 5,\n TAM_BOTTOM_LEFT = 6,\n TAM_BOTTOM_CENTER = 7,\n TAM_BOTTOM_RIGHT = 8\n}\n\nexport const enum Font {\n F_LIBERATION_SANS = 0,\n F_SANS_SERIF = 1\n}\n"],"names":["Object","defineProperty","types","value","RAD2DEG","DEG2RAD","Epsilon","ToLinearSpace","ToGammaSpace","Math","PI","exports","Scalar","sign","_value","isNaN","clamp","min","max","repeat","length","floor","deltaAngle","current","target","num","moveTowards","maxDelta","result","abs","TwoPi","withinEpsilon","a","b","epsilon","toHex","i","str","toString","toUpperCase","log2","log","LOG2E","normalize","denormalize","normalized","pingPong","tx","t","smoothStep","from","to","moveTowardsAngle","lerp","start","end","amount","lerpAngle","inverseLerp","hermite","value1","tangent1","value2","tangent2","squared","cubed","randomRange","random","rangeToPercent","percentToRange","percent","normalizeRadians","angle","Vector3","types_1","require$$0","Quaternion_1","require$$1","Scalar_1","require$$2","create","x","y","z","add","vector1","vector2","copyFrom","source","dest","copyFromFloats","clone","fromArray","array","offset","fromArrayToRef","vector","sqrt","scaleToRef","scale","normalizeFromLength","len","normalizeFromLengthToRef","dot","left","right","applyMatrix4ToRef","matrix","m","_m","w","rotateToRef","q","qx","qy","qz","qw","ix","iy","iz","iw","lerpToRef","crossToRef","transformCoordinatesToRef","transformation","transformCoordinatesFromFloatsToRef","rx","ry","rz","rw","transformNormalToRef","transformNormalFromFloatsToRef","clampToRef","distanceSquared","rotationFromAxisToRef","axis1","axis2","axis3","quat","Quaternion","fromAxisToRotationQuaternionToRef","toEulerAngles","multiplyToRef","multiplyByFloatsToRef","maximizeInPlaceFromFloatsToRef","minimizeInPlaceFromFloatsToRef","Zero","isNonUniform","absX","addToRef","subtract","subtractToRef","subtractFromFloatsToRef","negate","getClipFactor","vector0","axis","size","d0","getAngleBetweenVectors","normal","v0","v1","v0v1dot","n","acos","fromFloatArray","fromFloatArrayToRef","lengthSquared","normalizeToRef","applyMatrix4","rotate","cross","transformCoordinates","transformNormal","catmullRom","value3","value4","v","part1","part2","part3","part4","minimize","maximize","distance","center","rotationFromAxis","rotation","getHashCode","hash","equals","equalsWithEpsilon","equalsToFloats","multiply","multiplyByFloats","divide","divideToRef","fract","One","Up","Down","Forward","Backward","Right","Left","Random","Plane","Vector3_1","Matrix_1","c","d","fromPoints","_point1","_point2","_point3","romPositionAndNormal","origin","signedDistanceToPlaneFromPositionAndNormal","point","asArray","plane","_plane","norm","magnitude","transform","transposedMatrix","Matrix","transposeToRef","dotCoordinate","copyFromPoints","point1","point2","point3","x1","y1","z1","x2","y2","z2","yz","xz","xy","pyth","invPyth","isFrontFacingTo","direction","signedDistanceTo","Plane_1","self","_updateFlagSeed","_identityReadonly","newMatrix","updateFlag","isIdentity","isIdentity3x2","_isIdentityDirty","_isIdentity3x2Dirty","_updateIdentityStatus","index","_markAsUpdated","fromValuesToRef","initialM11","initialM12","initialM13","initialM14","initialM21","initialM22","initialM23","initialM24","initialM31","initialM32","initialM33","initialM34","initialM41","initialM42","initialM43","initialM44","fromValues","composeToRef","translation","tmpMatrix","scalingToRef","fromQuaternionToRef","setTranslation","Identity","identity","rotationXToRef","s","sin","cos","rotationYToRef","rotationZToRef","rotationAxisToRef","_axis","c1","rotationYawPitchRollToRef","yaw","pitch","roll","quaternionResult","fromRotationYawPitchRollToRef","translationToRef","startValue","endValue","gradient","decomposeLerpToRef","startScale","startRotation","startTranslation","decompose","endScale","endRotation","endTranslation","resultScale","resultRotation","slerpToRef","resultTranslation","lookAtLHToRef","eye","up","xAxis","yAxis","zAxis","xSquareLength","ex","ey","ez","lookAtRHToRef","orthoLHToRef","width","height","znear","zfar","orthoOffCenterLHToRef","bottom","top","orthoOffCenterRHToRef","perspectiveFovLHToRef","fov","aspect","isVerticalFovFixed","f","tan","perspectiveFovRHToRef","rm","mm","reflectionToRef","temp","temp2","temp3","xx","yy","zz","zw","zx","yw","xw","determinant","m00","m01","m02","m03","m10","m11","m12","m13","m20","m21","m22","m23","m30","m31","m32","m33","det_22_33","det_21_33","det_21_32","det_20_33","det_20_32","det_20_31","other","invertToRef","copy","cofact_00","cofact_01","cofact_02","cofact_03","det","detInv","det_12_33","det_11_33","det_11_32","det_10_33","det_10_32","det_10_31","det_12_23","det_11_23","det_11_22","det_10_23","det_10_22","det_10_21","setTranslationFromFloats","vector3","copyToArray","arrayDest","offsetDest","multiplyToArray","otherM","tm0","tm1","tm2","tm3","tm4","tm5","tm6","tm7","tm8","tm9","tm10","tm11","tm12","tm13","tm14","tm15","om0","om1","om2","om3","om4","om5","om6","om7","om8","om9","om10","om11","om12","om13","om14","om15","usedScale","sx","sy","sz","fromRotationMatrixToRef","getRotationMatrixToRef","isIdentityDirty","isIdentity3x2Dirty","IdentityReadonly","fromFloatArrayToRefScaled","compose","IdentityToRef","zero","RotationX","rotationY","rotationZ","rotationAxis","rotationYawPitchRoll","scaling","decomposeLerp","LookAtLH","lookAtRH","orthoLH","OrthoOffCenterLH","orthoOffCenterRH","perspectiveLH","perspectiveFovLH","PerspectiveFovRH","perspectiveFovWebVRToRef","rightHanded","rightHandedFactor","upTan","upDegrees","downTan","downDegrees","leftTan","leftDegrees","rightTan","rightDegrees","xScale","yScale","GetAsMatrix2x2","GetAsMatrix3x3","transpose","reflection","fromXYZAxesToRef","xaxis","yaxis","zaxis","isIdentityUpdate","isIdentityAs3x2Update","toArray","reset","addToSelf","invert","addAtIndex","multiplyAtIndex","getTranslation","getTranslationToRef","removeRotationAndScaling","om","setRowFromFloats","scaleAndAddToRef","normalMatrixToRef","ref","tmp","getRotationMatrix","toggleModelMatrixHandInPlace","toggleProjectionMatrixHandInPlace","require$$3","fromRotationYawPitchRoll","halfPitch","halfYaw","halfRoll","c2","c3","s1","s2","s3","quat1","quat2","dotVal","qLength","slerp","q1","rotMat","fromLookAtToRef","position","worldUp","q2","fromEulerDegrees","rotateTowards","maxDegreesDelta","lookRotation","forward","forwardNew","upNew","num8","quaternion","num7","num4","num6","num3","num5","num2","fromToRotation","out","unit","test","atan2","asin","data","trace","flag","fromAngleAxis","degrees","radians","a2","fromAxisToRotationQuaternion","fromLookAt","Color4","r","g","Clear","toLinearSpaceToRef","pow","toGammaSpaceToRef","convertedColor","fromHexString","hex","substring","parseInt","fromInts","Red","Green","Blue","Black","White","Purple","Magenta","Yellow","Gray","Teal","fromColor3","color3","alpha","checkColors4","colors","count","colors4","newIndex","ret","color","set","toHexString","intR","intG","intB","intA","toLinearSpace","toGammaSpace","Color3","Color4_1","toColor4","Array","toLuminance","otherColor","equalsFloats","__createBinding","this","o","k","k2","undefined","enumerable","get","__exportStar","p","prototype","hasOwnProperty","call","require$$4","require$$5","require$$6","aspromise","fn","ctx","params","arguments","pending","Promise","resolve","reject","err","apply","base64","string","charAt","ceil","b64","s64","encode","buffer","parts","chunk","j","push","String","fromCharCode","slice","join","invalidEncoding","decode","charCodeAt","Error","EventEmitter","_listeners","eventemitter","on","evt","off","listeners","splice","emit","args","factory","Float32Array","f32","f8b","Uint8Array","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","round","exponent","LN2","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","bind","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","float","inquire","moduleName","mod","eval","replace","keys","e","inquire_1","utf8","read","write","pool_1","alloc","SIZE","MAX","slab","longbits","LongBits","util","toNumber","zzEncode","zzDecode","zeroHash","fromNumber","isString","Long","fromString","low","high","unsigned","toLong","Boolean","fromHash","toHash","mask","part0","merge","dst","src","ifNotSet","newError","name","CustomError","message","properties","captureStackTrace","stack","constructor","asPromise","pool","require$$7","isNode","global","process","versions","node","window","emptyArray","freeze","emptyObject","isInteger","Number","isFinite","isObject","isset","isSet","obj","prop","isArray","Buffer","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","bits","fromBits","lcFirst","toLowerCase","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","enums","bytes","json","_configure","encoding","allocUnsafe","writer","Writer","BufferWriter","Op","next","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","subarray","_push","uint32","int32","sint32","uint64","int64","sint64","bool","fixed32","sfixed32","fixed64","sfixed64","double","writeBytes","fork","ldelim","finish","BufferWriter_","writer_buffer","writeStringBuffer","writeBytesBuffer","byteLength","reader","Reader","BufferReader","indexOutOfRange","writeLength","RangeError","create_array","isBuffer","readLongVarint","readFixed32_end","readFixed64","_slice","skip","skipType","wireType","BufferReader_","reader_buffer","utf8Slice","service","Service","rpcImpl","requestDelimited","responseDelimited","TypeError","rpcCall","method","requestCtor","responseCtor","request","callback","response","setTimeout","endedByRPC","roots","protobuf","configure","build","rpc","minimalExports","requireMinimal","createBasePBAnimator","PBAnimator","_m0","PBAnimationState","input","tag","createBasePBAnimationState","clip","playing","weight","speed","loop","shouldReset","COMPONENT_ID","AnimatorSchema","serialize","builder","writeBuffer","deserialize","remainingBytes","createBasePBAudioSource","volume","audioClipUrl","PBAudioSource","AudioSourceSchema","createBasePBAudioStream","url","PBAudioStream","AudioStreamSchema","AvatarAnchorPointType","createBasePBAvatarAttach","avatarId","anchorPointId","PBAvatarAttach","AvatarAttachSchema","createBasePosition","Position","createBaseVector3","createBaseVector2","Vector2","AvatarModifierType","createBasePBAvatarModifierArea","area","excludeIds","modifiers","PBAvatarModifierArea","end2","AvatarModifierAreaSchema","long","wasm","WebAssembly","Instance","Module","isLong","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","radix","indexOf","radixToPower","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtrahend","multiplier","get_high","b00","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","delta","approxRes","approxRem","modulo","rem_u","rem_s","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","longExports","requireLong","createBaseColor3","createBaseColor4","createBasePBAvatarShape","id","bodyShape","skinColor","hairColor","eyeColor","expressionTriggerId","expressionTriggerTimestamp","talking","wearables","emotes","PBAvatarShape","longToNumber","globalThis","MAX_SAFE_INTEGER","AvatarShapeSchema","BillboardMode","createBasePBBillboard","billboardMode","oppositeDirection","PBBillboard","BillboardSchema","createBasePBCameraMode","mode","PBCameraMode","CameraModeSchema","createBasePBCameraModeArea","PBCameraModeArea","CameraModeAreaSchema","createBasePBGltfContainer","PBGltfContainer","GltfContainerSchema","TextureWrapMode","TextureFilterMode","createBaseTexture","wrapMode","filterMode","Texture","createBaseAvatarTexture","userId","AvatarTexture","createBaseTextureUnion","tex","TextureUnion","$case","texture","avatarTexture","MaterialTransparencyMode","createBasePBMaterial","material","PBMaterial","PBMaterial_UnlitMaterial","unlit","PBMaterial_PbrMaterial","pbr","createBasePBMaterial_UnlitMaterial","alphaTest","castShadows","createBasePBMaterial_PbrMaterial","alphaTexture","emissiveTexture","bumpTexture","albedoColor","emissiveColor","reflectivityColor","transparencyMode","metallic","roughness","glossiness","specularIntensity","emissiveIntensity","directIntensity","MaterialSchema","ColliderLayer","createBasePBMeshCollider","collisionMask","mesh","PBMeshCollider","PBMeshCollider_BoxMesh","box","PBMeshCollider_SphereMesh","sphere","PBMeshCollider_CylinderMesh","cylinder","PBMeshCollider_PlaneMesh","createBasePBMeshCollider_BoxMesh","_","createBasePBMeshCollider_CylinderMesh","radiusTop","radiusBottom","createBasePBMeshCollider_PlaneMesh","createBasePBMeshCollider_SphereMesh","MeshColliderSchema","createBasePBMeshRenderer","PBMeshRenderer","PBMeshRenderer_BoxMesh","PBMeshRenderer_SphereMesh","PBMeshRenderer_CylinderMesh","PBMeshRenderer_PlaneMesh","createBasePBMeshRenderer_BoxMesh","uvs","createBasePBMeshRenderer_CylinderMesh","createBasePBMeshRenderer_PlaneMesh","createBasePBMeshRenderer_SphereMesh","MeshRendererSchema","NftFrameType","createBasePBNftShape","style","PBNftShape","NftShapeSchema","createBasePBRaycastResult","timestamp","hits","PBRaycastResult","RaycastHit","createBaseRaycastHit","normalHit","meshName","entityId","createBasePBPointerEventsResult","commands","PBPointerEventsResult","PBPointerEventsResult_PointerCommand","createBasePBPointerEventsResult_PointerCommand","button","hit","state","analog","PointerEventsResultSchema","PointerEventType","createBasePBPointerHoverFeedback","pointerEvents","PBPointerHoverFeedback","PBPointerHoverFeedback_Entry","createBasePBPointerHoverFeedback_Info","hoverText","maxDistance","showFeedback","PBPointerHoverFeedback_Info","createBasePBPointerHoverFeedback_Entry","eventType","eventInfo","PointerHoverFeedbackSchema","createBasePBPointerLock","isPointerLocked","PBPointerLock","PointerLockSchema","RaycastQueryType","createBasePBRaycast","queryType","PBRaycast","RaycastSchema","RaycastResultSchema","createBasePBTextShape","text","font","fontSize","fontAutoSize","textAlign","paddingTop","paddingRight","paddingBottom","paddingLeft","lineSpacing","lineCount","textWrapping","shadowBlur","shadowOffsetX","shadowOffsetY","outlineWidth","shadowColor","outlineColor","textColor","PBTextShape","TextShapeSchema","createBasePBUiBackground","backgroundColor","PBUiBackground","UiBackgroundSchema","createBasePBUiText","PBUiText","UiTextSchema","YGPositionType","YGAlign","YGUnit","YGFlexDirection","YGWrap","YGJustify","YGOverflow","YGDisplay","YGEdge","createBasePBUiTransform","parent","rightOf","alignContent","alignItems","flexWrap","flexShrink","positionType","alignSelf","flexDirection","justifyContent","overflow","display","flexBasisUnit","flexBasis","flexGrow","widthUnit","heightUnit","minWidthUnit","minWidth","minHeightUnit","minHeight","maxWidthUnit","maxWidth","maxHeightUnit","maxHeight","positionLeftUnit","positionLeft","positionTopUnit","positionTop","positionRightUnit","positionRight","positionBottomUnit","positionBottom","marginLeftUnit","marginLeft","marginTopUnit","marginTop","marginRightUnit","marginRight","marginBottomUnit","marginBottom","paddingLeftUnit","paddingTopUnit","paddingRightUnit","paddingBottomUnit","PBUiTransform","UiTransformSchema","createBasePBVisibilityComponent","visible","PBVisibilityComponent","VisibilityComponentSchema","defineLibraryComponents","defineComponentFromSchema","Animator","AnimatorSchema.AnimatorSchema","AnimatorSchema.COMPONENT_ID","AudioSource","AudioSourceSchema.AudioSourceSchema","AudioSourceSchema.COMPONENT_ID","AudioStream","AudioStreamSchema.AudioStreamSchema","AudioStreamSchema.COMPONENT_ID","AvatarAttach","AvatarAttachSchema.AvatarAttachSchema","AvatarAttachSchema.COMPONENT_ID","AvatarModifierArea","AvatarModifierAreaSchema.AvatarModifierAreaSchema","AvatarModifierAreaSchema.COMPONENT_ID","AvatarShape","AvatarShapeSchema.AvatarShapeSchema","AvatarShapeSchema.COMPONENT_ID","Billboard","BillboardSchema.BillboardSchema","BillboardSchema.COMPONENT_ID","CameraMode","CameraModeSchema.CameraModeSchema","CameraModeSchema.COMPONENT_ID","CameraModeArea","CameraModeAreaSchema.CameraModeAreaSchema","CameraModeAreaSchema.COMPONENT_ID","GltfContainer","GltfContainerSchema.GltfContainerSchema","GltfContainerSchema.COMPONENT_ID","Material","MaterialSchema.MaterialSchema","MaterialSchema.COMPONENT_ID","MeshCollider","MeshColliderSchema.MeshColliderSchema","MeshColliderSchema.COMPONENT_ID","MeshRenderer","MeshRendererSchema.MeshRendererSchema","MeshRendererSchema.COMPONENT_ID","NftShape","NftShapeSchema.NftShapeSchema","NftShapeSchema.COMPONENT_ID","PointerEventsResult","PointerEventsResultSchema.PointerEventsResultSchema","PointerEventsResultSchema.COMPONENT_ID","PointerHoverFeedback","PointerHoverFeedbackSchema.PointerHoverFeedbackSchema","PointerHoverFeedbackSchema.COMPONENT_ID","PointerLock","PointerLockSchema.PointerLockSchema","PointerLockSchema.COMPONENT_ID","Raycast","RaycastSchema.RaycastSchema","RaycastSchema.COMPONENT_ID","RaycastResult","RaycastResultSchema.RaycastResultSchema","RaycastResultSchema.COMPONENT_ID","TextShape","TextShapeSchema.TextShapeSchema","TextShapeSchema.COMPONENT_ID","UiBackground","UiBackgroundSchema.UiBackgroundSchema","UiBackgroundSchema.COMPONENT_ID","UiText","UiTextSchema.UiTextSchema","UiTextSchema.COMPONENT_ID","UiTransform","UiTransformSchema.UiTransformSchema","UiTransformSchema.COMPONENT_ID","VisibilityComponent","VisibilityComponentSchema.VisibilityComponentSchema","VisibilityComponentSchema.COMPONENT_ID","TRANSFORM_LENGTH","TransformSchema","ptr","incrementWriteOffset","setFloat32","setUint32","incrementReadOffset","getFloat32","getUint32","defineTransformComponent","defineAnimatorComponent","engine","getComponent","getClipAndAnimator","entity","anim","getMutableOrNull","find","item","getClipOrNull","getClip","animator","playSingleAnimation","stopAllAnimations","resetCursor","defineMeshColliderComponent","getCollisionMask","layers","map","reduce","prev","setBox","colliderLayers","createOrReplace","setPlane","setCylinder","setSphere","defineMeshRendererComponent","TextureHelper","Common","Avatar","defineMaterialComponent","setBasicMaterial","setPbrMaterial","defineSdkComponents","Transform","IArray","type","writeUint32","newArray","readUint32","Bool","writeInt8","readInt8","IEnum","Float32","writeFloat32","readFloat32","Float64","writeFloat64","readFloat64","Int64","writeInt64","BigInt","readInt64","Int32","writeInt32","readInt32","Int16","writeInt16","readInt16","Int8","FlatString","TextEncoder","TextDecoder","readBuffer","EcsString","Color3Schema","Color4Schema","EntitySchema","QuaternionSchema","Vector3Schema","IMap","spec","key","newValue","IOptional","Schemas","Float","Double","Byte","Short","Int","iInt64","Entity","Enum","Map","Optional","dist","crdtProtocol","stateIterator","sameData","globalBuffer","key1","entries","key2","updateState","remoteTimestamp","key1Value","newKey1Value","createEvent","processMessage","compareData","getState","distExports","requireDist","getNextSize","currentSize","intendedSize","minNewSize","defaultInitialCapacity","createByteBuffer","options","initialROffset","reading","currentOffset","initialBuffer","initialWOffset","writing","initialCapacity","view","DataView","byteOffset","woffset","roffset","woAdd","newsize","roAdd","bufferLength","resetBuffer","currentReadOffset","currentWriteOffset","getFloat64","getInt8","getInt16","getInt32","getBigInt64","readUint8","getUint8","readUint16","getUint16","readUint64","getBigUint64","toBinary","toCopiedBinary","setFloat64","setInt8","setInt16","setInt32","setBigInt64","writeUint8","setUint8","writeUint16","setUint16","writeUint64","setBigUint64","getInt64","getUint64","setInt64","setUint64","WireMessage","validate","HEADER_LENGTH","readHeader","WireMessage$1","ComponentOperation","EntityUtils","crdtSceneSystem","transports","crdtClient","receivedMessages","transportMessages","getMessages","messagesToProcess","createMessages","dirtyMap","crdtMessages","componentsId","componentId","component","entityComponent","has","event","PUT_COMPONENT","DELETE_COMPONENT","transportMessage","some","filter","Message","messageBuffer","transportBuffer","transport","send","receiveMessages","crdtMessage","deleteFrom","bb","upsertFromBinary","clearDirty","addTransport","transportType","onmessage","chunkMessage","deepReadonly","defineComponent","constructorDefault","dirtyIterator","Set","defaultBuffer","getDefaultValue","prefillValue","_id","default","isDirty","delete","getOrNull","usedValue","getMutable","iterator","writeToByteBuffer","updateFromBinary","clear","EntityContainer","staticEntity","STATIC_ENTITIES_RANGE","dynamicEntity","DYNAMIC_ENTITIES_RANGE","generateEntity","dynamic","removeEntity","entityExists","isReservedEntity","getExistingEntities","range","entityCounter","usedEntities","MESSAGE_HEADER_LENGTH","componentDefinition","startMessageOffset","messageLength","header","common","isInRange","MAX_ENTITIES","DYNAMIC_ENTITIES_START_AT","RESERVED_STATIC_ENTITIES","RESERVED_ENTITIES_RANGE","isDynamicEntity","isStaticEntity","SYSTEMS_REGULAR_PRIORITY","SystemContainer","systems","sort","priority","remove","selector","findIndex","getSystems","preEngine","entityContainer","componentsDefinition","addEntity","newComponent","defComponent","addDynamicEntity","addSystem","removeSystem","getEntitiesWith","components","groupComp","firstComponentDef","componentDefinitions","matches","componentDef","getComponentDefGroup","removeComponentDefinition","Engine","crdtSystem","baseComponents","tranport","getTreeEntityArray","firstEntity","proccesedEntities","removeEntityWithChildren","update","dt","system","dirtySet","definition","_componentId","RootEntity","PlayerEntity","CameraEntity","getAndClean","taskSystem","tasks","forEach","task","async","dcl","error","runTask","executeTask","ECSComponentIDs","componentIds","values","createRendererTransport","rendererTransport","callRpc","byteArray","sendToRenderer","catch","includes","EventsSystem","EventType","getDefaultOpts","opts","eventsMap","getEvent","setHoverFeedback","getPointerEvent","removeEvent","pointerEvent","pointer","removeHoverFeedback","removeOnClick","Click","removeOnPointerDown","removeOnPointerUp","onClick","cb","onPointerDown","onPointerUp","Input","command","getClick","getInputCommand","InputCommands","InternalInputStateSchema","timestampLastUpdate","currentTimestamp","buttonState","ts","InternalInputStateComponentId","TimestampUpdateSystemPriority","ButtonStateUpdateSystemPriority","createInput","InternalInputStateComponent","inputAction","findClick","cmd","down","findLastAction","pointerEventType","findInputCommand","isPressed","isClicked","isTriggered","commandToReturn","ObserverEventState","skipNextObservers","currentTarget","initalize","Observer","scope","unregisterOnNextCall","_willBeUnregistered","Observable","onObserverAdded","_observers","_onObserverAdded","_eventState","insertFirst","unregisterOnFirstCall","observer","unshift","addOnce","_deferUnregister","removeCallback","notifyObservers","eventData","lastReturnValue","obs","notifyObserversWithPromise","then","lastReturnedValue","notifyObserver","hasObservers","hasSpecificMask","_remove","createSubscriber","eventName","subscribe","onEnterSceneObservable","onEnterScene","onLeaveSceneObservable","onLeaveScene","onSceneReadyObservable","onPlayerExpressionObservable","onVideoEvent","onProfileChanged","onPlayerConnectedObservable","onPlayerDisconnectedObservable","onRealmChangedObservable","onPlayerClickedObservable","_initEventObservables","onEvent","videoData","initializeDcl","loadModule","onUpdate","voidFn","dclInterface","cyclicParentingChecker","Components","communicationsController","communicationsControllerPromise","_messageObserver","getMessageObserver","ensureCommunicationsController","$","MessageBus","messageQueue","connected","flushing","flush","JSON","parse","payload","sender","sendRaw","messageToSend","stringify","shift","rpcHandle","CameraType","InputAction","TextAlignMode","Font","distExports$1","PBColor3","PBColor4","PBPosition","PBVector2","PBVector3","engine$1"],"mappings":"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"}