@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
|
@@ -2,6 +2,7 @@ import { identity as _identity, applyDecs2311 as _applyDecs2311 } from '../../..
|
|
|
2
2
|
import { mat4 } from '#math/mat4';
|
|
3
3
|
import { vec3 } from '#math/vec3';
|
|
4
4
|
import { edit, type, carbon, impl } from '#schema';
|
|
5
|
+
import { TriBatchType } from '#consts/graphics';
|
|
5
6
|
import { EveChildMesh as _EveChildMesh } from './EveChildMesh.js';
|
|
6
7
|
import { Tr2GrannyAnimation as _Tr2GrannyAnimation } from '../../core/animation/Tr2GrannyAnimation.js';
|
|
7
8
|
import { SendEventToAudEmitter } from '../../core/variable/TriObserverLocal.js';
|
|
@@ -50,7 +51,7 @@ new class extends _identity {
|
|
|
50
51
|
} = _applyDecs2311(this, [type.define({
|
|
51
52
|
className: "EveChildTurret",
|
|
52
53
|
family: "eve/child"
|
|
53
|
-
})], [[[edit, edit.readwrite, type, type.boolean], 16, "isOnline"], [[edit, edit.read, type, type.float32], 16, "trackingInfluence"], [[edit, edit.persist, type, type.float32], 16, "maxTrackingTime"], [[edit, edit.read, edit, edit.persist, type, type.int32], 16, "state"], [[edit, edit.persist, type, type.float32], 16, "sysBoneHeight"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitchFactor"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitchOffset"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitchMin"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitchMax"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch01Factor"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch01Offset"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch02Factor"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch02Offset"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch03Factor"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch03Offset"], [[edit, edit.persist, type, type.uint32], 16, "maxCyclingFirePos"], [[edit, edit.persist, type, type.uint32], 16, "cyclingFireGroupCount"], [[edit, edit.read, type, type.uint32], 16, "currentCyclingFiresPos"], [[edit, edit.persist, void 0, type.objectRef("EveTurretFiringFX")], 16, "firingEffect"], [[edit, edit.notify, edit, edit.persist, type, type.string], 16, "firingEffectResPath"], [type.objectRef("CjsEveChildResourceLoader"), 0, "resourceLoader"], [[edit, edit.notify, edit, edit.persist, type, type.float32], 16, "impactSize"], [[edit, edit.notify, edit, edit.persist, type, type.int32, void 0, type.enum("ImpactBehaviour")], 16, "impactBehaviour"], [[edit, edit.persist, void 0, type.objectRef("TriObserverLocal")], 16, "turretMovementObserver"], [[edit, edit.persist, type, type.boolean], 16, "playMovementSound"], [[edit, edit.persist, type, type.string], 16, "idleToTargetingMovementAudioEvent"], [[edit, edit.persist, type, type.string], 16, "targetingToIdleMovementAudioEvent"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetTarget"], [[impl, impl.adapted, void 0, impl.reason("Carbon's by-value embed becomes an accessor; the flat Blue schema is preserved on this class.")], 18, "GetAiming"], [[carbon, carbon.method, impl, impl.implemented], 18, "Initialize"], [[carbon, carbon.method, impl, impl.implemented], 18, "OnModified"], [[carbon, carbon.method, impl, impl.implemented], 18, "RegisterComponents"], [[carbon, carbon.method, impl, impl.implemented], 18, "UnRegisterComponents"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateSyncronous"], [[carbon, carbon.method, void 0, carbon.contextual(["camera"]), impl, impl.implemented], 18, "UpdateAsyncronous"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateVisibility"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetRenderables"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateCachedGeometryData"], [[carbon, carbon.method, impl, impl.implemented], 18, "BuildCachedGeometryData"], [[carbon, carbon.method, impl, impl.implemented], 18, "ReleaseCachedGeometryData"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateDeactive"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateIdle"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateTargeting"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateFiring"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetupFiringState"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateReloading"], [[carbon, carbon.method, impl, impl.implemented], 18, "ForceStateDeactive"], [[carbon, carbon.method, impl, impl.implemented], 18, "ForceIdleAnimation"], [[carbon, carbon.method, impl, impl.implemented], 18, "ForceStateTargeting"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetFiringBoneWorldTransform"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Tr2QuadRenderer is an engine singleton in Carbon; the browser engine owns quad registration.")], 18, "InitializeFiringEffect"], [[carbon, carbon.method, impl, impl.implemented], 18, "InitializeAnimation"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("The C++ destructor becomes an explicit CleanUp obligation.")], 18, "CleanUp"], [[carbon, carbon.method, impl, impl.implemented], 18, "ModifyPose"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetTurretBoneTransform"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetGeometryRes"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetFiringEffect"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetFiringEffect"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetTargetObject"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetTargetObject"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetTargetScale"]], 0, void 0, _EveChildMesh));
|
|
54
|
+
})], [[[edit, edit.readwrite, type, type.boolean], 16, "isOnline"], [[edit, edit.read, type, type.float32], 16, "trackingInfluence"], [[edit, edit.persist, type, type.float32], 16, "maxTrackingTime"], [[edit, edit.read, edit, edit.persist, type, type.int32], 16, "state"], [[edit, edit.persist, type, type.float32], 16, "sysBoneHeight"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitchFactor"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitchOffset"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitchMin"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitchMax"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch01Factor"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch01Offset"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch02Factor"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch02Offset"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch03Factor"], [[edit, edit.persist, type, type.float32], 16, "sysBonePitch03Offset"], [[edit, edit.persist, type, type.uint32], 16, "maxCyclingFirePos"], [[edit, edit.persist, type, type.uint32], 16, "cyclingFireGroupCount"], [[edit, edit.read, type, type.uint32], 16, "currentCyclingFiresPos"], [[edit, edit.persist, void 0, type.objectRef("EveTurretFiringFX")], 16, "firingEffect"], [[edit, edit.notify, edit, edit.persist, type, type.string], 16, "firingEffectResPath"], [type.objectRef("CjsEveChildResourceLoader"), 0, "resourceLoader"], [[edit, edit.notify, edit, edit.persist, type, type.float32], 16, "impactSize"], [[edit, edit.notify, edit, edit.persist, type, type.int32, void 0, type.enum("ImpactBehaviour")], 16, "impactBehaviour"], [[edit, edit.persist, void 0, type.objectRef("TriObserverLocal")], 16, "turretMovementObserver"], [[edit, edit.persist, type, type.boolean], 16, "playMovementSound"], [[edit, edit.persist, type, type.string], 16, "idleToTargetingMovementAudioEvent"], [[edit, edit.persist, type, type.string], 16, "targetingToIdleMovementAudioEvent"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetTarget"], [[impl, impl.adapted, void 0, impl.reason("Carbon's by-value embed becomes an accessor; the flat Blue schema is preserved on this class.")], 18, "GetAiming"], [[carbon, carbon.method, impl, impl.implemented], 18, "Initialize"], [[carbon, carbon.method, impl, impl.implemented], 18, "OnModified"], [[carbon, carbon.method, impl, impl.implemented], 18, "RegisterComponents"], [[carbon, carbon.method, impl, impl.implemented], 18, "UnRegisterComponents"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateSyncronous"], [[carbon, carbon.method, void 0, carbon.contextual(["camera"]), impl, impl.implemented], 18, "UpdateAsyncronous"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateVisibility"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetRenderables"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateCachedGeometryData"], [[carbon, carbon.method, impl, impl.implemented], 18, "BuildCachedGeometryData"], [[carbon, carbon.method, impl, impl.implemented], 18, "ReleaseCachedGeometryData"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateDeactive"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateIdle"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateTargeting"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateFiring"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetupFiringState"], [[carbon, carbon.method, impl, impl.implemented], 18, "EnterStateReloading"], [[carbon, carbon.method, impl, impl.implemented], 18, "ForceStateDeactive"], [[carbon, carbon.method, impl, impl.implemented], 18, "ForceIdleAnimation"], [[carbon, carbon.method, impl, impl.implemented], 18, "ForceStateTargeting"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetFiringBoneWorldTransform"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Tr2QuadRenderer is an engine singleton in Carbon; the browser engine owns quad registration.")], 18, "InitializeFiringEffect"], [[carbon, carbon.method, impl, impl.implemented], 18, "InitializeAnimation"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("The C++ destructor becomes an explicit CleanUp obligation.")], 18, "CleanUp"], [[carbon, carbon.method, impl, impl.implemented], 18, "ModifyPose"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetTurretBoneTransform"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetGeometryRes"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetFiringEffect"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetFiringEffect"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetControllerVariable"], [[impl, impl.custom, void 0, impl.reason("The combined runtime keeps SOF independently importable, so the mesh-area walk of Carbon's EveSOF method sits on the turret that owns the mesh.")], 18, "ApplySofTurretMaterial"], [[carbon, carbon.method, impl, impl.implemented], 18, "StartControllers"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetTargetObject"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetTargetObject"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetTargetScale"]], 0, void 0, _EveChildMesh));
|
|
54
55
|
}
|
|
55
56
|
/** Indicates if the turret is active; runtime toggle, not persisted. */
|
|
56
57
|
isOnline = (_initProto(this), _init_isOnline(this, true));
|
|
@@ -132,7 +133,7 @@ new class extends _identity {
|
|
|
132
133
|
#delayToFadeInTracking = 0;
|
|
133
134
|
|
|
134
135
|
// Carbon m_hookedUpdater: the updater our pose modifier is registered on,
|
|
135
|
-
// so a swap unhooks the old one (EveChildTurret.h:
|
|
136
|
+
// so a swap unhooks the old one (EveChildTurret.h:115, cpp:722-730).
|
|
136
137
|
#hookedUpdater = null;
|
|
137
138
|
#recheckTimeLeft = -1;
|
|
138
139
|
#firingEffectMuzzlePosSet = false;
|
|
@@ -613,7 +614,7 @@ new class extends _identity {
|
|
|
613
614
|
/**
|
|
614
615
|
* Wires the firing effect's muzzle bones from the skeleton: bones named
|
|
615
616
|
* GetFiringBoneName() + a two-digit 1-based index, e.g. Pos_Fire01
|
|
616
|
-
* (Carbon cpp:
|
|
617
|
+
* (Carbon cpp:679-712). Carbon also registers the effect with the quad
|
|
617
618
|
* renderer singleton here; quad registration is not ported yet in the
|
|
618
619
|
* browser runtime and happens through the engine's own registration pass.
|
|
619
620
|
*/
|
|
@@ -637,7 +638,7 @@ new class extends _identity {
|
|
|
637
638
|
/**
|
|
638
639
|
* Force-creates the animation updater BEFORE the base wiring, then hooks
|
|
639
640
|
* this turret in as the updater's pose modifier, unhooking any previously
|
|
640
|
-
* hooked updater on swap (Carbon cpp:
|
|
641
|
+
* hooked updater on swap (Carbon cpp:714-731). CleanUp performs Carbon's
|
|
641
642
|
* destructor unhook.
|
|
642
643
|
*/
|
|
643
644
|
InitializeAnimation() {
|
|
@@ -672,7 +673,7 @@ new class extends _identity {
|
|
|
672
673
|
}
|
|
673
674
|
|
|
674
675
|
/**
|
|
675
|
-
* The ITr2PoseModifier hook (Carbon cpp:
|
|
676
|
+
* The ITr2PoseModifier hook (Carbon cpp:733-757): poses every found
|
|
676
677
|
* system bone toward the tracked target in turret space. Always passes
|
|
677
678
|
* null for the pitch localTransform - only EveTurretSet uses the
|
|
678
679
|
* behind-the-arm flip.
|
|
@@ -697,7 +698,7 @@ new class extends _identity {
|
|
|
697
698
|
/**
|
|
698
699
|
* A bone's world-of-pose transform lifted into world space - row-vector
|
|
699
700
|
* boneLocal * worldTransform, gl multiply(out, worldTransform, boneWorld)
|
|
700
|
-
* (Carbon cpp:
|
|
701
|
+
* (Carbon cpp:759-772).
|
|
701
702
|
*/
|
|
702
703
|
GetTurretBoneTransform(boneID, out = mat4.create()) {
|
|
703
704
|
mat4.copy(out, this.worldTransform);
|
|
@@ -710,7 +711,7 @@ new class extends _identity {
|
|
|
710
711
|
return out;
|
|
711
712
|
}
|
|
712
713
|
|
|
713
|
-
/** The mesh's geometry resource, or null (Carbon cpp:
|
|
714
|
+
/** The mesh's geometry resource, or null (Carbon cpp:774-777). */
|
|
714
715
|
GetGeometryRes() {
|
|
715
716
|
return this.mesh ? this.mesh.GetGeometryResource() : null;
|
|
716
717
|
}
|
|
@@ -718,7 +719,7 @@ new class extends _identity {
|
|
|
718
719
|
/**
|
|
719
720
|
* Stops running animations after the delay, queues the action animation
|
|
720
721
|
* once on the base layer and the idle loop forever after it; returns the
|
|
721
|
-
* action animation's duration (Carbon cpp:
|
|
722
|
+
* action animation's duration (Carbon cpp:779-802).
|
|
722
723
|
*/
|
|
723
724
|
#PlayAnimation(animName, animNameIdle, delay = 0) {
|
|
724
725
|
const updater = this.animationUpdater;
|
|
@@ -736,7 +737,7 @@ new class extends _identity {
|
|
|
736
737
|
return animLength;
|
|
737
738
|
}
|
|
738
739
|
|
|
739
|
-
/** "Fire", or "Fire0" + cycle digit past the first cycle (Carbon cpp:
|
|
740
|
+
/** "Fire", or "Fire0" + cycle digit past the first cycle (Carbon cpp:804-815). */
|
|
740
741
|
#GetFireAnimationName() {
|
|
741
742
|
let name = "Fire";
|
|
742
743
|
if (this.currentCyclingFiresPos > 0) {
|
|
@@ -746,14 +747,14 @@ new class extends _identity {
|
|
|
746
747
|
return name;
|
|
747
748
|
}
|
|
748
749
|
|
|
749
|
-
/** The firing effect module (Carbon cpp:
|
|
750
|
+
/** The firing effect module (Carbon cpp:817-820). */
|
|
750
751
|
GetFiringEffect() {
|
|
751
752
|
return this.firingEffect;
|
|
752
753
|
}
|
|
753
754
|
|
|
754
755
|
/**
|
|
755
756
|
* Swaps the firing effect, moving its component registration and rewiring
|
|
756
|
-
* its muzzle bones (Carbon cpp:
|
|
757
|
+
* its muzzle bones (Carbon cpp:822-835).
|
|
757
758
|
*/
|
|
758
759
|
SetFiringEffect(firingEffect) {
|
|
759
760
|
if (this.firingEffect) this.firingEffect.UnRegisterComponents();
|
|
@@ -762,13 +763,53 @@ new class extends _identity {
|
|
|
762
763
|
this.InitializeFiringEffect();
|
|
763
764
|
}
|
|
764
765
|
|
|
766
|
+
/**
|
|
767
|
+
* Forwards a controller variable to the firing effect; the child owns no
|
|
768
|
+
* controllers itself (Carbon EveChildTurret.cpp:663-669).
|
|
769
|
+
*/
|
|
770
|
+
SetControllerVariable(name, value) {
|
|
771
|
+
if (this.firingEffect) this.firingEffect.SetControllerVariable(name, value);
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Applies resolved SOF faction values to every opaque area material of this
|
|
776
|
+
* turret's mesh - the Trinity half of Carbon
|
|
777
|
+
* EveSOF::SetupChildTurretMaterialFromFaction (EveSOF.cpp:4271-4298).
|
|
778
|
+
* @param {Function} resolveParameter - parameter name -> vec4 or null
|
|
779
|
+
* @returns {Boolean} false when there is no mesh or no opaque area
|
|
780
|
+
*/
|
|
781
|
+
ApplySofTurretMaterial(resolveParameter) {
|
|
782
|
+
const mesh = this.GetMesh();
|
|
783
|
+
if (!mesh) return false;
|
|
784
|
+
const areas = mesh.GetAreas(TriBatchType.TRIBATCHTYPE_OPAQUE);
|
|
785
|
+
if (!areas) return false;
|
|
786
|
+
for (const area of areas) {
|
|
787
|
+
if (!area) continue;
|
|
788
|
+
const effect = area.GetMaterialInterface();
|
|
789
|
+
// Carbon's ApplyFactionToTurretShader returns on a null shader.
|
|
790
|
+
if (effect) _EveTurretSet.applyFactionToTurretShader(effect, resolveParameter);
|
|
791
|
+
}
|
|
792
|
+
return true;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/** Starts the firing effect's controllers (Carbon EveChildTurret.cpp:671-677). */
|
|
796
|
+
StartControllers() {
|
|
797
|
+
if (this.firingEffect) this.firingEffect.StartControllers();
|
|
798
|
+
}
|
|
799
|
+
|
|
765
800
|
/**
|
|
766
801
|
* Attaches to a target object, firing the movement audio when moving off
|
|
767
|
-
* idle or switching targets
|
|
768
|
-
*
|
|
802
|
+
* idle or switching targets. Null clears the target, dropping a targeting
|
|
803
|
+
* or firing turret back to idle (Carbon EveChildTurret.cpp:837-864).
|
|
769
804
|
*/
|
|
770
805
|
SetTargetObject(target) {
|
|
771
|
-
if (!target)
|
|
806
|
+
if (!target) {
|
|
807
|
+
if (this.state === _EveChildTurret.State.STATE_TARGETING || this.state === _EveChildTurret.State.STATE_FIRING) {
|
|
808
|
+
this.EnterStateIdle();
|
|
809
|
+
}
|
|
810
|
+
this.#target.SetTargetable(null);
|
|
811
|
+
return;
|
|
812
|
+
}
|
|
772
813
|
const oldTarget = this.#target.GetTargetable();
|
|
773
814
|
this.#target.SetTargetable(target);
|
|
774
815
|
if (this.playMovementSound && this.idleToTargetingMovementAudioEvent) {
|
|
@@ -779,12 +820,12 @@ new class extends _identity {
|
|
|
779
820
|
this.SetTargetScale();
|
|
780
821
|
}
|
|
781
822
|
|
|
782
|
-
/** The tracked targetable, or null (Carbon cpp:
|
|
823
|
+
/** The tracked targetable, or null (Carbon cpp:866-869). */
|
|
783
824
|
GetTargetObject() {
|
|
784
825
|
return this.#target.GetTargetable();
|
|
785
826
|
}
|
|
786
827
|
|
|
787
|
-
/** Scales the firing effect by the target's radius (Carbon cpp:
|
|
828
|
+
/** Scales the firing effect by the target's radius (Carbon cpp:871-878). */
|
|
788
829
|
SetTargetScale() {
|
|
789
830
|
if (this.firingEffect) {
|
|
790
831
|
this.firingEffect.SetScaleByRadius(this.#target.GetRadius());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EveChildTurret.js","sources":["../../../../../src/trinity/eve/child/EveChildTurret.js"],"sourcesContent":["// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildTurret.h\n// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildTurret.cpp\n// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildTurret_Blue.cpp\nimport { mat4 } from \"#math/mat4\";\nimport { vec3 } from \"#math/vec3\";\nimport { carbon, impl, edit, type } from \"#schema\";\nimport { EveChildMesh } from \"./EveChildMesh.js\";\nimport { Tr2GrannyAnimation } from \"../../core/animation/Tr2GrannyAnimation.js\";\nimport { SendEventToAudEmitter } from \"../../core/variable/TriObserverLocal.js\";\nimport { EveTurretAiming } from \"../attachment/turrets/EveTurretAiming.js\";\nimport { EveTurretFiringFX } from \"../attachment/turrets/EveTurretFiringFX.js\";\nimport { EveTurretSet } from \"../attachment/turrets/EveTurretSet.js\";\nimport { EveTurretTarget } from \"../attachment/turrets/EveTurretTarget.js\";\n\n// Carbon file-scope constants (EveChildTurret.cpp:12-16).\nconst INVALID_BONE_INDEX = 0xffffffff;\nconst TRACKING_FADE_TIME = 1;\n\nconst MUZZLE_TRANSFORM_SCRATCH = mat4.create();\nconst FIRE_SOURCE_SCRATCH = vec3.create();\nconst FIRE_POSITION_SCRATCH = vec3.create();\nconst TARGET_OS_SCRATCH = vec3.create();\nconst INVERSE_WORLD_SCRATCH = mat4.create();\n\n/** Carbon TriGeometryResSkeletonData::FindJoint (TriGeometryRes.cpp:1841-1853): exact name match, 0xffffffff on miss. */\nfunction FindJoint(skeletonData, name)\n{\n const bones = skeletonData?.bones ?? [];\n for (let index = 0; index < bones.length; index++)\n {\n const bone = bones[index];\n const boneName = typeof bone === \"string\" ? bone : String(bone?.name ?? bone?.Name ?? \"\");\n if (boneName === name) return index;\n }\n return INVALID_BONE_INDEX;\n}\n\n\n/**\n * A single animated turret living as a space-object child: it owns its\n * target tracker, sysbone aiming, deploy/pack/fire animation state machine,\n * firing effect and movement audio. Implements the ITr2PoseModifier contract\n * (ModifyPose) and registers itself on its own animation updater, so the\n * barrels aim inside the sampled pose. Carbon instantiates it only from\n * serialized scene data - SOF never constructs one.\n */\n@type.define({ className: \"EveChildTurret\", family: \"eve/child\" })\nexport class EveChildTurret extends EveChildMesh\n{\n\n /** Indicates if the turret is active; runtime toggle, not persisted. */\n @edit.readwrite\n @type.boolean\n isOnline = true;\n\n /** How much tracking is currently applied; runtime-derived. */\n @edit.read\n @type.float32\n trackingInfluence = 0;\n\n /** How long tracking takes to fade in - and its influence ceiling. */\n @edit.persist\n @type.float32\n maxTrackingTime = 1;\n\n /** State of the turret (persisted but not editable). */\n @edit.read\n @edit.persist\n @type.int32\n state = EveTurretSet.State.STATE_IDLE;\n\n // The eleven flat sysbone tunables Carbon re-exposes from the embedded\n // EveTurretAiming (EveChildTurret_Blue.cpp:25-35); same names and defaults\n // as EveTurretSet. Offsets are authored in degrees.\n @edit.persist\n @type.float32\n sysBoneHeight = 1;\n\n @edit.persist\n @type.float32\n sysBonePitchFactor = 1;\n\n @edit.persist\n @type.float32\n sysBonePitchOffset = 0;\n\n @edit.persist\n @type.float32\n sysBonePitchMin = 0;\n\n @edit.persist\n @type.float32\n sysBonePitchMax = 90;\n\n @edit.persist\n @type.float32\n sysBonePitch01Factor = 1;\n\n @edit.persist\n @type.float32\n sysBonePitch01Offset = 0;\n\n @edit.persist\n @type.float32\n sysBonePitch02Factor = 1;\n\n @edit.persist\n @type.float32\n sysBonePitch02Offset = 0;\n\n @edit.persist\n @type.float32\n sysBonePitch03Factor = 1;\n\n @edit.persist\n @type.float32\n sysBonePitch03Offset = 0;\n\n /** If greater than one, firing cycles through this many muzzle groups. */\n @edit.persist\n @type.uint32\n maxCyclingFirePos = 1;\n\n /** The number of muzzles in one cycle group, usually one. */\n @edit.persist\n @type.uint32\n cyclingFireGroupCount = 1;\n\n /** Current muzzle id due to cycling; runtime-derived. */\n @edit.read\n @type.uint32\n currentCyclingFiresPos = 0;\n\n /** The module for the firing effect of this turret. */\n @edit.persist\n @type.objectRef(\"EveTurretFiringFX\")\n firingEffect = null;\n\n /** A res path to the redfile containing the primary firing effect. */\n @edit.notify\n @edit.persist\n @type.string\n firingEffectResPath = \"\";\n\n /**\n * Resolves firingEffectResPath into a live EveTurretFiringFX. Carbon uses\n * BeResMan.LoadObject; CarbonEngineJS threads the established\n * CjsEveChildResourceLoader seam (the EveChildRef/EveChildSocket pattern) -\n * without a loader an authored path stays unresolved.\n */\n @type.objectRef(\"CjsEveChildResourceLoader\")\n resourceLoader = null;\n\n /** Size of impacts; no impact when 0 or less. */\n @edit.notify\n @edit.persist\n @type.float32\n impactSize = 0;\n\n /** What the impacts should hit (an ImpactBehaviour value). */\n @edit.notify\n @edit.persist\n @type.int32\n @type.enum(\"ImpactBehaviour\")\n impactBehaviour = EveTurretTarget.ImpactBehaviour.DAMAGE_LOCATOR;\n\n /** The observer for turret movement sounds; positioned automatically. */\n @edit.persist\n @type.objectRef(\"TriObserverLocal\")\n turretMovementObserver = null;\n\n /** Whether mechanical movement sounds play when events are authored. */\n @edit.persist\n @type.boolean\n playMovementSound = true;\n\n /** Audio event for mechanical noise when moving from idle to targeting. */\n @edit.persist\n @type.string\n idleToTargetingMovementAudioEvent = \"\";\n\n /** Audio event for mechanical noise when moving from targeting to idle. */\n @edit.persist\n @type.string\n targetingToIdleMovementAudioEvent = \"\";\n\n // Carbon m_target: created in the constructor with fade-on-locator-change\n // enabled (EveChildTurret.cpp:26-27); Blue exposes it READ-only.\n #target = new EveTurretTarget();\n\n #aiming = new EveTurretAiming();\n\n // Carbon m_systemBoneID[SYSBONE_MAX], all INVALID until geometry arrives.\n #systemBoneID = new Array(EveTurretAiming.SystemBones.SYSBONE_MAX).fill(INVALID_BONE_INDEX);\n\n #trackingInfluenceDelta = 0;\n\n #delayToFadeOutTracking = 0;\n\n #delayToFadeInTracking = 0;\n\n // Carbon m_hookedUpdater: the updater our pose modifier is registered on,\n // so a swap unhooks the old one (EveChildTurret.h:110, cpp:707-714).\n #hookedUpdater = null;\n\n #recheckTimeLeft = -1;\n\n #firingEffectMuzzlePosSet = false;\n\n #cachedGeometryRes = null;\n\n // Carbon reads m_parentData.transform in SetupFiringState (cpp:533) - the\n // PARENT transform, deliberately not this child's world transform; captured\n // from the update params each async pass.\n #parentTranslation = vec3.create();\n\n /** Enables target fading when the turret's locator changes. */\n constructor()\n {\n super();\n this.#target.SetFadeOnLocatorChange(true);\n // Carbon's ctor also calls PrepareResources(); the browser runtime's\n // resource lifecycle is not ported yet and has no per-child prepare hook.\n }\n\n /** The turret's target tracker (Carbon exposes it as the READ attribute \"target\"). */\n @carbon.method\n @impl.implemented\n GetTarget()\n {\n return this.#target;\n }\n\n /**\n * The shared sysbone aiming math, synced from this turret's flat tuning\n * fields - the same object shape EveTurretSet.GetAiming returns.\n */\n @impl.adapted\n @impl.reason(\"Carbon's by-value embed becomes an accessor; the flat Blue schema is preserved on this class.\")\n GetAiming()\n {\n const aiming = this.#aiming;\n aiming.sysBoneHeight = this.sysBoneHeight;\n aiming.sysBonePitchOffset = this.sysBonePitchOffset;\n aiming.sysBonePitchFactor = this.sysBonePitchFactor;\n aiming.sysBonePitchMin = this.sysBonePitchMin;\n aiming.sysBonePitchMax = this.sysBonePitchMax;\n aiming.sysBonePitch01Offset = this.sysBonePitch01Offset;\n aiming.sysBonePitch01Factor = this.sysBonePitch01Factor;\n aiming.sysBonePitch02Offset = this.sysBonePitch02Offset;\n aiming.sysBonePitch02Factor = this.sysBonePitch02Factor;\n aiming.sysBonePitch03Offset = this.sysBonePitch03Offset;\n aiming.sysBonePitch03Factor = this.sysBonePitch03Factor;\n return aiming;\n }\n\n /**\n * Passes authored impact data into the target tracker and resolves an\n * authored firing-effect path when no inline effect won at load time\n * (Carbon EveChildTurret.cpp:48-60).\n */\n @carbon.method\n @impl.implemented\n Initialize()\n {\n this.#target.SetImpactBehaviour(this.impactSize, this.impactBehaviour);\n if (!this.firingEffect && this.firingEffectResPath)\n {\n this.#LoadFiringEffectFromPath();\n }\n return super.Initialize();\n }\n\n /**\n * Re-syncs the tracker's impact data and reloads the firing effect when\n * the notifying fields change (Carbon cpp:61-72; the path reload has no\n * inline-effect guard, unlike Initialize).\n */\n @carbon.method\n @impl.implemented\n OnModified(value = null)\n {\n if (value === \"impactSize\" || value === \"impactBehaviour\")\n {\n this.#target.SetImpactBehaviour(this.impactSize, this.impactBehaviour);\n }\n if (value === \"firingEffectResPath\" && this.firingEffectResPath)\n {\n this.#LoadFiringEffectFromPath();\n }\n return super.OnModified(value);\n }\n\n /**\n * Loads the configured firing-effect child and installs it when loading\n * returns an object.\n */\n #LoadFiringEffectFromPath()\n {\n if (!this.resourceLoader) return;\n const loaded = this.resourceLoader.LoadChild(this.firingEffectResPath, this);\n if (loaded) this.SetFiringEffect(loaded);\n }\n\n /** Registers the firing effect's entity half when displayed (Carbon cpp:73-84). */\n @carbon.method\n @impl.implemented\n RegisterComponents()\n {\n super.RegisterComponents();\n const registry = this.GetComponentRegistry();\n if (registry && this.display)\n {\n if (this.firingEffect) this.firingEffect.RegisterComponents();\n }\n }\n\n /** Unregisters the firing effect's entity half; not display-gated (Carbon cpp:85-96). */\n @carbon.method\n @impl.implemented\n UnRegisterComponents()\n {\n super.UnRegisterComponents();\n const registry = this.GetComponentRegistry();\n if (registry)\n {\n if (this.firingEffect) this.firingEffect.UnRegisterComponents();\n }\n }\n\n /**\n * Sync-side frame update (Carbon cpp:126-179): looping-effect retarget\n * recheck every two seconds while firing, firing-effect sync update, the\n * target tracker fed from the effect's start position (or this world\n * translation), and the movement observer following the world transform.\n */\n @carbon.method\n @impl.implemented\n UpdateSyncronous(updateContext, params)\n {\n const deltaT = Number(updateContext?.GetDeltaT?.() ?? updateContext?.deltaTime ?? 0) || 0;\n\n if (this.firingEffect)\n {\n this.firingEffect.SetDisplaySourceObject(this.IsVisible(updateContext));\n }\n\n this.UpdateCachedGeometryData();\n\n if (this.firingEffect)\n {\n if (this.firingEffect.IsLooping() && this.state === EveChildTurret.State.STATE_FIRING)\n {\n this.#recheckTimeLeft -= deltaT;\n if (this.#recheckTimeLeft < 0)\n {\n vec3.set(FIRE_SOURCE_SCRATCH,\n this.worldTransform[12], this.worldTransform[13], this.worldTransform[14]);\n const closestLocator = this.#target.FindClosestLocator(FIRE_SOURCE_SCRATCH, FIRE_POSITION_SCRATCH);\n if (closestLocator >= 0 && closestLocator !== this.#target.GetLocator())\n {\n this.SetupFiringState();\n }\n this.#recheckTimeLeft = 2;\n }\n }\n this.firingEffect.UpdateSynchronous(updateContext);\n }\n\n vec3.set(FIRE_POSITION_SCRATCH,\n this.worldTransform[12], this.worldTransform[13], this.worldTransform[14]);\n if (this.firingEffect)\n {\n this.firingEffect.GetStartPosition(FIRE_POSITION_SCRATCH);\n }\n this.#target.Update(deltaT, FIRE_POSITION_SCRATCH);\n\n if (this.mesh && this.turretMovementObserver)\n {\n this.turretMovementObserver.Update(this.worldTransform);\n }\n return super.UpdateSyncronous(updateContext, params);\n }\n\n /**\n * Async-side frame update (Carbon cpp:181-260): tracking-influence fades\n * (clamped to [0, maxTrackingTime]), the base mesh update, then muzzle\n * transforms and target end position onto the firing effect - with the\n * late muzzle fallback to the turret root until geometry loads.\n */\n @carbon.method\n @carbon.contextual([\"camera\"])\n @impl.implemented\n UpdateAsyncronous(updateContext, params)\n {\n const deltaT = Number(updateContext?.GetDeltaT?.() ?? updateContext?.deltaTime ?? 0) || 0;\n\n if (this.#trackingInfluenceDelta !== 0)\n {\n this.trackingInfluence += this.#trackingInfluenceDelta * deltaT;\n if (this.trackingInfluence > this.maxTrackingTime)\n {\n this.trackingInfluence = this.maxTrackingTime;\n this.#trackingInfluenceDelta = 0;\n }\n else if (this.trackingInfluence < 0)\n {\n this.trackingInfluence = 0;\n this.#trackingInfluenceDelta = 0;\n }\n }\n\n if (this.#delayToFadeOutTracking > 0)\n {\n this.#delayToFadeOutTracking -= deltaT;\n if (this.#delayToFadeOutTracking <= 0)\n {\n this.#delayToFadeOutTracking = 0;\n this.#trackingInfluenceDelta = -1 / TRACKING_FADE_TIME;\n }\n }\n\n if (this.#delayToFadeInTracking > 0)\n {\n this.#delayToFadeInTracking -= deltaT;\n if (this.#delayToFadeInTracking <= 0)\n {\n this.#delayToFadeInTracking = 0;\n this.#trackingInfluenceDelta = 1 / TRACKING_FADE_TIME;\n }\n }\n\n const parentTransform = params?.localToWorldTransform;\n if (parentTransform && parentTransform.length === 16)\n {\n vec3.set(this.#parentTranslation,\n parentTransform[12], parentTransform[13], parentTransform[14]);\n }\n\n const result = super.UpdateAsyncronous(updateContext, params);\n\n if (this.firingEffect)\n {\n if (this.mesh)\n {\n for (let muzzle = 0; muzzle < this.firingEffect.GetPerMuzzleEffectCount(); muzzle++)\n {\n this.GetFiringBoneWorldTransform(muzzle, MUZZLE_TRANSFORM_SCRATCH);\n this.firingEffect.SetMuzzleTransform(muzzle, MUZZLE_TRANSFORM_SCRATCH);\n }\n this.#firingEffectMuzzlePosSet = true;\n }\n\n this.firingEffect.SetEndPosition(this.#target.GetTargetPosition());\n\n if (this.firingEffect.UpdateAsynchronous(updateContext))\n {\n if (!this.#firingEffectMuzzlePosSet)\n {\n for (let muzzle = 0; muzzle < this.firingEffect.GetPerMuzzleEffectCount(); muzzle++)\n {\n this.firingEffect.SetMuzzleTransform(muzzle, this.worldTransform);\n }\n this.#firingEffectMuzzlePosSet = true;\n }\n this.firingEffect.SetDisplayDestObject(this.#target.ShowDestObject());\n }\n }\n return result;\n }\n\n /** Forwards visibility to the firing effect when displayed (Carbon cpp:262-270). */\n @carbon.method\n @impl.implemented\n UpdateVisibility(updateContext, parentTransform, parentLod)\n {\n const result = super.UpdateVisibility(updateContext, parentTransform, parentLod);\n if (this.display && this.firingEffect)\n {\n this.firingEffect.UpdateVisibility(updateContext);\n }\n return result;\n }\n\n /** Appends the firing effect's renderables when displayed (Carbon cpp:272-280). */\n @carbon.method\n @impl.implemented\n GetRenderables(renderables)\n {\n super.GetRenderables(renderables);\n if (this.display && this.firingEffect)\n {\n this.firingEffect.GetRenderables(renderables);\n }\n return renderables;\n }\n\n /**\n * Rebuilds the cached sysbone/muzzle lookups when the geometry resource\n * changes (Carbon cpp:302-315).\n */\n @carbon.method\n @impl.implemented\n UpdateCachedGeometryData()\n {\n const geometryRes = this.GetGeometryRes();\n if (geometryRes === this.#cachedGeometryRes) return;\n this.ReleaseCachedGeometryData();\n if (geometryRes && geometryRes.IsGood())\n {\n this.BuildCachedGeometryData(geometryRes);\n this.#cachedGeometryRes = geometryRes;\n }\n }\n\n /**\n * Finds the system bones in the model skeleton, wires the firing effect's\n * muzzle bones, hooks the animation and forces the idle animation for the\n * current state (Carbon cpp:316-336; the sequencing is behavior).\n */\n @carbon.method\n @impl.implemented\n BuildCachedGeometryData(geometryRes)\n {\n if (geometryRes.GetSkeletonCount())\n {\n const skeletonData = geometryRes.GetSkeletonData(0);\n if (skeletonData)\n {\n for (let bone = 0; bone < EveTurretAiming.SystemBones.SYSBONE_MAX; bone++)\n {\n this.#systemBoneID[bone] = FindJoint(skeletonData, EveTurretAiming.getSystemBoneName(bone));\n }\n this.InitializeFiringEffect();\n }\n }\n this.InitializeAnimation();\n this.ForceIdleAnimation();\n }\n\n /** Drops the cached geometry link and the muzzle stamp (Carbon cpp:337-341). */\n @carbon.method\n @impl.implemented\n ReleaseCachedGeometryData()\n {\n this.#cachedGeometryRes = null;\n this.#firingEffectMuzzlePosSet = false;\n }\n\n /**\n * Go into state deactive: play the pack animation and stay inside the\n * ship (Carbon cpp:343-376; the STATE_FIRING case deliberately falls\n * through to STATE_TARGETING).\n */\n @carbon.method\n @impl.implemented\n EnterStateDeactive()\n {\n const State = EveChildTurret.State;\n switch (this.state)\n {\n case State.STATE_DEACTIVE:\n break;\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n this.trackingInfluence = 0;\n this.#PlayAnimation(\"Pack\", \"Inactive\");\n this.#delayToFadeOutTracking = 0;\n break;\n case State.STATE_FIRING:\n if (this.firingEffect) this.firingEffect.StopFiring();\n // DON'T break, just continue with stopping things:\n // eslint-disable-next-line no-fallthrough\n case State.STATE_TARGETING:\n this.#delayToFadeOutTracking = 0.0001;\n this.#target.StopFireAtLocator();\n this.#PlayAnimation(\"Pack\", \"Inactive\", TRACKING_FADE_TIME);\n break;\n default:\n break;\n }\n this.state = State.STATE_DEACTIVE;\n }\n\n /** Go into state idle: face the cannons forward (Carbon cpp:378-418). */\n @carbon.method\n @impl.implemented\n EnterStateIdle()\n {\n if (!this.isOnline) return;\n const State = EveChildTurret.State;\n switch (this.state)\n {\n case State.STATE_INVALID:\n case State.STATE_RELOADING:\n this.#PlayAnimation(\"\", \"Active\");\n break;\n case State.STATE_DEACTIVE:\n this.#PlayAnimation(\"Deploy\", \"Active\");\n this.trackingInfluence = 0;\n break;\n case State.STATE_IDLE:\n break;\n case State.STATE_TARGETING:\n case State.STATE_FIRING:\n this.#delayToFadeOutTracking = 0.0001;\n this.#target.StopFireAtLocator();\n if (this.firingEffect) this.firingEffect.StopFiring();\n this.#PlayAnimation(\"\", \"Active\", TRACKING_FADE_TIME);\n if (this.playMovementSound && this.targetingToIdleMovementAudioEvent)\n {\n this.#SendMovementAudioEvent(this.targetingToIdleMovementAudioEvent);\n }\n break;\n default:\n break;\n }\n this.state = State.STATE_IDLE;\n }\n\n /** Go into state targeting: face the cannons toward the enemy (Carbon cpp:420-459). */\n @carbon.method\n @impl.implemented\n EnterStateTargeting()\n {\n if (!this.isOnline) return;\n const State = EveChildTurret.State;\n switch (this.state)\n {\n case State.STATE_DEACTIVE:\n {\n const animLength = this.#PlayAnimation(\"Deploy\", \"Active\", TRACKING_FADE_TIME);\n this.#delayToFadeInTracking = animLength + 0.0001;\n break;\n }\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n this.#delayToFadeInTracking = 0.0001;\n this.#PlayAnimation(\"\", \"Active\", TRACKING_FADE_TIME);\n break;\n case State.STATE_TARGETING:\n break;\n case State.STATE_FIRING:\n this.#target.StopFireAtLocator();\n if (this.firingEffect) this.firingEffect.StopFiring();\n this.#PlayAnimation(\"\", \"Active\", 0);\n break;\n default:\n break;\n }\n this.state = State.STATE_TARGETING;\n }\n\n /**\n * Go into state firing (Carbon cpp:461-500): a looping effect already\n * firing only refreshes its move objects; otherwise the effect is stopped,\n * prepared (with muzzle cycling when configured) and pointed at the\n * target's impact surface.\n */\n @carbon.method\n @impl.implemented\n EnterStateFiring()\n {\n if (!this.SetupFiringState()) return;\n const State = EveChildTurret.State;\n\n if (this.firingEffect && this.state === State.STATE_FIRING)\n {\n if (this.firingEffect.IsLooping())\n {\n this.firingEffect.PrepareFiringEffectMoveObjects();\n return;\n }\n this.firingEffect.StopFiring();\n }\n\n if (this.firingEffect)\n {\n if (this.maxCyclingFirePos > 1)\n {\n this.firingEffect.PrepareFiring(0, this.currentCyclingFiresPos, this.cyclingFireGroupCount);\n }\n else\n {\n this.firingEffect.PrepareFiring(0);\n }\n this.firingEffect.SetImpactConfiguration(this.#target.GetImpactConfiguration());\n }\n\n this.state = State.STATE_FIRING;\n }\n\n /**\n * Aims at the closest facing damage locator, advances muzzle cycling, and\n * starts the fire animation + tracker timing (Carbon cpp:502-556). The\n * locator search uses THIS turret's world translation; the tracker's fire\n * source deliberately uses the PARENT transform's translation.\n */\n @carbon.method\n @impl.implemented\n SetupFiringState()\n {\n const State = EveChildTurret.State;\n if (this.state === State.STATE_DEACTIVE)\n {\n return false;\n }\n vec3.set(FIRE_SOURCE_SCRATCH,\n this.worldTransform[12], this.worldTransform[13], this.worldTransform[14]);\n const closestLocator = this.#target.FindClosestLocator(FIRE_SOURCE_SCRATCH, FIRE_POSITION_SCRATCH);\n\n if (this.maxCyclingFirePos > 1)\n {\n this.currentCyclingFiresPos += this.cyclingFireGroupCount;\n if (this.currentCyclingFiresPos >= this.maxCyclingFirePos * this.cyclingFireGroupCount)\n {\n this.currentCyclingFiresPos = 0;\n }\n }\n\n const effectTotalTime = this.firingEffect ? this.firingEffect.GetFiringDuration() : 0;\n const effectPeakTime = this.firingEffect ? this.firingEffect.GetFiringPeakTime() : 0;\n\n switch (this.state)\n {\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n this.#delayToFadeInTracking = 0.0001;\n this.#PlayAnimation(this.#GetFireAnimationName(), \"Active\", this.maxTrackingTime);\n this.#target.StartFireAtLocator(\n closestLocator, this.maxTrackingTime + effectPeakTime,\n effectTotalTime - effectPeakTime, this.#parentTranslation);\n break;\n case State.STATE_FIRING:\n case State.STATE_TARGETING:\n this.#PlayAnimation(this.#GetFireAnimationName(), \"Active\", this.maxTrackingTime);\n this.#target.StartFireAtLocator(\n closestLocator, this.maxTrackingTime + effectPeakTime,\n effectTotalTime - effectPeakTime, this.#parentTranslation);\n break;\n default:\n break;\n }\n return true;\n }\n\n /**\n * Go into state reloading (Carbon cpp:558-589). Carbon's DEACTIVE case\n * comments \"ignore\" yet still stamps STATE_RELOADING at the end - that\n * quirk is preserved verbatim.\n */\n @carbon.method\n @impl.implemented\n EnterStateReloading()\n {\n const State = EveChildTurret.State;\n switch (this.state)\n {\n case State.STATE_DEACTIVE:\n break;\n case State.STATE_INVALID:\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n this.#PlayAnimation(\"Reload\", \"Active\", 0);\n break;\n case State.STATE_TARGETING:\n case State.STATE_FIRING:\n this.#delayToFadeOutTracking = 0.0001;\n this.#target.StopFireAtLocator();\n if (this.firingEffect) this.firingEffect.StopFiring();\n this.#PlayAnimation(\"Reload\", \"Active\", TRACKING_FADE_TIME);\n break;\n default:\n break;\n }\n this.state = State.STATE_RELOADING;\n }\n\n /** Force into state deactive: no animation transition, just flip (Carbon cpp:591-606). */\n @carbon.method\n @impl.implemented\n ForceStateDeactive()\n {\n this.trackingInfluence = 0;\n this.#delayToFadeOutTracking = 0;\n this.#target.StopFireAtLocator();\n if (this.firingEffect) this.firingEffect.StopFiring();\n this.state = EveChildTurret.State.STATE_DEACTIVE;\n this.ForceIdleAnimation();\n }\n\n /** Force-plays the idle loop matching the current state (Carbon cpp:608-631). */\n @carbon.method\n @impl.implemented\n ForceIdleAnimation()\n {\n const State = EveChildTurret.State;\n let idleAnimName = \"\";\n switch (this.state)\n {\n case State.STATE_DEACTIVE:\n idleAnimName = \"Inactive\";\n break;\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n case State.STATE_TARGETING:\n case State.STATE_FIRING:\n idleAnimName = \"Active\";\n break;\n default:\n break;\n }\n if (idleAnimName.length > 0)\n {\n this.#PlayAnimation(\"\", idleAnimName, 0);\n }\n }\n\n /** Force into state targeting: tracking pinned to its ceiling, no transition (Carbon cpp:633-643). */\n @carbon.method\n @impl.implemented\n ForceStateTargeting()\n {\n this.trackingInfluence = this.maxTrackingTime;\n this.#trackingInfluenceDelta = 0;\n this.state = EveChildTurret.State.STATE_TARGETING;\n this.#PlayAnimation(\"\", \"Active\", 0);\n }\n\n /**\n * The world transform of a muzzle's firing bone, falling back to this\n * turret's world transform without a mesh or effect (Carbon cpp:645-661).\n */\n @carbon.method\n @impl.implemented\n GetFiringBoneWorldTransform(muzzle, out = mat4.create())\n {\n if (!this.mesh || !this.firingEffect)\n {\n return mat4.copy(out, this.worldTransform);\n }\n const boneID = this.firingEffect.GetPerMuzzleBoneID(muzzle);\n return this.GetTurretBoneTransform(boneID, out);\n }\n\n /**\n * Wires the firing effect's muzzle bones from the skeleton: bones named\n * GetFiringBoneName() + a two-digit 1-based index, e.g. Pos_Fire01\n * (Carbon cpp:663-696). Carbon also registers the effect with the quad\n * renderer singleton here; quad registration is not ported yet in the\n * browser runtime and happens through the engine's own registration pass.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Tr2QuadRenderer is an engine singleton in Carbon; the browser engine owns quad registration.\")\n InitializeFiringEffect()\n {\n this.#firingEffectMuzzlePosSet = false;\n if (!this.firingEffect) return;\n\n const geometryRes = this.GetGeometryRes();\n if (geometryRes && geometryRes.GetSkeletonCount())\n {\n const skeletonData = geometryRes.GetSkeletonData(0);\n if (skeletonData)\n {\n const muzzleCount = this.firingEffect.GetPerMuzzleEffectCount();\n const boneCount = Math.min(muzzleCount, EveChildTurret.MUZZLECOUNT_MAX);\n for (let muzzle = 0; muzzle < boneCount; muzzle++)\n {\n const boneName = `${this.firingEffect.GetFiringBoneName()}${String(muzzle + 1).padStart(2, \"0\")}`;\n this.firingEffect.SetMuzzleBoneID(muzzle, FindJoint(skeletonData, boneName));\n }\n }\n }\n }\n\n /**\n * Force-creates the animation updater BEFORE the base wiring, then hooks\n * this turret in as the updater's pose modifier, unhooking any previously\n * hooked updater on swap (Carbon cpp:698-715). CleanUp performs Carbon's\n * destructor unhook.\n */\n @carbon.method\n @impl.implemented\n InitializeAnimation()\n {\n if (!this.animationUpdater)\n {\n this.animationUpdater = new Tr2GrannyAnimation();\n }\n super.InitializeAnimation();\n\n if (this.#hookedUpdater !== this.animationUpdater)\n {\n if (this.#hookedUpdater && this.#hookedUpdater.GetPoseModifier() === this)\n {\n this.#hookedUpdater.SetPoseModifier(null);\n }\n this.animationUpdater.SetPoseModifier(this);\n this.#hookedUpdater = this.animationUpdater;\n }\n }\n\n /**\n * Carbon's destructor obligations: unhook the pose modifier and clean up\n * the firing effect (Carbon cpp:32-47). JS has no destructor; owners call\n * CleanUp when discarding the turret.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"The C++ destructor becomes an explicit CleanUp obligation.\")\n CleanUp(context = { currentTime: 0, deltaTime: 0 })\n {\n if (this.#hookedUpdater && this.#hookedUpdater.GetPoseModifier() === this)\n {\n this.#hookedUpdater.SetPoseModifier(null);\n }\n this.#hookedUpdater = null;\n if (this.firingEffect) this.firingEffect.CleanUp(context);\n this.ReleaseCachedGeometryData();\n }\n\n /**\n * The ITr2PoseModifier hook (Carbon cpp:717-741): poses every found\n * system bone toward the tracked target in turret space. Always passes\n * null for the pitch localTransform - only EveTurretSet uses the\n * behind-the-arm flip.\n */\n @carbon.method\n @impl.implemented\n ModifyPose(_skeleton, pose)\n {\n if (this.trackingInfluence === 0) return;\n\n const tracking = this.#target.GetTrackingPosition();\n if (!mat4.invert(INVERSE_WORLD_SCRATCH, this.worldTransform))\n {\n mat4.identity(INVERSE_WORLD_SCRATCH);\n }\n vec3.transformMat4(TARGET_OS_SCRATCH, tracking, INVERSE_WORLD_SCRATCH);\n\n const aiming = this.GetAiming();\n for (let bone = 0; bone < EveTurretAiming.SystemBones.SYSBONE_MAX; bone++)\n {\n // covers INVALID since INVALID_BONE_INDEX exceeds any bone count\n if (this.#systemBoneID[bone] < pose.boneTransforms.length)\n {\n const boneTransform = pose.boneTransforms[this.#systemBoneID[bone]];\n aiming.ModifySystemBoneTransform(\n bone, TARGET_OS_SCRATCH, null, this.trackingInfluence,\n boneTransform.position, boneTransform.rotation);\n }\n }\n }\n\n /**\n * A bone's world-of-pose transform lifted into world space - row-vector\n * boneLocal * worldTransform, gl multiply(out, worldTransform, boneWorld)\n * (Carbon cpp:743-757).\n */\n @carbon.method\n @impl.implemented\n GetTurretBoneTransform(boneID, out = mat4.create())\n {\n mat4.copy(out, this.worldTransform);\n if (this.animationUpdater)\n {\n const boneWorld = this.animationUpdater.GetBoneTransform(boneID);\n if (boneWorld)\n {\n mat4.multiply(out, this.worldTransform, boneWorld);\n }\n }\n return out;\n }\n\n /** The mesh's geometry resource, or null (Carbon cpp:758-761). */\n @carbon.method\n @impl.implemented\n GetGeometryRes()\n {\n return this.mesh ? this.mesh.GetGeometryResource() : null;\n }\n\n /**\n * Stops running animations after the delay, queues the action animation\n * once on the base layer and the idle loop forever after it; returns the\n * action animation's duration (Carbon cpp:763-787).\n */\n #PlayAnimation(animName, animNameIdle, delay = 0)\n {\n const updater = this.animationUpdater;\n if (!updater) return 0;\n\n updater.StopAnimations(delay);\n\n let animLength = 0;\n if (animName)\n {\n if (updater.PlayAnimation(animName, false, 1, 0, 1, false))\n {\n animLength = updater.FindAnimationDurationByName(animName);\n }\n }\n if (animNameIdle)\n {\n updater.PlayAnimation(animNameIdle, false, 0, 0, 1, false);\n }\n return animLength;\n }\n\n /** \"Fire\", or \"Fire0\" + cycle digit past the first cycle (Carbon cpp:788-799). */\n #GetFireAnimationName()\n {\n let name = \"Fire\";\n if (this.currentCyclingFiresPos > 0)\n {\n name += \"0\";\n name += String(Math.trunc(this.currentCyclingFiresPos / this.cyclingFireGroupCount));\n }\n return name;\n }\n\n /** The firing effect module (Carbon cpp:801-804). */\n @carbon.method\n @impl.implemented\n GetFiringEffect()\n {\n return this.firingEffect;\n }\n\n /**\n * Swaps the firing effect, moving its component registration and rewiring\n * its muzzle bones (Carbon cpp:806-819).\n */\n @carbon.method\n @impl.implemented\n SetFiringEffect(firingEffect)\n {\n if (this.firingEffect) this.firingEffect.UnRegisterComponents();\n this.firingEffect = firingEffect ?? null;\n if (this.firingEffect) this.firingEffect.RegisterComponents();\n this.InitializeFiringEffect();\n }\n\n /**\n * Attaches to a target object, firing the movement audio when moving off\n * idle or switching targets (Carbon cpp:821-848). Passing null is a no-op:\n * Carbon's API cannot clear a target.\n */\n @carbon.method\n @impl.implemented\n SetTargetObject(target)\n {\n if (!target) return;\n const oldTarget = this.#target.GetTargetable();\n this.#target.SetTargetable(target);\n\n if (this.playMovementSound && this.idleToTargetingMovementAudioEvent)\n {\n if (this.state === EveChildTurret.State.STATE_IDLE || oldTarget !== this.#target.GetTargetable())\n {\n this.#SendMovementAudioEvent(this.idleToTargetingMovementAudioEvent);\n }\n }\n this.SetTargetScale();\n }\n\n /** The tracked targetable, or null (Carbon cpp:850-853). */\n @carbon.method\n @impl.implemented\n GetTargetObject()\n {\n return this.#target.GetTargetable();\n }\n\n /** Scales the firing effect by the target's radius (Carbon cpp:855-857). */\n @carbon.method\n @impl.implemented\n SetTargetScale()\n {\n if (this.firingEffect)\n {\n this.firingEffect.SetScaleByRadius(this.#target.GetRadius());\n }\n }\n\n /** Sends a movement audio event through the observer's emitter (the EveTurretSet seam). */\n #SendMovementAudioEvent(eventName)\n {\n SendEventToAudEmitter(this.turretMovementObserver, eventName);\n }\n\n // The state enum matches EveTurretSet's values (Carbon EveChildTurret.h:\n // 61-69); one identity, owned by the set that had it first.\n static State = EveTurretSet.State;\n\n static ImpactBehaviour = EveTurretTarget.ImpactBehaviour;\n\n static INVALID_BONE_INDEX = INVALID_BONE_INDEX;\n\n static MUZZLECOUNT_MAX = EveTurretFiringFX.MUZZLE_COUNT_MAX;\n\n}\n"],"names":["INVALID_BONE_INDEX","TRACKING_FADE_TIME","MUZZLE_TRANSFORM_SCRATCH","mat4","create","FIRE_SOURCE_SCRATCH","vec3","FIRE_POSITION_SCRATCH","TARGET_OS_SCRATCH","INVERSE_WORLD_SCRATCH","FindJoint","skeletonData","name","bones","index","length","bone","boneName","String","Name","_EveChildTurret","_identity","EveChildTurret","EveChildMesh","e","_init_isOnline","_init_extra_isOnline","_init_trackingInfluence","_init_extra_trackingInfluence","_init_maxTrackingTime","_init_extra_maxTrackingTime","_init_state","_init_extra_state","_init_sysBoneHeight","_init_extra_sysBoneHeight","_init_sysBonePitchFactor","_init_extra_sysBonePitchFactor","_init_sysBonePitchOffset","_init_extra_sysBonePitchOffset","_init_sysBonePitchMin","_init_extra_sysBonePitchMin","_init_sysBonePitchMax","_init_extra_sysBonePitchMax","_init_sysBonePitch01Factor","_init_extra_sysBonePitch01Factor","_init_sysBonePitch01Offset","_init_extra_sysBonePitch01Offset","_init_sysBonePitch02Factor","_init_extra_sysBonePitch02Factor","_init_sysBonePitch02Offset","_init_extra_sysBonePitch02Offset","_init_sysBonePitch03Factor","_init_extra_sysBonePitch03Factor","_init_sysBonePitch03Offset","_init_extra_sysBonePitch03Offset","_init_maxCyclingFirePos","_init_extra_maxCyclingFirePos","_init_cyclingFireGroupCount","_init_extra_cyclingFireGroupCount","_init_currentCyclingFiresPos","_init_extra_currentCyclingFiresPos","_init_firingEffect","_init_extra_firingEffect","_init_firingEffectResPath","_init_extra_firingEffectResPath","_init_resourceLoader","_init_extra_resourceLoader","_init_impactSize","_init_extra_impactSize","_init_impactBehaviour","_init_extra_impactBehaviour","_init_turretMovementObserver","_init_extra_turretMovementObserver","_init_playMovementSound","_init_extra_playMovementSound","_init_idleToTargetingMovementAudioEvent","_init_extra_idleToTargetingMovementAudioEvent","_init_targetingToIdleMovementAudioEvent","_init_extra_targetingToIdleMovementAudioEvent","_initProto","c","_initClass","_applyDecs","type","define","className","family","edit","readwrite","boolean","read","float32","persist","int32","uint32","objectRef","notify","string","enum","carbon","method","impl","implemented","adapted","reason","contextual","isOnline","trackingInfluence","maxTrackingTime","state","EveTurretSet","State","STATE_IDLE","sysBoneHeight","sysBonePitchFactor","sysBonePitchOffset","sysBonePitchMin","sysBonePitchMax","sysBonePitch01Factor","sysBonePitch01Offset","sysBonePitch02Factor","sysBonePitch02Offset","sysBonePitch03Factor","sysBonePitch03Offset","maxCyclingFirePos","cyclingFireGroupCount","currentCyclingFiresPos","firingEffect","firingEffectResPath","resourceLoader","impactSize","impactBehaviour","EveTurretTarget","ImpactBehaviour","DAMAGE_LOCATOR","turretMovementObserver","playMovementSound","idleToTargetingMovementAudioEvent","targetingToIdleMovementAudioEvent","EveTurretAiming","Array","SystemBones","SYSBONE_MAX","fill","constructor","SetFadeOnLocatorChange","GetTarget","GetAiming","aiming","Initialize","SetImpactBehaviour","OnModified","value","#LoadFiringEffectFromPath","loaded","LoadChild","SetFiringEffect","RegisterComponents","registry","GetComponentRegistry","display","UnRegisterComponents","UpdateSyncronous","updateContext","params","deltaT","Number","GetDeltaT","deltaTime","SetDisplaySourceObject","IsVisible","UpdateCachedGeometryData","IsLooping","STATE_FIRING","set","worldTransform","closestLocator","FindClosestLocator","GetLocator","SetupFiringState","UpdateSynchronous","GetStartPosition","Update","mesh","UpdateAsyncronous","parentTransform","localToWorldTransform","result","muzzle","GetPerMuzzleEffectCount","GetFiringBoneWorldTransform","SetMuzzleTransform","SetEndPosition","GetTargetPosition","UpdateAsynchronous","SetDisplayDestObject","ShowDestObject","UpdateVisibility","parentLod","GetRenderables","renderables","geometryRes","GetGeometryRes","ReleaseCachedGeometryData","IsGood","BuildCachedGeometryData","GetSkeletonCount","GetSkeletonData","getSystemBoneName","InitializeFiringEffect","InitializeAnimation","ForceIdleAnimation","EnterStateDeactive","STATE_DEACTIVE","STATE_RELOADING","StopFiring","STATE_TARGETING","StopFireAtLocator","EnterStateIdle","STATE_INVALID","EnterStateTargeting","animLength","EnterStateFiring","PrepareFiringEffectMoveObjects","PrepareFiring","SetImpactConfiguration","GetImpactConfiguration","effectTotalTime","GetFiringDuration","effectPeakTime","GetFiringPeakTime","StartFireAtLocator","EnterStateReloading","ForceStateDeactive","idleAnimName","ForceStateTargeting","out","copy","boneID","GetPerMuzzleBoneID","GetTurretBoneTransform","muzzleCount","boneCount","Math","min","MUZZLECOUNT_MAX","GetFiringBoneName","padStart","SetMuzzleBoneID","animationUpdater","Tr2GrannyAnimation","GetPoseModifier","SetPoseModifier","CleanUp","context","currentTime","ModifyPose","_skeleton","pose","tracking","GetTrackingPosition","invert","identity","transformMat4","boneTransforms","boneTransform","ModifySystemBoneTransform","position","rotation","boneWorld","GetBoneTransform","multiply","GetGeometryResource","#PlayAnimation","animName","animNameIdle","delay","updater","StopAnimations","PlayAnimation","FindAnimationDurationByName","#GetFireAnimationName","trunc","GetFiringEffect","SetTargetObject","target","oldTarget","GetTargetable","SetTargetable","SetTargetScale","GetTargetObject","SetScaleByRadius","GetRadius","#SendMovementAudioEvent","eventName","SendEventToAudEmitter","EveTurretFiringFX","MUZZLE_COUNT_MAX"],"mappings":";;;;;;;;;;;;;;AAcA;AACA,MAAMA,kBAAkB,GAAG,UAAU;AACrC,MAAMC,kBAAkB,GAAG,CAAC;AAE5B,MAAMC,wBAAwB,GAAGC,IAAI,CAACC,MAAM,EAAE;AAC9C,MAAMC,mBAAmB,GAAGC,IAAI,CAACF,MAAM,EAAE;AACzC,MAAMG,qBAAqB,GAAGD,IAAI,CAACF,MAAM,EAAE;AAC3C,MAAMI,iBAAiB,GAAGF,IAAI,CAACF,MAAM,EAAE;AACvC,MAAMK,qBAAqB,GAAGN,IAAI,CAACC,MAAM,EAAE;;AAE3C;AACA,SAASM,SAASA,CAACC,YAAY,EAAEC,IAAI,EACrC;AACE,EAAA,MAAMC,KAAK,GAAGF,YAAY,EAAEE,KAAK,IAAI,EAAE;AACvC,EAAA,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGD,KAAK,CAACE,MAAM,EAAED,KAAK,EAAE,EACjD;AACE,IAAA,MAAME,IAAI,GAAGH,KAAK,CAACC,KAAK,CAAC;IACzB,MAAMG,QAAQ,GAAG,OAAOD,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGE,MAAM,CAACF,IAAI,EAAEJ,IAAI,IAAII,IAAI,EAAEG,IAAI,IAAI,EAAE,CAAC;AACzF,IAAA,IAAIF,QAAQ,KAAKL,IAAI,EAAE,OAAOE,KAAK;AACrC,EAAA;AACA,EAAA,OAAOd,kBAAkB;AAC3B;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,IAAAoB;AAAA,IAAA,cAAAC,SAAA,CAAA;AAAA,EAAA,QAQA,MAAAC,cAAA,SACoCC,aAAY,CAChD;AAAA,IAAA;AAAA,MAAA,CAAA;QAAAC,CAAA,EAAA,CAAAC,cAAA,EAAAC,oBAAA,EAAAC,uBAAA,EAAAC,6BAAA,EAAAC,qBAAA,EAAAC,2BAAA,EAAAC,WAAA,EAAAC,iBAAA,EAAAC,mBAAA,EAAAC,yBAAA,EAAAC,wBAAA,EAAAC,8BAAA,EAAAC,wBAAA,EAAAC,8BAAA,EAAAC,qBAAA,EAAAC,2BAAA,EAAAC,qBAAA,EAAAC,2BAAA,EAAAC,0BAAA,EAAAC,gCAAA,EAAAC,0BAAA,EAAAC,gCAAA,EAAAC,0BAAA,EAAAC,gCAAA,EAAAC,0BAAA,EAAAC,gCAAA,EAAAC,0BAAA,EAAAC,gCAAA,EAAAC,0BAAA,EAAAC,gCAAA,EAAAC,uBAAA,EAAAC,6BAAA,EAAAC,2BAAA,EAAAC,iCAAA,EAAAC,4BAAA,EAAAC,kCAAA,EAAAC,kBAAA,EAAAC,wBAAA,EAAAC,yBAAA,EAAAC,+BAAA,EAAAC,oBAAA,EAAAC,0BAAA,EAAAC,gBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,2BAAA,EAAAC,4BAAA,EAAAC,kCAAA,EAAAC,uBAAA,EAAAC,6BAAA,EAAAC,uCAAA,EAAAC,6CAAA,EAAAC,uCAAA,EAAAC,6CAAA,EAAAC,UAAA,CAAA;QAAAC,CAAA,EAAA,CAAA5D,eAAA,EAAA6D,UAAA;AAAA,OAAA,GAAAC,cAAA,CAAA,IAAA,EAAA,CAFCC,IAAI,CAACC,MAAM,CAAC;AAAEC,QAAAA,SAAS,EAAE,gBAAgB;AAAEC,QAAAA,MAAM,EAAE;OAAa,CAAC,MAK/DC,IAAI,EAAJA,IAAI,CAACC,SAAS,EACdL,IAAI,EAAJA,IAAI,CAACM,OAAO,sBAIZF,IAAI,EAAJA,IAAI,CAACG,IAAI,EACTP,IAAI,EAAJA,IAAI,CAACQ,OAAO,+BAIZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,6BAIZJ,IAAI,EAAJA,IAAI,CAACG,IAAI,EACTH,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACU,KAAK,CAAA,EAAA,EAAA,EAAA,OAAA,CAAA,EAAA,CAAA,CAMVN,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,eAAA,CAAA,EAAA,CAAA,CAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,CAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,CAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,CAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,CAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,kCAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,kCAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,CAGZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,CAIZJ,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACW,MAAM,CAAA,EAAA,EAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,CAIXP,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACW,MAAM,CAAA,EAAA,EAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,CAIXP,IAAI,EAAJA,IAAI,CAACG,IAAI,EACTP,IAAI,EAAJA,IAAI,CAACW,MAAM,CAAA,EAAA,EAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,CAIXP,IAAI,EAAJA,IAAI,CAACK,OAAO,EAAA,MAAA,EACZT,IAAI,CAACY,SAAS,CAAC,mBAAmB,CAAC,CAAA,EAAA,EAAA,EAAA,cAAA,CAAA,EAAA,CAAA,CAInCR,IAAI,EAAJA,IAAI,CAACS,MAAM,EACXT,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACc,MAAM,CAAA,EAAA,EAAA,EAAA,qBAAA,CAAA,EAAA,CASXd,IAAI,CAACY,SAAS,CAAC,2BAA2B,CAAC,EAAA,CAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,CAI3CR,IAAI,EAAJA,IAAI,CAACS,MAAM,EACXT,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACQ,OAAO,CAAA,EAAA,EAAA,EAAA,YAAA,CAAA,EAAA,CAAA,CAIZJ,IAAI,EAAJA,IAAI,CAACS,MAAM,EACXT,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACU,KAAK,UACVV,IAAI,CAACe,IAAI,CAAC,iBAAiB,CAAC,CAAA,EAAA,EAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAI5BX,IAAI,EAAJA,IAAI,CAACK,OAAO,EAAA,MAAA,EACZT,IAAI,CAACY,SAAS,CAAC,kBAAkB,CAAC,CAAA,EAAA,EAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,CAIlCR,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACM,OAAO,CAAA,EAAA,EAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,CAIZF,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACc,MAAM,CAAA,EAAA,EAAA,EAAA,mCAAA,CAAA,EAAA,CAAA,CAIXV,IAAI,EAAJA,IAAI,CAACK,OAAO,EACZT,IAAI,EAAJA,IAAI,CAACc,MAAM,CAAA,EAAA,EAAA,EAAA,mCAAA,CAAA,EAAA,CAAA,CA2CXE,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,WAAA,CAAA,EAAA,CAAA,CAUhBD,IAAI,EAAJA,IAAI,CAACE,OAAO,UACZF,IAAI,CAACG,MAAM,CAAC,+FAA+F,CAAC,CAAA,EAAA,EAAA,EAAA,WAAA,CAAA,EAAA,CAAA,CAuB5GL,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,YAAA,CAAA,EAAA,CAAA,CAgBhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,wBA0BhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,gCAYhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,kCAiBhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,CAqDhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EAAA,MAAA,EACbD,MAAM,CAACM,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAC7BJ,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,CAgFhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,CAYhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,CAehBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,CAkBhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,yBAAA,CAAA,EAAA,CAAA,CAoBhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,2BAAA,CAAA,EAAA,CAAA,CAYhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,CA8BhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,4BAmChBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,iCAqChBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,CAsChBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,CAoDhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,CA2BhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,CAYhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,CA0BhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,CAahBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,yCAkBhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACE,OAAO,UACZF,IAAI,CAACG,MAAM,CAAC,8FAA8F,CAAC,CAAA,EAAA,EAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,CA6B3GL,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,iCAyBhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACE,OAAO,UACZF,IAAI,CAACG,MAAM,CAAC,4DAA4D,CAAC,qBAkBzEL,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,wBA+BhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,oCAgBhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,4BA8ChBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAUhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAchBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAkBhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,CAOhBH,MAAM,EAANA,MAAM,CAACC,MAAM,EACbC,IAAI,EAAJA,IAAI,CAACC,WAAW,CAAA,EAAA,EAAA,EAAA,gBAAA,CAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAxgCiB/E,aAAY,CAAA;AAAA;AAG9C;AAGAmF,IAAAA,QAAQ,IAAA3B,UAAA,CAAA,IAAA,CAAA,EAAAtD,cAAA,OAAG,IAAI,CAAA;;AAEf;AAGAkF,IAAAA,iBAAiB,IAAAjF,oBAAA,CAAA,IAAA,CAAA,EAAAC,uBAAA,OAAG,CAAC,CAAA;;AAErB;AAGAiF,IAAAA,eAAe,IAAAhF,6BAAA,CAAA,IAAA,CAAA,EAAAC,qBAAA,OAAG,CAAC,CAAA;;AAEnB;IAIAgF,KAAK,IAAA/E,2BAAA,CAAA,IAAA,CAAA,EAAAC,WAAA,OAAG+E,aAAY,CAACC,KAAK,CAACC,UAAU,CAAA;;AAErC;AACA;AACA;AAGAC,IAAAA,aAAa,IAAAjF,iBAAA,CAAA,IAAA,CAAA,EAAAC,mBAAA,OAAG,CAAC,CAAA;AAIjBiF,IAAAA,kBAAkB,IAAAhF,yBAAA,CAAA,IAAA,CAAA,EAAAC,wBAAA,OAAG,CAAC,CAAA;AAItBgF,IAAAA,kBAAkB,IAAA/E,8BAAA,CAAA,IAAA,CAAA,EAAAC,wBAAA,OAAG,CAAC,CAAA;AAItB+E,IAAAA,eAAe,IAAA9E,8BAAA,CAAA,IAAA,CAAA,EAAAC,qBAAA,OAAG,CAAC,CAAA;AAInB8E,IAAAA,eAAe,IAAA7E,2BAAA,CAAA,IAAA,CAAA,EAAAC,qBAAA,OAAG,EAAE,CAAA;AAIpB6E,IAAAA,oBAAoB,IAAA5E,2BAAA,CAAA,IAAA,CAAA,EAAAC,0BAAA,OAAG,CAAC,CAAA;AAIxB4E,IAAAA,oBAAoB,IAAA3E,gCAAA,CAAA,IAAA,CAAA,EAAAC,0BAAA,OAAG,CAAC,CAAA;AAIxB2E,IAAAA,oBAAoB,IAAA1E,gCAAA,CAAA,IAAA,CAAA,EAAAC,0BAAA,OAAG,CAAC,CAAA;AAIxB0E,IAAAA,oBAAoB,IAAAzE,gCAAA,CAAA,IAAA,CAAA,EAAAC,0BAAA,OAAG,CAAC,CAAA;AAIxByE,IAAAA,oBAAoB,IAAAxE,gCAAA,CAAA,IAAA,CAAA,EAAAC,0BAAA,OAAG,CAAC,CAAA;AAIxBwE,IAAAA,oBAAoB,IAAAvE,gCAAA,CAAA,IAAA,CAAA,EAAAC,0BAAA,OAAG,CAAC,CAAA;;AAExB;AAGAuE,IAAAA,iBAAiB,IAAAtE,gCAAA,CAAA,IAAA,CAAA,EAAAC,uBAAA,OAAG,CAAC,CAAA;;AAErB;AAGAsE,IAAAA,qBAAqB,IAAArE,6BAAA,CAAA,IAAA,CAAA,EAAAC,2BAAA,OAAG,CAAC,CAAA;;AAEzB;AAGAqE,IAAAA,sBAAsB,IAAApE,iCAAA,CAAA,IAAA,CAAA,EAAAC,4BAAA,OAAG,CAAC,CAAA;;AAE1B;AAGAoE,IAAAA,YAAY,IAAAnE,kCAAA,CAAA,IAAA,CAAA,EAAAC,kBAAA,OAAG,IAAI,CAAA;;AAEnB;AAIAmE,IAAAA,mBAAmB,IAAAlE,wBAAA,CAAA,IAAA,CAAA,EAAAC,yBAAA,OAAG,EAAE,CAAA;;AAExB;AACF;AACA;AACA;AACA;AACA;AAEEkE,IAAAA,cAAc,IAAAjE,+BAAA,CAAA,IAAA,CAAA,EAAAC,oBAAA,OAAG,IAAI,CAAA;;AAErB;AAIAiE,IAAAA,UAAU,IAAAhE,0BAAA,CAAA,IAAA,CAAA,EAAAC,gBAAA,OAAG,CAAC,CAAA;;AAEd;IAKAgE,eAAe,IAAA/D,sBAAA,CAAA,IAAA,CAAA,EAAAC,qBAAA,OAAG+D,gBAAe,CAACC,eAAe,CAACC,cAAc,CAAA;;AAEhE;AAGAC,IAAAA,sBAAsB,IAAAjE,2BAAA,CAAA,IAAA,CAAA,EAAAC,4BAAA,OAAG,IAAI,CAAA;;AAE7B;AAGAiE,IAAAA,iBAAiB,IAAAhE,kCAAA,CAAA,IAAA,CAAA,EAAAC,uBAAA,OAAG,IAAI,CAAA;;AAExB;AAGAgE,IAAAA,iCAAiC,IAAA/D,6BAAA,CAAA,IAAA,CAAA,EAAAC,uCAAA,OAAG,EAAE,CAAA;;AAEtC;AAGA+D,IAAAA,iCAAiC,IAAA9D,6CAAA,CAAA,IAAA,CAAA,EAAAC,uCAAA,OAAG,EAAE,CAAA;;AAEtC;AACA;AACA,IAAA,OAAO,IAAAC,6CAAA,QAAG,IAAIsD,gBAAe,EAAE;AAE/B,IAAA,OAAO,GAAG,IAAIO,eAAe,EAAE;;AAE/B;AACA,IAAA,aAAa,GAAG,IAAIC,KAAK,CAACD,eAAe,CAACE,WAAW,CAACC,WAAW,CAAC,CAACC,IAAI,CAAC/I,kBAAkB,CAAC;IAE3F,uBAAuB,GAAG,CAAC;IAE3B,uBAAuB,GAAG,CAAC;IAE3B,sBAAsB,GAAG,CAAC;;AAE1B;AACA;IACA,cAAc,GAAG,IAAI;IAErB,gBAAgB,GAAG,EAAE;IAErB,yBAAyB,GAAG,KAAK;IAEjC,kBAAkB,GAAG,IAAI;;AAEzB;AACA;AACA;AACA,IAAA,kBAAkB,GAAGM,IAAI,CAACF,MAAM,EAAE;;AAElC;AACA4I,IAAAA,WAAWA,GACX;AACE,MAAA,KAAK,EAAE;AACP,MAAA,IAAI,CAAC,OAAO,CAACC,sBAAsB,CAAC,IAAI,CAAC;AACzC;AACA;AACF,IAAA;;AAEA;AAGAC,IAAAA,SAASA,GACT;MACE,OAAO,IAAI,CAAC,OAAO;AACrB,IAAA;;AAEA;AACF;AACA;AACA;AAGEC,IAAAA,SAASA,GACT;AACE,MAAA,MAAMC,MAAM,GAAG,IAAI,CAAC,OAAO;AAC3BA,MAAAA,MAAM,CAACnC,aAAa,GAAG,IAAI,CAACA,aAAa;AACzCmC,MAAAA,MAAM,CAACjC,kBAAkB,GAAG,IAAI,CAACA,kBAAkB;AACnDiC,MAAAA,MAAM,CAAClC,kBAAkB,GAAG,IAAI,CAACA,kBAAkB;AACnDkC,MAAAA,MAAM,CAAChC,eAAe,GAAG,IAAI,CAACA,eAAe;AAC7CgC,MAAAA,MAAM,CAAC/B,eAAe,GAAG,IAAI,CAACA,eAAe;AAC7C+B,MAAAA,MAAM,CAAC7B,oBAAoB,GAAG,IAAI,CAACA,oBAAoB;AACvD6B,MAAAA,MAAM,CAAC9B,oBAAoB,GAAG,IAAI,CAACA,oBAAoB;AACvD8B,MAAAA,MAAM,CAAC3B,oBAAoB,GAAG,IAAI,CAACA,oBAAoB;AACvD2B,MAAAA,MAAM,CAAC5B,oBAAoB,GAAG,IAAI,CAACA,oBAAoB;AACvD4B,MAAAA,MAAM,CAACzB,oBAAoB,GAAG,IAAI,CAACA,oBAAoB;AACvDyB,MAAAA,MAAM,CAAC1B,oBAAoB,GAAG,IAAI,CAACA,oBAAoB;AACvD,MAAA,OAAO0B,MAAM;AACf,IAAA;;AAEA;AACF;AACA;AACA;AACA;AAGEC,IAAAA,UAAUA,GACV;AACE,MAAA,IAAI,CAAC,OAAO,CAACC,kBAAkB,CAAC,IAAI,CAACpB,UAAU,EAAE,IAAI,CAACC,eAAe,CAAC;MACtE,IAAI,CAAC,IAAI,CAACJ,YAAY,IAAI,IAAI,CAACC,mBAAmB,EAClD;AACE,QAAA,IAAI,CAAC,yBAAyB,EAAE;AAClC,MAAA;AACA,MAAA,OAAO,KAAK,CAACqB,UAAU,EAAE;AAC3B,IAAA;;AAEA;AACF;AACA;AACA;AACA;AAGEE,IAAAA,UAAUA,CAACC,KAAK,GAAG,IAAI,EACvB;AACE,MAAA,IAAIA,KAAK,KAAK,YAAY,IAAIA,KAAK,KAAK,iBAAiB,EACzD;AACE,QAAA,IAAI,CAAC,OAAO,CAACF,kBAAkB,CAAC,IAAI,CAACpB,UAAU,EAAE,IAAI,CAACC,eAAe,CAAC;AACxE,MAAA;AACA,MAAA,IAAIqB,KAAK,KAAK,qBAAqB,IAAI,IAAI,CAACxB,mBAAmB,EAC/D;AACE,QAAA,IAAI,CAAC,yBAAyB,EAAE;AAClC,MAAA;AACA,MAAA,OAAO,KAAK,CAACuB,UAAU,CAACC,KAAK,CAAC;AAChC,IAAA;;AAEA;AACF;AACA;AACA;IACE,yBAAyBC,GACzB;AACE,MAAA,IAAI,CAAC,IAAI,CAACxB,cAAc,EAAE;AAC1B,MAAA,MAAMyB,MAAM,GAAG,IAAI,CAACzB,cAAc,CAAC0B,SAAS,CAAC,IAAI,CAAC3B,mBAAmB,EAAE,IAAI,CAAC;AAC5E,MAAA,IAAI0B,MAAM,EAAE,IAAI,CAACE,eAAe,CAACF,MAAM,CAAC;AAC1C,IAAA;;AAEA;AAGAG,IAAAA,kBAAkBA,GAClB;MACE,KAAK,CAACA,kBAAkB,EAAE;AAC1B,MAAA,MAAMC,QAAQ,GAAG,IAAI,CAACC,oBAAoB,EAAE;AAC5C,MAAA,IAAID,QAAQ,IAAI,IAAI,CAACE,OAAO,EAC5B;QACE,IAAI,IAAI,CAACjC,YAAY,EAAE,IAAI,CAACA,YAAY,CAAC8B,kBAAkB,EAAE;AAC/D,MAAA;AACF,IAAA;;AAEA;AAGAI,IAAAA,oBAAoBA,GACpB;MACE,KAAK,CAACA,oBAAoB,EAAE;AAC5B,MAAA,MAAMH,QAAQ,GAAG,IAAI,CAACC,oBAAoB,EAAE;AAC5C,MAAA,IAAID,QAAQ,EACZ;QACE,IAAI,IAAI,CAAC/B,YAAY,EAAE,IAAI,CAACA,YAAY,CAACkC,oBAAoB,EAAE;AACjE,MAAA;AACF,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AAGEC,IAAAA,gBAAgBA,CAACC,aAAa,EAAEC,MAAM,EACtC;AACE,MAAA,MAAMC,MAAM,GAAGC,MAAM,CAACH,aAAa,EAAEI,SAAS,IAAI,IAAIJ,aAAa,EAAEK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC;MAEzF,IAAI,IAAI,CAACzC,YAAY,EACrB;QACE,IAAI,CAACA,YAAY,CAAC0C,sBAAsB,CAAC,IAAI,CAACC,SAAS,CAACP,aAAa,CAAC,CAAC;AACzE,MAAA;MAEA,IAAI,CAACQ,wBAAwB,EAAE;MAE/B,IAAI,IAAI,CAAC5C,YAAY,EACrB;AACE,QAAA,IAAI,IAAI,CAACA,YAAY,CAAC6C,SAAS,EAAE,IAAI,IAAI,CAAC/D,KAAK,KAAKvF,eAAc,CAACyF,KAAK,CAAC8D,YAAY,EACrF;AACE,UAAA,IAAI,CAAC,gBAAgB,IAAIR,MAAM;AAC/B,UAAA,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAC7B;YACE/J,IAAI,CAACwK,GAAG,CAACzK,mBAAmB,EAC1B,IAAI,CAAC0K,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAACA,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAACA,cAAc,CAAC,EAAE,CAAC,CAAC;AAC5E,YAAA,MAAMC,cAAc,GAAG,IAAI,CAAC,OAAO,CAACC,kBAAkB,CAAC5K,mBAAmB,EAAEE,qBAAqB,CAAC;AAClG,YAAA,IAAIyK,cAAc,IAAI,CAAC,IAAIA,cAAc,KAAK,IAAI,CAAC,OAAO,CAACE,UAAU,EAAE,EACvE;cACE,IAAI,CAACC,gBAAgB,EAAE;AACzB,YAAA;AACA,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AAC3B,UAAA;AACF,QAAA;AACA,QAAA,IAAI,CAACpD,YAAY,CAACqD,iBAAiB,CAACjB,aAAa,CAAC;AACpD,MAAA;MAEA7J,IAAI,CAACwK,GAAG,CAACvK,qBAAqB,EAC5B,IAAI,CAACwK,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAACA,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAACA,cAAc,CAAC,EAAE,CAAC,CAAC;MAC5E,IAAI,IAAI,CAAChD,YAAY,EACrB;AACE,QAAA,IAAI,CAACA,YAAY,CAACsD,gBAAgB,CAAC9K,qBAAqB,CAAC;AAC3D,MAAA;MACA,IAAI,CAAC,OAAO,CAAC+K,MAAM,CAACjB,MAAM,EAAE9J,qBAAqB,CAAC;AAElD,MAAA,IAAI,IAAI,CAACgL,IAAI,IAAI,IAAI,CAAChD,sBAAsB,EAC5C;QACE,IAAI,CAACA,sBAAsB,CAAC+C,MAAM,CAAC,IAAI,CAACP,cAAc,CAAC;AACzD,MAAA;AACA,MAAA,OAAO,KAAK,CAACb,gBAAgB,CAACC,aAAa,EAAEC,MAAM,CAAC;AACtD,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AAIEoB,IAAAA,iBAAiBA,CAACrB,aAAa,EAAEC,MAAM,EACvC;AACE,MAAA,MAAMC,MAAM,GAAGC,MAAM,CAACH,aAAa,EAAEI,SAAS,IAAI,IAAIJ,aAAa,EAAEK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC;AAEzF,MAAA,IAAI,IAAI,CAAC,uBAAuB,KAAK,CAAC,EACtC;QACE,IAAI,CAAC7D,iBAAiB,IAAI,IAAI,CAAC,uBAAuB,GAAG0D,MAAM;AAC/D,QAAA,IAAI,IAAI,CAAC1D,iBAAiB,GAAG,IAAI,CAACC,eAAe,EACjD;AACE,UAAA,IAAI,CAACD,iBAAiB,GAAG,IAAI,CAACC,eAAe;AAC7C,UAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC;AAClC,QAAA,CAAC,MACI,IAAI,IAAI,CAACD,iBAAiB,GAAG,CAAC,EACnC;UACE,IAAI,CAACA,iBAAiB,GAAG,CAAC;AAC1B,UAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC;AAClC,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,IAAI,CAAC,uBAAuB,GAAG,CAAC,EACpC;AACE,QAAA,IAAI,CAAC,uBAAuB,IAAI0D,MAAM;AACtC,QAAA,IAAI,IAAI,CAAC,uBAAuB,IAAI,CAAC,EACrC;AACE,UAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC;AAChC,UAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE,GAAGpK,kBAAkB;AACxD,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,IAAI,CAAC,sBAAsB,GAAG,CAAC,EACnC;AACE,QAAA,IAAI,CAAC,sBAAsB,IAAIoK,MAAM;AACrC,QAAA,IAAI,IAAI,CAAC,sBAAsB,IAAI,CAAC,EACpC;AACE,UAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC;AAC/B,UAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAGpK,kBAAkB;AACvD,QAAA;AACF,MAAA;AAEA,MAAA,MAAMwL,eAAe,GAAGrB,MAAM,EAAEsB,qBAAqB;AACrD,MAAA,IAAID,eAAe,IAAIA,eAAe,CAAC1K,MAAM,KAAK,EAAE,EACpD;QACET,IAAI,CAACwK,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAC9BW,eAAe,CAAC,EAAE,CAAC,EAAEA,eAAe,CAAC,EAAE,CAAC,EAAEA,eAAe,CAAC,EAAE,CAAC,CAAC;AAClE,MAAA;MAEA,MAAME,MAAM,GAAG,KAAK,CAACH,iBAAiB,CAACrB,aAAa,EAAEC,MAAM,CAAC;MAE7D,IAAI,IAAI,CAACrC,YAAY,EACrB;QACE,IAAI,IAAI,CAACwD,IAAI,EACb;AACE,UAAA,KAAK,IAAIK,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAG,IAAI,CAAC7D,YAAY,CAAC8D,uBAAuB,EAAE,EAAED,MAAM,EAAE,EACnF;AACE,YAAA,IAAI,CAACE,2BAA2B,CAACF,MAAM,EAAE1L,wBAAwB,CAAC;YAClE,IAAI,CAAC6H,YAAY,CAACgE,kBAAkB,CAACH,MAAM,EAAE1L,wBAAwB,CAAC;AACxE,UAAA;AACA,UAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACvC,QAAA;AAEA,QAAA,IAAI,CAAC6H,YAAY,CAACiE,cAAc,CAAC,IAAI,CAAC,OAAO,CAACC,iBAAiB,EAAE,CAAC;QAElE,IAAI,IAAI,CAAClE,YAAY,CAACmE,kBAAkB,CAAC/B,aAAa,CAAC,EACvD;AACE,UAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EACnC;AACE,YAAA,KAAK,IAAIyB,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAG,IAAI,CAAC7D,YAAY,CAAC8D,uBAAuB,EAAE,EAAED,MAAM,EAAE,EACnF;cACE,IAAI,CAAC7D,YAAY,CAACgE,kBAAkB,CAACH,MAAM,EAAE,IAAI,CAACb,cAAc,CAAC;AACnE,YAAA;AACA,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACvC,UAAA;AACA,UAAA,IAAI,CAAChD,YAAY,CAACoE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAACC,cAAc,EAAE,CAAC;AACvE,QAAA;AACF,MAAA;AACA,MAAA,OAAOT,MAAM;AACf,IAAA;;AAEA;AAGAU,IAAAA,gBAAgBA,CAAClC,aAAa,EAAEsB,eAAe,EAAEa,SAAS,EAC1D;MACE,MAAMX,MAAM,GAAG,KAAK,CAACU,gBAAgB,CAAClC,aAAa,EAAEsB,eAAe,EAAEa,SAAS,CAAC;AAChF,MAAA,IAAI,IAAI,CAACtC,OAAO,IAAI,IAAI,CAACjC,YAAY,EACrC;AACE,QAAA,IAAI,CAACA,YAAY,CAACsE,gBAAgB,CAAClC,aAAa,CAAC;AACnD,MAAA;AACA,MAAA,OAAOwB,MAAM;AACf,IAAA;;AAEA;IAGAY,cAAcA,CAACC,WAAW,EAC1B;AACE,MAAA,KAAK,CAACD,cAAc,CAACC,WAAW,CAAC;AACjC,MAAA,IAAI,IAAI,CAACxC,OAAO,IAAI,IAAI,CAACjC,YAAY,EACrC;AACE,QAAA,IAAI,CAACA,YAAY,CAACwE,cAAc,CAACC,WAAW,CAAC;AAC/C,MAAA;AACA,MAAA,OAAOA,WAAW;AACpB,IAAA;;AAEA;AACF;AACA;AACA;AAGE7B,IAAAA,wBAAwBA,GACxB;AACE,MAAA,MAAM8B,WAAW,GAAG,IAAI,CAACC,cAAc,EAAE;AACzC,MAAA,IAAID,WAAW,KAAK,IAAI,CAAC,kBAAkB,EAAE;MAC7C,IAAI,CAACE,yBAAyB,EAAE;AAChC,MAAA,IAAIF,WAAW,IAAIA,WAAW,CAACG,MAAM,EAAE,EACvC;AACE,QAAA,IAAI,CAACC,uBAAuB,CAACJ,WAAW,CAAC;AACzC,QAAA,IAAI,CAAC,kBAAkB,GAAGA,WAAW;AACvC,MAAA;AACF,IAAA;;AAEA;AACF;AACA;AACA;AACA;IAGEI,uBAAuBA,CAACJ,WAAW,EACnC;AACE,MAAA,IAAIA,WAAW,CAACK,gBAAgB,EAAE,EAClC;AACE,QAAA,MAAMnM,YAAY,GAAG8L,WAAW,CAACM,eAAe,CAAC,CAAC,CAAC;AACnD,QAAA,IAAIpM,YAAY,EAChB;AACE,UAAA,KAAK,IAAIK,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAG2H,eAAe,CAACE,WAAW,CAACC,WAAW,EAAE9H,IAAI,EAAE,EACzE;AACE,YAAA,IAAI,CAAC,aAAa,CAACA,IAAI,CAAC,GAAGN,SAAS,CAACC,YAAY,EAAEgI,eAAe,CAACqE,iBAAiB,CAAChM,IAAI,CAAC,CAAC;AAC7F,UAAA;UACA,IAAI,CAACiM,sBAAsB,EAAE;AAC/B,QAAA;AACF,MAAA;MACA,IAAI,CAACC,mBAAmB,EAAE;MAC1B,IAAI,CAACC,kBAAkB,EAAE;AAC3B,IAAA;;AAEA;AAGAR,IAAAA,yBAAyBA,GACzB;AACE,MAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,MAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACxC,IAAA;;AAEA;AACF;AACA;AACA;AACA;AAGES,IAAAA,kBAAkBA,GAClB;AACE,MAAA,MAAMrG,KAAK,GAAGzF,eAAc,CAACyF,KAAK;MAClC,QAAQ,IAAI,CAACF,KAAK;QAEhB,KAAKE,KAAK,CAACsG,cAAc;AACvB,UAAA;QACF,KAAKtG,KAAK,CAACC,UAAU;QACrB,KAAKD,KAAK,CAACuG,eAAe;UACxB,IAAI,CAAC3G,iBAAiB,GAAG,CAAC;AAC1B,UAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC;AACvC,UAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC;AAChC,UAAA;QACF,KAAKI,KAAK,CAAC8D,YAAY;UACrB,IAAI,IAAI,CAAC9C,YAAY,EAAE,IAAI,CAACA,YAAY,CAACwF,UAAU,EAAE;AACrD;AACA;QACF,KAAKxG,KAAK,CAACyG,eAAe;AACxB,UAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM;AACrC,UAAA,IAAI,CAAC,OAAO,CAACC,iBAAiB,EAAE;UAChC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAExN,kBAAkB,CAAC;AAC3D,UAAA;AAGJ;AACA,MAAA,IAAI,CAAC4G,KAAK,GAAGE,KAAK,CAACsG,cAAc;AACnC,IAAA;;AAEA;AAGAK,IAAAA,cAAcA,GACd;AACE,MAAA,IAAI,CAAC,IAAI,CAAChH,QAAQ,EAAE;AACpB,MAAA,MAAMK,KAAK,GAAGzF,eAAc,CAACyF,KAAK;MAClC,QAAQ,IAAI,CAACF,KAAK;QAEhB,KAAKE,KAAK,CAAC4G,aAAa;QACxB,KAAK5G,KAAK,CAACuG,eAAe;AACxB,UAAA,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC;AACjC,UAAA;QACF,KAAKvG,KAAK,CAACsG,cAAc;AACvB,UAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC;UACvC,IAAI,CAAC1G,iBAAiB,GAAG,CAAC;AAC1B,UAAA;QACF,KAAKI,KAAK,CAACC,UAAU;AACnB,UAAA;QACF,KAAKD,KAAK,CAACyG,eAAe;QAC1B,KAAKzG,KAAK,CAAC8D,YAAY;AACrB,UAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM;AACrC,UAAA,IAAI,CAAC,OAAO,CAAC4C,iBAAiB,EAAE;UAChC,IAAI,IAAI,CAAC1F,YAAY,EAAE,IAAI,CAACA,YAAY,CAACwF,UAAU,EAAE;UACrD,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAEtN,kBAAkB,CAAC;AACrD,UAAA,IAAI,IAAI,CAACuI,iBAAiB,IAAI,IAAI,CAACE,iCAAiC,EACpE;AACE,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAACA,iCAAiC,CAAC;AACtE,UAAA;AACA,UAAA;AAGJ;AACA,MAAA,IAAI,CAAC7B,KAAK,GAAGE,KAAK,CAACC,UAAU;AAC/B,IAAA;;AAEA;AAGA4G,IAAAA,mBAAmBA,GACnB;AACE,MAAA,IAAI,CAAC,IAAI,CAAClH,QAAQ,EAAE;AACpB,MAAA,MAAMK,KAAK,GAAGzF,eAAc,CAACyF,KAAK;MAClC,QAAQ,IAAI,CAACF,KAAK;QAEhB,KAAKE,KAAK,CAACsG,cAAc;AACzB,UAAA;AACE,YAAA,MAAMQ,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE5N,kBAAkB,CAAC;AAC9E,YAAA,IAAI,CAAC,sBAAsB,GAAG4N,UAAU,GAAG,MAAM;AACjD,YAAA;AACF,UAAA;QACA,KAAK9G,KAAK,CAACC,UAAU;QACrB,KAAKD,KAAK,CAACuG,eAAe;AACxB,UAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;UACpC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAErN,kBAAkB,CAAC;AACrD,UAAA;QACF,KAAK8G,KAAK,CAACyG,eAAe;AACxB,UAAA;QACF,KAAKzG,KAAK,CAAC8D,YAAY;AACrB,UAAA,IAAI,CAAC,OAAO,CAAC4C,iBAAiB,EAAE;UAChC,IAAI,IAAI,CAAC1F,YAAY,EAAE,IAAI,CAACA,YAAY,CAACwF,UAAU,EAAE;UACrD,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpC,UAAA;AAGJ;AACA,MAAA,IAAI,CAAC1G,KAAK,GAAGE,KAAK,CAACyG,eAAe;AACpC,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AAGEM,IAAAA,gBAAgBA,GAChB;AACE,MAAA,IAAI,CAAC,IAAI,CAAC3C,gBAAgB,EAAE,EAAE;AAC9B,MAAA,MAAMpE,KAAK,GAAGzF,eAAc,CAACyF,KAAK;MAElC,IAAI,IAAI,CAACgB,YAAY,IAAI,IAAI,CAAClB,KAAK,KAAKE,KAAK,CAAC8D,YAAY,EAC1D;AACE,QAAA,IAAI,IAAI,CAAC9C,YAAY,CAAC6C,SAAS,EAAE,EACjC;AACE,UAAA,IAAI,CAAC7C,YAAY,CAACgG,8BAA8B,EAAE;AAClD,UAAA;AACF,QAAA;AACA,QAAA,IAAI,CAAChG,YAAY,CAACwF,UAAU,EAAE;AAChC,MAAA;MAEA,IAAI,IAAI,CAACxF,YAAY,EACrB;AACE,QAAA,IAAI,IAAI,CAACH,iBAAiB,GAAG,CAAC,EAC9B;AACE,UAAA,IAAI,CAACG,YAAY,CAACiG,aAAa,CAAC,CAAC,EAAE,IAAI,CAAClG,sBAAsB,EAAE,IAAI,CAACD,qBAAqB,CAAC;AAC7F,QAAA,CAAC,MAED;AACE,UAAA,IAAI,CAACE,YAAY,CAACiG,aAAa,CAAC,CAAC,CAAC;AACpC,QAAA;AACA,QAAA,IAAI,CAACjG,YAAY,CAACkG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAACC,sBAAsB,EAAE,CAAC;AACjF,MAAA;AAEA,MAAA,IAAI,CAACrH,KAAK,GAAGE,KAAK,CAAC8D,YAAY;AACjC,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AAGEM,IAAAA,gBAAgBA,GAChB;AACE,MAAA,MAAMpE,KAAK,GAAGzF,eAAc,CAACyF,KAAK;AAClC,MAAA,IAAI,IAAI,CAACF,KAAK,KAAKE,KAAK,CAACsG,cAAc,EACvC;AACE,QAAA,OAAO,KAAK;AACd,MAAA;MACA/M,IAAI,CAACwK,GAAG,CAACzK,mBAAmB,EAC1B,IAAI,CAAC0K,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAACA,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAACA,cAAc,CAAC,EAAE,CAAC,CAAC;AAC5E,MAAA,MAAMC,cAAc,GAAG,IAAI,CAAC,OAAO,CAACC,kBAAkB,CAAC5K,mBAAmB,EAAEE,qBAAqB,CAAC;AAElG,MAAA,IAAI,IAAI,CAACqH,iBAAiB,GAAG,CAAC,EAC9B;AACE,QAAA,IAAI,CAACE,sBAAsB,IAAI,IAAI,CAACD,qBAAqB;QACzD,IAAI,IAAI,CAACC,sBAAsB,IAAI,IAAI,CAACF,iBAAiB,GAAG,IAAI,CAACC,qBAAqB,EACtF;UACE,IAAI,CAACC,sBAAsB,GAAG,CAAC;AACjC,QAAA;AACF,MAAA;AAEA,MAAA,MAAMqG,eAAe,GAAG,IAAI,CAACpG,YAAY,GAAG,IAAI,CAACA,YAAY,CAACqG,iBAAiB,EAAE,GAAG,CAAC;AACrF,MAAA,MAAMC,cAAc,GAAG,IAAI,CAACtG,YAAY,GAAG,IAAI,CAACA,YAAY,CAACuG,iBAAiB,EAAE,GAAG,CAAC;MAEpF,QAAQ,IAAI,CAACzH,KAAK;QAEhB,KAAKE,KAAK,CAACC,UAAU;QACrB,KAAKD,KAAK,CAACuG,eAAe;AACxB,UAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;AACpC,UAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC1G,eAAe,CAAC;UACjF,IAAI,CAAC,OAAO,CAAC2H,kBAAkB,CAC7BvD,cAAc,EAAE,IAAI,CAACpE,eAAe,GAAGyH,cAAc,EACrDF,eAAe,GAAGE,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC5D,UAAA;QACF,KAAKtH,KAAK,CAAC8D,YAAY;QACvB,KAAK9D,KAAK,CAACyG,eAAe;AACxB,UAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC5G,eAAe,CAAC;UACjF,IAAI,CAAC,OAAO,CAAC2H,kBAAkB,CAC7BvD,cAAc,EAAE,IAAI,CAACpE,eAAe,GAAGyH,cAAc,EACrDF,eAAe,GAAGE,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC5D,UAAA;AAGJ;AACA,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;AACF;AACA;AACA;AACA;AAGEG,IAAAA,mBAAmBA,GACnB;AACE,MAAA,MAAMzH,KAAK,GAAGzF,eAAc,CAACyF,KAAK;MAClC,QAAQ,IAAI,CAACF,KAAK;QAEhB,KAAKE,KAAK,CAACsG,cAAc;AACvB,UAAA;QACF,KAAKtG,KAAK,CAAC4G,aAAa;QACxB,KAAK5G,KAAK,CAACC,UAAU;QACrB,KAAKD,KAAK,CAACuG,eAAe;UACxB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1C,UAAA;QACF,KAAKvG,KAAK,CAACyG,eAAe;QAC1B,KAAKzG,KAAK,CAAC8D,YAAY;AACrB,UAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM;AACrC,UAAA,IAAI,CAAC,OAAO,CAAC4C,iBAAiB,EAAE;UAChC,IAAI,IAAI,CAAC1F,YAAY,EAAE,IAAI,CAACA,YAAY,CAACwF,UAAU,EAAE;UACrD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAEtN,kBAAkB,CAAC;AAC3D,UAAA;AAGJ;AACA,MAAA,IAAI,CAAC4G,KAAK,GAAGE,KAAK,CAACuG,eAAe;AACpC,IAAA;;AAEA;AAGAmB,IAAAA,kBAAkBA,GAClB;MACE,IAAI,CAAC9H,iBAAiB,GAAG,CAAC;AAC1B,MAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC;AAChC,MAAA,IAAI,CAAC,OAAO,CAAC8G,iBAAiB,EAAE;MAChC,IAAI,IAAI,CAAC1F,YAAY,EAAE,IAAI,CAACA,YAAY,CAACwF,UAAU,EAAE;AACrD,MAAA,IAAI,CAAC1G,KAAK,GAAGvF,eAAc,CAACyF,KAAK,CAACsG,cAAc;MAChD,IAAI,CAACF,kBAAkB,EAAE;AAC3B,IAAA;;AAEA;AAGAA,IAAAA,kBAAkBA,GAClB;AACE,MAAA,MAAMpG,KAAK,GAAGzF,eAAc,CAACyF,KAAK;MAClC,IAAI2H,YAAY,GAAG,EAAE;MACrB,QAAQ,IAAI,CAAC7H,KAAK;QAEhB,KAAKE,KAAK,CAACsG,cAAc;AACvBqB,UAAAA,YAAY,GAAG,UAAU;AACzB,UAAA;QACF,KAAK3H,KAAK,CAACC,UAAU;QACrB,KAAKD,KAAK,CAACuG,eAAe;QAC1B,KAAKvG,KAAK,CAACyG,eAAe;QAC1B,KAAKzG,KAAK,CAAC8D,YAAY;AACrB6D,UAAAA,YAAY,GAAG,QAAQ;AACvB,UAAA;AAGJ;AACA,MAAA,IAAIA,YAAY,CAAC3N,MAAM,GAAG,CAAC,EAC3B;QACE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE2N,YAAY,EAAE,CAAC,CAAC;AAC1C,MAAA;AACF,IAAA;;AAEA;AAGAC,IAAAA,mBAAmBA,GACnB;AACE,MAAA,IAAI,CAAChI,iBAAiB,GAAG,IAAI,CAACC,eAAe;AAC7C,MAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC;AAChC,MAAA,IAAI,CAACC,KAAK,GAAGvF,eAAc,CAACyF,KAAK,CAACyG,eAAe;MACjD,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtC,IAAA;;AAEA;AACF;AACA;AACA;IAGE1B,2BAA2BA,CAACF,MAAM,EAAEgD,GAAG,GAAGzO,IAAI,CAACC,MAAM,EAAE,EACvD;MACE,IAAI,CAAC,IAAI,CAACmL,IAAI,IAAI,CAAC,IAAI,CAACxD,YAAY,EACpC;QACE,OAAO5H,IAAI,CAAC0O,IAAI,CAACD,GAAG,EAAE,IAAI,CAAC7D,cAAc,CAAC;AAC5C,MAAA;MACA,MAAM+D,MAAM,GAAG,IAAI,CAAC/G,YAAY,CAACgH,kBAAkB,CAACnD,MAAM,CAAC;AAC3D,MAAA,OAAO,IAAI,CAACoD,sBAAsB,CAACF,MAAM,EAAEF,GAAG,CAAC;AACjD,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AAIE3B,IAAAA,sBAAsBA,GACtB;AACE,MAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACtC,MAAA,IAAI,CAAC,IAAI,CAAClF,YAAY,EAAE;AAExB,MAAA,MAAM0E,WAAW,GAAG,IAAI,CAACC,cAAc,EAAE;AACzC,MAAA,IAAID,WAAW,IAAIA,WAAW,CAACK,gBAAgB,EAAE,EACjD;AACE,QAAA,MAAMnM,YAAY,GAAG8L,WAAW,CAACM,eAAe,CAAC,CAAC,CAAC;AACnD,QAAA,IAAIpM,YAAY,EAChB;UACE,MAAMsO,WAAW,GAAG,IAAI,CAAClH,YAAY,CAAC8D,uBAAuB,EAAE;UAC/D,MAAMqD,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACH,WAAW,EAAE3N,eAAc,CAAC+N,eAAe,CAAC;UACvE,KAAK,IAAIzD,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAGsD,SAAS,EAAEtD,MAAM,EAAE,EACjD;YACE,MAAM3K,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC8G,YAAY,CAACuH,iBAAiB,EAAE,CAAA,EAAGpO,MAAM,CAAC0K,MAAM,GAAG,CAAC,CAAC,CAAC2D,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;AACjG,YAAA,IAAI,CAACxH,YAAY,CAACyH,eAAe,CAAC5D,MAAM,EAAElL,SAAS,CAACC,YAAY,EAAEM,QAAQ,CAAC,CAAC;AAC9E,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AAGEiM,IAAAA,mBAAmBA,GACnB;AACE,MAAA,IAAI,CAAC,IAAI,CAACuC,gBAAgB,EAC1B;AACE,QAAA,IAAI,CAACA,gBAAgB,GAAG,IAAIC,mBAAkB,EAAE;AAClD,MAAA;MACA,KAAK,CAACxC,mBAAmB,EAAE;MAE3B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAACuC,gBAAgB,EACjD;AACE,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAACE,eAAe,EAAE,KAAK,IAAI,EACzE;AACE,UAAA,IAAI,CAAC,cAAc,CAACC,eAAe,CAAC,IAAI,CAAC;AAC3C,QAAA;AACA,QAAA,IAAI,CAACH,gBAAgB,CAACG,eAAe,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAACH,gBAAgB;AAC7C,MAAA;AACF,IAAA;;AAEA;AACF;AACA;AACA;AACA;IAIEI,OAAOA,CAACC,OAAO,GAAG;AAAEC,MAAAA,WAAW,EAAE,CAAC;AAAEvF,MAAAA,SAAS,EAAE;AAAE,KAAC,EAClD;AACE,MAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAACmF,eAAe,EAAE,KAAK,IAAI,EACzE;AACE,QAAA,IAAI,CAAC,cAAc,CAACC,eAAe,CAAC,IAAI,CAAC;AAC3C,MAAA;AACA,MAAA,IAAI,CAAC,cAAc,GAAG,IAAI;MAC1B,IAAI,IAAI,CAAC7H,YAAY,EAAE,IAAI,CAACA,YAAY,CAAC8H,OAAO,CAACC,OAAO,CAAC;MACzD,IAAI,CAACnD,yBAAyB,EAAE;AAClC,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AAGEqD,IAAAA,UAAUA,CAACC,SAAS,EAAEC,IAAI,EAC1B;AACE,MAAA,IAAI,IAAI,CAACvJ,iBAAiB,KAAK,CAAC,EAAE;MAElC,MAAMwJ,QAAQ,GAAG,IAAI,CAAC,OAAO,CAACC,mBAAmB,EAAE;MACnD,IAAI,CAACjQ,IAAI,CAACkQ,MAAM,CAAC5P,qBAAqB,EAAE,IAAI,CAACsK,cAAc,CAAC,EAC5D;AACE5K,QAAAA,IAAI,CAACmQ,QAAQ,CAAC7P,qBAAqB,CAAC;AACtC,MAAA;MACAH,IAAI,CAACiQ,aAAa,CAAC/P,iBAAiB,EAAE2P,QAAQ,EAAE1P,qBAAqB,CAAC;AAEtE,MAAA,MAAM2I,MAAM,GAAG,IAAI,CAACD,SAAS,EAAE;AAC/B,MAAA,KAAK,IAAInI,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAG2H,eAAe,CAACE,WAAW,CAACC,WAAW,EAAE9H,IAAI,EAAE,EACzE;AACE;AACA,QAAA,IAAI,IAAI,CAAC,aAAa,CAACA,IAAI,CAAC,GAAGkP,IAAI,CAACM,cAAc,CAACzP,MAAM,EACzD;AACE,UAAA,MAAM0P,aAAa,GAAGP,IAAI,CAACM,cAAc,CAAC,IAAI,CAAC,aAAa,CAACxP,IAAI,CAAC,CAAC;UACnEoI,MAAM,CAACsH,yBAAyB,CAC9B1P,IAAI,EAAER,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAACmG,iBAAiB,EACrD8J,aAAa,CAACE,QAAQ,EAAEF,aAAa,CAACG,QAAQ,CAAC;AACnD,QAAA;AACF,MAAA;AACF,IAAA;;AAEA;AACF;AACA;AACA;AACA;IAGE5B,sBAAsBA,CAACF,MAAM,EAAEF,GAAG,GAAGzO,IAAI,CAACC,MAAM,EAAE,EAClD;MACED,IAAI,CAAC0O,IAAI,CAACD,GAAG,EAAE,IAAI,CAAC7D,cAAc,CAAC;MACnC,IAAI,IAAI,CAAC0E,gBAAgB,EACzB;QACE,MAAMoB,SAAS,GAAG,IAAI,CAACpB,gBAAgB,CAACqB,gBAAgB,CAAChC,MAAM,CAAC;AAChE,QAAA,IAAI+B,SAAS,EACb;UACE1Q,IAAI,CAAC4Q,QAAQ,CAACnC,GAAG,EAAE,IAAI,CAAC7D,cAAc,EAAE8F,SAAS,CAAC;AACpD,QAAA;AACF,MAAA;AACA,MAAA,OAAOjC,GAAG;AACZ,IAAA;;AAEA;AAGAlC,IAAAA,cAAcA,GACd;AACE,MAAA,OAAO,IAAI,CAACnB,IAAI,GAAG,IAAI,CAACA,IAAI,CAACyF,mBAAmB,EAAE,GAAG,IAAI;AAC3D,IAAA;;AAEA;AACF;AACA;AACA;AACA;IACE,cAAcC,CAACC,QAAQ,EAAEC,YAAY,EAAEC,KAAK,GAAG,CAAC,EAChD;AACE,MAAA,MAAMC,OAAO,GAAG,IAAI,CAAC5B,gBAAgB;AACrC,MAAA,IAAI,CAAC4B,OAAO,EAAE,OAAO,CAAC;AAEtBA,MAAAA,OAAO,CAACC,cAAc,CAACF,KAAK,CAAC;MAE7B,IAAIvD,UAAU,GAAG,CAAC;AAClB,MAAA,IAAIqD,QAAQ,EACZ;AACE,QAAA,IAAIG,OAAO,CAACE,aAAa,CAACL,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAC1D;AACErD,UAAAA,UAAU,GAAGwD,OAAO,CAACG,2BAA2B,CAACN,QAAQ,CAAC;AAC5D,QAAA;AACF,MAAA;AACA,MAAA,IAAIC,YAAY,EAChB;AACEE,QAAAA,OAAO,CAACE,aAAa,CAACJ,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC5D,MAAA;AACA,MAAA,OAAOtD,UAAU;AACnB,IAAA;;AAEA;IACA,qBAAqB4D,GACrB;MACE,IAAI7Q,IAAI,GAAG,MAAM;AACjB,MAAA,IAAI,IAAI,CAACkH,sBAAsB,GAAG,CAAC,EACnC;AACElH,QAAAA,IAAI,IAAI,GAAG;AACXA,QAAAA,IAAI,IAAIM,MAAM,CAACiO,IAAI,CAACuC,KAAK,CAAC,IAAI,CAAC5J,sBAAsB,GAAG,IAAI,CAACD,qBAAqB,CAAC,CAAC;AACtF,MAAA;AACA,MAAA,OAAOjH,IAAI;AACb,IAAA;;AAEA;AAGA+Q,IAAAA,eAAeA,GACf;MACE,OAAO,IAAI,CAAC5J,YAAY;AAC1B,IAAA;;AAEA;AACF;AACA;AACA;IAGE6B,eAAeA,CAAC7B,YAAY,EAC5B;MACE,IAAI,IAAI,CAACA,YAAY,EAAE,IAAI,CAACA,YAAY,CAACkC,oBAAoB,EAAE;AAC/D,MAAA,IAAI,CAAClC,YAAY,GAAGA,YAAY,IAAI,IAAI;MACxC,IAAI,IAAI,CAACA,YAAY,EAAE,IAAI,CAACA,YAAY,CAAC8B,kBAAkB,EAAE;MAC7D,IAAI,CAACoD,sBAAsB,EAAE;AAC/B,IAAA;;AAEA;AACF;AACA;AACA;AACA;IAGE2E,eAAeA,CAACC,MAAM,EACtB;MACE,IAAI,CAACA,MAAM,EAAE;MACb,MAAMC,SAAS,GAAG,IAAI,CAAC,OAAO,CAACC,aAAa,EAAE;AAC9C,MAAA,IAAI,CAAC,OAAO,CAACC,aAAa,CAACH,MAAM,CAAC;AAElC,MAAA,IAAI,IAAI,CAACrJ,iBAAiB,IAAI,IAAI,CAACC,iCAAiC,EACpE;QACE,IAAI,IAAI,CAAC5B,KAAK,KAAKvF,eAAc,CAACyF,KAAK,CAACC,UAAU,IAAI8K,SAAS,KAAK,IAAI,CAAC,OAAO,CAACC,aAAa,EAAE,EAChG;AACE,UAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAACtJ,iCAAiC,CAAC;AACtE,QAAA;AACF,MAAA;MACA,IAAI,CAACwJ,cAAc,EAAE;AACvB,IAAA;;AAEA;AAGAC,IAAAA,eAAeA,GACf;AACE,MAAA,OAAO,IAAI,CAAC,OAAO,CAACH,aAAa,EAAE;AACrC,IAAA;;AAEA;AAGAE,IAAAA,cAAcA,GACd;MACE,IAAI,IAAI,CAAClK,YAAY,EACrB;AACE,QAAA,IAAI,CAACA,YAAY,CAACoK,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAACC,SAAS,EAAE,CAAC;AAC9D,MAAA;AACF,IAAA;;AAEA;IACA,uBAAuBC,CAACC,SAAS,EACjC;AACEC,MAAAA,qBAAqB,CAAC,IAAI,CAAChK,sBAAsB,EAAE+J,SAAS,CAAC;AAC/D,IAAA;;AAEA;AACA;GASD;EARQvL,KAAK,GAAGD,aAAY,CAACC,KAAK;EAE1BsB,eAAe,GAAGD,gBAAe,CAACC,eAAe;AAEjDrI,EAAAA,kBAAkB,GAAGA,kBAAkB;EAEvCqP,eAAe,GAAGmD,kBAAiB,CAACC,gBAAgB;EAACzJ,WAAAA,GAAA;IAAA,KAAA,CAAA5H,eAAA,GAAA6D,UAAA,EAAA;AAAA,EAAA;AAAA,CAAA,EAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"EveChildTurret.js","sources":["../../../../../src/trinity/eve/child/EveChildTurret.js"],"sourcesContent":["// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildTurret.h\n// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildTurret.cpp\n// Source: trinity/trinity/Eve/SpaceObject/Children/EveChildTurret_Blue.cpp\nimport { mat4 } from \"#math/mat4\";\nimport { vec3 } from \"#math/vec3\";\nimport { carbon, impl, edit, type } from \"#schema\";\nimport { TriBatchType } from \"#consts/graphics\";\nimport { EveChildMesh } from \"./EveChildMesh.js\";\nimport { Tr2GrannyAnimation } from \"../../core/animation/Tr2GrannyAnimation.js\";\nimport { SendEventToAudEmitter } from \"../../core/variable/TriObserverLocal.js\";\nimport { EveTurretAiming } from \"../attachment/turrets/EveTurretAiming.js\";\nimport { EveTurretFiringFX } from \"../attachment/turrets/EveTurretFiringFX.js\";\nimport { EveTurretSet } from \"../attachment/turrets/EveTurretSet.js\";\nimport { EveTurretTarget } from \"../attachment/turrets/EveTurretTarget.js\";\n\n// Carbon file-scope constants (EveChildTurret.cpp:12-16).\nconst INVALID_BONE_INDEX = 0xffffffff;\nconst TRACKING_FADE_TIME = 1;\n\nconst MUZZLE_TRANSFORM_SCRATCH = mat4.create();\nconst FIRE_SOURCE_SCRATCH = vec3.create();\nconst FIRE_POSITION_SCRATCH = vec3.create();\nconst TARGET_OS_SCRATCH = vec3.create();\nconst INVERSE_WORLD_SCRATCH = mat4.create();\n\n/** Carbon TriGeometryResSkeletonData::FindJoint (TriGeometryRes.cpp:1841-1853): exact name match, 0xffffffff on miss. */\nfunction FindJoint(skeletonData, name)\n{\n const bones = skeletonData?.bones ?? [];\n for (let index = 0; index < bones.length; index++)\n {\n const bone = bones[index];\n const boneName = typeof bone === \"string\" ? bone : String(bone?.name ?? bone?.Name ?? \"\");\n if (boneName === name) return index;\n }\n return INVALID_BONE_INDEX;\n}\n\n\n/**\n * A single animated turret living as a space-object child: it owns its\n * target tracker, sysbone aiming, deploy/pack/fire animation state machine,\n * firing effect and movement audio. Implements the ITr2PoseModifier contract\n * (ModifyPose) and registers itself on its own animation updater, so the\n * barrels aim inside the sampled pose. Carbon instantiates it only from\n * serialized scene data - SOF never constructs one.\n */\n@type.define({ className: \"EveChildTurret\", family: \"eve/child\" })\nexport class EveChildTurret extends EveChildMesh\n{\n\n /** Indicates if the turret is active; runtime toggle, not persisted. */\n @edit.readwrite\n @type.boolean\n isOnline = true;\n\n /** How much tracking is currently applied; runtime-derived. */\n @edit.read\n @type.float32\n trackingInfluence = 0;\n\n /** How long tracking takes to fade in - and its influence ceiling. */\n @edit.persist\n @type.float32\n maxTrackingTime = 1;\n\n /** State of the turret (persisted but not editable). */\n @edit.read\n @edit.persist\n @type.int32\n state = EveTurretSet.State.STATE_IDLE;\n\n // The eleven flat sysbone tunables Carbon re-exposes from the embedded\n // EveTurretAiming (EveChildTurret_Blue.cpp:25-35); same names and defaults\n // as EveTurretSet. Offsets are authored in degrees.\n @edit.persist\n @type.float32\n sysBoneHeight = 1;\n\n @edit.persist\n @type.float32\n sysBonePitchFactor = 1;\n\n @edit.persist\n @type.float32\n sysBonePitchOffset = 0;\n\n @edit.persist\n @type.float32\n sysBonePitchMin = 0;\n\n @edit.persist\n @type.float32\n sysBonePitchMax = 90;\n\n @edit.persist\n @type.float32\n sysBonePitch01Factor = 1;\n\n @edit.persist\n @type.float32\n sysBonePitch01Offset = 0;\n\n @edit.persist\n @type.float32\n sysBonePitch02Factor = 1;\n\n @edit.persist\n @type.float32\n sysBonePitch02Offset = 0;\n\n @edit.persist\n @type.float32\n sysBonePitch03Factor = 1;\n\n @edit.persist\n @type.float32\n sysBonePitch03Offset = 0;\n\n /** If greater than one, firing cycles through this many muzzle groups. */\n @edit.persist\n @type.uint32\n maxCyclingFirePos = 1;\n\n /** The number of muzzles in one cycle group, usually one. */\n @edit.persist\n @type.uint32\n cyclingFireGroupCount = 1;\n\n /** Current muzzle id due to cycling; runtime-derived. */\n @edit.read\n @type.uint32\n currentCyclingFiresPos = 0;\n\n /** The module for the firing effect of this turret. */\n @edit.persist\n @type.objectRef(\"EveTurretFiringFX\")\n firingEffect = null;\n\n /** A res path to the redfile containing the primary firing effect. */\n @edit.notify\n @edit.persist\n @type.string\n firingEffectResPath = \"\";\n\n /**\n * Resolves firingEffectResPath into a live EveTurretFiringFX. Carbon uses\n * BeResMan.LoadObject; CarbonEngineJS threads the established\n * CjsEveChildResourceLoader seam (the EveChildRef/EveChildSocket pattern) -\n * without a loader an authored path stays unresolved.\n */\n @type.objectRef(\"CjsEveChildResourceLoader\")\n resourceLoader = null;\n\n /** Size of impacts; no impact when 0 or less. */\n @edit.notify\n @edit.persist\n @type.float32\n impactSize = 0;\n\n /** What the impacts should hit (an ImpactBehaviour value). */\n @edit.notify\n @edit.persist\n @type.int32\n @type.enum(\"ImpactBehaviour\")\n impactBehaviour = EveTurretTarget.ImpactBehaviour.DAMAGE_LOCATOR;\n\n /** The observer for turret movement sounds; positioned automatically. */\n @edit.persist\n @type.objectRef(\"TriObserverLocal\")\n turretMovementObserver = null;\n\n /** Whether mechanical movement sounds play when events are authored. */\n @edit.persist\n @type.boolean\n playMovementSound = true;\n\n /** Audio event for mechanical noise when moving from idle to targeting. */\n @edit.persist\n @type.string\n idleToTargetingMovementAudioEvent = \"\";\n\n /** Audio event for mechanical noise when moving from targeting to idle. */\n @edit.persist\n @type.string\n targetingToIdleMovementAudioEvent = \"\";\n\n // Carbon m_target: created in the constructor with fade-on-locator-change\n // enabled (EveChildTurret.cpp:26-27); Blue exposes it READ-only.\n #target = new EveTurretTarget();\n\n #aiming = new EveTurretAiming();\n\n // Carbon m_systemBoneID[SYSBONE_MAX], all INVALID until geometry arrives.\n #systemBoneID = new Array(EveTurretAiming.SystemBones.SYSBONE_MAX).fill(INVALID_BONE_INDEX);\n\n #trackingInfluenceDelta = 0;\n\n #delayToFadeOutTracking = 0;\n\n #delayToFadeInTracking = 0;\n\n // Carbon m_hookedUpdater: the updater our pose modifier is registered on,\n // so a swap unhooks the old one (EveChildTurret.h:115, cpp:722-730).\n #hookedUpdater = null;\n\n #recheckTimeLeft = -1;\n\n #firingEffectMuzzlePosSet = false;\n\n #cachedGeometryRes = null;\n\n // Carbon reads m_parentData.transform in SetupFiringState (cpp:533) - the\n // PARENT transform, deliberately not this child's world transform; captured\n // from the update params each async pass.\n #parentTranslation = vec3.create();\n\n /** Enables target fading when the turret's locator changes. */\n constructor()\n {\n super();\n this.#target.SetFadeOnLocatorChange(true);\n // Carbon's ctor also calls PrepareResources(); the browser runtime's\n // resource lifecycle is not ported yet and has no per-child prepare hook.\n }\n\n /** The turret's target tracker (Carbon exposes it as the READ attribute \"target\"). */\n @carbon.method\n @impl.implemented\n GetTarget()\n {\n return this.#target;\n }\n\n /**\n * The shared sysbone aiming math, synced from this turret's flat tuning\n * fields - the same object shape EveTurretSet.GetAiming returns.\n */\n @impl.adapted\n @impl.reason(\"Carbon's by-value embed becomes an accessor; the flat Blue schema is preserved on this class.\")\n GetAiming()\n {\n const aiming = this.#aiming;\n aiming.sysBoneHeight = this.sysBoneHeight;\n aiming.sysBonePitchOffset = this.sysBonePitchOffset;\n aiming.sysBonePitchFactor = this.sysBonePitchFactor;\n aiming.sysBonePitchMin = this.sysBonePitchMin;\n aiming.sysBonePitchMax = this.sysBonePitchMax;\n aiming.sysBonePitch01Offset = this.sysBonePitch01Offset;\n aiming.sysBonePitch01Factor = this.sysBonePitch01Factor;\n aiming.sysBonePitch02Offset = this.sysBonePitch02Offset;\n aiming.sysBonePitch02Factor = this.sysBonePitch02Factor;\n aiming.sysBonePitch03Offset = this.sysBonePitch03Offset;\n aiming.sysBonePitch03Factor = this.sysBonePitch03Factor;\n return aiming;\n }\n\n /**\n * Passes authored impact data into the target tracker and resolves an\n * authored firing-effect path when no inline effect won at load time\n * (Carbon EveChildTurret.cpp:48-60).\n */\n @carbon.method\n @impl.implemented\n Initialize()\n {\n this.#target.SetImpactBehaviour(this.impactSize, this.impactBehaviour);\n if (!this.firingEffect && this.firingEffectResPath)\n {\n this.#LoadFiringEffectFromPath();\n }\n return super.Initialize();\n }\n\n /**\n * Re-syncs the tracker's impact data and reloads the firing effect when\n * the notifying fields change (Carbon cpp:61-72; the path reload has no\n * inline-effect guard, unlike Initialize).\n */\n @carbon.method\n @impl.implemented\n OnModified(value = null)\n {\n if (value === \"impactSize\" || value === \"impactBehaviour\")\n {\n this.#target.SetImpactBehaviour(this.impactSize, this.impactBehaviour);\n }\n if (value === \"firingEffectResPath\" && this.firingEffectResPath)\n {\n this.#LoadFiringEffectFromPath();\n }\n return super.OnModified(value);\n }\n\n /**\n * Loads the configured firing-effect child and installs it when loading\n * returns an object.\n */\n #LoadFiringEffectFromPath()\n {\n if (!this.resourceLoader) return;\n const loaded = this.resourceLoader.LoadChild(this.firingEffectResPath, this);\n if (loaded) this.SetFiringEffect(loaded);\n }\n\n /** Registers the firing effect's entity half when displayed (Carbon cpp:73-84). */\n @carbon.method\n @impl.implemented\n RegisterComponents()\n {\n super.RegisterComponents();\n const registry = this.GetComponentRegistry();\n if (registry && this.display)\n {\n if (this.firingEffect) this.firingEffect.RegisterComponents();\n }\n }\n\n /** Unregisters the firing effect's entity half; not display-gated (Carbon cpp:85-96). */\n @carbon.method\n @impl.implemented\n UnRegisterComponents()\n {\n super.UnRegisterComponents();\n const registry = this.GetComponentRegistry();\n if (registry)\n {\n if (this.firingEffect) this.firingEffect.UnRegisterComponents();\n }\n }\n\n /**\n * Sync-side frame update (Carbon cpp:126-179): looping-effect retarget\n * recheck every two seconds while firing, firing-effect sync update, the\n * target tracker fed from the effect's start position (or this world\n * translation), and the movement observer following the world transform.\n */\n @carbon.method\n @impl.implemented\n UpdateSyncronous(updateContext, params)\n {\n const deltaT = Number(updateContext?.GetDeltaT?.() ?? updateContext?.deltaTime ?? 0) || 0;\n\n if (this.firingEffect)\n {\n this.firingEffect.SetDisplaySourceObject(this.IsVisible(updateContext));\n }\n\n this.UpdateCachedGeometryData();\n\n if (this.firingEffect)\n {\n if (this.firingEffect.IsLooping() && this.state === EveChildTurret.State.STATE_FIRING)\n {\n this.#recheckTimeLeft -= deltaT;\n if (this.#recheckTimeLeft < 0)\n {\n vec3.set(FIRE_SOURCE_SCRATCH,\n this.worldTransform[12], this.worldTransform[13], this.worldTransform[14]);\n const closestLocator = this.#target.FindClosestLocator(FIRE_SOURCE_SCRATCH, FIRE_POSITION_SCRATCH);\n if (closestLocator >= 0 && closestLocator !== this.#target.GetLocator())\n {\n this.SetupFiringState();\n }\n this.#recheckTimeLeft = 2;\n }\n }\n this.firingEffect.UpdateSynchronous(updateContext);\n }\n\n vec3.set(FIRE_POSITION_SCRATCH,\n this.worldTransform[12], this.worldTransform[13], this.worldTransform[14]);\n if (this.firingEffect)\n {\n this.firingEffect.GetStartPosition(FIRE_POSITION_SCRATCH);\n }\n this.#target.Update(deltaT, FIRE_POSITION_SCRATCH);\n\n if (this.mesh && this.turretMovementObserver)\n {\n this.turretMovementObserver.Update(this.worldTransform);\n }\n return super.UpdateSyncronous(updateContext, params);\n }\n\n /**\n * Async-side frame update (Carbon cpp:181-260): tracking-influence fades\n * (clamped to [0, maxTrackingTime]), the base mesh update, then muzzle\n * transforms and target end position onto the firing effect - with the\n * late muzzle fallback to the turret root until geometry loads.\n */\n @carbon.method\n @carbon.contextual([\"camera\"])\n @impl.implemented\n UpdateAsyncronous(updateContext, params)\n {\n const deltaT = Number(updateContext?.GetDeltaT?.() ?? updateContext?.deltaTime ?? 0) || 0;\n\n if (this.#trackingInfluenceDelta !== 0)\n {\n this.trackingInfluence += this.#trackingInfluenceDelta * deltaT;\n if (this.trackingInfluence > this.maxTrackingTime)\n {\n this.trackingInfluence = this.maxTrackingTime;\n this.#trackingInfluenceDelta = 0;\n }\n else if (this.trackingInfluence < 0)\n {\n this.trackingInfluence = 0;\n this.#trackingInfluenceDelta = 0;\n }\n }\n\n if (this.#delayToFadeOutTracking > 0)\n {\n this.#delayToFadeOutTracking -= deltaT;\n if (this.#delayToFadeOutTracking <= 0)\n {\n this.#delayToFadeOutTracking = 0;\n this.#trackingInfluenceDelta = -1 / TRACKING_FADE_TIME;\n }\n }\n\n if (this.#delayToFadeInTracking > 0)\n {\n this.#delayToFadeInTracking -= deltaT;\n if (this.#delayToFadeInTracking <= 0)\n {\n this.#delayToFadeInTracking = 0;\n this.#trackingInfluenceDelta = 1 / TRACKING_FADE_TIME;\n }\n }\n\n const parentTransform = params?.localToWorldTransform;\n if (parentTransform && parentTransform.length === 16)\n {\n vec3.set(this.#parentTranslation,\n parentTransform[12], parentTransform[13], parentTransform[14]);\n }\n\n const result = super.UpdateAsyncronous(updateContext, params);\n\n if (this.firingEffect)\n {\n if (this.mesh)\n {\n for (let muzzle = 0; muzzle < this.firingEffect.GetPerMuzzleEffectCount(); muzzle++)\n {\n this.GetFiringBoneWorldTransform(muzzle, MUZZLE_TRANSFORM_SCRATCH);\n this.firingEffect.SetMuzzleTransform(muzzle, MUZZLE_TRANSFORM_SCRATCH);\n }\n this.#firingEffectMuzzlePosSet = true;\n }\n\n this.firingEffect.SetEndPosition(this.#target.GetTargetPosition());\n\n if (this.firingEffect.UpdateAsynchronous(updateContext))\n {\n if (!this.#firingEffectMuzzlePosSet)\n {\n for (let muzzle = 0; muzzle < this.firingEffect.GetPerMuzzleEffectCount(); muzzle++)\n {\n this.firingEffect.SetMuzzleTransform(muzzle, this.worldTransform);\n }\n this.#firingEffectMuzzlePosSet = true;\n }\n this.firingEffect.SetDisplayDestObject(this.#target.ShowDestObject());\n }\n }\n return result;\n }\n\n /** Forwards visibility to the firing effect when displayed (Carbon cpp:262-270). */\n @carbon.method\n @impl.implemented\n UpdateVisibility(updateContext, parentTransform, parentLod)\n {\n const result = super.UpdateVisibility(updateContext, parentTransform, parentLod);\n if (this.display && this.firingEffect)\n {\n this.firingEffect.UpdateVisibility(updateContext);\n }\n return result;\n }\n\n /** Appends the firing effect's renderables when displayed (Carbon cpp:272-280). */\n @carbon.method\n @impl.implemented\n GetRenderables(renderables)\n {\n super.GetRenderables(renderables);\n if (this.display && this.firingEffect)\n {\n this.firingEffect.GetRenderables(renderables);\n }\n return renderables;\n }\n\n /**\n * Rebuilds the cached sysbone/muzzle lookups when the geometry resource\n * changes (Carbon cpp:302-315).\n */\n @carbon.method\n @impl.implemented\n UpdateCachedGeometryData()\n {\n const geometryRes = this.GetGeometryRes();\n if (geometryRes === this.#cachedGeometryRes) return;\n this.ReleaseCachedGeometryData();\n if (geometryRes && geometryRes.IsGood())\n {\n this.BuildCachedGeometryData(geometryRes);\n this.#cachedGeometryRes = geometryRes;\n }\n }\n\n /**\n * Finds the system bones in the model skeleton, wires the firing effect's\n * muzzle bones, hooks the animation and forces the idle animation for the\n * current state (Carbon cpp:316-336; the sequencing is behavior).\n */\n @carbon.method\n @impl.implemented\n BuildCachedGeometryData(geometryRes)\n {\n if (geometryRes.GetSkeletonCount())\n {\n const skeletonData = geometryRes.GetSkeletonData(0);\n if (skeletonData)\n {\n for (let bone = 0; bone < EveTurretAiming.SystemBones.SYSBONE_MAX; bone++)\n {\n this.#systemBoneID[bone] = FindJoint(skeletonData, EveTurretAiming.getSystemBoneName(bone));\n }\n this.InitializeFiringEffect();\n }\n }\n this.InitializeAnimation();\n this.ForceIdleAnimation();\n }\n\n /** Drops the cached geometry link and the muzzle stamp (Carbon cpp:337-341). */\n @carbon.method\n @impl.implemented\n ReleaseCachedGeometryData()\n {\n this.#cachedGeometryRes = null;\n this.#firingEffectMuzzlePosSet = false;\n }\n\n /**\n * Go into state deactive: play the pack animation and stay inside the\n * ship (Carbon cpp:343-376; the STATE_FIRING case deliberately falls\n * through to STATE_TARGETING).\n */\n @carbon.method\n @impl.implemented\n EnterStateDeactive()\n {\n const State = EveChildTurret.State;\n switch (this.state)\n {\n case State.STATE_DEACTIVE:\n break;\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n this.trackingInfluence = 0;\n this.#PlayAnimation(\"Pack\", \"Inactive\");\n this.#delayToFadeOutTracking = 0;\n break;\n case State.STATE_FIRING:\n if (this.firingEffect) this.firingEffect.StopFiring();\n // DON'T break, just continue with stopping things:\n // eslint-disable-next-line no-fallthrough\n case State.STATE_TARGETING:\n this.#delayToFadeOutTracking = 0.0001;\n this.#target.StopFireAtLocator();\n this.#PlayAnimation(\"Pack\", \"Inactive\", TRACKING_FADE_TIME);\n break;\n default:\n break;\n }\n this.state = State.STATE_DEACTIVE;\n }\n\n /** Go into state idle: face the cannons forward (Carbon cpp:378-418). */\n @carbon.method\n @impl.implemented\n EnterStateIdle()\n {\n if (!this.isOnline) return;\n const State = EveChildTurret.State;\n switch (this.state)\n {\n case State.STATE_INVALID:\n case State.STATE_RELOADING:\n this.#PlayAnimation(\"\", \"Active\");\n break;\n case State.STATE_DEACTIVE:\n this.#PlayAnimation(\"Deploy\", \"Active\");\n this.trackingInfluence = 0;\n break;\n case State.STATE_IDLE:\n break;\n case State.STATE_TARGETING:\n case State.STATE_FIRING:\n this.#delayToFadeOutTracking = 0.0001;\n this.#target.StopFireAtLocator();\n if (this.firingEffect) this.firingEffect.StopFiring();\n this.#PlayAnimation(\"\", \"Active\", TRACKING_FADE_TIME);\n if (this.playMovementSound && this.targetingToIdleMovementAudioEvent)\n {\n this.#SendMovementAudioEvent(this.targetingToIdleMovementAudioEvent);\n }\n break;\n default:\n break;\n }\n this.state = State.STATE_IDLE;\n }\n\n /** Go into state targeting: face the cannons toward the enemy (Carbon cpp:420-459). */\n @carbon.method\n @impl.implemented\n EnterStateTargeting()\n {\n if (!this.isOnline) return;\n const State = EveChildTurret.State;\n switch (this.state)\n {\n case State.STATE_DEACTIVE:\n {\n const animLength = this.#PlayAnimation(\"Deploy\", \"Active\", TRACKING_FADE_TIME);\n this.#delayToFadeInTracking = animLength + 0.0001;\n break;\n }\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n this.#delayToFadeInTracking = 0.0001;\n this.#PlayAnimation(\"\", \"Active\", TRACKING_FADE_TIME);\n break;\n case State.STATE_TARGETING:\n break;\n case State.STATE_FIRING:\n this.#target.StopFireAtLocator();\n if (this.firingEffect) this.firingEffect.StopFiring();\n this.#PlayAnimation(\"\", \"Active\", 0);\n break;\n default:\n break;\n }\n this.state = State.STATE_TARGETING;\n }\n\n /**\n * Go into state firing (Carbon cpp:461-500): a looping effect already\n * firing only refreshes its move objects; otherwise the effect is stopped,\n * prepared (with muzzle cycling when configured) and pointed at the\n * target's impact surface.\n */\n @carbon.method\n @impl.implemented\n EnterStateFiring()\n {\n if (!this.SetupFiringState()) return;\n const State = EveChildTurret.State;\n\n if (this.firingEffect && this.state === State.STATE_FIRING)\n {\n if (this.firingEffect.IsLooping())\n {\n this.firingEffect.PrepareFiringEffectMoveObjects();\n return;\n }\n this.firingEffect.StopFiring();\n }\n\n if (this.firingEffect)\n {\n if (this.maxCyclingFirePos > 1)\n {\n this.firingEffect.PrepareFiring(0, this.currentCyclingFiresPos, this.cyclingFireGroupCount);\n }\n else\n {\n this.firingEffect.PrepareFiring(0);\n }\n this.firingEffect.SetImpactConfiguration(this.#target.GetImpactConfiguration());\n }\n\n this.state = State.STATE_FIRING;\n }\n\n /**\n * Aims at the closest facing damage locator, advances muzzle cycling, and\n * starts the fire animation + tracker timing (Carbon cpp:502-556). The\n * locator search uses THIS turret's world translation; the tracker's fire\n * source deliberately uses the PARENT transform's translation.\n */\n @carbon.method\n @impl.implemented\n SetupFiringState()\n {\n const State = EveChildTurret.State;\n if (this.state === State.STATE_DEACTIVE)\n {\n return false;\n }\n vec3.set(FIRE_SOURCE_SCRATCH,\n this.worldTransform[12], this.worldTransform[13], this.worldTransform[14]);\n const closestLocator = this.#target.FindClosestLocator(FIRE_SOURCE_SCRATCH, FIRE_POSITION_SCRATCH);\n\n if (this.maxCyclingFirePos > 1)\n {\n this.currentCyclingFiresPos += this.cyclingFireGroupCount;\n if (this.currentCyclingFiresPos >= this.maxCyclingFirePos * this.cyclingFireGroupCount)\n {\n this.currentCyclingFiresPos = 0;\n }\n }\n\n const effectTotalTime = this.firingEffect ? this.firingEffect.GetFiringDuration() : 0;\n const effectPeakTime = this.firingEffect ? this.firingEffect.GetFiringPeakTime() : 0;\n\n switch (this.state)\n {\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n this.#delayToFadeInTracking = 0.0001;\n this.#PlayAnimation(this.#GetFireAnimationName(), \"Active\", this.maxTrackingTime);\n this.#target.StartFireAtLocator(\n closestLocator, this.maxTrackingTime + effectPeakTime,\n effectTotalTime - effectPeakTime, this.#parentTranslation);\n break;\n case State.STATE_FIRING:\n case State.STATE_TARGETING:\n this.#PlayAnimation(this.#GetFireAnimationName(), \"Active\", this.maxTrackingTime);\n this.#target.StartFireAtLocator(\n closestLocator, this.maxTrackingTime + effectPeakTime,\n effectTotalTime - effectPeakTime, this.#parentTranslation);\n break;\n default:\n break;\n }\n return true;\n }\n\n /**\n * Go into state reloading (Carbon cpp:558-589). Carbon's DEACTIVE case\n * comments \"ignore\" yet still stamps STATE_RELOADING at the end - that\n * quirk is preserved verbatim.\n */\n @carbon.method\n @impl.implemented\n EnterStateReloading()\n {\n const State = EveChildTurret.State;\n switch (this.state)\n {\n case State.STATE_DEACTIVE:\n break;\n case State.STATE_INVALID:\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n this.#PlayAnimation(\"Reload\", \"Active\", 0);\n break;\n case State.STATE_TARGETING:\n case State.STATE_FIRING:\n this.#delayToFadeOutTracking = 0.0001;\n this.#target.StopFireAtLocator();\n if (this.firingEffect) this.firingEffect.StopFiring();\n this.#PlayAnimation(\"Reload\", \"Active\", TRACKING_FADE_TIME);\n break;\n default:\n break;\n }\n this.state = State.STATE_RELOADING;\n }\n\n /** Force into state deactive: no animation transition, just flip (Carbon cpp:591-606). */\n @carbon.method\n @impl.implemented\n ForceStateDeactive()\n {\n this.trackingInfluence = 0;\n this.#delayToFadeOutTracking = 0;\n this.#target.StopFireAtLocator();\n if (this.firingEffect) this.firingEffect.StopFiring();\n this.state = EveChildTurret.State.STATE_DEACTIVE;\n this.ForceIdleAnimation();\n }\n\n /** Force-plays the idle loop matching the current state (Carbon cpp:608-631). */\n @carbon.method\n @impl.implemented\n ForceIdleAnimation()\n {\n const State = EveChildTurret.State;\n let idleAnimName = \"\";\n switch (this.state)\n {\n case State.STATE_DEACTIVE:\n idleAnimName = \"Inactive\";\n break;\n case State.STATE_IDLE:\n case State.STATE_RELOADING:\n case State.STATE_TARGETING:\n case State.STATE_FIRING:\n idleAnimName = \"Active\";\n break;\n default:\n break;\n }\n if (idleAnimName.length > 0)\n {\n this.#PlayAnimation(\"\", idleAnimName, 0);\n }\n }\n\n /** Force into state targeting: tracking pinned to its ceiling, no transition (Carbon cpp:633-643). */\n @carbon.method\n @impl.implemented\n ForceStateTargeting()\n {\n this.trackingInfluence = this.maxTrackingTime;\n this.#trackingInfluenceDelta = 0;\n this.state = EveChildTurret.State.STATE_TARGETING;\n this.#PlayAnimation(\"\", \"Active\", 0);\n }\n\n /**\n * The world transform of a muzzle's firing bone, falling back to this\n * turret's world transform without a mesh or effect (Carbon cpp:645-661).\n */\n @carbon.method\n @impl.implemented\n GetFiringBoneWorldTransform(muzzle, out = mat4.create())\n {\n if (!this.mesh || !this.firingEffect)\n {\n return mat4.copy(out, this.worldTransform);\n }\n const boneID = this.firingEffect.GetPerMuzzleBoneID(muzzle);\n return this.GetTurretBoneTransform(boneID, out);\n }\n\n /**\n * Wires the firing effect's muzzle bones from the skeleton: bones named\n * GetFiringBoneName() + a two-digit 1-based index, e.g. Pos_Fire01\n * (Carbon cpp:679-712). Carbon also registers the effect with the quad\n * renderer singleton here; quad registration is not ported yet in the\n * browser runtime and happens through the engine's own registration pass.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"Tr2QuadRenderer is an engine singleton in Carbon; the browser engine owns quad registration.\")\n InitializeFiringEffect()\n {\n this.#firingEffectMuzzlePosSet = false;\n if (!this.firingEffect) return;\n\n const geometryRes = this.GetGeometryRes();\n if (geometryRes && geometryRes.GetSkeletonCount())\n {\n const skeletonData = geometryRes.GetSkeletonData(0);\n if (skeletonData)\n {\n const muzzleCount = this.firingEffect.GetPerMuzzleEffectCount();\n const boneCount = Math.min(muzzleCount, EveChildTurret.MUZZLECOUNT_MAX);\n for (let muzzle = 0; muzzle < boneCount; muzzle++)\n {\n const boneName = `${this.firingEffect.GetFiringBoneName()}${String(muzzle + 1).padStart(2, \"0\")}`;\n this.firingEffect.SetMuzzleBoneID(muzzle, FindJoint(skeletonData, boneName));\n }\n }\n }\n }\n\n /**\n * Force-creates the animation updater BEFORE the base wiring, then hooks\n * this turret in as the updater's pose modifier, unhooking any previously\n * hooked updater on swap (Carbon cpp:714-731). CleanUp performs Carbon's\n * destructor unhook.\n */\n @carbon.method\n @impl.implemented\n InitializeAnimation()\n {\n if (!this.animationUpdater)\n {\n this.animationUpdater = new Tr2GrannyAnimation();\n }\n super.InitializeAnimation();\n\n if (this.#hookedUpdater !== this.animationUpdater)\n {\n if (this.#hookedUpdater && this.#hookedUpdater.GetPoseModifier() === this)\n {\n this.#hookedUpdater.SetPoseModifier(null);\n }\n this.animationUpdater.SetPoseModifier(this);\n this.#hookedUpdater = this.animationUpdater;\n }\n }\n\n /**\n * Carbon's destructor obligations: unhook the pose modifier and clean up\n * the firing effect (Carbon cpp:32-47). JS has no destructor; owners call\n * CleanUp when discarding the turret.\n */\n @carbon.method\n @impl.adapted\n @impl.reason(\"The C++ destructor becomes an explicit CleanUp obligation.\")\n CleanUp(context = { currentTime: 0, deltaTime: 0 })\n {\n if (this.#hookedUpdater && this.#hookedUpdater.GetPoseModifier() === this)\n {\n this.#hookedUpdater.SetPoseModifier(null);\n }\n this.#hookedUpdater = null;\n if (this.firingEffect) this.firingEffect.CleanUp(context);\n this.ReleaseCachedGeometryData();\n }\n\n /**\n * The ITr2PoseModifier hook (Carbon cpp:733-757): poses every found\n * system bone toward the tracked target in turret space. Always passes\n * null for the pitch localTransform - only EveTurretSet uses the\n * behind-the-arm flip.\n */\n @carbon.method\n @impl.implemented\n ModifyPose(_skeleton, pose)\n {\n if (this.trackingInfluence === 0) return;\n\n const tracking = this.#target.GetTrackingPosition();\n if (!mat4.invert(INVERSE_WORLD_SCRATCH, this.worldTransform))\n {\n mat4.identity(INVERSE_WORLD_SCRATCH);\n }\n vec3.transformMat4(TARGET_OS_SCRATCH, tracking, INVERSE_WORLD_SCRATCH);\n\n const aiming = this.GetAiming();\n for (let bone = 0; bone < EveTurretAiming.SystemBones.SYSBONE_MAX; bone++)\n {\n // covers INVALID since INVALID_BONE_INDEX exceeds any bone count\n if (this.#systemBoneID[bone] < pose.boneTransforms.length)\n {\n const boneTransform = pose.boneTransforms[this.#systemBoneID[bone]];\n aiming.ModifySystemBoneTransform(\n bone, TARGET_OS_SCRATCH, null, this.trackingInfluence,\n boneTransform.position, boneTransform.rotation);\n }\n }\n }\n\n /**\n * A bone's world-of-pose transform lifted into world space - row-vector\n * boneLocal * worldTransform, gl multiply(out, worldTransform, boneWorld)\n * (Carbon cpp:759-772).\n */\n @carbon.method\n @impl.implemented\n GetTurretBoneTransform(boneID, out = mat4.create())\n {\n mat4.copy(out, this.worldTransform);\n if (this.animationUpdater)\n {\n const boneWorld = this.animationUpdater.GetBoneTransform(boneID);\n if (boneWorld)\n {\n mat4.multiply(out, this.worldTransform, boneWorld);\n }\n }\n return out;\n }\n\n /** The mesh's geometry resource, or null (Carbon cpp:774-777). */\n @carbon.method\n @impl.implemented\n GetGeometryRes()\n {\n return this.mesh ? this.mesh.GetGeometryResource() : null;\n }\n\n /**\n * Stops running animations after the delay, queues the action animation\n * once on the base layer and the idle loop forever after it; returns the\n * action animation's duration (Carbon cpp:779-802).\n */\n #PlayAnimation(animName, animNameIdle, delay = 0)\n {\n const updater = this.animationUpdater;\n if (!updater) return 0;\n\n updater.StopAnimations(delay);\n\n let animLength = 0;\n if (animName)\n {\n if (updater.PlayAnimation(animName, false, 1, 0, 1, false))\n {\n animLength = updater.FindAnimationDurationByName(animName);\n }\n }\n if (animNameIdle)\n {\n updater.PlayAnimation(animNameIdle, false, 0, 0, 1, false);\n }\n return animLength;\n }\n\n /** \"Fire\", or \"Fire0\" + cycle digit past the first cycle (Carbon cpp:804-815). */\n #GetFireAnimationName()\n {\n let name = \"Fire\";\n if (this.currentCyclingFiresPos > 0)\n {\n name += \"0\";\n name += String(Math.trunc(this.currentCyclingFiresPos / this.cyclingFireGroupCount));\n }\n return name;\n }\n\n /** The firing effect module (Carbon cpp:817-820). */\n @carbon.method\n @impl.implemented\n GetFiringEffect()\n {\n return this.firingEffect;\n }\n\n /**\n * Swaps the firing effect, moving its component registration and rewiring\n * its muzzle bones (Carbon cpp:822-835).\n */\n @carbon.method\n @impl.implemented\n SetFiringEffect(firingEffect)\n {\n if (this.firingEffect) this.firingEffect.UnRegisterComponents();\n this.firingEffect = firingEffect ?? null;\n if (this.firingEffect) this.firingEffect.RegisterComponents();\n this.InitializeFiringEffect();\n }\n\n /**\n * Forwards a controller variable to the firing effect; the child owns no\n * controllers itself (Carbon EveChildTurret.cpp:663-669).\n */\n @carbon.method\n @impl.implemented\n SetControllerVariable(name, value)\n {\n if (this.firingEffect) this.firingEffect.SetControllerVariable(name, value);\n }\n\n /**\n * Applies resolved SOF faction values to every opaque area material of this\n * turret's mesh - the Trinity half of Carbon\n * EveSOF::SetupChildTurretMaterialFromFaction (EveSOF.cpp:4271-4298).\n * @param {Function} resolveParameter - parameter name -> vec4 or null\n * @returns {Boolean} false when there is no mesh or no opaque area\n */\n @impl.custom\n @impl.reason(\"The combined runtime keeps SOF independently importable, so the mesh-area walk of Carbon's EveSOF method sits on the turret that owns the mesh.\")\n ApplySofTurretMaterial(resolveParameter)\n {\n const mesh = this.GetMesh();\n if (!mesh) return false;\n const areas = mesh.GetAreas(TriBatchType.TRIBATCHTYPE_OPAQUE);\n if (!areas) return false;\n for (const area of areas)\n {\n if (!area) continue;\n const effect = area.GetMaterialInterface();\n // Carbon's ApplyFactionToTurretShader returns on a null shader.\n if (effect) EveTurretSet.applyFactionToTurretShader(effect, resolveParameter);\n }\n return true;\n }\n\n /** Starts the firing effect's controllers (Carbon EveChildTurret.cpp:671-677). */\n @carbon.method\n @impl.implemented\n StartControllers()\n {\n if (this.firingEffect) this.firingEffect.StartControllers();\n }\n\n /**\n * Attaches to a target object, firing the movement audio when moving off\n * idle or switching targets. Null clears the target, dropping a targeting\n * or firing turret back to idle (Carbon EveChildTurret.cpp:837-864).\n */\n @carbon.method\n @impl.implemented\n SetTargetObject(target)\n {\n if (!target)\n {\n if (this.state === EveChildTurret.State.STATE_TARGETING ||\n this.state === EveChildTurret.State.STATE_FIRING)\n {\n this.EnterStateIdle();\n }\n this.#target.SetTargetable(null);\n return;\n }\n const oldTarget = this.#target.GetTargetable();\n this.#target.SetTargetable(target);\n\n if (this.playMovementSound && this.idleToTargetingMovementAudioEvent)\n {\n if (this.state === EveChildTurret.State.STATE_IDLE || oldTarget !== this.#target.GetTargetable())\n {\n this.#SendMovementAudioEvent(this.idleToTargetingMovementAudioEvent);\n }\n }\n this.SetTargetScale();\n }\n\n /** The tracked targetable, or null (Carbon cpp:866-869). */\n @carbon.method\n @impl.implemented\n GetTargetObject()\n {\n return this.#target.GetTargetable();\n }\n\n /** Scales the firing effect by the target's radius (Carbon cpp:871-878). */\n @carbon.method\n @impl.implemented\n SetTargetScale()\n {\n if (this.firingEffect)\n {\n this.firingEffect.SetScaleByRadius(this.#target.GetRadius());\n }\n }\n\n /** Sends a movement audio event through the observer's emitter (the EveTurretSet seam). */\n #SendMovementAudioEvent(eventName)\n {\n SendEventToAudEmitter(this.turretMovementObserver, eventName);\n }\n\n // The state enum matches EveTurretSet's values (Carbon EveChildTurret.h:\n // 61-69); one identity, owned by the set that had it first.\n static State = EveTurretSet.State;\n\n static ImpactBehaviour = EveTurretTarget.ImpactBehaviour;\n\n static INVALID_BONE_INDEX = INVALID_BONE_INDEX;\n\n static MUZZLECOUNT_MAX = EveTurretFiringFX.MUZZLE_COUNT_MAX;\n\n}\n"],"names":["INVALID_BONE_INDEX","TRACKING_FADE_TIME","MUZZLE_TRANSFORM_SCRATCH","mat4","create","FIRE_SOURCE_SCRATCH","vec3","FIRE_POSITION_SCRATCH","TARGET_OS_SCRATCH","INVERSE_WORLD_SCRATCH","FindJoint","skeletonData","name","bones","index","length","bone","boneName","String","Name","_EveChildTurret","_identity","EveChildTurret","EveChildMesh","e","_init_isOnline","_init_extra_isOnline","_init_trackingInfluence","_init_extra_trackingInfluence","_init_maxTrackingTime","_init_extra_maxTrackingTime","_init_state","_init_extra_state","_init_sysBoneHeight","_init_extra_sysBoneHeight","_init_sysBonePitchFactor","_init_extra_sysBonePitchFactor","_init_sysBonePitchOffset","_init_extra_sysBonePitchOffset","_init_sysBonePitchMin","_init_extra_sysBonePitchMin","_init_sysBonePitchMax","_init_extra_sysBonePitchMax","_init_sysBonePitch01Factor","_init_extra_sysBonePitch01Factor","_init_sysBonePitch01Offset","_init_extra_sysBonePitch01Offset","_init_sysBonePitch02Factor","_init_extra_sysBonePitch02Factor","_init_sysBonePitch02Offset","_init_extra_sysBonePitch02Offset","_init_sysBonePitch03Factor","_init_extra_sysBonePitch03Factor","_init_sysBonePitch03Offset","_init_extra_sysBonePitch03Offset","_init_maxCyclingFirePos","_init_extra_maxCyclingFirePos","_init_cyclingFireGroupCount","_init_extra_cyclingFireGroupCount","_init_currentCyclingFiresPos","_init_extra_currentCyclingFiresPos","_init_firingEffect","_init_extra_firingEffect","_init_firingEffectResPath","_init_extra_firingEffectResPath","_init_resourceLoader","_init_extra_resourceLoader","_init_impactSize","_init_extra_impactSize","_init_impactBehaviour","_init_extra_impactBehaviour","_init_turretMovementObserver","_init_extra_turretMovementObserver","_init_playMovementSound","_init_extra_playMovementSound","_init_idleToTargetingMovementAudioEvent","_init_extra_idleToTargetingMovementAudioEvent","_init_targetingToIdleMovementAudioEvent","_init_extra_targetingToIdleMovementAudioEvent","_initProto","c","_initClass","_applyDecs","type","define","className","family","edit","readwrite","boolean","read","float32","persist","int32","uint32","objectRef","notify","string","enum","carbon","method","impl","implemented","adapted","reason","contextual","custom","isOnline","trackingInfluence","maxTrackingTime","state","EveTurretSet","State","STATE_IDLE","sysBoneHeight","sysBonePitchFactor","sysBonePitchOffset","sysBonePitchMin","sysBonePitchMax","sysBonePitch01Factor","sysBonePitch01Offset","sysBonePitch02Factor","sysBonePitch02Offset","sysBonePitch03Factor","sysBonePitch03Offset","maxCyclingFirePos","cyclingFireGroupCount","currentCyclingFiresPos","firingEffect","firingEffectResPath","resourceLoader","impactSize","impactBehaviour","EveTurretTarget","ImpactBehaviour","DAMAGE_LOCATOR","turretMovementObserver","playMovementSound","idleToTargetingMovementAudioEvent","targetingToIdleMovementAudioEvent","EveTurretAiming","Array","SystemBones","SYSBONE_MAX","fill","constructor","SetFadeOnLocatorChange","GetTarget","GetAiming","aiming","Initialize","SetImpactBehaviour","OnModified","value","#LoadFiringEffectFromPath","loaded","LoadChild","SetFiringEffect","RegisterComponents","registry","GetComponentRegistry","display","UnRegisterComponents","UpdateSyncronous","updateContext","params","deltaT","Number","GetDeltaT","deltaTime","SetDisplaySourceObject","IsVisible","UpdateCachedGeometryData","IsLooping","STATE_FIRING","set","worldTransform","closestLocator","FindClosestLocator","GetLocator","SetupFiringState","UpdateSynchronous","GetStartPosition","Update","mesh","UpdateAsyncronous","parentTransform","localToWorldTransform","result","muzzle","GetPerMuzzleEffectCount","GetFiringBoneWorldTransform","SetMuzzleTransform","SetEndPosition","GetTargetPosition","UpdateAsynchronous","SetDisplayDestObject","ShowDestObject","UpdateVisibility","parentLod","GetRenderables","renderables","geometryRes","GetGeometryRes","ReleaseCachedGeometryData","IsGood","BuildCachedGeometryData","GetSkeletonCount","GetSkeletonData","getSystemBoneName","InitializeFiringEffect","InitializeAnimation","ForceIdleAnimation","EnterStateDeactive","STATE_DEACTIVE","STATE_RELOADING","StopFiring","STATE_TARGETING","StopFireAtLocator","EnterStateIdle","STATE_INVALID","EnterStateTargeting","animLength","EnterStateFiring","PrepareFiringEffectMoveObjects","PrepareFiring","SetImpactConfiguration","GetImpactConfiguration","effectTotalTime","GetFiringDuration","effectPeakTime","GetFiringPeakTime","StartFireAtLocator","EnterStateReloading","ForceStateDeactive","idleAnimName","ForceStateTargeting","out","copy","boneID","GetPerMuzzleBoneID","GetTurretBoneTransform","muzzleCount","boneCount","Math","min","MUZZLECOUNT_MAX","GetFiringBoneName","padStart","SetMuzzleBoneID","animationUpdater","Tr2GrannyAnimation","GetPoseModifier","SetPoseModifier","CleanUp","context","currentTime","ModifyPose","_skeleton","pose","tracking","GetTrackingPosition","invert","identity","transformMat4","boneTransforms","boneTransform","ModifySystemBoneTransform","position","rotation","boneWorld","GetBoneTransform","multiply","GetGeometryResource","#PlayAnimation","animName","animNameIdle","delay","updater","StopAnimations","PlayAnimation","FindAnimationDurationByName","#GetFireAnimationName","trunc","GetFiringEffect","SetControllerVariable","ApplySofTurretMaterial","resolveParameter","GetMesh","areas","GetAreas","TriBatchType","TRIBATCHTYPE_OPAQUE","area","effect","GetMaterialInterface","applyFactionToTurretShader","StartControllers","SetTargetObject","target","SetTargetable","oldTarget","GetTargetable","SetTargetScale","GetTargetObject","SetScaleByRadius","GetRadius","#SendMovementAudioEvent","eventName","SendEventToAudEmitter","EveTurretFiringFX","MUZZLE_COUNT_MAX"],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ new class extends _identity {
|
|
|
44
44
|
} = _applyDecs2311(this, [type.define({
|
|
45
45
|
className: "EveSpaceObjectChild",
|
|
46
46
|
family: "eve/child"
|
|
47
|
-
})], [[[edit, edit.persist, type, type.string], 16, "name"], [[edit, edit.read, type, type.uint32], 16, "partTag"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetOwner"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetParent"]], 0, void 0, _IEveSpaceObjectChild));
|
|
47
|
+
})], [[[edit, edit.persist, type, type.string], 16, "name"], [[edit, edit.read, type, type.uint32], 16, "partTag"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetOwner"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetParent"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetPartDamageOverlay"], [[carbon, carbon.method, impl, impl.implemented], 18, "CreatePartDamageOverlay"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetPartArmorDamageShaderEffect"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetPartDamageLocatorAnimatedLocal"]], 0, void 0, _IEveSpaceObjectChild));
|
|
48
48
|
}
|
|
49
49
|
name = (_initProto(this), _init_name(this, ""));
|
|
50
50
|
partTag = (_init_extra_name(this), _init_partTag(this, 0));
|
|
@@ -161,6 +161,33 @@ new class extends _identity {
|
|
|
161
161
|
*/
|
|
162
162
|
CollectOwnedGeometry(_type, _parentTransform, _out, _areaPool) {}
|
|
163
163
|
|
|
164
|
+
/**
|
|
165
|
+
* Returns the damage overlay of one part of this child, or null while the
|
|
166
|
+
* part has none (Carbon EveSpaceObjectChild.cpp:138-141 base default).
|
|
167
|
+
*/
|
|
168
|
+
GetPartDamageOverlay(_partTag) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** Creates the damage overlay of one part (Carbon cpp:143-145 base no-op). */
|
|
173
|
+
CreatePartDamageOverlay(_partTag) {}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Returns the armour damage shader of one part, or null when the child has
|
|
177
|
+
* none (Carbon cpp:147-150 base default).
|
|
178
|
+
*/
|
|
179
|
+
GetPartArmorDamageShaderEffect(_partTag) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Writes the animated child-local pose of one of a part's damage locators;
|
|
185
|
+
* the base child owns none, so nothing is written (Carbon cpp:152-155).
|
|
186
|
+
*/
|
|
187
|
+
GetPartDamageLocatorAnimatedLocal(_partTag, _index, _position, _direction) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
|
|
164
191
|
/** Attaches one child and propagates owner and nonzero part-tag state. */
|
|
165
192
|
RegisterChild(child) {
|
|
166
193
|
if (child === null || child === undefined) {
|