@carbonenginejs/runtime 0.1.0-alpha.4 → 0.1.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/global/blue/BlueClasses.js +200 -0
- package/dist/global/blue/BlueClasses.js.map +1 -0
- package/dist/global/blue/IBlueClasses.js +79 -0
- package/dist/global/blue/IBlueClasses.js.map +1 -0
- package/dist/global/blue/IBlueDynamicResourceConstructor.js +16 -0
- package/dist/global/blue/IBlueDynamicResourceConstructor.js.map +1 -1
- package/dist/global/blue/blue.js +8 -2
- package/dist/global/blue/blue.js.map +1 -1
- package/dist/global/blue/index.js +2 -0
- package/dist/global/blue/index.js.map +1 -1
- package/dist/global/consts/index.js +0 -1
- package/dist/global/consts/index.js.map +1 -1
- package/dist/global/consts/renderContext/formats.js +26 -25
- package/dist/global/consts/renderContext/formats.js.map +1 -1
- package/dist/{trinityal/Tr2BitmapDimensions.js → global/imageio/BitmapDimensions.js} +19 -15
- package/dist/global/imageio/BitmapDimensions.js.map +1 -0
- package/dist/global/imageio/Cutout.js +28 -0
- package/dist/global/imageio/Cutout.js.map +1 -0
- package/dist/global/imageio/HostBitmap.js +1106 -0
- package/dist/global/imageio/HostBitmap.js.map +1 -0
- package/dist/global/imageio/ImageIOResult.js +99 -0
- package/dist/global/imageio/ImageIOResult.js.map +1 -0
- package/dist/global/imageio/ImageUtility.js +205 -0
- package/dist/global/imageio/ImageUtility.js.map +1 -0
- package/dist/global/imageio/LoadParameters.js +86 -0
- package/dist/global/imageio/LoadParameters.js.map +1 -0
- package/dist/global/imageio/Metadata.js +22 -0
- package/dist/global/imageio/Metadata.js.map +1 -0
- package/dist/global/imageio/index.js +8 -0
- package/dist/global/{consts/webgpu → imageio}/index.js.map +1 -1
- package/dist/global/index.js +2 -1
- package/dist/global/index.js.map +1 -1
- package/dist/global/math/color.js +1 -1
- package/dist/global/math/color.js.map +1 -1
- package/dist/global/schema/CjsSchema.js +8 -0
- package/dist/global/schema/CjsSchema.js.map +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsResMan.js +47 -7
- package/dist/resource/CjsResMan.js.map +1 -1
- package/dist/resource/Tr2LightProfileRes.js +37 -0
- package/dist/resource/Tr2LightProfileRes.js.map +1 -1
- package/dist/resource/format/CjsByteWriter.js +46 -46
- package/dist/resource/format/CjsByteWriter.js.map +1 -1
- package/dist/resource/format/CjsFormat.js +7 -8
- package/dist/resource/format/CjsFormat.js.map +1 -1
- package/dist/resource/format/CjsFormatStore.js +8 -8
- package/dist/resource/format/CjsFormatStore.js.map +1 -1
- package/dist/resource/format/CjsGeometryFormat.js +114 -0
- package/dist/resource/format/CjsGeometryFormat.js.map +1 -0
- package/dist/resource/format/CjsImageFormat.js +282 -0
- package/dist/resource/format/CjsImageFormat.js.map +1 -0
- package/dist/resource/format/CjsResourceProbe.js +12 -48
- package/dist/resource/format/CjsResourceProbe.js.map +1 -1
- package/dist/resource/format/CjsStringTable.js +37 -37
- package/dist/resource/format/CjsStringTable.js.map +1 -1
- package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js +10 -10
- package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
- package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js +37 -37
- package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -1
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +35 -7
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/resource/format/index.js +3 -1
- package/dist/resource/format/index.js.map +1 -1
- package/dist/resource/formats/black/CjsBlackFormat.js +130 -137
- package/dist/resource/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/resource/formats/bnk/CjsBnkFormat.js +12 -19
- package/dist/resource/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/resource/formats/bnk/core/helpers.js +1 -3
- package/dist/resource/formats/bnk/core/helpers.js.map +1 -1
- package/dist/resource/formats/cmf/CjsCmfFormat.js +19 -82
- package/dist/resource/formats/cmf/CjsCmfFormat.js.map +1 -1
- package/dist/resource/formats/cmf/core/constants.js +1 -2
- package/dist/resource/formats/cmf/core/constants.js.map +1 -1
- package/dist/resource/formats/{stl/core/targets.js → cmf/core/flatShared.js} +9 -8
- package/dist/resource/formats/cmf/core/flatShared.js.map +1 -0
- package/dist/resource/formats/cmf/core/helpers.js +13 -13
- package/dist/resource/formats/cmf/core/helpers.js.map +1 -1
- package/dist/resource/formats/cmf/core/writer.js +24 -24
- package/dist/resource/formats/cmf/core/writer.js.map +1 -1
- package/dist/resource/formats/dds/CjsDdsFormat.js +134 -17
- package/dist/resource/formats/dds/CjsDdsFormat.js.map +1 -1
- package/dist/resource/formats/dds/core/helpers.js +125 -40
- package/dist/resource/formats/dds/core/helpers.js.map +1 -1
- package/dist/resource/formats/dxbc/CjsDxbcFormat.js +14 -16
- package/dist/resource/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/resource/formats/dxbc/core/{container.js → DxbcContainer.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcContainer.js.map +1 -0
- package/dist/resource/formats/dxbc/core/{errors.js → DxbcReadError.js} +1 -1
- package/dist/resource/formats/dxbc/core/DxbcReadError.js.map +1 -0
- package/dist/resource/formats/dxbc/core/DxbcReader.js +1 -1
- package/dist/resource/formats/dxbc/core/DxbcReader.js.map +1 -1
- package/dist/resource/formats/dxbc/core/{program.js → DxbcShaderProgram.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcShaderProgram.js.map +1 -0
- package/dist/resource/formats/dxbc/core/{signature.js → DxbcSignatureChunk.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcSignatureChunk.js.map +1 -0
- package/dist/resource/formats/dxbc/core/decoder.js +2 -2
- package/dist/resource/formats/dxbc/core/decoder.js.map +1 -1
- package/dist/resource/formats/dxbc/core/helpers.js +3 -3
- package/dist/resource/formats/dxbc/core/helpers.js.map +1 -1
- package/dist/resource/formats/fbx/CjsFbxFormat.js +18 -20
- package/dist/resource/formats/fbx/CjsFbxFormat.js.map +1 -1
- package/dist/resource/formats/flac/CjsFlacFormat.js +7 -13
- package/dist/resource/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/resource/formats/fsd/32/CjsFsd32Format.js +29 -29
- package/dist/resource/formats/fsd/32/CjsFsd32Format.js.map +1 -1
- package/dist/resource/formats/fsd/64/CjsFsd64Format.js +3 -3
- package/dist/resource/formats/fsd/64/CjsFsd64Format.js.map +1 -1
- package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js +23 -23
- package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js.map +1 -1
- package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js +8 -8
- package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js.map +1 -1
- package/dist/resource/formats/fsd/CjsFsdFormat.js +23 -23
- package/dist/resource/formats/fsd/CjsFsdFormat.js.map +1 -1
- package/dist/resource/formats/gif/CjsGifFormat.js +24 -15
- package/dist/resource/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/resource/formats/gltf/CjsGltfFormat.js +33 -98
- package/dist/resource/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/resource/formats/gltf/core/helpers.js +3 -12
- package/dist/resource/formats/gltf/core/helpers.js.map +1 -1
- package/dist/resource/formats/gr2/CjsGr2Format.js +27 -91
- package/dist/resource/formats/gr2/CjsGr2Format.js.map +1 -1
- package/dist/resource/formats/hlsl/CjsHlslFormat.js +22 -25
- package/dist/resource/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js +1 -1
- package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
- package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +3 -3
- package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -1
- package/dist/resource/formats/ies/CjsIESFormat.js +29 -29
- package/dist/resource/formats/ies/CjsIESFormat.js.map +1 -1
- package/dist/resource/formats/jpeg/CjsJpegFormat.js +24 -15
- package/dist/resource/formats/jpeg/CjsJpegFormat.js.map +1 -1
- package/dist/resource/formats/jpeg/core/helpers.js +3 -5
- package/dist/resource/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/resource/formats/jpeg/core/jpeg.js +58 -58
- package/dist/resource/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/resource/formats/jsonl/CjsJsonlFormat.js +3 -3
- package/dist/resource/formats/jsonl/CjsJsonlFormat.js.map +1 -1
- package/dist/resource/formats/mp3/CjsMp3Format.js +7 -14
- package/dist/resource/formats/mp3/CjsMp3Format.js.map +1 -1
- package/dist/resource/formats/mp3/core/helpers.js +3 -5
- package/dist/resource/formats/mp3/core/helpers.js.map +1 -1
- package/dist/resource/formats/mp4/CjsMp4Format.js +7 -13
- package/dist/resource/formats/mp4/CjsMp4Format.js.map +1 -1
- package/dist/resource/formats/mp4/core/helpers.js +3 -5
- package/dist/resource/formats/mp4/core/helpers.js.map +1 -1
- package/dist/resource/formats/obj/CjsObjFormat.js +92 -157
- package/dist/resource/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/resource/formats/obj/core/helpers.js +5 -113
- package/dist/resource/formats/obj/core/helpers.js.map +1 -1
- package/dist/resource/formats/ogg/CjsOggFormat.js +7 -14
- package/dist/resource/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/resource/formats/pickle/CjsPickleFormat.js +7 -12
- package/dist/resource/formats/pickle/CjsPickleFormat.js.map +1 -1
- package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js +7 -7
- package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -1
- package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js +7 -7
- package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js.map +1 -1
- package/dist/resource/formats/png/CjsPngFormat.js +40 -15
- package/dist/resource/formats/png/CjsPngFormat.js.map +1 -1
- package/dist/resource/formats/png/core/helpers.js +4 -6
- package/dist/resource/formats/png/core/helpers.js.map +1 -1
- package/dist/resource/formats/red/CjsRedFormat.js +22 -28
- package/dist/resource/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js +3 -7
- package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js.map +1 -1
- package/dist/resource/formats/schemabound/core/schemaBoundValues.js +5 -0
- package/dist/resource/formats/schemabound/core/schemaBoundValues.js.map +1 -1
- package/dist/resource/formats/sqlite/CjsSqliteFormat.js +4 -9
- package/dist/resource/formats/sqlite/CjsSqliteFormat.js.map +1 -1
- package/dist/resource/formats/static/CjsStaticFormat.js +4 -4
- package/dist/resource/formats/static/CjsStaticFormat.js.map +1 -1
- package/dist/resource/formats/stl/CjsStlFormat.js +39 -104
- package/dist/resource/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/resource/formats/stl/core/helpers.js +5 -19
- package/dist/resource/formats/stl/core/helpers.js.map +1 -1
- package/dist/resource/formats/tga/CjsTgaFormat.js +26 -15
- package/dist/resource/formats/tga/CjsTgaFormat.js.map +1 -1
- package/dist/resource/formats/tga/core/helpers.js +3 -5
- package/dist/resource/formats/tga/core/helpers.js.map +1 -1
- package/dist/resource/formats/vta/CjsVtaFormat.js +8 -15
- package/dist/resource/formats/vta/CjsVtaFormat.js.map +1 -1
- package/dist/resource/formats/wav/CjsWavFormat.js +7 -14
- package/dist/resource/formats/wav/CjsWavFormat.js.map +1 -1
- package/dist/resource/formats/wav/core/helpers.js +3 -5
- package/dist/resource/formats/wav/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgl/CjsWebglFormat.js +103 -105
- package/dist/resource/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/resource/formats/webgl/core/{errors.js → WebglReadError.js} +1 -1
- package/dist/resource/formats/webgl/core/WebglReadError.js.map +1 -0
- package/dist/resource/formats/webgl/core/effectPackage.js +1 -1
- package/dist/resource/formats/webgl/core/effectPackage.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +3 -3
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/{DxbcGlslHelpers.js → DxbcGlslHelperRegistry.js} +2 -2
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelperRegistry.js.map +1 -0
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/resource/formats/webgl/core/glslBackendBlock.js +1 -1
- package/dist/resource/formats/webgl/core/glslBackendBlock.js.map +1 -1
- package/dist/resource/formats/webgl/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgpu/CjsWebgpuFormat.js +28 -29
- package/dist/resource/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/resource/formats/webgpu/core/{errors.js → WebgpuReadError.js} +1 -1
- package/dist/resource/formats/webgpu/core/WebgpuReadError.js.map +1 -0
- package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js +1 -1
- package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -1
- package/dist/resource/formats/webgpu/core/helpers.js +1 -1
- package/dist/resource/formats/webgpu/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js +1 -1
- package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js +18 -6
- package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +39 -13
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +16 -14
- package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -1
- package/dist/resource/formats/webm/CjsWebmFormat.js +8 -13
- package/dist/resource/formats/webm/CjsWebmFormat.js.map +1 -1
- package/dist/resource/formats/webm/core/helpers.js +3 -5
- package/dist/resource/formats/webm/core/helpers.js.map +1 -1
- package/dist/resource/formats/webp/CjsWebpFormat.js +8 -12
- package/dist/resource/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/resource/formats/wem/CjsWemFormat.js +9 -17
- package/dist/resource/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/resource/formats/wem/core/bitStream.js +35 -35
- package/dist/resource/formats/wem/core/bitStream.js.map +1 -1
- package/dist/resource/formats/wem/core/helpers.js +1 -3
- package/dist/resource/formats/wem/core/helpers.js.map +1 -1
- package/dist/resource/formats/yaml/CjsYamlFormat.js +28 -37
- package/dist/resource/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/resource/imageio/ImageIO.js +142 -0
- package/dist/resource/imageio/ImageIO.js.map +1 -0
- package/dist/resource/imageio/index.js +17 -0
- package/dist/resource/imageio/index.js.map +1 -0
- package/dist/resource/index.js +7 -0
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +24 -2
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +76 -5
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/texture/CjsTextureArrayConstructor.js +97 -0
- package/dist/resource/texture/CjsTextureArrayConstructor.js.map +1 -0
- package/dist/resource/texture/CjsTexturePackConstructor.js +160 -0
- package/dist/resource/texture/CjsTexturePackConstructor.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepArray.js +72 -0
- package/dist/resource/texture/CjsTexturePipelineStepArray.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepConvert.js +73 -0
- package/dist/resource/texture/CjsTexturePipelineStepConvert.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepPack.js +71 -0
- package/dist/resource/texture/CjsTexturePipelineStepPack.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepResize.js +123 -0
- package/dist/resource/texture/CjsTexturePipelineStepResize.js.map +1 -0
- package/dist/resource/texture/SolidColorTextureConstructor.js +11 -1
- package/dist/resource/texture/SolidColorTextureConstructor.js.map +1 -1
- package/dist/resource/texture/Tr2ImageRes.js +100 -68
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipeline.js +45 -25
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +34 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +30 -3
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +81 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +36 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +146 -24
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -1
- package/dist/resource/texture/TriTextureRes.js +151 -29
- package/dist/resource/texture/TriTextureRes.js.map +1 -1
- package/dist/resource/texture/index.js +7 -0
- package/dist/resource/texture/index.js.map +1 -1
- package/dist/resource/texture/registerTextureResources.js +83 -0
- package/dist/resource/texture/registerTextureResources.js.map +1 -0
- package/dist/resource/texture/solidColorTexture.js +10 -19
- package/dist/resource/texture/solidColorTexture.js.map +1 -1
- package/dist/sof/EveSOF.js +39 -7
- package/dist/sof/EveSOF.js.map +1 -1
- package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js +2 -2
- package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js.map +1 -1
- package/dist/trinity/core/Tr2ImageIOHelpers.js +80 -17
- package/dist/trinity/core/Tr2ImageIOHelpers.js.map +1 -1
- package/dist/trinity/core/Tr2RenderUtils.js +1 -1
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js +49 -62
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js.map +1 -1
- package/dist/trinity/core/Tr2TextureReference.js +114 -0
- package/dist/trinity/core/Tr2TextureReference.js.map +1 -0
- package/dist/trinity/core/device/Tr2DepthStencil.js +2 -2
- package/dist/trinity/core/device/Tr2DepthStencil.js.map +1 -1
- package/dist/trinity/core/device/Tr2RingBuffer/Tr2RingBuffer.js +1 -1
- package/dist/trinity/core/index.js +1 -0
- package/dist/trinity/core/index.js.map +1 -1
- package/dist/trinity/core/lighting/Tr2LightManager.js +5 -4
- package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
- package/dist/trinity/core/procedural/GradientTextureConstructor.js +5 -4
- package/dist/trinity/core/procedural/GradientTextureConstructor.js.map +1 -1
- package/dist/trinity/core/procedural/gradientTexture.js +10 -13
- package/dist/trinity/core/procedural/gradientTexture.js.map +1 -1
- package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js +1 -1
- package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js.map +1 -1
- package/dist/trinity/eve/EveImpactOverlay.js +102 -50
- package/dist/trinity/eve/EveImpactOverlay.js.map +1 -1
- package/dist/trinity/eve/EveModularObjectModifier.js +9 -18
- package/dist/trinity/eve/EveModularObjectModifier.js.map +1 -1
- package/dist/trinity/eve/attachment/turrets/EveTurretSet.js +175 -157
- package/dist/trinity/eve/attachment/turrets/EveTurretSet.js.map +1 -1
- package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js +100 -83
- package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js.map +1 -1
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js +26 -20
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js.map +1 -1
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js +368 -179
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js.map +1 -1
- package/dist/trinity/eve/child/EveChildMesh.js +242 -234
- package/dist/trinity/eve/child/EveChildMesh.js.map +1 -1
- package/dist/trinity/eve/child/EveChildTurret.js +57 -16
- package/dist/trinity/eve/child/EveChildTurret.js.map +1 -1
- package/dist/trinity/eve/child/EveSpaceObjectChild.js +28 -1
- package/dist/trinity/eve/child/EveSpaceObjectChild.js.map +1 -1
- package/dist/trinity/eve/index.js +2 -2
- package/dist/trinity/eve/overlays/EveDamageOverlay.js +5 -1
- package/dist/trinity/eve/overlays/EveDamageOverlay.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceScene.js +234 -233
- package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +2 -0
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js +492 -437
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js.map +1 -1
- package/dist/trinity/generated/index.js +0 -1
- package/dist/trinity/generated/index.js.map +1 -1
- package/dist/trinity/generated/trinityCore/index.js +0 -1
- package/dist/trinity/generated/trinityCore/index.js.map +1 -1
- package/dist/trinity/index.js +3 -3
- package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js +10 -1
- package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js.map +1 -1
- package/dist/trinity/shader/Tr2DataTextureManager.js +152 -66
- package/dist/trinity/shader/Tr2DataTextureManager.js.map +1 -1
- package/dist/trinity/shader/Tr2Material.js +1 -1
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js +5 -5
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js.map +1 -1
- package/dist/trinityal/index.js +1 -1
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js +2 -2
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2SwapChainALStub.js +45 -45
- package/dist/trinityal/stub/Tr2SwapChainALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2TextureALStub.js +170 -170
- package/dist/trinityal/stub/Tr2TextureALStub.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuDevice.js +234 -164
- package/dist/trinityal/webgpu/CjsWebgpuDevice.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +7 -0
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +78 -14
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +94 -0
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -0
- package/dist/trinityal/webgpu/internal.js +1 -0
- package/dist/trinityal/webgpu/internal.js.map +1 -1
- package/docs/global/reference/classes/README.md +90 -0
- package/docs/resource/concepts/format-capabilities.md +3 -3
- package/docs/resource/formats/README.md +1 -1
- package/docs/resource/reference/classes/core.md +31 -1
- package/docs/resource/reference/classes/formats.md +7 -7
- package/docs/resource/reference/classes/resources.md +76 -16
- package/docs/trinity/reference/classes/generated.md +0 -10
- package/docs/trinity/reference/classes/trinity-core.md +1692 -1682
- package/docs/trinityal/reference/classes/README.md +0 -10
- package/docs/trinityal/webgpu/reference/classes/README.md +276 -266
- package/package.json +4 -3
- package/dist/global/consts/webgpu/index.js +0 -2
- package/dist/global/consts/webgpu/textureFormats.js +0 -180
- package/dist/global/consts/webgpu/textureFormats.js.map +0 -1
- package/dist/resource/formats/dxbc/core/container.js.map +0 -1
- package/dist/resource/formats/dxbc/core/errors.js.map +0 -1
- package/dist/resource/formats/dxbc/core/program.js.map +0 -1
- package/dist/resource/formats/dxbc/core/signature.js.map +0 -1
- package/dist/resource/formats/stl/core/targets.js.map +0 -1
- package/dist/resource/formats/webgl/core/errors.js.map +0 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +0 -1
- package/dist/resource/formats/webgpu/core/errors.js.map +0 -1
- package/dist/resource/texture/texturePipelineBehavior.js +0 -332
- package/dist/resource/texture/texturePipelineBehavior.js.map +0 -1
- package/dist/trinity/generated/trinityCore/Tr2TextureReference.js +0 -40
- package/dist/trinity/generated/trinityCore/Tr2TextureReference.js.map +0 -1
- package/dist/trinityal/Tr2BitmapDimensions.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EveChildInstancedMeshes.js","sources":["../../../../../../src/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js"],"sourcesContent":["// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildInstancedMeshes.h\r\n// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildInstancedMeshes.cpp\r\n// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildInstancedMeshes_Blue.cpp\r\nimport { mat4 } from \"#math/mat4\";\r\nimport { quat } from \"#math/quat\";\r\nimport { vec3 } from \"#math/vec3\";\r\nimport { carbon, impl, edit, type } from \"#schema\";\r\nimport { EveComponentType, ShouldReflect } from \"../../EveComponentTypes.js\";\r\nimport { EveSpaceObjectChild } from \"../EveSpaceObjectChild.js\";\r\nimport { RawData } from \"../../../core/rawData/RawData.js\";\r\nimport { Tr2RenderReason } from \"../../../generated/trinityCore/enums.js\";\r\nimport {\r\n CollectInstancedOverlayAreaBlocks,\r\n EmitOverlayBatches\r\n} from \"../../overlays/overlayBatches.js\";\r\nimport { ITr2Renderable } from \"../../../core/ITr2Renderable.js\";\r\nimport { EveChildInstancedMeshArea } from \"./EveChildInstancedMeshArea.js\";\r\nimport { EveChildInstancedMeshInstance } from \"./EveChildInstancedMeshInstance.js\";\r\nimport { EveChildInstancedMesh } from \"./EveChildInstancedMesh.js\";\r\n\r\n\r\n/** Carbon EveInstancedMeshManager::InstanceFlags (EveInstancedMeshManager.h:\r\n * 13-26, cpp:998-1048): a uint32 bitfield - bit (1 << batchType) per present\r\n * batch type, CASTS_SHADOW = 1 << 30, RENDER_IN_REFLECTION = 1 << 31. */\r\nexport const INSTANCE_FLAG_CASTS_SHADOW = 0x40000000;\r\nexport const INSTANCE_FLAG_RENDER_IN_REFLECTION = 0x80000000;\r\n\r\nconst POSITION_SCRATCH = vec3.create();\r\nconst OVERLAY_LOCAL_SCRATCH = mat4.create();\r\nconst OVERLAY_WORLD_SCRATCH = mat4.create();\r\nconst OVERLAY_WORLD_LAST_SCRATCH = mat4.create();\r\nconst OVERLAY_INV_WORLD_SCRATCH = mat4.create();\r\nconst OVERLAY_INV_LOCAL_SCRATCH = mat4.create();\r\nconst OVERLAY_CLIP_SCRATCH = vec3.create();\r\n\r\n/**\r\n * Space-object child that hands batches of instanced meshes to the engine's\r\n * instanced mesh manager, owning their registration handles, instance flags and\r\n * world cull bounds.\r\n */\r\n@type.define({ className: \"EveChildInstancedMeshes\", family: \"eve/child\" })\r\n@carbon.inherit(ITr2Renderable)\r\nexport class EveChildInstancedMeshes extends EveSpaceObjectChild\r\n{\r\n @edit.persist\r\n @type.string\r\n name = \"\";\r\n\r\n @edit.read\r\n @type.mat4\r\n worldTransform = mat4.create();\r\n\r\n @edit.read\r\n @type.boolean\r\n hasUpdated = false;\r\n\r\n @edit.persist\r\n @type.list(\"EveChildInstancedMesh\")\r\n meshes = [];\r\n\r\n #revision = 0;\r\n\r\n /** Carbon m_perObjectDataHandle (h:143) - manager registration handle. */\r\n #perObjectDataHandle = null;\r\n\r\n /**\r\n * Carbon m_perObjectData (EveSpacePerObjectData): the PERSISTENT per-instance\r\n * record the mesh manager uploads into its structured buffer.\r\n */\r\n #perObjectData = RawData.create(\"EveSpacePerObjectData\");\r\n\r\n /** Base-hull record used by meshes that opt out of the parent's clip. */\r\n #perObjectDataNoClip = RawData.create(\"EveSpacePerObjectData\");\r\n\r\n #perObjectDataNoClipHandle = null;\r\n\r\n /** Engine manager that owns every currently retained opaque handle. */\r\n #meshManager = null;\r\n\r\n #parentOverlayEffects = null;\r\n\r\n #lastCameraFrustum = null;\r\n\r\n #lastInvLodFactor = 1;\r\n\r\n static #inverseScratch = mat4.create();\r\n\r\n static #customMaskScratch = mat4.create();\r\n\r\n /** EVE_SPACEOBJECT_CUSTOWMASK_MAX (EveSpaceObject2.h:49). */\r\n static CUSTOM_MASK_COUNT = 2;\r\n\r\n /** Carbon m_allRegistered (h:147) - the AddMeshesToManager retry latch:\r\n * set optimistically each pass, cleared by ANY not-ready mesh/area so the\r\n * per-frame CollectMeshes retries until geometry streams in. */\r\n #allRegistered = false;\r\n\r\n /**\r\n * The authored name, persisted with the child and used to identify it in the\r\n * parent graph.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n GetName()\r\n {\r\n return this.name;\r\n }\r\n\r\n /** Sets the authored child name, coercing nullish to the empty string. */\r\n @carbon.method\r\n @impl.implemented\r\n SetName(name)\r\n {\r\n this.name = String(name ?? \"\");\r\n }\r\n\r\n /**\r\n * Carbon EveChildInstancedMeshes::UpdateVisibility (cpp:183-186) only caches\r\n * the frame's camera frustum for later use; the JS port has no consumer for\r\n * that cache, so the frame hook does nothing.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n UpdateVisibility(updateContext)\r\n {\r\n this.#lastCameraFrustum = updateContext.GetFrustum();\r\n this.#lastInvLodFactor = updateContext.GetInvLodFactor();\r\n }\r\n\r\n /**\r\n * Carbon EveChildInstancedMeshes::GetRenderables (cpp:188-190) collects\r\n * nothing: the instanced mesh manager emits the draws, so the accumulator\r\n * comes back unchanged.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n GetRenderables(renderables = [])\r\n {\r\n if (this.hasUpdated &&\r\n ((this.#parentOverlayEffects?.length && this.#AnyMeshInheritsOverlayEffects()) ||\r\n this.#HasAnyOwnOverlayEffects()))\r\n {\r\n renderables.push(this);\r\n }\r\n return renderables;\r\n }\r\n\r\n /**\r\n * Carbon EveChildInstancedMeshes::GetBoundingSphere (cpp:192-195) always\r\n * returns false - the child publishes no bounds of its own, because each mesh\r\n * registers its own sphere group with the manager.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n GetBoundingSphere()\r\n {\r\n return false;\r\n }\r\n\r\n /**\r\n * Carbon EveChildInstancedMeshes::UpdateAsyncronous (cpp:204-238): the\r\n * per-instance record is this child's own transforms plus the hull values it\r\n * inherits, flattened into ONE struct - EveSpacePerObjectData carries both\r\n * the VS and PS halves because the manager uploads it as a single instance.\r\n * @param {Object} parent - the space-object parent, when there is one\r\n */\r\n #UpdatePerObjectData(parent)\r\n {\r\n const record = this.#perObjectData;\r\n\r\n // Recover the previous logical transform from its stored transposed bytes,\r\n // then encode it into worldTransformLast.\r\n mat4.transpose(EveChildInstancedMeshes.#inverseScratch, record.GetTransposed(\"worldTransform\"));\r\n record.SetAndTranspose(\"worldTransformLast\", EveChildInstancedMeshes.#inverseScratch);\r\n record.SetAndTranspose(\"worldTransform\", this.worldTransform);\r\n\r\n // cpp:214 inverts the transposed matrix; by carbon-math-conventions F2 that\r\n // equals the transpose of the logical inverse, which is what this produces.\r\n const inverse = EveChildInstancedMeshes.#inverseScratch;\r\n if (!mat4.invert(inverse, this.worldTransform))\r\n {\r\n mat4.identity(inverse);\r\n }\r\n record.SetAndTranspose(\"invWorldTransform\", inverse);\r\n\r\n if (!parent)\r\n {\r\n this.#perObjectDataNoClip.CopyFrom(record);\r\n return { vs: RawData.create(\"EveSpaceObjectVSData\"), ps: RawData.create(\"EveSpaceObjectPSData\") };\r\n }\r\n\r\n const { vs, ps } = parent.GetPerObjectStructs();\r\n\r\n for (const name of [ \"shipData\", \"clipSphereCenter\", \"clipRadiusSq\", \"clipRadius2Sq\",\r\n \"impactDataOffset\", \"clipSphereFactor2\", \"clipSphereFactor\" ])\r\n {\r\n record.Set(name, ps.Get(name));\r\n }\r\n for (const name of [ \"ellpsoidRadii\", \"ellpsoidCenter\", \"customData\" ])\r\n {\r\n record.Set(name, vs.Get(name));\r\n }\r\n record.Set(\"customMaskClamps\", ps.Get(\"customMaskClamps\"));\r\n record.Set(\"boneOffsets\", vs.Get(\"boneOffsets\"));\r\n\r\n for (let slot = 0; slot < EveChildInstancedMeshes.CUSTOM_MASK_COUNT; slot++)\r\n {\r\n mat4.transpose(\r\n EveChildInstancedMeshes.#customMaskScratch,\r\n vs.GetTransposedIndex(\"customMaskMatrix\", slot));\r\n record.SetAndTransposeIndex(\r\n \"customMaskMatrix\", slot, EveChildInstancedMeshes.#customMaskScratch);\r\n record.SetIndex(\"customMaskData\", slot, vs.GetIndex(\"customMaskData\", slot));\r\n record.SetIndex(\"customMaskMaterialIDs\", slot, ps.GetIndex(\"customMaskMaterialIDs\", slot));\r\n record.SetIndex(\"customMaskTargets\", slot, ps.GetIndex(\"customMaskTargets\", slot));\r\n }\r\n\r\n // cpp:238: the PS record's coefficients land in the record's shLighting.\r\n record.Set(\"shLighting\", ps.Get(\"shLightingCoefficients\"));\r\n\r\n this.#perObjectDataNoClip.CopyFrom(record);\r\n this.#perObjectDataNoClip.Set(\"clipRadiusSq\", [ 0 ]);\r\n this.#perObjectDataNoClip.Set(\"clipRadius2Sq\", [ 0 ]);\r\n this.#perObjectDataNoClip.Set(\"clipSphereFactor\", [ 0 ]);\r\n this.#perObjectDataNoClip.Set(\"clipSphereFactor2\", [ 0 ]);\r\n return { vs, ps };\r\n }\r\n\r\n /**\r\n * Stamps the child's world transform from the parent's localToWorldTransform\r\n * (Carbon cpp:197-200); every per-instance cull sphere the async pass builds\r\n * is derived from it.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n UpdateSyncronous(updateContext, params)\r\n {\r\n if (params?.localToWorldTransform?.length === 16)\r\n {\r\n mat4.copy(this.worldTransform, params.localToWorldTransform);\r\n }\r\n\r\n const time = updateContext.GetTime();\r\n for (const mesh of this.meshes)\r\n {\r\n for (const overlay of mesh.ownOverlayEffects) overlay.Update(time, time);\r\n }\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::UpdateAsyncronous (cpp:202-328), the CPU\r\n * half: per-mesh RENDER_IN_REFLECTION refresh (cpp:251), the mesh-local\r\n * bounds sphere radius = |center| + radius (cpp:254-255), per-instance\r\n * world cull spheres - position from the instance translation (Carbon reads\r\n * the packed rows' w = _41.._43, i.e. the transform translation) moved\r\n * through the child world transform, radius scaled by the instance's max\r\n * basis length times the child worldScale (cpp:259-269; NOTE Carbon's two\r\n * scale extractions deliberately differ - worldScale uses the world\r\n * transform's basis ROWS while the instance scale uses the packed rows'\r\n * xyz = the transpose's rows; equal under rotation + uniform scale,\r\n * ported exactly) - the world bounding sphere over all instance spheres\r\n * (cpp:257-270), a live SetSphereGroupBounds refresh on registered handles\r\n * (cpp:272-278), and the hasUpdated stamp (cpp:281). */\r\n @carbon.method\r\n @impl.adapted\r\n @impl.reason(\"Trinity owns the CPU per-object field copy; the raytracing mesh build (cpp:283-327) is not ported yet. Mesh bounds come from a GetMeshData duck ({minBounds, maxBounds}) and meshes without one are skipped fail-closed.\")\r\n UpdateAsyncronous(_updateContext, params)\r\n {\r\n const previousWorldTransform = mat4.create();\r\n mat4.transpose(previousWorldTransform, this.#perObjectData.GetTransposed(\"worldTransform\"));\r\n const parentRecords = this.#UpdatePerObjectData(params?.spaceObjectParent ?? null);\r\n const w = this.worldTransform;\r\n // cpp:240-242 - worldScale from the world transform's basis rows.\r\n const worldScale = Math.max(\r\n Math.hypot(w[0], w[1], w[2]),\r\n Math.hypot(w[4], w[5], w[6]),\r\n Math.hypot(w[8], w[9], w[10])\r\n );\r\n\r\n for (const mesh of this.meshes)\r\n {\r\n const geometry = mesh.GetGeometryResource();\r\n if (!geometry || geometry.IsGood() === false)\r\n {\r\n continue;\r\n }\r\n\r\n // cpp:251 - refreshed every pass (set OR cleared).\r\n mesh.flags = ShouldReflect(mesh.reflectionMode)\r\n ? (mesh.flags | INSTANCE_FLAG_RENDER_IN_REFLECTION) >>> 0\r\n : (mesh.flags & ~INSTANCE_FLAG_RENDER_IN_REFLECTION) >>> 0;\r\n\r\n const meshData = geometry.GetMeshData(mesh.meshIndex);\r\n const minBounds = meshData.minBounds;\r\n const maxBounds = meshData.maxBounds;\r\n if (!minBounds || !maxBounds)\r\n {\r\n continue;\r\n }\r\n // cpp:254-255 - Sphere(AABB): center (min+max)/2, radius |max-min|/2;\r\n // then radius = sphere.radius + |sphere.center| (origin-inclusive).\r\n const centerX = (minBounds[0] + maxBounds[0]) * 0.5;\r\n const centerY = (minBounds[1] + maxBounds[1]) * 0.5;\r\n const centerZ = (minBounds[2] + maxBounds[2]) * 0.5;\r\n const localRadius =\r\n Math.hypot(maxBounds[0] - minBounds[0], maxBounds[1] - minBounds[1], maxBounds[2] - minBounds[2]) * 0.5 +\r\n Math.hypot(centerX, centerY, centerZ);\r\n\r\n mesh.instanceSpheres.length = mesh.instances.length;\r\n let boundsMinX = Infinity, boundsMinY = Infinity, boundsMinZ = Infinity;\r\n let boundsMaxX = -Infinity, boundsMaxY = -Infinity, boundsMaxZ = -Infinity;\r\n for (let index = 0; index < mesh.instances.length; index++)\r\n {\r\n const transform = mesh.instances[index].transform;\r\n // cpp:261 - packed rows' w = the transform translation (gl [12..14]).\r\n POSITION_SCRATCH[0] = transform[12];\r\n POSITION_SCRATCH[1] = transform[13];\r\n POSITION_SCRATCH[2] = transform[14];\r\n // cpp:262-264 - instance scale from the packed rows' xyz (the\r\n // transpose's rows: gl (t[0],t[4],t[8]) / (t[1],t[5],t[9]) /\r\n // (t[2],t[6],t[10])) - deliberately NOT the same extraction as\r\n // worldScale above.\r\n const scale = Math.max(\r\n Math.hypot(transform[0], transform[4], transform[8]),\r\n Math.hypot(transform[1], transform[5], transform[9]),\r\n Math.hypot(transform[2], transform[6], transform[10])\r\n ) * worldScale;\r\n vec3.transformMat4(POSITION_SCRATCH, POSITION_SCRATCH, w);\r\n\r\n const radius = localRadius * scale;\r\n const sphere = mesh.instanceSpheres[index] ??= { center: vec3.create(), radius: 0 };\r\n vec3.copy(sphere.center, POSITION_SCRATCH);\r\n sphere.radius = radius;\r\n\r\n boundsMinX = Math.min(boundsMinX, POSITION_SCRATCH[0] - radius);\r\n boundsMinY = Math.min(boundsMinY, POSITION_SCRATCH[1] - radius);\r\n boundsMinZ = Math.min(boundsMinZ, POSITION_SCRATCH[2] - radius);\r\n boundsMaxX = Math.max(boundsMaxX, POSITION_SCRATCH[0] + radius);\r\n boundsMaxY = Math.max(boundsMaxY, POSITION_SCRATCH[1] + radius);\r\n boundsMaxZ = Math.max(boundsMaxZ, POSITION_SCRATCH[2] + radius);\r\n }\r\n if (mesh.instances.length)\r\n {\r\n // cpp:270 - Sphere(worldBounds).\r\n const sphereCenter = mesh.worldBoundingSphere.center;\r\n sphereCenter[0] = (boundsMinX + boundsMaxX) * 0.5;\r\n sphereCenter[1] = (boundsMinY + boundsMaxY) * 0.5;\r\n sphereCenter[2] = (boundsMinZ + boundsMaxZ) * 0.5;\r\n mesh.worldBoundingSphere.radius =\r\n Math.hypot(boundsMaxX - boundsMinX, boundsMaxY - boundsMinY, boundsMaxZ - boundsMinZ) * 0.5;\r\n\r\n // cpp:272-278 - live refresh of a registered sphere group.\r\n if (mesh.sphereHandle !== null)\r\n {\r\n this.#meshManager.SetSphereGroupBounds(\r\n mesh.sphereHandle, mesh.worldBoundingSphere, mesh.flags);\r\n }\r\n }\r\n }\r\n\r\n const parent = params?.spaceObjectParent ?? null;\r\n this.#parentOverlayEffects = Array.isArray(parent?.overlayEffects) && parent.overlayEffects.length\r\n ? parent.overlayEffects\r\n : null;\r\n if ((this.#parentOverlayEffects && this.#AnyMeshInheritsOverlayEffects()) ||\r\n this.#HasAnyOwnOverlayEffects())\r\n {\r\n this.#UpdateOverlayInstanceData(parentRecords.vs, parentRecords.ps, previousWorldTransform);\r\n }\r\n\r\n this.hasUpdated = true;\r\n }\r\n\r\n /** Builds one persistent VS/PS record pair per authored instance. */\r\n #UpdateOverlayInstanceData(parentVs, parentPs, previousWorldTransform)\r\n {\r\n for (const mesh of this.meshes)\r\n {\r\n if (!mesh.instances.length || !mesh.display || !this.#MeshHasActiveOverlayEffects(mesh)) continue;\r\n\r\n if (!mesh.overlayPods || mesh.overlayPods.length !== mesh.instances.length)\r\n {\r\n mesh.overlayPods = Array.from({ length: mesh.instances.length }, () => ({\r\n vs: RawData.create(\"EveSpaceObjectVSData\"),\r\n ps: RawData.create(\"EveSpaceObjectPSData\"),\r\n framePod: null\r\n }));\r\n }\r\n\r\n for (let index = 0; index < mesh.instances.length; index++)\r\n {\r\n const local = mat4.copy(OVERLAY_LOCAL_SCRATCH, mesh.instances[index].transform);\r\n const world = mat4.multiply(OVERLAY_WORLD_SCRATCH, this.worldTransform, local);\r\n const worldLast = mat4.multiply(\r\n OVERLAY_WORLD_LAST_SCRATCH, previousWorldTransform, local);\r\n if (!mat4.invert(OVERLAY_INV_WORLD_SCRATCH, world)) mat4.identity(OVERLAY_INV_WORLD_SCRATCH);\r\n if (!mat4.invert(OVERLAY_INV_LOCAL_SCRATCH, local)) mat4.identity(OVERLAY_INV_LOCAL_SCRATCH);\r\n\r\n const pod = mesh.overlayPods[index];\r\n pod.vs.CopyFrom(parentVs);\r\n pod.ps.CopyFrom(parentPs);\r\n pod.vs.SetAndTranspose(\"worldTransform\", world);\r\n pod.vs.SetAndTranspose(\"worldTransformLast\", worldLast);\r\n pod.vs.SetAndTranspose(\"invWorldTransform\", OVERLAY_INV_WORLD_SCRATCH);\r\n pod.ps.SetAndTranspose(\"worldTransform\", world);\r\n pod.ps.SetAndTranspose(\"worldTransformLast\", worldLast);\r\n pod.ps.SetAndTranspose(\"invWorldTransform\", OVERLAY_INV_WORLD_SCRATCH);\r\n\r\n const clipData = pod.vs.Get(\"clipData\");\r\n vec3.set(OVERLAY_CLIP_SCRATCH, clipData[0], clipData[1], clipData[2]);\r\n vec3.transformMat4(OVERLAY_CLIP_SCRATCH, OVERLAY_CLIP_SCRATCH, OVERLAY_INV_LOCAL_SCRATCH);\r\n pod.vs.Set(\"clipData\", [\r\n OVERLAY_CLIP_SCRATCH[0], OVERLAY_CLIP_SCRATCH[1], OVERLAY_CLIP_SCRATCH[2], clipData[3]\r\n ]);\r\n\r\n vec3.copy(OVERLAY_CLIP_SCRATCH, pod.ps.Get(\"clipSphereCenter\"));\r\n vec3.transformMat4(OVERLAY_CLIP_SCRATCH, OVERLAY_CLIP_SCRATCH, OVERLAY_INV_LOCAL_SCRATCH);\r\n pod.ps.Set(\"clipSphereCenter\", OVERLAY_CLIP_SCRATCH);\r\n\r\n if (!mesh.inheritOverlayEffects)\r\n {\r\n const neutralClip = pod.vs.Get(\"clipData\");\r\n pod.vs.Set(\"clipData\", [ neutralClip[0], neutralClip[1], neutralClip[2], 0 ]);\r\n pod.ps.Set(\"clipRadiusSq\", [ 0 ]);\r\n pod.ps.Set(\"clipRadius2Sq\", [ 0 ]);\r\n pod.ps.Set(\"clipSphereFactor\", [ 0 ]);\r\n pod.ps.Set(\"clipSphereFactor2\", [ 0 ]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Reports whether any instanced mesh owns an overlay effect. */\r\n #HasAnyOwnOverlayEffects()\r\n {\r\n return this.meshes.some(mesh => mesh.ownOverlayEffects.length !== 0);\r\n }\r\n\r\n /** Reports whether any instanced mesh inherits its parent's overlays. */\r\n #AnyMeshInheritsOverlayEffects()\r\n {\r\n return this.meshes.some(mesh => mesh.inheritOverlayEffects);\r\n }\r\n\r\n /** Reports whether one mesh has an own or inherited overlay path. */\r\n #MeshHasActiveOverlayEffects(mesh)\r\n {\r\n return mesh.ownOverlayEffects.length !== 0 ||\r\n (this.#parentOverlayEffects !== null && mesh.inheritOverlayEffects);\r\n }\r\n\r\n /**\r\n * Returns the child's world transform as stamped by the last sync update.\r\n * @param {Float32Array} [out] - caller-owned; when given, receives a copy and is returned instead of the live matrix\r\n * @returns {Float32Array} out when supplied, otherwise the live internal matrix\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n GetLocalToWorldTransform(out = null)\r\n {\r\n if (out)\r\n {\r\n return mat4.copy(out, this.worldTransform);\r\n }\r\n return this.worldTransform;\r\n }\r\n\r\n /**\r\n * Carbon EveChildInstancedMeshes::Setup (cpp:335-337) is an intentional no-op:\r\n * placement comes from the authored per-instance transforms, not from an SRT\r\n * setup.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n Setup()\r\n {\r\n }\r\n\r\n /**\r\n * Carbon EveChildInstancedMeshes::ChangeLOD (cpp:339-341) is an intentional\r\n * no-op; the child keeps no LOD state.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n ChangeLOD()\r\n {\r\n }\r\n\r\n /**\r\n * Accepts and discards the placement origin; this child has no Carbon origin\r\n * field and stores none.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n SetOrigin()\r\n {\r\n }\r\n\r\n /**\r\n * Returns false, so owners treat this child as subject to normal activation\r\n * gating.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n IsAlwaysOn()\r\n {\r\n return false;\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::SetShaderOption (cpp:343-359): flips the\r\n * option and refreshes the effect hash on every area, then removes any\r\n * registered mesh-group handle and clears the latch - so the groups\r\n * re-register with the NEW effectHash on the next AddMeshesToManager pass.\r\n * Sphere/per-object handles deliberately stay registered. */\r\n @carbon.method\r\n @impl.adapted\r\n @impl.reason(\"Handle invalidation after manager removal is explicit in JavaScript; the option write, hash refresh and registration lifecycle otherwise follow Carbon.\")\r\n SetShaderOption(name, value)\r\n {\r\n for (const mesh of this.meshes)\r\n {\r\n for (const area of mesh.areas)\r\n {\r\n area.effect.SetOption(name, value);\r\n area.effectHash = EveChildInstancedMeshes.#GetEffectHash(area.effect);\r\n if (area.meshGroupHandle !== null)\r\n {\r\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\r\n area.meshGroupHandle = null;\r\n this.#allRegistered = false;\r\n }\r\n }\r\n }\r\n this.#revision++;\r\n }\r\n\r\n /**\r\n * Appends one instanced mesh: normalizes the area ducks, copies the instance transforms, stamps CASTS_SHADOW plus one flag bit per area batch type (Carbon cpp:418-425), and clears the registration latch so the next AddMeshesToManager pass picks it up.\r\n * @param {Iterable} areas - area ducks ({effect, batchType, areaIndex, areaCount})\r\n * @param {Iterable<Float32Array>} instanceTransforms - 16-value matrices; copied, not retained\r\n * @param {Number} partTag - modular owner shared by every appended instance\r\n * @returns {Boolean} false when no areas or no instances were supplied (nothing is added)\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n AddMesh(\r\n geometryPath,\r\n castsShadow,\r\n reflectionMode,\r\n meshIndex,\r\n areas,\r\n instanceTransforms,\r\n sofHullName = \"\",\r\n sofLocatorSetName = \"\",\r\n partTag = 0\r\n )\r\n {\r\n const sourceAreas = Array.from(areas ?? []);\r\n const sourceTransforms = Array.from(instanceTransforms ?? []);\r\n if (!sourceAreas.length || !sourceTransforms.length)\r\n {\r\n return false;\r\n }\r\n\r\n const normalizedAreas = sourceAreas.map(area => EveChildInstancedMeshes.#CreateArea(area));\r\n const instances = sourceTransforms.map((transform, sphereIndex) =>\r\n {\r\n if (!transform || transform.length !== 16)\r\n {\r\n throw new TypeError(\"EveChildInstancedMeshes instance transforms must contain 16 values\");\r\n }\r\n const instance = new EveChildInstancedMeshInstance();\r\n mat4.copy(instance.transform, transform);\r\n instance.sphereIndex = sphereIndex;\r\n return instance;\r\n });\r\n\r\n const mesh = new EveChildInstancedMesh();\r\n mesh.geometryPath = String(geometryPath ?? \"\");\r\n mesh.castsShadow = !!castsShadow;\r\n mesh.reflectionMode = reflectionMode === undefined ? 3 : Number(reflectionMode) | 0;\r\n mesh.meshIndex = Number(meshIndex) >>> 0;\r\n mesh.areas = normalizedAreas;\r\n mesh.instances = instances;\r\n mesh.partTags = instances.map(() => Number(partTag) >>> 0);\r\n mesh.sofHullName = String(sofHullName ?? \"\");\r\n mesh.sofLocatorSetName = String(sofLocatorSetName ?? \"\");\r\n // Carbon (cpp:418-425): the CASTS_SHADOW flag and one bit per area batch\r\n // type are stamped at add time; RENDER_IN_REFLECTION is refreshed each\r\n // async pass. cpp:428 clears the registration latch.\r\n if (mesh.castsShadow)\r\n {\r\n mesh.flags = (mesh.flags | INSTANCE_FLAG_CASTS_SHADOW) >>> 0;\r\n }\r\n for (const area of mesh.areas)\r\n {\r\n mesh.flags = (mesh.flags | (1 << area.batchType)) >>> 0;\r\n }\r\n this.meshes.push(mesh);\r\n this.#allRegistered = false;\r\n this.#revision++;\r\n return true;\r\n }\r\n\r\n /**\r\n * Removes every instance owned by a modular part, dropping empty meshes and\r\n * invalidating manager registrations.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n @impl.reason(\"JavaScript explicitly nulls manager handles after removal; Carbon invalidates them by reference.\")\r\n RemoveInstancesByPartTag(partTag)\r\n {\r\n const tag = Number(partTag) >>> 0;\r\n let changed = false;\r\n for (let meshIndex = this.meshes.length - 1; meshIndex >= 0; meshIndex--)\r\n {\r\n const mesh = this.meshes[meshIndex];\r\n const keptInstances = [];\r\n const keptTags = [];\r\n for (let instanceIndex = 0; instanceIndex < mesh.instances.length; instanceIndex++)\r\n {\r\n const instanceTag = Number(mesh.partTags[instanceIndex] ?? 0) >>> 0;\r\n if (instanceTag === tag)\r\n {\r\n changed = true;\r\n continue;\r\n }\r\n keptInstances.push(mesh.instances[instanceIndex]);\r\n keptTags.push(instanceTag);\r\n }\r\n if (keptInstances.length === mesh.instances.length) continue;\r\n\r\n if (mesh.sphereHandle !== null)\r\n {\r\n this.#meshManager.RemoveBoundingSphereGroup(mesh.sphereHandle);\r\n mesh.sphereHandle = null;\r\n }\r\n for (const area of mesh.areas)\r\n {\r\n if (area.meshGroupHandle !== null)\r\n {\r\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\r\n area.meshGroupHandle = null;\r\n }\r\n }\r\n if (keptInstances.length === 0)\r\n {\r\n this.meshes.splice(meshIndex, 1);\r\n continue;\r\n }\r\n mesh.instances = keptInstances;\r\n mesh.partTags = keptTags;\r\n mesh.instanceSpheres.length = keptInstances.length;\r\n for (let instanceIndex = 0; instanceIndex < keptInstances.length; instanceIndex++)\r\n {\r\n keptInstances[instanceIndex].sphereIndex = instanceIndex;\r\n }\r\n }\r\n if (changed)\r\n {\r\n this.#allRegistered = false;\r\n this.#revision++;\r\n }\r\n return changed;\r\n }\r\n\r\n /**\r\n * Contributes every instance of every mesh to the owner's merged raycast set\r\n * (Carbon EveChildInstancedMeshes.cpp:1279-1324): the type-matching areas\r\n * are appended ONCE per mesh and shared by all of that mesh's instance\r\n * records via areaStart/areaCount; meshes with no matching areas contribute\r\n * nothing. Carbon row-vector instanceTransform * parentTransform maps to\r\n * gl-matrix multiply(out, parentTransform, instanceTransform).\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n CollectOwnedGeometry(type, parentTransform, out, areaPool)\r\n {\r\n for (const mesh of this.meshes)\r\n {\r\n const geometry = mesh.GetGeometryResource();\r\n if (!geometry || !mesh.instances.length) continue;\r\n\r\n const areaStart = areaPool.length;\r\n for (const area of mesh.areas)\r\n {\r\n if (area.batchType !== type) continue;\r\n areaPool.push({\r\n index: area.areaIndex,\r\n count: area.areaCount,\r\n alphaCutout: !!area.alphaCutout,\r\n reversed: !!area.reversed\r\n });\r\n }\r\n const areaCount = areaPool.length - areaStart;\r\n if (areaCount === 0) continue;\r\n\r\n for (const instance of mesh.instances)\r\n {\r\n const childToObject = mat4.create();\r\n mat4.multiply(childToObject, parentTransform, instance.transform);\r\n out.push({ geometry, childToObject, areaStart, areaCount });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Overwrites the transform of every instance owned by a modular part with an\r\n * ABSOLUTE new transform (Carbon EveChildInstancedMeshes.cpp:591-605,\r\n * PLAT-11963). Carbon writes only the instance transform: no dirty flag, no\r\n * handle teardown - the per-frame async pass refreshes the cull spheres from\r\n * the live transforms, and the per-part filter lives HERE, not at the call\r\n * site (the shared child carries many parts' instances).\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n SetInstanceTransformByPartTag(partTag, translation, rotation, scale)\r\n {\r\n const tag = Number(partTag) >>> 0;\r\n const transform = mat4.fromRotationTranslationScale(mat4.create(), rotation, translation, scale);\r\n for (const mesh of this.meshes)\r\n {\r\n for (let index = 0; index < mesh.instances.length; index++)\r\n {\r\n if ((Number(mesh.partTags[index] ?? 0) >>> 0) === tag)\r\n {\r\n mat4.copy(mesh.instances[index].transform, transform);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns one [translation, rotation, scale] decomposition per instance of a\r\n * mesh (Carbon EveChildInstancedMeshes.cpp:781-806, script-exposed tooling);\r\n * throws RangeError where Carbon raises IndexError.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n GetInstancesTransforms(meshId)\r\n {\r\n const index = Number(meshId) >>> 0;\r\n if (index >= this.meshes.length)\r\n {\r\n throw new RangeError(\"Mesh index out of range\");\r\n }\r\n return this.meshes[index].instances.map(instance =>\r\n {\r\n const translation = vec3.create();\r\n const rotation = quat.create();\r\n const scale = vec3.create();\r\n mat4.getTranslation(translation, instance.transform);\r\n mat4.getRotation(rotation, instance.transform);\r\n quat.normalize(rotation, rotation);\r\n mat4.getScaling(scale, instance.transform);\r\n return { translation, rotation, scale };\r\n });\r\n }\r\n\r\n /**\r\n * Drops every mesh and clears the hasUpdated stamp so nothing re-registers\r\n * until another update pass runs; registration handles are NOT released here,\r\n * so call UnregisterFromMeshManager first when a manager still holds them.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n Clear()\r\n {\r\n this.meshes.length = 0;\r\n this.hasUpdated = false;\r\n this.#revision++;\r\n }\r\n\r\n /**\r\n * Decodes a picking area id back to the SOF locator it came from.\r\n * @param {Number} areaId - mesh ordinal in the high 16 bits, locator index in the low 16 (the pairing AddMeshesToManager registers)\r\n * @returns {Array|null} [sofHullName, sofLocatorSetName, locatorIndex], or null when the mesh is unknown or carries no SOF hull name\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n GetSofSourceLocator(areaId)\r\n {\r\n const value = Number(areaId) >>> 0;\r\n const mesh = this.meshes[value >>> 16];\r\n if (!mesh || !mesh.sofHullName)\r\n {\r\n return null;\r\n }\r\n return [mesh.sofHullName, mesh.sofLocatorSetName, value & 0xffff];\r\n }\r\n\r\n /** Number of meshes currently held. */\r\n @carbon.method\r\n @impl.implemented\r\n GetMeshCount()\r\n {\r\n return this.meshes.length;\r\n }\r\n\r\n /**\r\n * Reports one mesh's authoring state as a positional tuple (Carbon's multiple out-params).\r\n * @param {Number} meshId - mesh index; RangeError when out of range\r\n * @returns {Array} [geometryPath, geometryResource, meshIndex, castsShadow, reflectionMode, areaCount, instanceCount]\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n GetMeshInfo(meshId)\r\n {\r\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\r\n return [\r\n mesh.geometryPath,\r\n mesh.GetGeometryResource(),\r\n mesh.meshIndex,\r\n mesh.castsShadow,\r\n mesh.reflectionMode,\r\n mesh.areas.length,\r\n mesh.instances.length\r\n ];\r\n }\r\n\r\n /**\r\n * Reports one area of one mesh as a positional tuple (Carbon's multiple out-params).\r\n * @param {Number} meshId - mesh index; RangeError when out of range\r\n * @param {Number} areaId - area index within that mesh; RangeError when out of range\r\n * @returns {Array} [effect, batchType, areaIndex, areaCount] - the effect is the live reference\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n GetAreaInfo(meshId, areaId)\r\n {\r\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\r\n const index = Number(areaId) >>> 0;\r\n if (index >= mesh.areas.length)\r\n {\r\n throw new RangeError(`EveChildInstancedMeshes area index ${index} is out of range`);\r\n }\r\n const area = mesh.areas[index];\r\n return [area.effect, area.batchType, area.areaIndex, area.areaCount];\r\n }\r\n\r\n /**\r\n * Whether the given mesh is currently displayed; throws RangeError for an\r\n * unknown mesh index.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n GetMeshDisplay(meshId)\r\n {\r\n return EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).display;\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::SetMeshDisplay (cpp:663-691): a toggle\r\n * clears the latch; turning a mesh OFF eagerly removes its sphere and\r\n * mesh-group handles - which is why AddMeshesToManager's display-off skip\r\n * does NOT clear the latch (the handles are already gone). */\r\n @carbon.method\r\n @impl.adapted\r\n @impl.reason(\"Handle invalidation after removal is explicit (Carbon's DataHandle is invalidated by the manager by reference).\")\r\n SetMeshDisplay(meshId, display)\r\n {\r\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\r\n const next = !!display;\r\n if (mesh.display !== next)\r\n {\r\n mesh.display = next;\r\n this.#allRegistered = false;\r\n if (!next)\r\n {\r\n if (mesh.sphereHandle !== null)\r\n {\r\n this.#meshManager.RemoveBoundingSphereGroup(mesh.sphereHandle);\r\n mesh.sphereHandle = null;\r\n }\r\n for (const area of mesh.areas)\r\n {\r\n if (area.meshGroupHandle !== null)\r\n {\r\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\r\n area.meshGroupHandle = null;\r\n }\r\n }\r\n }\r\n this.#revision++;\r\n }\r\n }\r\n\r\n /** Returns whether one instanced mesh inherits parent overlay effects. */\r\n @carbon.method\r\n @impl.implemented\r\n GetMeshInheritOverlayEffects(meshId)\r\n {\r\n return EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).inheritOverlayEffects;\r\n }\r\n\r\n /** Enables or disables parent-overlay inheritance for one mesh. */\r\n @carbon.method\r\n @impl.implemented\r\n SetMeshInheritOverlayEffects(meshId, inherit)\r\n {\r\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\r\n const next = !!inherit;\r\n if (mesh.inheritOverlayEffects === next) return;\r\n\r\n mesh.inheritOverlayEffects = next;\r\n this.#allRegistered = false;\r\n for (const area of mesh.areas)\r\n {\r\n if (area.meshGroupHandle === null) continue;\r\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\r\n area.meshGroupHandle = null;\r\n }\r\n }\r\n\r\n /** Adds an overlay effect owned by one instanced mesh. */\r\n @carbon.method\r\n @impl.implemented\r\n AddMeshOverlayEffect(meshId, overlayEffect)\r\n {\r\n if (!overlayEffect) throw new TypeError(\"overlayEffect must not be null\");\r\n EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).ownOverlayEffects.push(overlayEffect);\r\n }\r\n\r\n /** Removes an overlay effect owned by one instanced mesh. */\r\n @carbon.method\r\n @impl.implemented\r\n RemoveMeshOverlayEffect(meshId, overlayEffect)\r\n {\r\n const overlays = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).ownOverlayEffects;\r\n const index = overlays.indexOf(overlayEffect);\r\n if (index !== -1) overlays.splice(index, 1);\r\n }\r\n\r\n /** Removes every overlay effect owned by one instanced mesh. */\r\n @carbon.method\r\n @impl.implemented\r\n ClearMeshOverlayEffects(meshId)\r\n {\r\n EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).ownOverlayEffects.length = 0;\r\n }\r\n\r\n /** Returns the number of overlay effects owned by one instanced mesh. */\r\n @carbon.method\r\n @impl.implemented\r\n GetMeshOverlayEffectCount(meshId)\r\n {\r\n return EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).ownOverlayEffects.length;\r\n }\r\n\r\n /**\r\n * Assigns one mesh's geometry resource, bumping the revision only when it\r\n * actually changes; registration waits for the next AddMeshesToManager pass.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n SetGeometryResource(meshId, geometry)\r\n {\r\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\r\n if (mesh.GetGeometryResource() !== geometry)\r\n {\r\n mesh.SetGeometryResource(geometry);\r\n this.#revision++;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a detached snapshot of one mesh - instance transforms cloned, areas\r\n * shallow-copied, geometry resource shared by reference - so callers can read\r\n * it without touching live registration state.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n GetMeshData(meshId)\r\n {\r\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\r\n return EveChildInstancedMeshes.#CloneMesh(mesh);\r\n }\r\n\r\n /**\r\n * Monotonic counter bumped by every structural change (AddMesh, Clear,\r\n * SetMeshDisplay, SetGeometryResource, SetShaderOption), for consumers caching\r\n * derived data.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n GetRevision()\r\n {\r\n return this.#revision;\r\n }\r\n\r\n /** Reports whether any active own or inherited overlay has a transparent pass. */\r\n @carbon.method\r\n @impl.implemented\r\n HasTransparentBatches()\r\n {\r\n for (const overlay of this.#parentOverlayEffects ?? [])\r\n {\r\n if (this.#AnyMeshInheritsOverlayEffects() && overlay.HasTransparentArea()) return true;\r\n }\r\n for (const mesh of this.meshes)\r\n {\r\n for (const overlay of mesh.ownOverlayEffects)\r\n {\r\n if (overlay.HasTransparentArea()) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Returns the squared camera distance used to sort transparent overlays. */\r\n @carbon.method\r\n @impl.adapted\r\n GetSortValue(renderContext = null)\r\n {\r\n const viewPosition = renderContext?.GetViewPosition() ?? [ 0, 0, 0 ];\r\n return Math.hypot(\r\n viewPosition[0] - this.worldTransform[12],\r\n viewPosition[1] - this.worldTransform[13],\r\n viewPosition[2] - this.worldTransform[14]);\r\n }\r\n\r\n /** Exposes stable per-instance CPU record pairs for this frame's overlay batches. */\r\n @carbon.method\r\n @impl.adapted\r\n GetPerObjectData(_accumulator = null)\r\n {\r\n if ((!this.#parentOverlayEffects || !this.#AnyMeshInheritsOverlayEffects()) &&\r\n !this.#HasAnyOwnOverlayEffects()) return null;\r\n\r\n let first = null;\r\n for (const mesh of this.meshes)\r\n {\r\n if (!mesh.overlayPods) continue;\r\n if (!mesh.display || !this.#MeshHasActiveOverlayEffects(mesh))\r\n {\r\n for (const pod of mesh.overlayPods) pod.framePod = null;\r\n continue;\r\n }\r\n for (const pod of mesh.overlayPods)\r\n {\r\n pod.framePod = { vs: pod.vs, ps: pod.ps };\r\n first ??= pod.framePod;\r\n }\r\n }\r\n return first;\r\n }\r\n\r\n /** Emits child-owned then inherited overlays per visible instance and LOD. */\r\n @carbon.method\r\n @impl.adapted\r\n GetBatches(\r\n batches,\r\n batchType,\r\n _perObjectData = null,\r\n reason = Tr2RenderReason.TR2RENDERREASON_NORMAL)\r\n {\r\n if (!this.hasUpdated) return false;\r\n let committed = false;\r\n\r\n for (const mesh of this.meshes)\r\n {\r\n const inherited = this.#parentOverlayEffects && mesh.inheritOverlayEffects\r\n ? this.#parentOverlayEffects\r\n : null;\r\n if ((!inherited?.length && !mesh.ownOverlayEffects.length) || !mesh.display || !mesh.overlayPods) continue;\r\n if (reason === Tr2RenderReason.TR2RENDERREASON_REFLECTION && !ShouldReflect(mesh.reflectionMode)) continue;\r\n\r\n const geometry = mesh.GetGeometryResource();\r\n if (!geometry || geometry.IsGood() === false) continue;\r\n if (!mesh.overlayAreaBlocksBuilt)\r\n {\r\n CollectInstancedOverlayAreaBlocks(mesh, mesh.overlayAreaBlocks);\r\n mesh.overlayAreaBlocksBuilt = true;\r\n }\r\n\r\n for (let index = 0; index < mesh.overlayPods.length; index++)\r\n {\r\n const pod = mesh.overlayPods[index];\r\n if (!pod.framePod) continue;\r\n const sphere = mesh.instanceSpheres[index];\r\n if (!sphere) continue;\r\n if (this.#lastCameraFrustum &&\r\n this.#lastCameraFrustum.IsSphereVisible(sphere.center, sphere.radius) === false) continue;\r\n\r\n const screenSize = this.#lastCameraFrustum\r\n ? this.#lastCameraFrustum.GetPixelSizeAccrossEst(sphere.center, sphere.radius) * this.#lastInvLodFactor\r\n : Infinity;\r\n const lod = geometry.GetMeshLod(mesh.meshIndex, screenSize);\r\n\r\n if (mesh.ownOverlayEffects.length)\r\n {\r\n committed = EmitOverlayBatches(\r\n batches, pod.framePod, batchType, mesh.ownOverlayEffects,\r\n mesh.overlayAreaBlocks, geometry, mesh.meshIndex, lod) || committed;\r\n }\r\n if (inherited?.length)\r\n {\r\n committed = EmitOverlayBatches(\r\n batches, pod.framePod, batchType, inherited,\r\n mesh.overlayAreaBlocks, geometry, mesh.meshIndex, lod) || committed;\r\n }\r\n }\r\n }\r\n return committed;\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::RegisterComponents (cpp:36-43):\r\n * unconditional InstancedMeshProvider + ShadowCaster leaf\r\n * self-registration. */\r\n @carbon.method\r\n @impl.implemented\r\n RegisterComponents()\r\n {\r\n const registry = this.GetComponentRegistry();\r\n if (registry)\r\n {\r\n registry.RegisterComponent(EveComponentType.InstancedMeshProvider, this);\r\n registry.RegisterComponent(EveComponentType.ShadowCaster, this);\r\n }\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::UnRegisterComponents (cpp:45-48) only\r\n * calls UnregisterFromMeshManager; own components were already removed by\r\n * EveEntity::UnRegister (EveEntity.cpp:90). */\r\n @carbon.method\r\n @impl.implemented\r\n UnRegisterComponents()\r\n {\r\n this.UnregisterFromMeshManager();\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::UnregisterFromMeshManager (cpp:50-71):\r\n * every registered mesh-group / sphere-group / per-object handle is removed\r\n * through the manager that issued the opaque handles, then the latch clears. */\r\n @carbon.method\r\n @impl.adapted\r\n @impl.reason(\"Handle invalidation after removal is explicit (Carbon's DataHandle is invalidated by the manager by reference).\")\r\n UnregisterFromMeshManager()\r\n {\r\n for (const mesh of this.meshes)\r\n {\r\n for (const area of mesh.areas)\r\n {\r\n if (area.meshGroupHandle !== null)\r\n {\r\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\r\n area.meshGroupHandle = null;\r\n }\r\n }\r\n if (mesh.sphereHandle !== null)\r\n {\r\n this.#meshManager.RemoveBoundingSphereGroup(mesh.sphereHandle);\r\n mesh.sphereHandle = null;\r\n }\r\n }\r\n if (this.#perObjectDataHandle !== null)\r\n {\r\n this.#meshManager.RemovePerObjectData(this.#perObjectDataHandle);\r\n this.#perObjectDataHandle = null;\r\n }\r\n if (this.#perObjectDataNoClipHandle !== null)\r\n {\r\n this.#meshManager.RemovePerObjectData(this.#perObjectDataNoClipHandle);\r\n this.#perObjectDataNoClipHandle = null;\r\n }\r\n this.#meshManager = null;\r\n this.#allRegistered = false;\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::AddMeshesToManager (cpp:472-553), the\r\n * InstancedMeshProvider entry the engine's CollectMeshes drives\r\n * (EveInstancedMeshManager.cpp:45-56; scene EveSpaceScene.cpp:1516).\r\n * Contract quirks preserved: nothing registers before the first update\r\n * pass (cpp:474); switching managers tears EVERYTHING down BEFORE the\r\n * latch early-out (cpp:478-481); the latch is set optimistically and\r\n * cleared by ANY not-ready mesh/area so the per-frame caller retries until\r\n * geometry streams in - EXCEPT display-off meshes, which skip WITHOUT\r\n * clearing it (their handles were already removed by SetMeshDisplay);\r\n * handles are add-once (partial re-registration after SetShaderOption /\r\n * display toggles); an area-level effect failure clears the latch while\r\n * the mesh's sphere group STAYS registered (Carbon's asymmetry);\r\n * pickingOwnerIndex is the mesh ordinal (pairs with GetSofSourceLocator's\r\n * meshIndex<<16 decode). */\r\n @carbon.method\r\n @impl.adapted\r\n @impl.reason(\"The manager is duck-typed and returns opaque handles (out-params become returns) - Carbon EveInstancedMeshManager is not ported (quarantined in src/trinity/dropped); Carbon's combinedVertexDeclaration gate (cpp:499, a D3D declaration handle rebuilt in RebuildCachedData cpp:435-457) reduces to geometry presence + IsGood, and the declaration argument is passed as 0 for the engine to rebuild; GetRawRoot() becomes the object itself as picking owner.\")\r\n AddMeshesToManager(manager)\r\n {\r\n if (!this.hasUpdated)\r\n {\r\n return;\r\n }\r\n if (this.#meshManager !== null && this.#meshManager !== manager)\r\n {\r\n this.UnregisterFromMeshManager();\r\n }\r\n if (this.#allRegistered)\r\n {\r\n return;\r\n }\r\n\r\n this.#meshManager = manager;\r\n\r\n if (this.#perObjectDataHandle === null)\r\n {\r\n this.#perObjectDataHandle = manager.AddPerObjectData(this.#perObjectData);\r\n }\r\n\r\n if (this.meshes.some(mesh => !mesh.inheritOverlayEffects) &&\r\n this.#perObjectDataNoClipHandle === null)\r\n {\r\n this.#perObjectDataNoClipHandle = manager.AddPerObjectData(this.#perObjectDataNoClip);\r\n }\r\n\r\n this.#allRegistered = true;\r\n for (let meshIndex = 0; meshIndex < this.meshes.length; meshIndex++)\r\n {\r\n const mesh = this.meshes[meshIndex];\r\n if (!mesh.display)\r\n {\r\n continue;\r\n }\r\n const geometry = mesh.GetGeometryResource();\r\n if (!geometry || geometry.IsGood() === false)\r\n {\r\n this.#allRegistered = false;\r\n continue;\r\n }\r\n if (!mesh.instances.length)\r\n {\r\n this.#allRegistered = false;\r\n continue;\r\n }\r\n if (mesh.instances.length !== mesh.instanceSpheres.length)\r\n {\r\n this.#allRegistered = false;\r\n continue;\r\n }\r\n\r\n if (mesh.sphereHandle === null)\r\n {\r\n mesh.sphereHandle = manager.AddBoundingSphereGroup(\r\n mesh.worldBoundingSphere,\r\n mesh.flags,\r\n mesh.instanceSpheres,\r\n mesh.instanceSpheres.length\r\n );\r\n }\r\n\r\n for (const area of mesh.areas)\r\n {\r\n if (area.meshGroupHandle !== null)\r\n {\r\n continue;\r\n }\r\n if (!area.effect || !area.effect.GetShaderStateInterface())\r\n {\r\n this.#allRegistered = false;\r\n continue;\r\n }\r\n area.meshGroupHandle = manager.AddMeshGroup(\r\n geometry,\r\n 0,\r\n area.batchType,\r\n mesh.meshIndex,\r\n area.areaIndex,\r\n area.areaCount,\r\n area.effect,\r\n area.effectHash,\r\n mesh.inheritOverlayEffects ? this.#perObjectDataHandle : this.#perObjectDataNoClipHandle,\r\n mesh.sphereHandle,\r\n mesh.instances,\r\n mesh.instances.length,\r\n this,\r\n meshIndex\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::IsCastingShadow (cpp:73-76) always\r\n * returns false (instanced shadows cull per instance group); presence\r\n * satisfies the \"ShadowCaster\" duck contract. */\r\n @carbon.method\r\n @impl.implemented\r\n IsCastingShadow(..._args)\r\n {\r\n return false;\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::GetShadowBatches (cpp:78-80) is an\r\n * intentional no-op (the instanced mesh manager emits the batches). */\r\n @carbon.method\r\n @impl.noop\r\n GetShadowBatches(..._args)\r\n {\r\n }\r\n\r\n /** Carbon EveChildInstancedMeshes::GetShadowPerObjectData (cpp:82-85)\r\n * returns null (per-object data flows through the mesh manager). */\r\n @carbon.method\r\n @impl.implemented\r\n GetShadowPerObjectData(..._args)\r\n {\r\n return null;\r\n }\r\n\r\n /**\r\n * Resolves a mesh index against the list, throwing RangeError rather than\r\n * returning undefined so every public accessor fails loudly.\r\n */\r\n static #GetMesh(meshes, meshId)\r\n {\r\n const index = Number(meshId) >>> 0;\r\n if (index >= meshes.length)\r\n {\r\n throw new RangeError(`EveChildInstancedMeshes mesh index ${index} is out of range`);\r\n }\r\n return meshes[index];\r\n }\r\n\r\n /**\r\n * Builds an area record from a plain duck, defaulting areaCount to 1 and\r\n * caching the effect hash the manager registers the mesh group under.\r\n */\r\n static #CreateArea(value)\r\n {\r\n const source = value ?? {};\r\n const area = new EveChildInstancedMeshArea();\r\n area.effect = source.effect ?? null;\r\n area.batchType = Number(source.batchType) >>> 0;\r\n area.areaIndex = Number(source.areaIndex) >>> 0;\r\n area.areaCount = source.areaCount === undefined ? 1 : Number(source.areaCount) >>> 0;\r\n area.alphaCutout = !!source.alphaCutout;\r\n area.reversed = !!source.reversed;\r\n area.effectHash = EveChildInstancedMeshes.#GetEffectHash(area.effect);\r\n return area;\r\n }\r\n\r\n /**\r\n * Deep-copies a mesh into a plain object for GetMeshData: instance transforms\r\n * cloned, areas spread-copied, the geometry resource shared by reference.\r\n */\r\n static #CloneMesh(mesh)\r\n {\r\n return {\r\n geometryPath: mesh.geometryPath,\r\n geometry: mesh.GetGeometryResource(),\r\n castsShadow: mesh.castsShadow,\r\n reflectionMode: mesh.reflectionMode,\r\n meshIndex: mesh.meshIndex,\r\n areas: mesh.areas.map(area => ({ ...area })),\r\n instances: mesh.instances.map(instance => ({\r\n transform: mat4.clone(instance.transform),\r\n sphereIndex: instance.sphereIndex\r\n })),\r\n partTags: mesh.partTags.slice(),\r\n sofHullName: mesh.sofHullName,\r\n sofLocatorSetName: mesh.sofLocatorSetName,\r\n display: mesh.display\r\n };\r\n }\r\n\r\n /**\r\n * Reads an owned effect's stable registration hash; null areas retain the\r\n * Carbon zero hash until their effect arrives.\r\n */\r\n static #GetEffectHash(effect)\r\n {\r\n return effect ? Number(effect.GetHashValue()) || 0 : 0;\r\n }\r\n\r\n}\r\n"],"names":["INSTANCE_FLAG_CASTS_SHADOW","INSTANCE_FLAG_RENDER_IN_REFLECTION","POSITION_SCRATCH","vec3","create","OVERLAY_LOCAL_SCRATCH","mat4","OVERLAY_WORLD_SCRATCH","OVERLAY_WORLD_LAST_SCRATCH","OVERLAY_INV_WORLD_SCRATCH","OVERLAY_INV_LOCAL_SCRATCH","OVERLAY_CLIP_SCRATCH","_EveChildInstancedMes","_identity","EveChildInstancedMeshes","EveSpaceObjectChild","e","_init_name","_init_extra_name","_init_worldTransform","_init_extra_worldTransform","_init_hasUpdated","_init_extra_hasUpdated","_init_meshes","_init_extra_meshes","_initProto","c","_initClass","_applyDecs","type","define","className","family","carbon","inherit","ITr2Renderable","edit","persist","string","read","boolean","list","method","impl","implemented","adapted","reason","noop","name","worldTransform","hasUpdated","meshes","RawData","GetName","SetName","String","UpdateVisibility","updateContext","GetFrustum","GetInvLodFactor","GetRenderables","renderables","length","push","GetBoundingSphere","#UpdatePerObjectData","parent","record","transpose","GetTransposed","SetAndTranspose","inverse","invert","identity","CopyFrom","vs","ps","GetPerObjectStructs","Set","Get","slot","CUSTOM_MASK_COUNT","GetTransposedIndex","SetAndTransposeIndex","SetIndex","GetIndex","UpdateSyncronous","params","localToWorldTransform","copy","time","GetTime","mesh","overlay","ownOverlayEffects","Update","UpdateAsyncronous","_updateContext","previousWorldTransform","parentRecords","spaceObjectParent","w","worldScale","Math","max","hypot","geometry","GetGeometryResource","IsGood","flags","ShouldReflect","reflectionMode","meshData","GetMeshData","meshIndex","minBounds","maxBounds","centerX","centerY","centerZ","localRadius","instanceSpheres","instances","boundsMinX","Infinity","boundsMinY","boundsMinZ","boundsMaxX","boundsMaxY","boundsMaxZ","index","transform","scale","transformMat4","radius","sphere","center","min","sphereCenter","worldBoundingSphere","sphereHandle","SetSphereGroupBounds","Array","isArray","overlayEffects","#UpdateOverlayInstanceData","parentVs","parentPs","display","overlayPods","from","framePod","local","world","multiply","worldLast","pod","clipData","set","inheritOverlayEffects","neutralClip","#HasAnyOwnOverlayEffects","some","#AnyMeshInheritsOverlayEffects","#MeshHasActiveOverlayEffects","GetLocalToWorldTransform","out","Setup","ChangeLOD","SetOrigin","IsAlwaysOn","SetShaderOption","value","area","areas","effect","SetOption","effectHash","meshGroupHandle","RemoveMeshGroup","AddMesh","geometryPath","castsShadow","instanceTransforms","sofHullName","sofLocatorSetName","partTag","sourceAreas","sourceTransforms","normalizedAreas","map","sphereIndex","TypeError","instance","EveChildInstancedMeshInstance","EveChildInstancedMesh","undefined","Number","partTags","batchType","RemoveInstancesByPartTag","tag","changed","keptInstances","keptTags","instanceIndex","instanceTag","RemoveBoundingSphereGroup","splice","CollectOwnedGeometry","parentTransform","areaPool","areaStart","areaIndex","count","areaCount","alphaCutout","reversed","childToObject","SetInstanceTransformByPartTag","translation","rotation","fromRotationTranslationScale","GetInstancesTransforms","meshId","RangeError","quat","getTranslation","getRotation","normalize","getScaling","Clear","GetSofSourceLocator","areaId","GetMeshCount","GetMeshInfo","GetAreaInfo","GetMeshDisplay","SetMeshDisplay","next","GetMeshInheritOverlayEffects","SetMeshInheritOverlayEffects","AddMeshOverlayEffect","overlayEffect","RemoveMeshOverlayEffect","overlays","indexOf","ClearMeshOverlayEffects","GetMeshOverlayEffectCount","SetGeometryResource","GetRevision","HasTransparentBatches","HasTransparentArea","GetSortValue","renderContext","viewPosition","GetViewPosition","GetPerObjectData","_accumulator","first","GetBatches","batches","_perObjectData","Tr2RenderReason","TR2RENDERREASON_NORMAL","committed","inherited","TR2RENDERREASON_REFLECTION","overlayAreaBlocksBuilt","CollectInstancedOverlayAreaBlocks","overlayAreaBlocks","IsSphereVisible","screenSize","GetPixelSizeAccrossEst","lod","GetMeshLod","EmitOverlayBatches","RegisterComponents","registry","GetComponentRegistry","RegisterComponent","EveComponentType","InstancedMeshProvider","ShadowCaster","UnRegisterComponents","UnregisterFromMeshManager","RemovePerObjectData","AddMeshesToManager","manager","AddPerObjectData","AddBoundingSphereGroup","GetShaderStateInterface","AddMeshGroup","IsCastingShadow","_args","GetShadowBatches","GetShadowPerObjectData","#GetMesh","#CreateArea","source","EveChildInstancedMeshArea","#CloneMesh","clone","slice","#GetEffectHash","GetHashValue","constructor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EveChildInstancedMeshes.js","sources":["../../../../../../src/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js"],"sourcesContent":["// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildInstancedMeshes.h\n// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildInstancedMeshes.cpp\n// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildInstancedMeshes_Blue.cpp\nimport { mat4 } from \"#math/mat4\";\nimport { quat } from \"#math/quat\";\nimport { vec3 } from \"#math/vec3\";\nimport { carbon, impl, edit, type } from \"#schema\";\nimport { EveComponentType, ShouldReflect } from \"../../EveComponentTypes.js\";\nimport { EveSpaceObjectChild } from \"../EveSpaceObjectChild.js\";\nimport { RawData } from \"../../../core/rawData/RawData.js\";\nimport { Tr2RenderReason } from \"../../../generated/trinityCore/enums.js\";\nimport {\n CollectInstancedOverlayAreaBlocks,\n EmitDamageOverlayBatches,\n EmitOverlayBatches\n} from \"../../overlays/overlayBatches.js\";\nimport { EveDamageOverlay } from \"../../overlays/EveDamageOverlay.js\";\nimport { EveGetLocatorPose } from \"../../locator/EveLocatorSets.js\";\nimport { ITr2Renderable } from \"../../../core/ITr2Renderable.js\";\nimport { EveChildInstancedMeshArea } from \"./EveChildInstancedMeshArea.js\";\nimport { EveChildInstancedMeshInstance } from \"./EveChildInstancedMeshInstance.js\";\nimport { EveChildInstancedMesh } from \"./EveChildInstancedMesh.js\";\n\n\n/** Carbon EveInstancedMeshManager::InstanceFlags (EveInstancedMeshManager.h:\n * 13-26, cpp:998-1048): a uint32 bitfield - bit (1 << batchType) per present\n * batch type, CASTS_SHADOW = 1 << 30, RENDER_IN_REFLECTION = 1 << 31. */\nexport const INSTANCE_FLAG_CASTS_SHADOW = 0x40000000;\nexport const INSTANCE_FLAG_RENDER_IN_REFLECTION = 0x80000000;\n\nconst POSITION_SCRATCH = vec3.create();\nconst OVERLAY_LOCAL_SCRATCH = mat4.create();\nconst OVERLAY_WORLD_SCRATCH = mat4.create();\nconst OVERLAY_WORLD_LAST_SCRATCH = mat4.create();\nconst OVERLAY_INV_WORLD_SCRATCH = mat4.create();\nconst OVERLAY_INV_LOCAL_SCRATCH = mat4.create();\nconst OVERLAY_CLIP_SCRATCH = vec3.create();\n\n/** Stand-in for an instance sphere the async pass has not built yet: Carbon\n * sizes instanceSpheres at AddMesh (cpp:559), JS fills it lazily. */\nconst EMPTY_SPHERE = { center: vec3.create(), radius: 0 };\n\n/**\n * Returns the locator list of a part's own \"damage\" set, or null (Carbon\n * EveChildInstancedMeshes.cpp:12-22, file-local).\n */\nfunction FindDamageLocators(sets)\n{\n for (const entry of sets)\n {\n if (entry.HasName(\"damage\")) return entry.GetLocators();\n }\n return null;\n}\n\n/**\n * Space-object child that hands batches of instanced meshes to the engine's\n * instanced mesh manager, owning their registration handles, instance flags and\n * world cull bounds.\n */\n@type.define({ className: \"EveChildInstancedMeshes\", family: \"eve/child\" })\n@carbon.inherit(ITr2Renderable)\nexport class EveChildInstancedMeshes extends EveSpaceObjectChild\n{\n @edit.persist\n @type.string\n name = \"\";\n\n @edit.read\n @type.mat4\n worldTransform = mat4.create();\n\n @edit.read\n @type.boolean\n hasUpdated = false;\n\n @edit.persist\n @type.list(\"EveChildInstancedMesh\")\n meshes = [];\n\n #revision = 0;\n\n /** Carbon m_perObjectDataHandle (h:143) - manager registration handle. */\n #perObjectDataHandle = null;\n\n /**\n * Carbon m_perObjectData (EveSpacePerObjectData): the PERSISTENT per-instance\n * record the mesh manager uploads into its structured buffer.\n */\n #perObjectData = RawData.create(\"EveSpacePerObjectData\");\n\n /** Base-hull record used by meshes that opt out of the parent's clip. */\n #perObjectDataNoClip = RawData.create(\"EveSpacePerObjectData\");\n\n #perObjectDataNoClipHandle = null;\n\n /** Engine manager that owns every currently retained opaque handle. */\n #meshManager = null;\n\n #parentOverlayEffects = null;\n\n #lastCameraFrustum = null;\n\n #lastInvLodFactor = 1;\n\n /** Carbon m_partDamageOverlays (h:215): one damage overlay per part tag,\n * created on first damage through CreatePartDamageOverlay. */\n _partDamageOverlays = new Map();\n\n static #inverseScratch = mat4.create();\n\n static #customMaskScratch = mat4.create();\n\n /** EVE_SPACEOBJECT_CUSTOWMASK_MAX (EveSpaceObject2.h:49). */\n static CUSTOM_MASK_COUNT = 2;\n\n /** Carbon m_allRegistered (h:147) - the AddMeshesToManager retry latch:\n * set optimistically each pass, cleared by ANY not-ready mesh/area so the\n * per-frame CollectMeshes retries until geometry streams in. */\n #allRegistered = false;\n\n /**\n * The authored name, persisted with the child and used to identify it in the\n * parent graph.\n */\n @carbon.method\n @impl.implemented\n GetName()\n {\n return this.name;\n }\n\n /** Sets the authored child name, coercing nullish to the empty string. */\n @carbon.method\n @impl.implemented\n SetName(name)\n {\n this.name = String(name ?? \"\");\n }\n\n /**\n * Carbon EveChildInstancedMeshes::UpdateVisibility (cpp:183-186) only caches\n * the frame's camera frustum for later use; the JS port has no consumer for\n * that cache, so the frame hook does nothing.\n */\n @carbon.method\n @impl.adapted\n UpdateVisibility(updateContext)\n {\n this.#lastCameraFrustum = updateContext.GetFrustum();\n this.#lastInvLodFactor = updateContext.GetInvLodFactor();\n }\n\n /**\n * Carbon EveChildInstancedMeshes::GetRenderables (cpp:200-207): the base\n * hull draws through the instanced mesh manager, so this child is a\n * renderable only for overlay draws - inherited, own, or part damage.\n */\n @carbon.method\n @impl.implemented\n GetRenderables(renderables = [])\n {\n if (this.hasUpdated &&\n ((this.#parentOverlayEffects?.length && this.#AnyMeshInheritsOverlayEffects()) ||\n this.#HasAnyOwnOverlayEffects() || this._partDamageOverlays.size !== 0))\n {\n renderables.push(this);\n }\n return renderables;\n }\n\n /**\n * Carbon EveChildInstancedMeshes::GetBoundingSphere (cpp:192-195) always\n * returns false - the child publishes no bounds of its own, because each mesh\n * registers its own sphere group with the manager.\n */\n @carbon.method\n @impl.implemented\n GetBoundingSphere()\n {\n return false;\n }\n\n /**\n * Carbon EveChildInstancedMeshes::UpdateAsyncronous (cpp:204-238): the\n * per-instance record is this child's own transforms plus the hull values it\n * inherits, flattened into ONE struct - EveSpacePerObjectData carries both\n * the VS and PS halves because the manager uploads it as a single instance.\n * @param {Object} parent - the space-object parent, when there is one\n */\n #UpdatePerObjectData(parent)\n {\n const record = this.#perObjectData;\n\n // Recover the previous logical transform from its stored transposed bytes,\n // then encode it into worldTransformLast.\n mat4.transpose(EveChildInstancedMeshes.#inverseScratch, record.GetTransposed(\"worldTransform\"));\n record.SetAndTranspose(\"worldTransformLast\", EveChildInstancedMeshes.#inverseScratch);\n record.SetAndTranspose(\"worldTransform\", this.worldTransform);\n\n // cpp:214 inverts the transposed matrix; by carbon-math-conventions F2 that\n // equals the transpose of the logical inverse, which is what this produces.\n const inverse = EveChildInstancedMeshes.#inverseScratch;\n if (!mat4.invert(inverse, this.worldTransform))\n {\n mat4.identity(inverse);\n }\n record.SetAndTranspose(\"invWorldTransform\", inverse);\n\n if (!parent)\n {\n this.#perObjectDataNoClip.CopyFrom(record);\n return { vs: RawData.create(\"EveSpaceObjectVSData\"), ps: RawData.create(\"EveSpaceObjectPSData\") };\n }\n\n const { vs, ps } = parent.GetPerObjectStructs();\n\n for (const name of [ \"shipData\", \"clipSphereCenter\", \"clipRadiusSq\", \"clipRadius2Sq\",\n \"impactDataOffset\", \"clipSphereFactor2\", \"clipSphereFactor\" ])\n {\n record.Set(name, ps.Get(name));\n }\n for (const name of [ \"ellpsoidRadii\", \"ellpsoidCenter\", \"customData\" ])\n {\n record.Set(name, vs.Get(name));\n }\n record.Set(\"customMaskClamps\", ps.Get(\"customMaskClamps\"));\n record.Set(\"boneOffsets\", vs.Get(\"boneOffsets\"));\n\n for (let slot = 0; slot < EveChildInstancedMeshes.CUSTOM_MASK_COUNT; slot++)\n {\n mat4.transpose(\n EveChildInstancedMeshes.#customMaskScratch,\n vs.GetTransposedIndex(\"customMaskMatrix\", slot));\n record.SetAndTransposeIndex(\n \"customMaskMatrix\", slot, EveChildInstancedMeshes.#customMaskScratch);\n record.SetIndex(\"customMaskData\", slot, vs.GetIndex(\"customMaskData\", slot));\n record.SetIndex(\"customMaskMaterialIDs\", slot, ps.GetIndex(\"customMaskMaterialIDs\", slot));\n record.SetIndex(\"customMaskTargets\", slot, ps.GetIndex(\"customMaskTargets\", slot));\n }\n\n // cpp:238: the PS record's coefficients land in the record's shLighting.\n record.Set(\"shLighting\", ps.Get(\"shLightingCoefficients\"));\n\n this.#perObjectDataNoClip.CopyFrom(record);\n this.#perObjectDataNoClip.Set(\"clipRadiusSq\", [ 0 ]);\n this.#perObjectDataNoClip.Set(\"clipRadius2Sq\", [ 0 ]);\n this.#perObjectDataNoClip.Set(\"clipSphereFactor\", [ 0 ]);\n this.#perObjectDataNoClip.Set(\"clipSphereFactor2\", [ 0 ]);\n return { vs, ps };\n }\n\n /**\n * Stamps the child's world transform from the parent's localToWorldTransform\n * (Carbon cpp:197-200); every per-instance cull sphere the async pass builds\n * is derived from it.\n */\n @carbon.method\n @impl.implemented\n UpdateSyncronous(updateContext, params)\n {\n if (params?.localToWorldTransform?.length === 16)\n {\n mat4.copy(this.worldTransform, params.localToWorldTransform);\n }\n\n const time = updateContext.GetTime();\n for (const mesh of this.meshes)\n {\n for (const overlay of mesh.ownOverlayEffects) overlay.Update(time, time);\n }\n\n // Carbon cpp:228-231: every part's damage overlay publishes its block.\n for (const overlay of this._partDamageOverlays.values()) overlay.UpdateSyncronous(updateContext);\n }\n\n /** Carbon EveChildInstancedMeshes::UpdateAsyncronous (cpp:234-413), the CPU\n * half: per-mesh RENDER_IN_REFLECTION refresh (cpp:251), the mesh-local\n * bounds sphere radius = |center| + radius (cpp:254-255), per-instance\n * world cull spheres - position from the instance translation (Carbon reads\n * the packed rows' w = _41.._43, i.e. the transform translation) moved\n * through the child world transform, radius scaled by the instance's max\n * basis length times the child worldScale (cpp:259-269; NOTE Carbon's two\n * scale extractions deliberately differ - worldScale uses the world\n * transform's basis ROWS while the instance scale uses the packed rows'\n * xyz = the transpose's rows; equal under rotation + uniform scale,\n * ported exactly) - the world bounding sphere over all instance spheres\n * (cpp:257-270), a live SetSphereGroupBounds refresh on registered handles\n * (cpp:272-278), and the hasUpdated stamp (cpp:281). */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Trinity owns the CPU per-object field copy; the raytracing mesh build (cpp:283-327) is not ported yet. Mesh bounds come from a GetMeshData duck ({minBounds, maxBounds}) and meshes without one are skipped fail-closed.\")\n UpdateAsyncronous(updateContext, params)\n {\n const previousWorldTransform = mat4.create();\n mat4.transpose(previousWorldTransform, this.#perObjectData.GetTransposed(\"worldTransform\"));\n const parentRecords = this.#UpdatePerObjectData(params?.spaceObjectParent ?? null);\n const w = this.worldTransform;\n // cpp:240-242 - worldScale from the world transform's basis rows.\n const worldScale = Math.max(\n Math.hypot(w[0], w[1], w[2]),\n Math.hypot(w[4], w[5], w[6]),\n Math.hypot(w[8], w[9], w[10])\n );\n\n for (const mesh of this.meshes)\n {\n const geometry = mesh.GetGeometryResource();\n if (!geometry || geometry.IsGood() === false)\n {\n continue;\n }\n\n // cpp:251 - refreshed every pass (set OR cleared).\n mesh.flags = ShouldReflect(mesh.reflectionMode)\n ? (mesh.flags | INSTANCE_FLAG_RENDER_IN_REFLECTION) >>> 0\n : (mesh.flags & ~INSTANCE_FLAG_RENDER_IN_REFLECTION) >>> 0;\n\n const meshData = geometry.GetMeshData(mesh.meshIndex);\n const minBounds = meshData.minBounds;\n const maxBounds = meshData.maxBounds;\n if (!minBounds || !maxBounds)\n {\n continue;\n }\n // cpp:254-255 - Sphere(AABB): center (min+max)/2, radius |max-min|/2;\n // then radius = sphere.radius + |sphere.center| (origin-inclusive).\n const centerX = (minBounds[0] + maxBounds[0]) * 0.5;\n const centerY = (minBounds[1] + maxBounds[1]) * 0.5;\n const centerZ = (minBounds[2] + maxBounds[2]) * 0.5;\n const localRadius =\n Math.hypot(maxBounds[0] - minBounds[0], maxBounds[1] - minBounds[1], maxBounds[2] - minBounds[2]) * 0.5 +\n Math.hypot(centerX, centerY, centerZ);\n\n mesh.instanceSpheres.length = mesh.instances.length;\n let boundsMinX = Infinity, boundsMinY = Infinity, boundsMinZ = Infinity;\n let boundsMaxX = -Infinity, boundsMaxY = -Infinity, boundsMaxZ = -Infinity;\n for (let index = 0; index < mesh.instances.length; index++)\n {\n const transform = mesh.instances[index].transform;\n // cpp:261 - packed rows' w = the transform translation (gl [12..14]).\n POSITION_SCRATCH[0] = transform[12];\n POSITION_SCRATCH[1] = transform[13];\n POSITION_SCRATCH[2] = transform[14];\n // cpp:262-264 - instance scale from the packed rows' xyz (the\n // transpose's rows: gl (t[0],t[4],t[8]) / (t[1],t[5],t[9]) /\n // (t[2],t[6],t[10])) - deliberately NOT the same extraction as\n // worldScale above.\n const scale = Math.max(\n Math.hypot(transform[0], transform[4], transform[8]),\n Math.hypot(transform[1], transform[5], transform[9]),\n Math.hypot(transform[2], transform[6], transform[10])\n ) * worldScale;\n vec3.transformMat4(POSITION_SCRATCH, POSITION_SCRATCH, w);\n\n const radius = localRadius * scale;\n const sphere = mesh.instanceSpheres[index] ??= { center: vec3.create(), radius: 0 };\n vec3.copy(sphere.center, POSITION_SCRATCH);\n sphere.radius = radius;\n\n boundsMinX = Math.min(boundsMinX, POSITION_SCRATCH[0] - radius);\n boundsMinY = Math.min(boundsMinY, POSITION_SCRATCH[1] - radius);\n boundsMinZ = Math.min(boundsMinZ, POSITION_SCRATCH[2] - radius);\n boundsMaxX = Math.max(boundsMaxX, POSITION_SCRATCH[0] + radius);\n boundsMaxY = Math.max(boundsMaxY, POSITION_SCRATCH[1] + radius);\n boundsMaxZ = Math.max(boundsMaxZ, POSITION_SCRATCH[2] + radius);\n }\n if (mesh.instances.length)\n {\n // cpp:270 - Sphere(worldBounds).\n const sphereCenter = mesh.worldBoundingSphere.center;\n sphereCenter[0] = (boundsMinX + boundsMaxX) * 0.5;\n sphereCenter[1] = (boundsMinY + boundsMaxY) * 0.5;\n sphereCenter[2] = (boundsMinZ + boundsMaxZ) * 0.5;\n mesh.worldBoundingSphere.radius =\n Math.hypot(boundsMaxX - boundsMinX, boundsMaxY - boundsMinY, boundsMaxZ - boundsMinZ) * 0.5;\n\n // cpp:272-278 - live refresh of a registered sphere group.\n if (mesh.sphereHandle !== null)\n {\n this.#meshManager.SetSphereGroupBounds(\n mesh.sphereHandle, mesh.worldBoundingSphere, mesh.flags);\n }\n }\n }\n\n const parent = params?.spaceObjectParent ?? null;\n this.#parentOverlayEffects = Array.isArray(parent?.overlayEffects) && parent.overlayEffects.length\n ? parent.overlayEffects\n : null;\n\n // Carbon cpp:333-359: each part's overlay is aged against its own\n // instance - local mesh sphere, world instance sphere, and the part's own\n // bind-pose damage locators. A part whose mesh is not loaded gets Carbon's\n // default owner info, which resolves no locators.\n for (const [ partTag, overlay ] of this._partDamageOverlays)\n {\n const info = { boundingSphere: [ 0, 0, 0, -1 ], estimatedPixelDiameter: 0, isInFrustum: false };\n const found = this._FindMeshByPartTag(partTag);\n const geometry = found?.mesh.GetGeometryResource();\n if (found && geometry && geometry.IsGood() !== false)\n {\n const meshData = geometry.GetMeshData(found.mesh.meshIndex);\n if (meshData?.minBounds && meshData?.maxBounds)\n {\n const minBounds = meshData.minBounds;\n const maxBounds = meshData.maxBounds;\n info.boundingSphere = [\n (minBounds[0] + maxBounds[0]) * 0.5,\n (minBounds[1] + maxBounds[1]) * 0.5,\n (minBounds[2] + maxBounds[2]) * 0.5,\n Math.hypot(maxBounds[0] - minBounds[0], maxBounds[1] - minBounds[1], maxBounds[2] - minBounds[2]) * 0.5\n ];\n }\n const worldSphere = found.mesh.instanceSpheres[found.instanceIndex] ?? EMPTY_SPHERE;\n const frustum = updateContext.GetFrustum();\n info.estimatedPixelDiameter = Math.max(\n frustum.GetPixelSizeAccrossEst(worldSphere.center, worldSphere.radius) * updateContext.GetInvLodFactor(), 0);\n info.isInFrustum = frustum.IsSphereVisible(worldSphere.center, worldSphere.radius);\n const damageLocators = FindDamageLocators(found.mesh.ownedLocatorSets);\n info.getDamageLocatorPositionOS = (index, out) =>\n {\n if (!damageLocators || index < 0 || index >= damageLocators.length) return false;\n vec3.copy(out, damageLocators[index].position);\n return true;\n };\n }\n overlay.UpdateAsyncronous(updateContext, info, 0, false);\n }\n\n if ((this.#parentOverlayEffects && this.#AnyMeshInheritsOverlayEffects()) ||\n this.#HasAnyOwnOverlayEffects() || this._partDamageOverlays.size !== 0)\n {\n this.#UpdateOverlayInstanceData(updateContext, parentRecords.vs, parentRecords.ps, previousWorldTransform);\n }\n\n this.hasUpdated = true;\n }\n\n /** Builds one persistent VS/PS record pair per authored instance. */\n #UpdateOverlayInstanceData(updateContext, parentVs, parentPs, previousWorldTransform)\n {\n for (const mesh of this.meshes)\n {\n if (!mesh.instances.length || !mesh.display || !this._MeshNeedsOverlayPods(mesh)) continue;\n\n if (!mesh.overlayPods || mesh.overlayPods.length !== mesh.instances.length)\n {\n mesh.overlayPods = Array.from({ length: mesh.instances.length }, () => ({\n vs: RawData.create(\"EveSpaceObjectVSData\"),\n ps: RawData.create(\"EveSpaceObjectPSData\"),\n framePod: null\n }));\n }\n\n for (let index = 0; index < mesh.instances.length; index++)\n {\n const local = mat4.copy(OVERLAY_LOCAL_SCRATCH, mesh.instances[index].transform);\n const world = mat4.multiply(OVERLAY_WORLD_SCRATCH, this.worldTransform, local);\n const worldLast = mat4.multiply(\n OVERLAY_WORLD_LAST_SCRATCH, previousWorldTransform, local);\n if (!mat4.invert(OVERLAY_INV_WORLD_SCRATCH, world)) mat4.identity(OVERLAY_INV_WORLD_SCRATCH);\n if (!mat4.invert(OVERLAY_INV_LOCAL_SCRATCH, local)) mat4.identity(OVERLAY_INV_LOCAL_SCRATCH);\n\n const pod = mesh.overlayPods[index];\n pod.vs.CopyFrom(parentVs);\n pod.ps.CopyFrom(parentPs);\n pod.vs.SetAndTranspose(\"worldTransform\", world);\n pod.vs.SetAndTranspose(\"worldTransformLast\", worldLast);\n pod.vs.SetAndTranspose(\"invWorldTransform\", OVERLAY_INV_WORLD_SCRATCH);\n pod.ps.SetAndTranspose(\"worldTransform\", world);\n pod.ps.SetAndTranspose(\"worldTransformLast\", worldLast);\n pod.ps.SetAndTranspose(\"invWorldTransform\", OVERLAY_INV_WORLD_SCRATCH);\n\n const clipData = pod.vs.Get(\"clipData\");\n vec3.set(OVERLAY_CLIP_SCRATCH, clipData[0], clipData[1], clipData[2]);\n vec3.transformMat4(OVERLAY_CLIP_SCRATCH, OVERLAY_CLIP_SCRATCH, OVERLAY_INV_LOCAL_SCRATCH);\n pod.vs.Set(\"clipData\", [\n OVERLAY_CLIP_SCRATCH[0], OVERLAY_CLIP_SCRATCH[1], OVERLAY_CLIP_SCRATCH[2], clipData[3]\n ]);\n\n vec3.copy(OVERLAY_CLIP_SCRATCH, pod.ps.Get(\"clipSphereCenter\"));\n vec3.transformMat4(OVERLAY_CLIP_SCRATCH, OVERLAY_CLIP_SCRATCH, OVERLAY_INV_LOCAL_SCRATCH);\n pod.ps.Set(\"clipSphereCenter\", OVERLAY_CLIP_SCRATCH);\n\n if (!mesh.inheritOverlayEffects)\n {\n const neutralClip = pod.vs.Get(\"clipData\");\n pod.vs.Set(\"clipData\", [ neutralClip[0], neutralClip[1], neutralClip[2], 0 ]);\n pod.ps.Set(\"clipRadiusSq\", [ 0 ]);\n pod.ps.Set(\"clipRadius2Sq\", [ 0 ]);\n pod.ps.Set(\"clipSphereFactor\", [ 0 ]);\n pod.ps.Set(\"clipSphereFactor2\", [ 0 ]);\n }\n\n // Carbon cpp:1238-1242: a damaged part flickers and reads its own\n // rows of the damage data texture.\n const damageOverlay = this._FindPartDamageOverlay(mesh.partTags[index]);\n if (damageOverlay)\n {\n const shipData = pod.ps.Get(\"shipData\");\n pod.ps.Set(\"shipData\", [\n shipData[0], shipData[1] * damageOverlay.GetActivationStrength(updateContext), shipData[2], shipData[3]\n ]);\n pod.ps.Set(\"impactDataOffset\", [ damageOverlay.GetDataTextureOffset() ]);\n }\n }\n }\n }\n\n /** Reports whether any instanced mesh owns an overlay effect. */\n #HasAnyOwnOverlayEffects()\n {\n return this.meshes.some(mesh => mesh.ownOverlayEffects.length !== 0);\n }\n\n /** Reports whether any instanced mesh inherits its parent's overlays. */\n #AnyMeshInheritsOverlayEffects()\n {\n return this.meshes.some(mesh => mesh.inheritOverlayEffects);\n }\n\n /** Reports whether one mesh has an own or inherited overlay path. */\n #MeshHasActiveOverlayEffects(mesh)\n {\n return mesh.ownOverlayEffects.length !== 0 ||\n (this.#parentOverlayEffects !== null && mesh.inheritOverlayEffects);\n }\n\n /**\n * Finds the mesh holding an instance of a part, and that instance's index\n * (Carbon FindMeshByPartTag, cpp:1115-1132; the size_t* out-param becomes\n * the returned record).\n * @returns {{mesh: EveChildInstancedMesh, instanceIndex: Number}|null}\n */\n _FindMeshByPartTag(partTag)\n {\n for (const mesh of this.meshes)\n {\n const instanceIndex = mesh.partTags.indexOf(partTag);\n if (instanceIndex !== -1) return { mesh, instanceIndex };\n }\n return null;\n }\n\n /** Returns a part's damage overlay, or null (Carbon FindPartDamageOverlay, cpp:1134-1142). */\n _FindPartDamageOverlay(partTag)\n {\n return this._partDamageOverlays.get(partTag) ?? null;\n }\n\n /** Reports whether any instance of a mesh belongs to a damaged part (Carbon cpp:1144-1158). */\n _MeshHasDamageOverlays(mesh)\n {\n if (this._partDamageOverlays.size === 0) return false;\n return mesh.partTags.some(tag => this._partDamageOverlays.has(tag));\n }\n\n /** Reports whether a mesh needs per-instance overlay pods (Carbon cpp:1160-1163). */\n _MeshNeedsOverlayPods(mesh)\n {\n return this.#MeshHasActiveOverlayEffects(mesh) || this._MeshHasDamageOverlays(mesh);\n }\n\n /**\n * Returns the child's world transform as stamped by the last sync update.\n * @param {Float32Array} [out] - caller-owned; when given, receives a copy and is returned instead of the live matrix\n * @returns {Float32Array} out when supplied, otherwise the live internal matrix\n */\n @carbon.method\n @impl.implemented\n GetLocalToWorldTransform(out = null)\n {\n if (out)\n {\n return mat4.copy(out, this.worldTransform);\n }\n return this.worldTransform;\n }\n\n /**\n * Carbon EveChildInstancedMeshes::Setup (cpp:335-337) is an intentional no-op:\n * placement comes from the authored per-instance transforms, not from an SRT\n * setup.\n */\n @carbon.method\n @impl.implemented\n Setup()\n {\n }\n\n /**\n * Carbon EveChildInstancedMeshes::ChangeLOD (cpp:339-341) is an intentional\n * no-op; the child keeps no LOD state.\n */\n @carbon.method\n @impl.implemented\n ChangeLOD()\n {\n }\n\n /**\n * Accepts and discards the placement origin; this child has no Carbon origin\n * field and stores none.\n */\n @carbon.method\n @impl.adapted\n SetOrigin()\n {\n }\n\n /**\n * Returns false, so owners treat this child as subject to normal activation\n * gating.\n */\n @carbon.method\n @impl.implemented\n IsAlwaysOn()\n {\n return false;\n }\n\n /** Carbon EveChildInstancedMeshes::SetShaderOption (cpp:343-359): flips the\n * option and refreshes the effect hash on every area, then removes any\n * registered mesh-group handle and clears the latch - so the groups\n * re-register with the NEW effectHash on the next AddMeshesToManager pass.\n * Sphere/per-object handles deliberately stay registered. */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Handle invalidation after manager removal is explicit in JavaScript; the option write, hash refresh and registration lifecycle otherwise follow Carbon.\")\n SetShaderOption(name, value)\n {\n for (const mesh of this.meshes)\n {\n for (const area of mesh.areas)\n {\n area.effect.SetOption(name, value);\n area.effectHash = EveChildInstancedMeshes.#GetEffectHash(area.effect);\n if (area.meshGroupHandle !== null)\n {\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\n area.meshGroupHandle = null;\n this.#allRegistered = false;\n }\n }\n }\n this.#revision++;\n }\n\n /**\n * Appends one instanced mesh: normalizes the area ducks, copies the instance transforms, stamps CASTS_SHADOW plus one flag bit per area batch type (Carbon cpp:574-581), and clears the registration latch so the next AddMeshesToManager pass picks it up.\n * @param {Iterable} areas - area ducks ({effect, batchType, areaIndex, areaCount})\n * @param {Iterable<Float32Array>} instanceTransforms - 16-value matrices; copied, not retained\n * @param {Number} partTag - modular owner shared by every appended instance\n * @param {Iterable} ownedLocatorSets - the part's hull-local EveLocatorSets, merged by the owner per instance\n * @param {Object|null} armorDamageShader - the part's armour damage Tr2Effect\n * @returns {Boolean} false when no areas or no instances were supplied (nothing is added)\n */\n @carbon.method\n @impl.adapted\n AddMesh(\n geometryPath,\n castsShadow,\n reflectionMode,\n meshIndex,\n areas,\n instanceTransforms,\n sofHullName = \"\",\n sofLocatorSetName = \"\",\n partTag = 0,\n ownedLocatorSets = [],\n armorDamageShader = null\n )\n {\n const sourceAreas = Array.from(areas ?? []);\n const sourceTransforms = Array.from(instanceTransforms ?? []);\n if (!sourceAreas.length || !sourceTransforms.length)\n {\n return false;\n }\n\n const normalizedAreas = sourceAreas.map(area => EveChildInstancedMeshes.#CreateArea(area));\n const instances = sourceTransforms.map((transform, sphereIndex) =>\n {\n if (!transform || transform.length !== 16)\n {\n throw new TypeError(\"EveChildInstancedMeshes instance transforms must contain 16 values\");\n }\n const instance = new EveChildInstancedMeshInstance();\n mat4.copy(instance.transform, transform);\n instance.sphereIndex = sphereIndex;\n return instance;\n });\n\n const mesh = new EveChildInstancedMesh();\n mesh.geometryPath = String(geometryPath ?? \"\");\n mesh.castsShadow = !!castsShadow;\n mesh.reflectionMode = reflectionMode === undefined ? 3 : Number(reflectionMode) | 0;\n mesh.meshIndex = Number(meshIndex) >>> 0;\n mesh.areas = normalizedAreas;\n mesh.instances = instances;\n mesh.partTags = instances.map(() => Number(partTag) >>> 0);\n mesh.sofHullName = String(sofHullName ?? \"\");\n mesh.sofLocatorSetName = String(sofLocatorSetName ?? \"\");\n mesh.ownedLocatorSets = Array.from(ownedLocatorSets ?? []);\n mesh.armorDamageShader = armorDamageShader ?? null;\n // Carbon cpp:586-589: the owner merges this part's sets per instance.\n if (mesh.ownedLocatorSets.length && this.GetOwner())\n {\n this.GetOwner().InvalidateMergedLocators(\"structure\");\n }\n // Carbon (cpp:574-581): the CASTS_SHADOW flag and one bit per area batch\n // type are stamped at add time; RENDER_IN_REFLECTION is refreshed each\n // async pass. cpp:590 clears the registration latch.\n if (mesh.castsShadow)\n {\n mesh.flags = (mesh.flags | INSTANCE_FLAG_CASTS_SHADOW) >>> 0;\n }\n for (const area of mesh.areas)\n {\n mesh.flags = (mesh.flags | (1 << area.batchType)) >>> 0;\n }\n this.meshes.push(mesh);\n this.#allRegistered = false;\n this.#revision++;\n return true;\n }\n\n /**\n * Removes every instance owned by a modular part, dropping empty meshes and\n * invalidating manager registrations.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"JavaScript explicitly nulls manager handles after removal; Carbon invalidates them by reference.\")\n RemoveInstancesByPartTag(partTag)\n {\n const tag = Number(partTag) >>> 0;\n let changed = false;\n let removedOwnedLocators = false;\n for (let meshIndex = this.meshes.length - 1; meshIndex >= 0; meshIndex--)\n {\n const mesh = this.meshes[meshIndex];\n const keptInstances = [];\n const keptTags = [];\n for (let instanceIndex = 0; instanceIndex < mesh.instances.length; instanceIndex++)\n {\n const instanceTag = Number(mesh.partTags[instanceIndex] ?? 0) >>> 0;\n if (instanceTag === tag)\n {\n changed = true;\n continue;\n }\n keptInstances.push(mesh.instances[instanceIndex]);\n keptTags.push(instanceTag);\n }\n if (keptInstances.length === mesh.instances.length) continue;\n removedOwnedLocators ||= mesh.ownedLocatorSets.length !== 0;\n\n if (mesh.sphereHandle !== null)\n {\n this.#meshManager.RemoveBoundingSphereGroup(mesh.sphereHandle);\n mesh.sphereHandle = null;\n }\n for (const area of mesh.areas)\n {\n if (area.meshGroupHandle !== null)\n {\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\n area.meshGroupHandle = null;\n }\n }\n if (keptInstances.length === 0)\n {\n this.meshes.splice(meshIndex, 1);\n continue;\n }\n mesh.instances = keptInstances;\n mesh.partTags = keptTags;\n mesh.instanceSpheres.length = keptInstances.length;\n for (let instanceIndex = 0; instanceIndex < keptInstances.length; instanceIndex++)\n {\n keptInstances[instanceIndex].sphereIndex = instanceIndex;\n }\n }\n if (changed)\n {\n this.#allRegistered = false;\n this.#revision++;\n }\n // Carbon cpp:659-663: the part's damage overlay goes with it, and the\n // owner re-merges without the part's locators.\n this._partDamageOverlays.delete(tag);\n if (removedOwnedLocators && this.GetOwner())\n {\n this.GetOwner().InvalidateMergedLocators(\"structure\");\n }\n return changed;\n }\n\n /**\n * Contributes every instance of every mesh to the owner's merged raycast set\n * (Carbon EveChildInstancedMeshes.cpp:1279-1324): the type-matching areas\n * are appended ONCE per mesh and shared by all of that mesh's instance\n * records via areaStart/areaCount; meshes with no matching areas contribute\n * nothing. Carbon row-vector instanceTransform * parentTransform maps to\n * gl-matrix multiply(out, parentTransform, instanceTransform).\n */\n @carbon.method\n @impl.implemented\n CollectOwnedGeometry(type, parentTransform, out, areaPool)\n {\n for (const mesh of this.meshes)\n {\n const geometry = mesh.GetGeometryResource();\n if (!geometry || !mesh.instances.length) continue;\n\n const areaStart = areaPool.length;\n for (const area of mesh.areas)\n {\n if (area.batchType !== type) continue;\n areaPool.push({\n index: area.areaIndex,\n count: area.areaCount,\n alphaCutout: !!area.alphaCutout,\n reversed: !!area.reversed\n });\n }\n const areaCount = areaPool.length - areaStart;\n if (areaCount === 0) continue;\n\n for (const instance of mesh.instances)\n {\n const childToObject = mat4.create();\n mat4.multiply(childToObject, parentTransform, instance.transform);\n out.push({ geometry, childToObject, areaStart, areaCount });\n }\n }\n }\n\n /**\n * Contributes each part's owned locator sets once per instance, tagged with\n * that instance's part (Carbon EveChildInstancedMeshes.cpp:1473-1495).\n * Carbon row-vector instanceTransform * parentTransform maps to gl-matrix\n * multiply(out, parentTransform, instanceTransform).\n */\n @carbon.method\n @impl.implemented\n CollectOwnedLocatorSets(parentTransform, out)\n {\n for (const mesh of this.meshes)\n {\n for (const sets of mesh.ownedLocatorSets)\n {\n if (!sets || !sets.GetLocators().length) continue;\n for (let index = 0; index < mesh.instances.length; index++)\n {\n const childToObject = mat4.create();\n mat4.multiply(childToObject, parentTransform, mesh.instances[index].transform);\n out.push({ childToObject, owner: this, partTag: mesh.partTags[index], sets });\n }\n }\n }\n }\n\n /** Returns a part's damage overlay, or null while it has none (Carbon cpp:1497-1500). */\n @carbon.method\n @impl.implemented\n GetPartDamageOverlay(partTag)\n {\n return this._FindPartDamageOverlay(partTag);\n }\n\n /** Creates a part's damage overlay when it does not yet exist (Carbon cpp:1502-1509). */\n @carbon.method\n @impl.implemented\n CreatePartDamageOverlay(partTag)\n {\n if (!this._partDamageOverlays.has(partTag))\n {\n this._partDamageOverlays.set(partTag, new EveDamageOverlay());\n }\n }\n\n /** Returns the armour damage shader of the mesh carrying a part (Carbon cpp:1511-1518). */\n @carbon.method\n @impl.implemented\n GetPartArmorDamageShaderEffect(partTag)\n {\n return this._FindMeshByPartTag(partTag)?.mesh.armorDamageShader ?? null;\n }\n\n /**\n * Writes the part-local pose of one of a part's damage locators. Shared\n * instances carry no skeleton, so the pose is the authored one (Carbon\n * cpp:1520-1534 passes a null animation updater).\n */\n @carbon.method\n @impl.implemented\n GetPartDamageLocatorAnimatedLocal(partTag, index, position, direction)\n {\n const found = this._FindMeshByPartTag(partTag);\n if (!found) return false;\n const locators = FindDamageLocators(found.mesh.ownedLocatorSets);\n if (!locators || index < 0 || index >= locators.length) return false;\n EveGetLocatorPose(position, direction, null, locators[index]);\n return true;\n }\n\n /**\n * Overwrites the transform of every instance owned by a modular part with an\n * ABSOLUTE new transform (Carbon EveChildInstancedMeshes.cpp:665-685,\n * PLAT-11963). No handle teardown - the per-frame async pass refreshes the\n * cull spheres from the live transforms - but a part that owns locators\n * invalidates the owner's merged set. The per-part filter lives HERE, not at\n * the call site (the shared child carries many parts' instances).\n */\n @carbon.method\n @impl.implemented\n SetInstanceTransformByPartTag(partTag, translation, rotation, scale)\n {\n const tag = Number(partTag) >>> 0;\n const transform = mat4.fromRotationTranslationScale(mat4.create(), rotation, translation, scale);\n let movedOwnedLocators = false;\n for (const mesh of this.meshes)\n {\n for (let index = 0; index < mesh.instances.length; index++)\n {\n if ((Number(mesh.partTags[index] ?? 0) >>> 0) === tag)\n {\n mat4.copy(mesh.instances[index].transform, transform);\n movedOwnedLocators ||= mesh.ownedLocatorSets.length !== 0;\n }\n }\n }\n // Carbon cpp:681-684: moved part-owned locators are re-merged.\n if (movedOwnedLocators && this.GetOwner())\n {\n this.GetOwner().InvalidateMergedLocators(\"partMoved\");\n }\n }\n\n /**\n * Returns one [translation, rotation, scale] decomposition per instance of a\n * mesh (Carbon EveChildInstancedMeshes.cpp:781-806, script-exposed tooling);\n * throws RangeError where Carbon raises IndexError.\n */\n @carbon.method\n @impl.adapted\n GetInstancesTransforms(meshId)\n {\n const index = Number(meshId) >>> 0;\n if (index >= this.meshes.length)\n {\n throw new RangeError(\"Mesh index out of range\");\n }\n return this.meshes[index].instances.map(instance =>\n {\n const translation = vec3.create();\n const rotation = quat.create();\n const scale = vec3.create();\n mat4.getTranslation(translation, instance.transform);\n mat4.getRotation(rotation, instance.transform);\n quat.normalize(rotation, rotation);\n mat4.getScaling(scale, instance.transform);\n return { translation, rotation, scale };\n });\n }\n\n /**\n * Drops every mesh and clears the hasUpdated stamp so nothing re-registers\n * until another update pass runs; registration handles are NOT released here,\n * so call UnregisterFromMeshManager first when a manager still holds them.\n */\n @carbon.method\n @impl.adapted\n Clear()\n {\n this.meshes.length = 0;\n this.hasUpdated = false;\n this.#revision++;\n }\n\n /**\n * Decodes a picking area id back to the SOF locator it came from.\n * @param {Number} areaId - mesh ordinal in the high 16 bits, locator index in the low 16 (the pairing AddMeshesToManager registers)\n * @returns {Array|null} [sofHullName, sofLocatorSetName, locatorIndex], or null when the mesh is unknown or carries no SOF hull name\n */\n @carbon.method\n @impl.implemented\n GetSofSourceLocator(areaId)\n {\n const value = Number(areaId) >>> 0;\n const mesh = this.meshes[value >>> 16];\n if (!mesh || !mesh.sofHullName)\n {\n return null;\n }\n return [mesh.sofHullName, mesh.sofLocatorSetName, value & 0xffff];\n }\n\n /** Number of meshes currently held. */\n @carbon.method\n @impl.implemented\n GetMeshCount()\n {\n return this.meshes.length;\n }\n\n /**\n * Reports one mesh's authoring state as a positional tuple (Carbon's multiple out-params).\n * @param {Number} meshId - mesh index; RangeError when out of range\n * @returns {Array} [geometryPath, geometryResource, meshIndex, castsShadow, reflectionMode, areaCount, instanceCount]\n */\n @carbon.method\n @impl.adapted\n GetMeshInfo(meshId)\n {\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\n return [\n mesh.geometryPath,\n mesh.GetGeometryResource(),\n mesh.meshIndex,\n mesh.castsShadow,\n mesh.reflectionMode,\n mesh.areas.length,\n mesh.instances.length\n ];\n }\n\n /**\n * Reports one area of one mesh as a positional tuple (Carbon's multiple out-params).\n * @param {Number} meshId - mesh index; RangeError when out of range\n * @param {Number} areaId - area index within that mesh; RangeError when out of range\n * @returns {Array} [effect, batchType, areaIndex, areaCount] - the effect is the live reference\n */\n @carbon.method\n @impl.adapted\n GetAreaInfo(meshId, areaId)\n {\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\n const index = Number(areaId) >>> 0;\n if (index >= mesh.areas.length)\n {\n throw new RangeError(`EveChildInstancedMeshes area index ${index} is out of range`);\n }\n const area = mesh.areas[index];\n return [area.effect, area.batchType, area.areaIndex, area.areaCount];\n }\n\n /**\n * Whether the given mesh is currently displayed; throws RangeError for an\n * unknown mesh index.\n */\n @carbon.method\n @impl.adapted\n GetMeshDisplay(meshId)\n {\n return EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).display;\n }\n\n /** Carbon EveChildInstancedMeshes::SetMeshDisplay (cpp:663-691): a toggle\n * clears the latch; turning a mesh OFF eagerly removes its sphere and\n * mesh-group handles - which is why AddMeshesToManager's display-off skip\n * does NOT clear the latch (the handles are already gone). */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Handle invalidation after removal is explicit (Carbon's DataHandle is invalidated by the manager by reference).\")\n SetMeshDisplay(meshId, display)\n {\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\n const next = !!display;\n if (mesh.display !== next)\n {\n mesh.display = next;\n this.#allRegistered = false;\n if (!next)\n {\n if (mesh.sphereHandle !== null)\n {\n this.#meshManager.RemoveBoundingSphereGroup(mesh.sphereHandle);\n mesh.sphereHandle = null;\n }\n for (const area of mesh.areas)\n {\n if (area.meshGroupHandle !== null)\n {\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\n area.meshGroupHandle = null;\n }\n }\n }\n this.#revision++;\n }\n }\n\n /** Returns whether one instanced mesh inherits parent overlay effects. */\n @carbon.method\n @impl.implemented\n GetMeshInheritOverlayEffects(meshId)\n {\n return EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).inheritOverlayEffects;\n }\n\n /** Enables or disables parent-overlay inheritance for one mesh. */\n @carbon.method\n @impl.implemented\n SetMeshInheritOverlayEffects(meshId, inherit)\n {\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\n const next = !!inherit;\n if (mesh.inheritOverlayEffects === next) return;\n\n mesh.inheritOverlayEffects = next;\n this.#allRegistered = false;\n for (const area of mesh.areas)\n {\n if (area.meshGroupHandle === null) continue;\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\n area.meshGroupHandle = null;\n }\n }\n\n /** Adds an overlay effect owned by one instanced mesh. */\n @carbon.method\n @impl.implemented\n AddMeshOverlayEffect(meshId, overlayEffect)\n {\n if (!overlayEffect) throw new TypeError(\"overlayEffect must not be null\");\n EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).ownOverlayEffects.push(overlayEffect);\n }\n\n /** Removes an overlay effect owned by one instanced mesh. */\n @carbon.method\n @impl.implemented\n RemoveMeshOverlayEffect(meshId, overlayEffect)\n {\n const overlays = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).ownOverlayEffects;\n const index = overlays.indexOf(overlayEffect);\n if (index !== -1) overlays.splice(index, 1);\n }\n\n /** Removes every overlay effect owned by one instanced mesh. */\n @carbon.method\n @impl.implemented\n ClearMeshOverlayEffects(meshId)\n {\n EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).ownOverlayEffects.length = 0;\n }\n\n /** Returns the number of overlay effects owned by one instanced mesh. */\n @carbon.method\n @impl.implemented\n GetMeshOverlayEffectCount(meshId)\n {\n return EveChildInstancedMeshes.#GetMesh(this.meshes, meshId).ownOverlayEffects.length;\n }\n\n /**\n * Assigns one mesh's geometry resource, bumping the revision only when it\n * actually changes; registration waits for the next AddMeshesToManager pass.\n */\n @carbon.method\n @impl.adapted\n SetGeometryResource(meshId, geometry)\n {\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\n if (mesh.GetGeometryResource() !== geometry)\n {\n mesh.SetGeometryResource(geometry);\n this.#revision++;\n }\n }\n\n /**\n * Returns a detached snapshot of one mesh - instance transforms cloned, areas\n * shallow-copied, geometry resource shared by reference - so callers can read\n * it without touching live registration state.\n */\n @carbon.method\n @impl.adapted\n GetMeshData(meshId)\n {\n const mesh = EveChildInstancedMeshes.#GetMesh(this.meshes, meshId);\n return EveChildInstancedMeshes.#CloneMesh(mesh);\n }\n\n /**\n * Monotonic counter bumped by every structural change (AddMesh, Clear,\n * SetMeshDisplay, SetGeometryResource, SetShaderOption), for consumers caching\n * derived data.\n */\n @carbon.method\n @impl.implemented\n GetRevision()\n {\n return this.#revision;\n }\n\n /** Reports whether any active own or inherited overlay has a transparent pass. */\n @carbon.method\n @impl.implemented\n HasTransparentBatches()\n {\n for (const overlay of this.#parentOverlayEffects ?? [])\n {\n if (this.#AnyMeshInheritsOverlayEffects() && overlay.HasTransparentArea()) return true;\n }\n for (const mesh of this.meshes)\n {\n for (const overlay of mesh.ownOverlayEffects)\n {\n if (overlay.HasTransparentArea()) return true;\n }\n }\n return false;\n }\n\n /** Returns the squared camera distance used to sort transparent overlays. */\n @carbon.method\n @impl.adapted\n GetSortValue(renderContext = null)\n {\n const viewPosition = renderContext?.GetViewPosition() ?? [ 0, 0, 0 ];\n return Math.hypot(\n viewPosition[0] - this.worldTransform[12],\n viewPosition[1] - this.worldTransform[13],\n viewPosition[2] - this.worldTransform[14]);\n }\n\n /** Exposes stable per-instance CPU record pairs for this frame's overlay batches. */\n @carbon.method\n @impl.adapted\n GetPerObjectData(_accumulator = null)\n {\n if ((!this.#parentOverlayEffects || !this.#AnyMeshInheritsOverlayEffects()) &&\n !this.#HasAnyOwnOverlayEffects() && this._partDamageOverlays.size === 0) return null;\n\n let first = null;\n for (const mesh of this.meshes)\n {\n if (!mesh.overlayPods) continue;\n if (!mesh.display || !this._MeshNeedsOverlayPods(mesh))\n {\n for (const pod of mesh.overlayPods) pod.framePod = null;\n continue;\n }\n for (const pod of mesh.overlayPods)\n {\n pod.framePod = { vs: pod.vs, ps: pod.ps };\n first ??= pod.framePod;\n }\n }\n return first;\n }\n\n /** Emits child-owned then inherited overlays per visible instance and LOD. */\n @carbon.method\n @impl.adapted\n GetBatches(\n batches,\n batchType,\n _perObjectData = null,\n reason = Tr2RenderReason.TR2RENDERREASON_NORMAL)\n {\n if (!this.hasUpdated) return false;\n let committed = false;\n\n for (const mesh of this.meshes)\n {\n const inherited = this.#parentOverlayEffects && mesh.inheritOverlayEffects\n ? this.#parentOverlayEffects\n : null;\n const hasDamageOverlays = this._MeshHasDamageOverlays(mesh);\n if ((!inherited?.length && !mesh.ownOverlayEffects.length && !hasDamageOverlays) ||\n !mesh.display || !mesh.overlayPods) continue;\n if (reason === Tr2RenderReason.TR2RENDERREASON_REFLECTION && !ShouldReflect(mesh.reflectionMode)) continue;\n\n const geometry = mesh.GetGeometryResource();\n if (!geometry || geometry.IsGood() === false) continue;\n if (!mesh.overlayAreaBlocksBuilt)\n {\n CollectInstancedOverlayAreaBlocks(mesh, mesh.overlayAreaBlocks);\n mesh.overlayAreaBlocksBuilt = true;\n }\n\n for (let index = 0; index < mesh.overlayPods.length; index++)\n {\n const pod = mesh.overlayPods[index];\n if (!pod.framePod) continue;\n const sphere = mesh.instanceSpheres[index];\n if (!sphere) continue;\n if (this.#lastCameraFrustum &&\n this.#lastCameraFrustum.IsSphereVisible(sphere.center, sphere.radius) === false) continue;\n\n const screenSize = this.#lastCameraFrustum\n ? this.#lastCameraFrustum.GetPixelSizeAccrossEst(sphere.center, sphere.radius) * this.#lastInvLodFactor\n : Infinity;\n const lod = geometry.GetMeshLod(mesh.meshIndex, screenSize);\n\n // Carbon cpp:1404-1413: the part's damage pass comes first, under\n // its own and the inherited overlays.\n if (hasDamageOverlays)\n {\n const damageShader = this._FindPartDamageOverlay(mesh.partTags[index])?.GetArmorDamageShader(batchType);\n if (damageShader)\n {\n committed = EmitDamageOverlayBatches(\n batches, pod.framePod, damageShader,\n mesh.overlayAreaBlocks, geometry, mesh.meshIndex, lod) || committed;\n }\n }\n if (mesh.ownOverlayEffects.length)\n {\n committed = EmitOverlayBatches(\n batches, pod.framePod, batchType, mesh.ownOverlayEffects,\n mesh.overlayAreaBlocks, geometry, mesh.meshIndex, lod) || committed;\n }\n if (inherited?.length)\n {\n committed = EmitOverlayBatches(\n batches, pod.framePod, batchType, inherited,\n mesh.overlayAreaBlocks, geometry, mesh.meshIndex, lod) || committed;\n }\n }\n }\n return committed;\n }\n\n /** Carbon EveChildInstancedMeshes::RegisterComponents (cpp:36-43):\n * unconditional InstancedMeshProvider + ShadowCaster leaf\n * self-registration. */\n @carbon.method\n @impl.implemented\n RegisterComponents()\n {\n const registry = this.GetComponentRegistry();\n if (registry)\n {\n registry.RegisterComponent(EveComponentType.InstancedMeshProvider, this);\n registry.RegisterComponent(EveComponentType.ShadowCaster, this);\n }\n }\n\n /** Carbon EveChildInstancedMeshes::UnRegisterComponents (cpp:45-48) only\n * calls UnregisterFromMeshManager; own components were already removed by\n * EveEntity::UnRegister (EveEntity.cpp:90). */\n @carbon.method\n @impl.implemented\n UnRegisterComponents()\n {\n this.UnregisterFromMeshManager();\n }\n\n /** Carbon EveChildInstancedMeshes::UnregisterFromMeshManager (cpp:50-71):\n * every registered mesh-group / sphere-group / per-object handle is removed\n * through the manager that issued the opaque handles, then the latch clears. */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Handle invalidation after removal is explicit (Carbon's DataHandle is invalidated by the manager by reference).\")\n UnregisterFromMeshManager()\n {\n for (const mesh of this.meshes)\n {\n for (const area of mesh.areas)\n {\n if (area.meshGroupHandle !== null)\n {\n this.#meshManager.RemoveMeshGroup(area.meshGroupHandle);\n area.meshGroupHandle = null;\n }\n }\n if (mesh.sphereHandle !== null)\n {\n this.#meshManager.RemoveBoundingSphereGroup(mesh.sphereHandle);\n mesh.sphereHandle = null;\n }\n }\n if (this.#perObjectDataHandle !== null)\n {\n this.#meshManager.RemovePerObjectData(this.#perObjectDataHandle);\n this.#perObjectDataHandle = null;\n }\n if (this.#perObjectDataNoClipHandle !== null)\n {\n this.#meshManager.RemovePerObjectData(this.#perObjectDataNoClipHandle);\n this.#perObjectDataNoClipHandle = null;\n }\n this.#meshManager = null;\n this.#allRegistered = false;\n }\n\n /** Carbon EveChildInstancedMeshes::AddMeshesToManager (cpp:472-553), the\n * InstancedMeshProvider entry the engine's CollectMeshes drives\n * (EveInstancedMeshManager.cpp:45-56; scene EveSpaceScene.cpp:1516).\n * Contract quirks preserved: nothing registers before the first update\n * pass (cpp:474); switching managers tears EVERYTHING down BEFORE the\n * latch early-out (cpp:478-481); the latch is set optimistically and\n * cleared by ANY not-ready mesh/area so the per-frame caller retries until\n * geometry streams in - EXCEPT display-off meshes, which skip WITHOUT\n * clearing it (their handles were already removed by SetMeshDisplay);\n * handles are add-once (partial re-registration after SetShaderOption /\n * display toggles); an area-level effect failure clears the latch while\n * the mesh's sphere group STAYS registered (Carbon's asymmetry);\n * pickingOwnerIndex is the mesh ordinal (pairs with GetSofSourceLocator's\n * meshIndex<<16 decode). */\n @carbon.method\n @impl.adapted\n @impl.reason(\"The manager is duck-typed and returns opaque handles (out-params become returns) - Carbon EveInstancedMeshManager is not ported (quarantined in src/trinity/dropped); Carbon's combinedVertexDeclaration gate (cpp:499, a D3D declaration handle rebuilt in RebuildCachedData cpp:435-457) reduces to geometry presence + IsGood, and the declaration argument is passed as 0 for the engine to rebuild; GetRawRoot() becomes the object itself as picking owner.\")\n AddMeshesToManager(manager)\n {\n if (!this.hasUpdated)\n {\n return;\n }\n if (this.#meshManager !== null && this.#meshManager !== manager)\n {\n this.UnregisterFromMeshManager();\n }\n if (this.#allRegistered)\n {\n return;\n }\n\n this.#meshManager = manager;\n\n if (this.#perObjectDataHandle === null)\n {\n this.#perObjectDataHandle = manager.AddPerObjectData(this.#perObjectData);\n }\n\n if (this.meshes.some(mesh => !mesh.inheritOverlayEffects) &&\n this.#perObjectDataNoClipHandle === null)\n {\n this.#perObjectDataNoClipHandle = manager.AddPerObjectData(this.#perObjectDataNoClip);\n }\n\n this.#allRegistered = true;\n for (let meshIndex = 0; meshIndex < this.meshes.length; meshIndex++)\n {\n const mesh = this.meshes[meshIndex];\n if (!mesh.display)\n {\n continue;\n }\n const geometry = mesh.GetGeometryResource();\n if (!geometry || geometry.IsGood() === false)\n {\n this.#allRegistered = false;\n continue;\n }\n if (!mesh.instances.length)\n {\n this.#allRegistered = false;\n continue;\n }\n if (mesh.instances.length !== mesh.instanceSpheres.length)\n {\n this.#allRegistered = false;\n continue;\n }\n\n if (mesh.sphereHandle === null)\n {\n mesh.sphereHandle = manager.AddBoundingSphereGroup(\n mesh.worldBoundingSphere,\n mesh.flags,\n mesh.instanceSpheres,\n mesh.instanceSpheres.length\n );\n }\n\n for (const area of mesh.areas)\n {\n if (area.meshGroupHandle !== null)\n {\n continue;\n }\n if (!area.effect || !area.effect.GetShaderStateInterface())\n {\n this.#allRegistered = false;\n continue;\n }\n area.meshGroupHandle = manager.AddMeshGroup(\n geometry,\n 0,\n area.batchType,\n mesh.meshIndex,\n area.areaIndex,\n area.areaCount,\n area.effect,\n area.effectHash,\n mesh.inheritOverlayEffects ? this.#perObjectDataHandle : this.#perObjectDataNoClipHandle,\n mesh.sphereHandle,\n mesh.instances,\n mesh.instances.length,\n this,\n meshIndex\n );\n }\n }\n }\n\n /** Carbon EveChildInstancedMeshes::IsCastingShadow (cpp:73-76) always\n * returns false (instanced shadows cull per instance group); presence\n * satisfies the \"ShadowCaster\" duck contract. */\n @carbon.method\n @impl.implemented\n IsCastingShadow(..._args)\n {\n return false;\n }\n\n /** Carbon EveChildInstancedMeshes::GetShadowBatches (cpp:78-80) is an\n * intentional no-op (the instanced mesh manager emits the batches). */\n @carbon.method\n @impl.noop\n GetShadowBatches(..._args)\n {\n }\n\n /** Carbon EveChildInstancedMeshes::GetShadowPerObjectData (cpp:82-85)\n * returns null (per-object data flows through the mesh manager). */\n @carbon.method\n @impl.implemented\n GetShadowPerObjectData(..._args)\n {\n return null;\n }\n\n /**\n * Resolves a mesh index against the list, throwing RangeError rather than\n * returning undefined so every public accessor fails loudly.\n */\n static #GetMesh(meshes, meshId)\n {\n const index = Number(meshId) >>> 0;\n if (index >= meshes.length)\n {\n throw new RangeError(`EveChildInstancedMeshes mesh index ${index} is out of range`);\n }\n return meshes[index];\n }\n\n /**\n * Builds an area record from a plain duck, defaulting areaCount to 1 and\n * caching the effect hash the manager registers the mesh group under.\n */\n static #CreateArea(value)\n {\n const source = value ?? {};\n const area = new EveChildInstancedMeshArea();\n area.effect = source.effect ?? null;\n area.batchType = Number(source.batchType) >>> 0;\n area.areaIndex = Number(source.areaIndex) >>> 0;\n area.areaCount = source.areaCount === undefined ? 1 : Number(source.areaCount) >>> 0;\n area.alphaCutout = !!source.alphaCutout;\n area.reversed = !!source.reversed;\n area.effectHash = EveChildInstancedMeshes.#GetEffectHash(area.effect);\n return area;\n }\n\n /**\n * Deep-copies a mesh into a plain object for GetMeshData: instance transforms\n * cloned, areas spread-copied, the geometry resource shared by reference.\n */\n static #CloneMesh(mesh)\n {\n return {\n geometryPath: mesh.geometryPath,\n geometry: mesh.GetGeometryResource(),\n castsShadow: mesh.castsShadow,\n reflectionMode: mesh.reflectionMode,\n meshIndex: mesh.meshIndex,\n areas: mesh.areas.map(area => ({ ...area })),\n instances: mesh.instances.map(instance => ({\n transform: mat4.clone(instance.transform),\n sphereIndex: instance.sphereIndex\n })),\n partTags: mesh.partTags.slice(),\n sofHullName: mesh.sofHullName,\n sofLocatorSetName: mesh.sofLocatorSetName,\n display: mesh.display\n };\n }\n\n /**\n * Reads an owned effect's stable registration hash; null areas retain the\n * Carbon zero hash until their effect arrives.\n */\n static #GetEffectHash(effect)\n {\n return effect ? Number(effect.GetHashValue()) || 0 : 0;\n }\n\n}\n"],"names":["INSTANCE_FLAG_CASTS_SHADOW","INSTANCE_FLAG_RENDER_IN_REFLECTION","POSITION_SCRATCH","vec3","create","OVERLAY_LOCAL_SCRATCH","mat4","OVERLAY_WORLD_SCRATCH","OVERLAY_WORLD_LAST_SCRATCH","OVERLAY_INV_WORLD_SCRATCH","OVERLAY_INV_LOCAL_SCRATCH","OVERLAY_CLIP_SCRATCH","EMPTY_SPHERE","center","radius","FindDamageLocators","sets","entry","HasName","GetLocators","_EveChildInstancedMes","_identity","EveChildInstancedMeshes","EveSpaceObjectChild","e","_init_name","_init_extra_name","_init_worldTransform","_init_extra_worldTransform","_init_hasUpdated","_init_extra_hasUpdated","_init_meshes","_init_extra_meshes","_initProto","c","_initClass","_applyDecs","type","define","className","family","carbon","inherit","ITr2Renderable","edit","persist","string","read","boolean","list","method","impl","implemented","adapted","reason","noop","name","worldTransform","hasUpdated","meshes","RawData","_partDamageOverlays","Map","GetName","SetName","String","UpdateVisibility","updateContext","GetFrustum","GetInvLodFactor","GetRenderables","renderables","length","size","push","GetBoundingSphere","#UpdatePerObjectData","parent","record","transpose","GetTransposed","SetAndTranspose","inverse","invert","identity","CopyFrom","vs","ps","GetPerObjectStructs","Set","Get","slot","CUSTOM_MASK_COUNT","GetTransposedIndex","SetAndTransposeIndex","SetIndex","GetIndex","UpdateSyncronous","params","localToWorldTransform","copy","time","GetTime","mesh","overlay","ownOverlayEffects","Update","values","UpdateAsyncronous","previousWorldTransform","parentRecords","spaceObjectParent","w","worldScale","Math","max","hypot","geometry","GetGeometryResource","IsGood","flags","ShouldReflect","reflectionMode","meshData","GetMeshData","meshIndex","minBounds","maxBounds","centerX","centerY","centerZ","localRadius","instanceSpheres","instances","boundsMinX","Infinity","boundsMinY","boundsMinZ","boundsMaxX","boundsMaxY","boundsMaxZ","index","transform","scale","transformMat4","sphere","min","sphereCenter","worldBoundingSphere","sphereHandle","SetSphereGroupBounds","Array","isArray","overlayEffects","partTag","info","boundingSphere","estimatedPixelDiameter","isInFrustum","found","_FindMeshByPartTag","worldSphere","instanceIndex","frustum","GetPixelSizeAccrossEst","IsSphereVisible","damageLocators","ownedLocatorSets","getDamageLocatorPositionOS","out","position","#UpdateOverlayInstanceData","parentVs","parentPs","display","_MeshNeedsOverlayPods","overlayPods","from","framePod","local","world","multiply","worldLast","pod","clipData","set","inheritOverlayEffects","neutralClip","damageOverlay","_FindPartDamageOverlay","partTags","shipData","GetActivationStrength","GetDataTextureOffset","#HasAnyOwnOverlayEffects","some","#AnyMeshInheritsOverlayEffects","#MeshHasActiveOverlayEffects","indexOf","get","_MeshHasDamageOverlays","tag","has","GetLocalToWorldTransform","Setup","ChangeLOD","SetOrigin","IsAlwaysOn","SetShaderOption","value","area","areas","effect","SetOption","effectHash","meshGroupHandle","RemoveMeshGroup","AddMesh","geometryPath","castsShadow","instanceTransforms","sofHullName","sofLocatorSetName","armorDamageShader","sourceAreas","sourceTransforms","normalizedAreas","map","sphereIndex","TypeError","instance","EveChildInstancedMeshInstance","EveChildInstancedMesh","undefined","Number","GetOwner","InvalidateMergedLocators","batchType","RemoveInstancesByPartTag","changed","removedOwnedLocators","keptInstances","keptTags","instanceTag","RemoveBoundingSphereGroup","splice","delete","CollectOwnedGeometry","parentTransform","areaPool","areaStart","areaIndex","count","areaCount","alphaCutout","reversed","childToObject","CollectOwnedLocatorSets","owner","GetPartDamageOverlay","CreatePartDamageOverlay","EveDamageOverlay","GetPartArmorDamageShaderEffect","GetPartDamageLocatorAnimatedLocal","direction","locators","EveGetLocatorPose","SetInstanceTransformByPartTag","translation","rotation","fromRotationTranslationScale","movedOwnedLocators","GetInstancesTransforms","meshId","RangeError","quat","getTranslation","getRotation","normalize","getScaling","Clear","GetSofSourceLocator","areaId","GetMeshCount","GetMeshInfo","GetAreaInfo","GetMeshDisplay","SetMeshDisplay","next","GetMeshInheritOverlayEffects","SetMeshInheritOverlayEffects","AddMeshOverlayEffect","overlayEffect","RemoveMeshOverlayEffect","overlays","ClearMeshOverlayEffects","GetMeshOverlayEffectCount","SetGeometryResource","GetRevision","HasTransparentBatches","HasTransparentArea","GetSortValue","renderContext","viewPosition","GetViewPosition","GetPerObjectData","_accumulator","first","GetBatches","batches","_perObjectData","Tr2RenderReason","TR2RENDERREASON_NORMAL","committed","inherited","hasDamageOverlays","TR2RENDERREASON_REFLECTION","overlayAreaBlocksBuilt","CollectInstancedOverlayAreaBlocks","overlayAreaBlocks","screenSize","lod","GetMeshLod","damageShader","GetArmorDamageShader","EmitDamageOverlayBatches","EmitOverlayBatches","RegisterComponents","registry","GetComponentRegistry","RegisterComponent","EveComponentType","InstancedMeshProvider","ShadowCaster","UnRegisterComponents","UnregisterFromMeshManager","RemovePerObjectData","AddMeshesToManager","manager","AddPerObjectData","AddBoundingSphereGroup","GetShaderStateInterface","AddMeshGroup","IsCastingShadow","_args","GetShadowBatches","GetShadowPerObjectData","#GetMesh","#CreateArea","source","EveChildInstancedMeshArea","#CloneMesh","clone","slice","#GetEffectHash","GetHashValue","constructor"],"mappings":"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"}
|