@carbonenginejs/runtime-trinity 0.7.0 → 0.8.0

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":"EveTransform.js","sources":["../../../../src/eve/spaceObject/EveTransform.js"],"sourcesContent":["// Source: trinity/trinity/Eve/EveTransform.h\n// Source: trinity/trinity/Eve/EveTransform.cpp\nimport { mat4 } from \"@carbonenginejs/runtime-utils/mat4\";\nimport { quat } from \"@carbonenginejs/runtime-utils/quat\";\nimport { sph3 } from \"@carbonenginejs/runtime-utils/sph3\";\nimport { vec3 } from \"@carbonenginejs/runtime-utils/vec3\";\nimport { vec4 } from \"@carbonenginejs/runtime-utils/vec4\";\nimport { carbon, impl, io, schema, type } from \"@carbonenginejs/runtime-utils/schema\";\nimport { TriBatchType } from \"@carbonenginejs/runtime-utils/graphics\";\nimport { Tr2Transform } from \"../../generated/trinityCore/Tr2Transform.js\";\nimport { EveLODHelper, Tr2Lod } from \"../EveLODHelper.js\";\n\n// Static scratch for the singular-world patch fixup (allocation rules: hot\n// per-object path, copy-into, never allocate per call).\nconst INVERSE_PATCH_SCRATCH = mat4.create();\n\n\n/**\n * A placeable node in an Eve scene graph: local SRT placement, an optional mesh,\n * particle systems and emitters, curve sets, observers and child transforms,\n * with its own frustum and LOD visibility pass.\n */\n@type.define({ className: \"EveTransform\", family: \"eve/spaceObject\" })\nexport class EveTransform extends Tr2Transform\n{\n\n /** m_meshLod (Tr2MeshBasePtr) [READWRITE, PERSIST] */\n @io.persist\n @type.model(\"Tr2MeshBase\")\n meshLod = null;\n\n /** m_children (PIEveTransformVector) [READ, PERSIST] */\n @io.persist\n @type.list(\"IEveTransform\")\n children = [];\n\n /** m_overrideBoundsMin (Vector3) [READWRITE, PERSIST] */\n @io.persist\n @type.vec3\n overrideBoundsMin = vec3.create();\n\n /** m_overrideBoundsMax (Vector3) [READWRITE, PERSIST] */\n @io.persist\n @type.vec3\n overrideBoundsMax = vec3.create();\n\n /** m_particleEmitters (PITr2GenericEmitterVector) [READ, PERSIST] */\n @io.persist\n @type.list(\"ITr2GenericEmitter\")\n particleEmitters = [];\n\n /** m_particleSystems (PTr2ParticleSystemVector) [READ, PERSIST] */\n @io.persist\n @type.list(\"Tr2ParticleSystem\")\n particleSystems = [];\n\n /** m_lodLevel (Tr2Lod - enum Tr2Lod) [READ] */\n @io.read\n @type.int32\n @schema.enum(\"Tr2Lod\")\n lodLevel = Tr2Lod.TR2_LOD_LOW;\n\n /** m_hideOnLowQuality (bool) [READWRITE, PERSIST] */\n @io.persist\n @type.boolean\n hideOnLowQuality = false;\n\n /** m_visibilityThreshold (float) [READWRITE, PERSIST] */\n @io.persist\n @type.float32\n visibilityThreshold = 2;\n\n /** m_observers (PTriObserverLocalVector) [READ, PERSIST] */\n @io.persist\n @type.list(\"TriObserverLocal\")\n observers = [];\n\n /** m_useLodLevel (bool) [READWRITE, PERSIST] */\n @io.persist\n @type.boolean\n useLodLevel = true;\n\n #isVisible = true;\n #lastCurveUpdateDelta = EveLODHelper.lowUpdateRate;\n #lastWorldTransform = mat4.create();\n\n /**\n * Adopts an authored meshLod as the node's mesh when no mesh was set, so a\n * graph that only authored the LOD mesh still renders.\n */\n @carbon.method\n @impl.implemented\n Initialize()\n {\n if (!this.mesh)\n {\n this.mesh = this.meshLod;\n this.meshLod = null;\n }\n return true;\n }\n\n /**\n * Rebuilds the local matrix from rotation, translation and scaling and composes it with the parent to refresh worldTransform, keeping the previous world transform for motion vectors, then pushes the new transform to the particle systems and observers.\n * @returns {mat4} The node's live worldTransform, valid until the next update.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Renderer-owned modifier state is supplied through the update context; standard SRT and parent composition stay in Trinity.\")\n UpdateViewDependentData(context, parentTransform = EveTransform.#identity)\n {\n mat4.copy(this.#lastWorldTransform, this.worldTransform);\n mat4.fromRotationTranslationScale(this.localTransform, this.rotation, this.translation, this.scaling);\n mat4.multiply(this.worldTransform, parentTransform, this.localTransform);\n for (const system of this.particleSystems) system?.UpdateViewDependentData?.(context?.GetFrustum?.() ?? context?.frustum ?? context, this.worldTransform);\n for (const observer of this.observers) observer?.Update?.(this.worldTransform);\n return this.worldTransform;\n }\n\n /** Runs the synchronous pass then the asynchronous pass, in Carbon's order. */\n @carbon.method\n @impl.implemented\n Update(context)\n {\n this.UpdateSyncronous(context);\n this.UpdateAsyncronous(context);\n }\n\n /**\n * Does nothing: EveTransform performs all of its per-frame work in\n * UpdateAsyncronous.\n */\n @carbon.method\n @impl.implemented\n UpdateSyncronous(_context)\n {\n }\n\n /**\n * Advances the curve sets once the accumulated delta satisfies the LOD update rate, then updates the children, particle systems and particle emitters.\n * @returns {boolean} False without doing any work when the node's update flag is off.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Particle updates are forwarded through backend-neutral emitter and system contracts; device particle managers remain engine-owned.\")\n UpdateAsyncronous(context)\n {\n if (!this.update) return false;\n const time = Number(context?.GetTime?.() ?? context?.currentTime ?? context?.time ?? 0);\n const deltaTime = Number(context?.GetDeltaT?.() ?? context?.deltaTime ?? context?.deltaT ?? 0);\n this.#lastCurveUpdateDelta += deltaTime;\n if (!this.useLodLevel || EveLODHelper.ShouldUpdate(this.lodLevel, this.#lastCurveUpdateDelta))\n {\n this.#lastCurveUpdateDelta = 0;\n for (const curveSet of this.curveSets) curveSet?.Update?.(time);\n }\n for (const child of this.children) child?.Update?.(context);\n for (const system of this.particleSystems)\n {\n system?.UpdateTransform?.(this.worldTransform);\n system?.Update?.(context);\n }\n const originShift = context?.GetOriginShift?.() ?? context?.originShift ?? EveTransform.#zero;\n for (const emitter of this.particleEmitters)\n {\n emitter?.Update?.({ time, transform: this.worldTransform, originShift, context });\n }\n return true;\n }\n\n /**\n * Refreshes the world transform, then derives visibility and LOD from the mesh bounding sphere: the sphere is frustum-tested and its on-screen size in pixels is compared against the context's medium and low detail thresholds for the LOD level and against visibilityThreshold for visibility; a node with no mesh is always visible, any particle system forces high LOD, and children's LOD levels are merged in.\n * @returns {boolean} Whether this node itself is visible.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Browser frustum and quality state are read from the explicit update context instead of renderer globals.\")\n UpdateVisibility(context, parentTransform = EveTransform.#identity)\n {\n this.lodLevel = Tr2Lod.TR2_LOD_LOW;\n this.#isVisible = false;\n if (!this.display || (this.hideOnLowQuality && (context?.lowQuality ?? context?.device?.lowQuality))) return false;\n\n this.UpdateViewDependentData(context, parentTransform);\n const frustum = context?.GetFrustum?.() ?? context?.frustum;\n if (this.mesh)\n {\n const valid = this.GetBoundingSphere(EveTransform.#sphere);\n const visible = !valid || this.visibilityThreshold < 0 || frustum?.IsSphereVisible?.(EveTransform.#sphere) !== false;\n if (visible)\n {\n const size = Number(frustum?.GetPixelSizeAccross?.(EveTransform.#sphere) ?? Infinity);\n this.mesh.UseWithScreenSize?.(size, EveTransform.#sphere[3]);\n const medium = Number(context?.GetMediumDetailThreshold?.() ?? context?.mediumDetailThreshold ?? 0);\n const low = Number(context?.GetLowDetailThreshold?.() ?? context?.lowDetailThreshold ?? 0);\n if (size >= medium) this.lodLevel = Tr2Lod.TR2_LOD_HIGH;\n else if (size >= low) this.lodLevel = Tr2Lod.TR2_LOD_MEDIUM;\n if (size > this.visibilityThreshold) this.#isVisible = true;\n }\n }\n else\n {\n this.#isVisible = true;\n }\n if (this.particleSystems.length) this.lodLevel = Tr2Lod.TR2_LOD_HIGH;\n for (const child of this.children)\n {\n child?.UpdateVisibility?.(context, this.worldTransform);\n this.lodLevel = EveLODHelper.MergeLOD(this.lodLevel, child?.GetLODLevel?.() ?? Tr2Lod.TR2_LOD_UNSPECIFIED);\n }\n return this.#isVisible;\n }\n\n /**\n * Sorts the particle systems, appends this node when it is visible and has a\n * mesh, then recurses into the children; nothing is appended while display is\n * off.\n */\n @carbon.method\n @impl.implemented\n GetRenderables(out = [])\n {\n if (!this.display) return out;\n for (const system of this.particleSystems) system?.SortParticles?.();\n if (this.#isVisible && this.mesh) out.push(this);\n for (const child of this.children) child?.GetRenderables?.(out);\n return out;\n }\n\n // Carbon EveTransform::GetPerObjectData (EveTransform.cpp:49-77): fills the\n // EveBasicPerObjectData constant record. Trinity writes LOGICAL matrices by\n // name; the store (engine-supplied layout) transposes them on Set. Carbon's\n // worldInverse = Inverse(transposed world) == Transpose(Inverse(world)), so\n // it is just Set(\"worldInverse\", Inverse(world)) - the store transposes.\n\n /**\n * Allocates an EveBasicPerObjectData record from the accumulator and fills it with the world, previous-world and inverse-world matrices, patching the first all-zero basis of a singular world matrix with a 0.1 diagonal before inverting, as Carbon does.\n * @returns {object} The allocated record, owned by the accumulator.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Constant-buffer layout/packing is engine-owned; Trinity Allocs the record from the accumulator's store and Sets logical values by name (the store transposes per the engine layout).\")\n GetPerObjectData(accumulator)\n {\n const data = accumulator.Alloc(\"EveBasicPerObjectData\");\n\n data.SetAndTranspose(\"world\", this.worldTransform);\n data.SetAndTranspose(\"worldLast\", this.#lastWorldTransform);\n\n if (!mat4.invert(INVERSE_PATCH_SCRATCH, this.worldTransform))\n {\n // Carbon singular fixup (EveTransform.cpp:66-75): patch the first\n // all-zero basis of the LOGICAL world (its column [0,1,2]/[4,5,6]/\n // [8,9,10] equals Carbon's transposed-world row test on the shared\n // layout) with a 0.1 diagonal, then invert that.\n const patched = INVERSE_PATCH_SCRATCH;\n mat4.copy(patched, this.worldTransform);\n if (patched[0] === 0 && patched[1] === 0 && patched[2] === 0) patched[0] = 0.1;\n else if (patched[4] === 0 && patched[5] === 0 && patched[6] === 0) patched[5] = 0.1;\n else if (patched[8] === 0 && patched[9] === 0 && patched[10] === 0) patched[10] = 0.1;\n if (!mat4.invert(INVERSE_PATCH_SCRATCH, patched)) mat4.identity(INVERSE_PATCH_SCRATCH);\n }\n\n data.SetAndTranspose(\"worldInverse\", INVERSE_PATCH_SCRATCH);\n return data;\n }\n\n /** Carbon declares the renderable batch contract on Tr2Transform\n * (Tr2Transform.cpp:250-276); the generated base stays data-only, so the\n * maintained renderable carries the behavior. */\n // Returns whether any batch was committed (JS addition; Carbon returns void).\n @carbon.method\n @impl.adapted\n @impl.reason(\"Declared on Tr2Transform in Carbon; the generated base class stays data-only.\")\n GetBatches(batches, batchType, perObjectData, _reason)\n {\n if (this.display && this.mesh)\n {\n return this.mesh.GetBatches(batches, this.mesh.GetAreas(batchType), perObjectData) === true;\n }\n return false;\n }\n\n /**\n * Reports whether the mesh has any transparent areas, which tells the renderer\n * to route this node through the sorted transparent pass.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Declared on Tr2Transform in Carbon; the generated base class stays data-only.\")\n HasTransparentBatches()\n {\n if (this.display && this.mesh)\n {\n return (this.mesh.GetAreas(TriBatchType.TRIBATCHTYPE_TRANSPARENT)?.length ?? 0) > 0;\n }\n return false;\n }\n\n // Distance from the view position to the world translation, scaled by the\n // authored multiplier (used to order transparent renderables back-to-front).\n\n /**\n * Returns the distance from the render context's view position to this node's\n * world translation, scaled by the authored sortValueMultiplier, used to order\n * transparent renderables back-to-front.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Carbon reads the Tr2Renderer view-position global; the relocated camera state arrives via the threaded render context.\")\n GetSortValue(renderContext = null)\n {\n const viewPosition = renderContext?.GetViewPosition?.();\n const x = (viewPosition?.[0] ?? 0) - this.worldTransform[12];\n const y = (viewPosition?.[1] ?? 0) - this.worldTransform[13];\n const z = (viewPosition?.[2] ?? 0) - this.worldTransform[14];\n return Math.hypot(x, y, z) * this.sortValueMultiplier;\n }\n\n /**\n * Writes the world-space bounding sphere, taken from the override bounds when they differ and otherwise from the mesh bounding box, and unions in the children's spheres when a query is passed.\n * @param {vec4} out Caller-owned sphere; left untouched when no source produced one.\n * @returns {boolean} Whether a sphere was written.\n */\n @carbon.method\n @impl.implemented\n GetBoundingSphere(out = vec4.create(), query = 0)\n {\n let valid = false;\n if (!vec3.equals(this.overrideBoundsMin, this.overrideBoundsMax))\n {\n sph3.fromBounds(EveTransform.#localSphere, this.overrideBoundsMin, this.overrideBoundsMax);\n sph3.transformMat4(out, EveTransform.#localSphere, this.worldTransform);\n valid = true;\n }\n else if (this.mesh?.GetBoundingBox?.(EveTransform.#boundsMin, EveTransform.#boundsMax))\n {\n sph3.fromBounds(EveTransform.#localSphere, EveTransform.#boundsMin, EveTransform.#boundsMax);\n sph3.transformMat4(out, EveTransform.#localSphere, this.worldTransform);\n valid = true;\n }\n if (query)\n {\n for (const child of this.children)\n {\n if (child?.GetBoundingSphere?.(EveTransform.#childSphere, query))\n {\n if (valid) sph3.union(out, out, EveTransform.#childSphere);\n else vec4.copy(out, EveTransform.#childSphere);\n valid = true;\n }\n }\n }\n return valid;\n }\n\n /**\n * Returns the world translation; called without an out parameter it returns a\n * live subarray view of worldTransform that changes with the next transform\n * update.\n */\n @carbon.method\n @impl.implemented\n GetWorldPosition(out)\n {\n return out ? vec3.set(out, this.worldTransform[12], this.worldTransform[13], this.worldTransform[14]) : this.worldTransform.subarray(12, 15);\n }\n\n /**\n * Returns the node's local rotation quaternion; called without an out\n * parameter it returns the live field rather than a copy.\n */\n @carbon.method\n @impl.implemented\n GetWorldRotation(out)\n {\n return out ? quat.copy(out, this.rotation) : this.rotation;\n }\n\n /** Returns the LOD level chosen by the last visibility pass. */\n @carbon.method\n @impl.implemented\n GetLODLevel()\n {\n return this.lodLevel;\n }\n\n /** Turns rendering of this node and its subtree on or off. */\n @carbon.method\n @impl.implemented\n SetDisplay(value)\n {\n this.display = !!value;\n }\n\n /** Starts playback on every curve set on this node. */\n @carbon.method\n @impl.implemented\n PlayCurveSets()\n {\n for (const curveSet of this.curveSets) curveSet?.Play?.();\n }\n\n /**\n * Starts every curve set carrying the given name, playing a named time range\n * when one is supplied and otherwise resetting to the full range first.\n */\n @carbon.method\n @impl.implemented\n PlayCurveSet(name, rangeName = \"\")\n {\n for (const curveSet of this.curveSets)\n {\n if ((curveSet?.GetName?.() ?? curveSet?.name) !== name) continue;\n if (rangeName)\n {\n curveSet.PlayTimeRange?.(rangeName);\n }\n else\n {\n curveSet.ResetTimeRange?.();\n curveSet.Play?.();\n }\n }\n }\n\n /** Stops every curve set carrying the given name. */\n @carbon.method\n @impl.implemented\n StopCurveSet(name)\n {\n for (const curveSet of this.curveSets) if ((curveSet?.GetName?.() ?? curveSet?.name) === name) curveSet.Stop?.();\n }\n\n /**\n * Returns the longest curve duration across the curve sets carrying the given\n * name, or 0 when none match.\n */\n @carbon.method\n @impl.implemented\n GetCurveSetDuration(name)\n {\n let duration = 0;\n for (const curveSet of this.curveSets) if ((curveSet?.GetName?.() ?? curveSet?.name) === name) duration = Math.max(duration, Number(curveSet.GetMaxCurveDuration?.() ?? 0));\n return duration;\n }\n\n /**\n * Returns the longest duration of a named time range across the curve sets\n * carrying the given name, or 0 when none match.\n */\n @carbon.method\n @impl.implemented\n GetRangeDuration(name, rangeName)\n {\n let duration = 0;\n for (const curveSet of this.curveSets) if ((curveSet?.GetName?.() ?? curveSet?.name) === name) duration = Math.max(duration, Number(curveSet.GetRangeDuration?.(rangeName) ?? 0));\n return duration;\n }\n\n static Tr2Lod = Tr2Lod;\n\n static #identity = mat4.create();\n static #zero = vec3.create();\n static #sphere = vec4.create();\n static #localSphere = vec4.create();\n static #childSphere = vec4.create();\n static #boundsMin = vec3.create();\n static #boundsMax = vec3.create();\n}\n"],"names":["INVERSE_PATCH_SCRATCH","mat4","create","_EveTransform","_identity","EveTransform","Tr2Transform","e","_init_meshLod","_init_extra_meshLod","_init_children","_init_extra_children","_init_overrideBoundsMin","_init_extra_overrideBoundsMin","_init_overrideBoundsMax","_init_extra_overrideBoundsMax","_init_particleEmitters","_init_extra_particleEmitters","_init_particleSystems","_init_extra_particleSystems","_init_lodLevel","_init_extra_lodLevel","_init_hideOnLowQuality","_init_extra_hideOnLowQuality","_init_visibilityThreshold","_init_extra_visibilityThreshold","_init_observers","_init_extra_observers","_init_useLodLevel","_init_extra_useLodLevel","_initProto","c","_initClass","_applyDecs","type","define","className","family","io","persist","model","list","vec3","read","int32","schema","enum","boolean","float32","carbon","method","impl","implemented","adapted","reason","meshLod","children","overrideBoundsMin","overrideBoundsMax","particleEmitters","particleSystems","lodLevel","Tr2Lod","TR2_LOD_LOW","hideOnLowQuality","visibilityThreshold","observers","useLodLevel","EveLODHelper","lowUpdateRate","Initialize","mesh","UpdateViewDependentData","context","parentTransform","copy","worldTransform","fromRotationTranslationScale","localTransform","rotation","translation","scaling","multiply","system","GetFrustum","frustum","observer","Update","UpdateSyncronous","UpdateAsyncronous","_context","update","time","Number","GetTime","currentTime","deltaTime","GetDeltaT","deltaT","ShouldUpdate","curveSet","curveSets","child","UpdateTransform","originShift","GetOriginShift","emitter","transform","UpdateVisibility","display","lowQuality","device","valid","GetBoundingSphere","visible","IsSphereVisible","size","GetPixelSizeAccross","Infinity","UseWithScreenSize","medium","GetMediumDetailThreshold","mediumDetailThreshold","low","GetLowDetailThreshold","lowDetailThreshold","TR2_LOD_HIGH","TR2_LOD_MEDIUM","length","MergeLOD","GetLODLevel","TR2_LOD_UNSPECIFIED","GetRenderables","out","SortParticles","push","GetPerObjectData","accumulator","data","Alloc","SetAndTranspose","invert","patched","identity","GetBatches","batches","batchType","perObjectData","_reason","GetAreas","HasTransparentBatches","TriBatchType","TRIBATCHTYPE_TRANSPARENT","GetSortValue","renderContext","viewPosition","GetViewPosition","x","y","z","Math","hypot","sortValueMultiplier","vec4","query","equals","sph3","fromBounds","transformMat4","GetBoundingBox","union","GetWorldPosition","set","subarray","GetWorldRotation","quat","SetDisplay","value","PlayCurveSets","Play","PlayCurveSet","name","rangeName","GetName","PlayTimeRange","ResetTimeRange","StopCurveSet","Stop","GetCurveSetDuration","duration","max","GetMaxCurveDuration","GetRangeDuration","constructor"],"mappings":"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"}
1
+ {"version":3,"file":"EveTransform.js","sources":["../../../../src/eve/spaceObject/EveTransform.js"],"sourcesContent":["// Source: trinity/trinity/Eve/EveTransform.h\n// Source: trinity/trinity/Eve/EveTransform.cpp\nimport { mat4 } from \"@carbonenginejs/runtime-utils/mat4\";\nimport { quat } from \"@carbonenginejs/runtime-utils/quat\";\nimport { sph3 } from \"@carbonenginejs/runtime-utils/sph3\";\nimport { vec3 } from \"@carbonenginejs/runtime-utils/vec3\";\nimport { vec4 } from \"@carbonenginejs/runtime-utils/vec4\";\nimport { carbon, impl, io, schema, type } from \"@carbonenginejs/runtime-utils/schema\";\nimport { TriBatchType } from \"@carbonenginejs/runtime-utils/graphics\";\nimport { Tr2Transform } from \"../../generated/trinityCore/Tr2Transform.js\";\nimport { EveLODHelper, Tr2Lod } from \"../EveLODHelper.js\";\nimport { TR2_PICK_TYPE_DEFAULT, Tr2PickType } from \"../../trinityCore/Tr2PickType.js\";\n\n// Static scratch for the singular-world patch fixup (allocation rules: hot\n// per-object path, copy-into, never allocate per call).\nconst INVERSE_PATCH_SCRATCH = mat4.create();\n\n\n/**\n * A placeable node in an Eve scene graph: local SRT placement, an optional mesh,\n * particle systems and emitters, curve sets, observers and child transforms,\n * with its own frustum and LOD visibility pass.\n */\n@type.define({ className: \"EveTransform\", family: \"eve/spaceObject\" })\nexport class EveTransform extends Tr2Transform\n{\n\n /** m_meshLod (Tr2MeshBasePtr) [READWRITE, PERSIST] */\n @io.persist\n @type.model(\"Tr2MeshBase\")\n meshLod = null;\n\n /** m_children (PIEveTransformVector) [READ, PERSIST] */\n @io.persist\n @type.list(\"IEveTransform\")\n children = [];\n\n /** m_overrideBoundsMin (Vector3) [READWRITE, PERSIST] */\n @io.persist\n @type.vec3\n overrideBoundsMin = vec3.create();\n\n /** m_overrideBoundsMax (Vector3) [READWRITE, PERSIST] */\n @io.persist\n @type.vec3\n overrideBoundsMax = vec3.create();\n\n /** m_particleEmitters (PITr2GenericEmitterVector) [READ, PERSIST] */\n @io.persist\n @type.list(\"ITr2GenericEmitter\")\n particleEmitters = [];\n\n /** m_particleSystems (PTr2ParticleSystemVector) [READ, PERSIST] */\n @io.persist\n @type.list(\"Tr2ParticleSystem\")\n particleSystems = [];\n\n /** m_lodLevel (Tr2Lod - enum Tr2Lod) [READ] */\n @io.read\n @type.int32\n @schema.enum(\"Tr2Lod\")\n lodLevel = Tr2Lod.TR2_LOD_LOW;\n\n /** m_hideOnLowQuality (bool) [READWRITE, PERSIST] */\n @io.persist\n @type.boolean\n hideOnLowQuality = false;\n\n /** m_visibilityThreshold (float) [READWRITE, PERSIST] */\n @io.persist\n @type.float32\n visibilityThreshold = 2;\n\n /** m_observers (PTriObserverLocalVector) [READ, PERSIST] */\n @io.persist\n @type.list(\"TriObserverLocal\")\n observers = [];\n\n /** m_useLodLevel (bool) [READWRITE, PERSIST] */\n @io.persist\n @type.boolean\n useLodLevel = true;\n\n #isVisible = true;\n #lastCurveUpdateDelta = EveLODHelper.lowUpdateRate;\n #lastWorldTransform = mat4.create();\n\n /**\n * Adopts an authored meshLod as the node's mesh when no mesh was set, so a\n * graph that only authored the LOD mesh still renders.\n */\n @carbon.method\n @impl.implemented\n Initialize()\n {\n if (!this.mesh)\n {\n this.mesh = this.meshLod;\n this.meshLod = null;\n }\n return true;\n }\n\n /**\n * Rebuilds the local matrix from rotation, translation and scaling and composes it with the parent to refresh worldTransform, keeping the previous world transform for motion vectors, then pushes the new transform to the particle systems and observers.\n * @returns {mat4} The node's live worldTransform, valid until the next update.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Renderer-owned modifier state is supplied through the update context; standard SRT and parent composition stay in Trinity.\")\n UpdateViewDependentData(context, parentTransform = EveTransform.#identity)\n {\n mat4.copy(this.#lastWorldTransform, this.worldTransform);\n mat4.fromRotationTranslationScale(this.localTransform, this.rotation, this.translation, this.scaling);\n mat4.multiply(this.worldTransform, parentTransform, this.localTransform);\n for (const system of this.particleSystems) system?.UpdateViewDependentData?.(context?.GetFrustum?.() ?? context?.frustum ?? context, this.worldTransform);\n for (const observer of this.observers) observer?.Update?.(this.worldTransform);\n return this.worldTransform;\n }\n\n /** Runs the synchronous pass then the asynchronous pass, in Carbon's order. */\n @carbon.method\n @impl.implemented\n Update(context)\n {\n this.UpdateSyncronous(context);\n this.UpdateAsyncronous(context);\n }\n\n /**\n * Does nothing: EveTransform performs all of its per-frame work in\n * UpdateAsyncronous.\n */\n @carbon.method\n @impl.implemented\n UpdateSyncronous(_context)\n {\n }\n\n /**\n * Advances the curve sets once the accumulated delta satisfies the LOD update rate, then updates the children, particle systems and particle emitters.\n * @returns {boolean} False without doing any work when the node's update flag is off.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Particle updates are forwarded through backend-neutral emitter and system contracts; device particle managers remain engine-owned.\")\n UpdateAsyncronous(context)\n {\n if (!this.update) return false;\n const time = Number(context?.GetTime?.() ?? context?.currentTime ?? context?.time ?? 0);\n const deltaTime = Number(context?.GetDeltaT?.() ?? context?.deltaTime ?? context?.deltaT ?? 0);\n this.#lastCurveUpdateDelta += deltaTime;\n if (!this.useLodLevel || EveLODHelper.ShouldUpdate(this.lodLevel, this.#lastCurveUpdateDelta))\n {\n this.#lastCurveUpdateDelta = 0;\n for (const curveSet of this.curveSets) curveSet?.Update?.(time);\n }\n for (const child of this.children) child?.Update?.(context);\n for (const system of this.particleSystems)\n {\n system?.UpdateTransform?.(this.worldTransform);\n system?.Update?.(context);\n }\n const originShift = context?.GetOriginShift?.() ?? context?.originShift ?? EveTransform.#zero;\n for (const emitter of this.particleEmitters)\n {\n emitter?.Update?.({ time, transform: this.worldTransform, originShift, context });\n }\n return true;\n }\n\n /**\n * Refreshes the world transform, then derives visibility and LOD from the mesh bounding sphere: the sphere is frustum-tested and its on-screen size in pixels is compared against the context's medium and low detail thresholds for the LOD level and against visibilityThreshold for visibility; a node with no mesh is always visible, any particle system forces high LOD, and children's LOD levels are merged in.\n * @returns {boolean} Whether this node itself is visible.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Browser frustum and quality state are read from the explicit update context instead of renderer globals.\")\n UpdateVisibility(context, parentTransform = EveTransform.#identity)\n {\n this.lodLevel = Tr2Lod.TR2_LOD_LOW;\n this.#isVisible = false;\n if (!this.display || (this.hideOnLowQuality && (context?.lowQuality ?? context?.device?.lowQuality))) return false;\n\n this.UpdateViewDependentData(context, parentTransform);\n const frustum = context?.GetFrustum?.() ?? context?.frustum;\n if (this.mesh)\n {\n const valid = this.GetBoundingSphere(EveTransform.#sphere);\n const visible = !valid || this.visibilityThreshold < 0 || frustum?.IsSphereVisible?.(EveTransform.#sphere) !== false;\n if (visible)\n {\n const size = Number(frustum?.GetPixelSizeAccross?.(EveTransform.#sphere) ?? Infinity);\n this.mesh.UseWithScreenSize?.(size, EveTransform.#sphere[3]);\n const medium = Number(context?.GetMediumDetailThreshold?.() ?? context?.mediumDetailThreshold ?? 0);\n const low = Number(context?.GetLowDetailThreshold?.() ?? context?.lowDetailThreshold ?? 0);\n if (size >= medium) this.lodLevel = Tr2Lod.TR2_LOD_HIGH;\n else if (size >= low) this.lodLevel = Tr2Lod.TR2_LOD_MEDIUM;\n if (size > this.visibilityThreshold) this.#isVisible = true;\n }\n }\n else\n {\n this.#isVisible = true;\n }\n if (this.particleSystems.length) this.lodLevel = Tr2Lod.TR2_LOD_HIGH;\n for (const child of this.children)\n {\n child?.UpdateVisibility?.(context, this.worldTransform);\n this.lodLevel = EveLODHelper.MergeLOD(this.lodLevel, child?.GetLODLevel?.() ?? Tr2Lod.TR2_LOD_UNSPECIFIED);\n }\n return this.#isVisible;\n }\n\n /**\n * Sorts the particle systems, appends this node when it is visible and has a\n * mesh, then recurses into the children; nothing is appended while display is\n * off.\n */\n @carbon.method\n @impl.implemented\n GetRenderables(out = [])\n {\n if (!this.display) return out;\n for (const system of this.particleSystems) system?.SortParticles?.();\n if (this.#isVisible && this.mesh) out.push(this);\n for (const child of this.children) child?.GetRenderables?.(out);\n return out;\n }\n\n // Carbon EveTransform::GetPerObjectData (EveTransform.cpp:49-77): fills the\n // EveBasicPerObjectData constant record. Trinity writes LOGICAL matrices by\n // name; the store (engine-supplied layout) transposes them on Set. Carbon's\n // worldInverse = Inverse(transposed world) == Transpose(Inverse(world)), so\n // it is just Set(\"worldInverse\", Inverse(world)) - the store transposes.\n\n /**\n * Allocates an EveBasicPerObjectData record from the accumulator and fills it with the world, previous-world and inverse-world matrices, patching the first all-zero basis of a singular world matrix with a 0.1 diagonal before inverting, as Carbon does.\n * @returns {object} The allocated record, owned by the accumulator.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Constant-buffer layout/packing is engine-owned; Trinity Allocs the record from the accumulator's store and Sets logical values by name (the store transposes per the engine layout).\")\n GetPerObjectData(accumulator)\n {\n const data = accumulator.Alloc(\"EveBasicPerObjectData\");\n\n data.SetAndTranspose(\"world\", this.worldTransform);\n data.SetAndTranspose(\"worldLast\", this.#lastWorldTransform);\n\n if (!mat4.invert(INVERSE_PATCH_SCRATCH, this.worldTransform))\n {\n // Carbon singular fixup (EveTransform.cpp:66-75): patch the first\n // all-zero basis of the LOGICAL world (its column [0,1,2]/[4,5,6]/\n // [8,9,10] equals Carbon's transposed-world row test on the shared\n // layout) with a 0.1 diagonal, then invert that.\n const patched = INVERSE_PATCH_SCRATCH;\n mat4.copy(patched, this.worldTransform);\n if (patched[0] === 0 && patched[1] === 0 && patched[2] === 0) patched[0] = 0.1;\n else if (patched[4] === 0 && patched[5] === 0 && patched[6] === 0) patched[5] = 0.1;\n else if (patched[8] === 0 && patched[9] === 0 && patched[10] === 0) patched[10] = 0.1;\n if (!mat4.invert(INVERSE_PATCH_SCRATCH, patched)) mat4.identity(INVERSE_PATCH_SCRATCH);\n }\n\n data.SetAndTranspose(\"worldInverse\", INVERSE_PATCH_SCRATCH);\n return data;\n }\n\n /** Carbon declares the renderable batch contract on Tr2Transform\n * (Tr2Transform.cpp:250-276); the generated base stays data-only, so the\n * maintained renderable carries the behavior. */\n // Returns whether any batch was committed (JS addition; Carbon returns void).\n @carbon.method\n @impl.adapted\n @impl.reason(\"Declared on Tr2Transform in Carbon; the generated base class stays data-only.\")\n GetBatches(batches, batchType, perObjectData, _reason)\n {\n if (this.display && this.mesh)\n {\n return this.mesh.GetBatches(batches, this.mesh.GetAreas(batchType), perObjectData) === true;\n }\n return false;\n }\n\n /**\n * Carbon EveTransform::GetPickingBatches (EveTransform.cpp:?): collects the\n * geometry a pick pass should test, by mask.\n *\n * Simpler than the hull's version in two ways that are deliberate: there are\n * no decals or overlay effects to pull into the opaque bit, and the\n * transparent bit goes through this class's own `GetBatches` rather than\n * reaching into the mesh's areas - so a hidden transform contributes nothing\n * at all, instead of suppressing only its transparent pass.\n *\n * Inherited by `EveMissileWarhead` and `EveRootTransform`, which is how\n * Carbon gives them a pickable surface without declaring one.\n *\n * @param {Object} batches - the picking accumulator\n * @param {Number} pickTypes - a Tr2PickType mask\n * @param {Object} perObjectData - this transform's per-object record\n */\n @carbon.method\n @impl.implemented\n GetPickingBatches(batches, pickTypes = TR2_PICK_TYPE_DEFAULT, perObjectData = null)\n {\n if (pickTypes & Tr2PickType.PICK_TYPE_PICKING)\n {\n this.GetBatches(batches, TriBatchType.TRIBATCHTYPE_PICKING, perObjectData);\n }\n\n if (pickTypes & Tr2PickType.PICK_TYPE_OPAQUE)\n {\n this.GetBatches(batches, TriBatchType.TRIBATCHTYPE_OPAQUE, perObjectData);\n }\n\n if (pickTypes & Tr2PickType.PICK_TYPE_TRANSPARENT)\n {\n this.GetBatches(batches, TriBatchType.TRIBATCHTYPE_TRANSPARENT, perObjectData);\n this.GetBatches(batches, TriBatchType.TRIBATCHTYPE_ADDITIVE, perObjectData);\n }\n\n return true;\n }\n\n /**\n * Carbon EveTransform::GetID (EveTransform.h:83-86): a picked area resolves\n * to this transform, so the area index is deliberately ignored.\n * @param {Number} [_areaID] - the picked area, unused by this class\n * @returns {EveTransform} this\n */\n @carbon.method\n @impl.implemented\n GetID(_areaID = 0)\n {\n return this;\n }\n\n /**\n * Reports whether the mesh has any transparent areas, which tells the renderer\n * to route this node through the sorted transparent pass.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Declared on Tr2Transform in Carbon; the generated base class stays data-only.\")\n HasTransparentBatches()\n {\n if (this.display && this.mesh)\n {\n return (this.mesh.GetAreas(TriBatchType.TRIBATCHTYPE_TRANSPARENT)?.length ?? 0) > 0;\n }\n return false;\n }\n\n // Distance from the view position to the world translation, scaled by the\n // authored multiplier (used to order transparent renderables back-to-front).\n\n /**\n * Returns the distance from the render context's view position to this node's\n * world translation, scaled by the authored sortValueMultiplier, used to order\n * transparent renderables back-to-front.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Carbon reads the Tr2Renderer view-position global; the relocated camera state arrives via the threaded render context.\")\n GetSortValue(renderContext = null)\n {\n const viewPosition = renderContext?.GetViewPosition?.();\n const x = (viewPosition?.[0] ?? 0) - this.worldTransform[12];\n const y = (viewPosition?.[1] ?? 0) - this.worldTransform[13];\n const z = (viewPosition?.[2] ?? 0) - this.worldTransform[14];\n return Math.hypot(x, y, z) * this.sortValueMultiplier;\n }\n\n /**\n * Writes the world-space bounding sphere, taken from the override bounds when they differ and otherwise from the mesh bounding box, and unions in the children's spheres when a query is passed.\n * @param {vec4} out Caller-owned sphere; left untouched when no source produced one.\n * @returns {boolean} Whether a sphere was written.\n */\n @carbon.method\n @impl.implemented\n GetBoundingSphere(out = vec4.create(), query = 0)\n {\n let valid = false;\n if (!vec3.equals(this.overrideBoundsMin, this.overrideBoundsMax))\n {\n sph3.fromBounds(EveTransform.#localSphere, this.overrideBoundsMin, this.overrideBoundsMax);\n sph3.transformMat4(out, EveTransform.#localSphere, this.worldTransform);\n valid = true;\n }\n else if (this.mesh?.GetBoundingBox?.(EveTransform.#boundsMin, EveTransform.#boundsMax))\n {\n sph3.fromBounds(EveTransform.#localSphere, EveTransform.#boundsMin, EveTransform.#boundsMax);\n sph3.transformMat4(out, EveTransform.#localSphere, this.worldTransform);\n valid = true;\n }\n if (query)\n {\n for (const child of this.children)\n {\n if (child?.GetBoundingSphere?.(EveTransform.#childSphere, query))\n {\n if (valid) sph3.union(out, out, EveTransform.#childSphere);\n else vec4.copy(out, EveTransform.#childSphere);\n valid = true;\n }\n }\n }\n return valid;\n }\n\n /**\n * Returns the world translation; called without an out parameter it returns a\n * live subarray view of worldTransform that changes with the next transform\n * update.\n */\n @carbon.method\n @impl.implemented\n GetWorldPosition(out)\n {\n return out ? vec3.set(out, this.worldTransform[12], this.worldTransform[13], this.worldTransform[14]) : this.worldTransform.subarray(12, 15);\n }\n\n /**\n * Returns the node's local rotation quaternion; called without an out\n * parameter it returns the live field rather than a copy.\n */\n @carbon.method\n @impl.implemented\n GetWorldRotation(out)\n {\n return out ? quat.copy(out, this.rotation) : this.rotation;\n }\n\n /** Returns the LOD level chosen by the last visibility pass. */\n @carbon.method\n @impl.implemented\n GetLODLevel()\n {\n return this.lodLevel;\n }\n\n /** Turns rendering of this node and its subtree on or off. */\n @carbon.method\n @impl.implemented\n SetDisplay(value)\n {\n this.display = !!value;\n }\n\n /** Starts playback on every curve set on this node. */\n @carbon.method\n @impl.implemented\n PlayCurveSets()\n {\n for (const curveSet of this.curveSets) curveSet?.Play?.();\n }\n\n /**\n * Starts every curve set carrying the given name, playing a named time range\n * when one is supplied and otherwise resetting to the full range first.\n */\n @carbon.method\n @impl.implemented\n PlayCurveSet(name, rangeName = \"\")\n {\n for (const curveSet of this.curveSets)\n {\n if ((curveSet?.GetName?.() ?? curveSet?.name) !== name) continue;\n if (rangeName)\n {\n curveSet.PlayTimeRange?.(rangeName);\n }\n else\n {\n curveSet.ResetTimeRange?.();\n curveSet.Play?.();\n }\n }\n }\n\n /** Stops every curve set carrying the given name. */\n @carbon.method\n @impl.implemented\n StopCurveSet(name)\n {\n for (const curveSet of this.curveSets) if ((curveSet?.GetName?.() ?? curveSet?.name) === name) curveSet.Stop?.();\n }\n\n /**\n * Returns the longest curve duration across the curve sets carrying the given\n * name, or 0 when none match.\n */\n @carbon.method\n @impl.implemented\n GetCurveSetDuration(name)\n {\n let duration = 0;\n for (const curveSet of this.curveSets) if ((curveSet?.GetName?.() ?? curveSet?.name) === name) duration = Math.max(duration, Number(curveSet.GetMaxCurveDuration?.() ?? 0));\n return duration;\n }\n\n /**\n * Returns the longest duration of a named time range across the curve sets\n * carrying the given name, or 0 when none match.\n */\n @carbon.method\n @impl.implemented\n GetRangeDuration(name, rangeName)\n {\n let duration = 0;\n for (const curveSet of this.curveSets) if ((curveSet?.GetName?.() ?? curveSet?.name) === name) duration = Math.max(duration, Number(curveSet.GetRangeDuration?.(rangeName) ?? 0));\n return duration;\n }\n\n static Tr2Lod = Tr2Lod;\n\n static #identity = mat4.create();\n static #zero = vec3.create();\n static #sphere = vec4.create();\n static #localSphere = vec4.create();\n static #childSphere = vec4.create();\n static #boundsMin = vec3.create();\n static #boundsMax = vec3.create();\n}\n"],"names":["INVERSE_PATCH_SCRATCH","mat4","create","_EveTransform","_identity","EveTransform","Tr2Transform","e","_init_meshLod","_init_extra_meshLod","_init_children","_init_extra_children","_init_overrideBoundsMin","_init_extra_overrideBoundsMin","_init_overrideBoundsMax","_init_extra_overrideBoundsMax","_init_particleEmitters","_init_extra_particleEmitters","_init_particleSystems","_init_extra_particleSystems","_init_lodLevel","_init_extra_lodLevel","_init_hideOnLowQuality","_init_extra_hideOnLowQuality","_init_visibilityThreshold","_init_extra_visibilityThreshold","_init_observers","_init_extra_observers","_init_useLodLevel","_init_extra_useLodLevel","_initProto","c","_initClass","_applyDecs","type","define","className","family","io","persist","model","list","vec3","read","int32","schema","enum","boolean","float32","carbon","method","impl","implemented","adapted","reason","meshLod","children","overrideBoundsMin","overrideBoundsMax","particleEmitters","particleSystems","lodLevel","Tr2Lod","TR2_LOD_LOW","hideOnLowQuality","visibilityThreshold","observers","useLodLevel","EveLODHelper","lowUpdateRate","Initialize","mesh","UpdateViewDependentData","context","parentTransform","copy","worldTransform","fromRotationTranslationScale","localTransform","rotation","translation","scaling","multiply","system","GetFrustum","frustum","observer","Update","UpdateSyncronous","UpdateAsyncronous","_context","update","time","Number","GetTime","currentTime","deltaTime","GetDeltaT","deltaT","ShouldUpdate","curveSet","curveSets","child","UpdateTransform","originShift","GetOriginShift","emitter","transform","UpdateVisibility","display","lowQuality","device","valid","GetBoundingSphere","visible","IsSphereVisible","size","GetPixelSizeAccross","Infinity","UseWithScreenSize","medium","GetMediumDetailThreshold","mediumDetailThreshold","low","GetLowDetailThreshold","lowDetailThreshold","TR2_LOD_HIGH","TR2_LOD_MEDIUM","length","MergeLOD","GetLODLevel","TR2_LOD_UNSPECIFIED","GetRenderables","out","SortParticles","push","GetPerObjectData","accumulator","data","Alloc","SetAndTranspose","invert","patched","identity","GetBatches","batches","batchType","perObjectData","_reason","GetAreas","GetPickingBatches","pickTypes","TR2_PICK_TYPE_DEFAULT","Tr2PickType","PICK_TYPE_PICKING","TriBatchType","TRIBATCHTYPE_PICKING","PICK_TYPE_OPAQUE","TRIBATCHTYPE_OPAQUE","PICK_TYPE_TRANSPARENT","TRIBATCHTYPE_TRANSPARENT","TRIBATCHTYPE_ADDITIVE","GetID","_areaID","HasTransparentBatches","GetSortValue","renderContext","viewPosition","GetViewPosition","x","y","z","Math","hypot","sortValueMultiplier","vec4","query","equals","sph3","fromBounds","transformMat4","GetBoundingBox","union","GetWorldPosition","set","subarray","GetWorldRotation","quat","SetDisplay","value","PlayCurveSets","Play","PlayCurveSet","name","rangeName","GetName","PlayTimeRange","ResetTimeRange","StopCurveSet","Stop","GetCurveSetDuration","duration","max","GetMaxCurveDuration","GetRangeDuration","constructor"],"mappings":"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"}