@carbonenginejs/runtime-resource 0.9.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/NOTICE +3 -2
  2. package/README.md +47 -6
  3. package/dist/CjsMotherLode.js +88 -88
  4. package/dist/CjsMotherLode.js.map +1 -1
  5. package/dist/CjsResMan.js +718 -229
  6. package/dist/CjsResMan.js.map +1 -1
  7. package/dist/CjsResManFetchProvider.js +94 -0
  8. package/dist/CjsResManFetchProvider.js.map +1 -0
  9. package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
  10. package/dist/CjsResManWorkQueue.js.map +1 -0
  11. package/dist/format/CjsBlueReader.js +91 -2
  12. package/dist/format/CjsBlueReader.js.map +1 -1
  13. package/dist/format/CjsFormat.js +47 -21
  14. package/dist/format/CjsFormat.js.map +1 -1
  15. package/dist/format/CjsReader.js +4 -0
  16. package/dist/format/CjsReader.js.map +1 -1
  17. package/dist/format/CjsResourceProbe.js +4 -2
  18. package/dist/format/CjsResourceProbe.js.map +1 -1
  19. package/dist/format/payloadContract.js +20 -0
  20. package/dist/format/payloadContract.js.map +1 -1
  21. package/dist/formats/black/CjsBlackFormat.js +15 -1
  22. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  23. package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
  24. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
  25. package/dist/formats/black/core/CjsBlackPropertyReaders.js +62 -1
  26. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
  27. package/dist/formats/black/core/CjsBlackReader.js +127 -2
  28. package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
  29. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
  30. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
  31. package/dist/formats/black/core/helpers.js +17 -0
  32. package/dist/formats/black/core/helpers.js.map +1 -1
  33. package/dist/formats/bnk/CjsBnkFormat.js +8 -0
  34. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  35. package/dist/formats/bnk/core/helpers.js +20 -0
  36. package/dist/formats/bnk/core/helpers.js.map +1 -1
  37. package/dist/formats/bnk/core/musicNodes.js +40 -3
  38. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  39. package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
  40. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
  41. package/dist/formats/cmf/core/binary.js +71 -0
  42. package/dist/formats/cmf/core/binary.js.map +1 -1
  43. package/dist/formats/cmf/core/buffers.js +4 -0
  44. package/dist/formats/cmf/core/buffers.js.map +1 -1
  45. package/dist/formats/cmf/core/helpers.js +31 -0
  46. package/dist/formats/cmf/core/helpers.js.map +1 -1
  47. package/dist/formats/cmf/core/schema.js +10 -0
  48. package/dist/formats/cmf/core/schema.js.map +1 -1
  49. package/dist/formats/cmf/core/shared.js +9 -0
  50. package/dist/formats/cmf/core/shared.js.map +1 -1
  51. package/dist/formats/cmf/core/writer.js +54 -0
  52. package/dist/formats/cmf/core/writer.js.map +1 -1
  53. package/dist/formats/dds/core/bc6h.js +10 -0
  54. package/dist/formats/dds/core/bc6h.js.map +1 -1
  55. package/dist/formats/dds/core/bc7.js +16 -0
  56. package/dist/formats/dds/core/bc7.js.map +1 -1
  57. package/dist/formats/dds/core/helpers.js +47 -0
  58. package/dist/formats/dds/core/helpers.js.map +1 -1
  59. package/dist/formats/fbx/core/helpers.js +22 -1
  60. package/dist/formats/fbx/core/helpers.js.map +1 -1
  61. package/dist/formats/flac/CjsFlacFormat.js +49 -0
  62. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  63. package/dist/formats/flac/core/helpers.js +20 -0
  64. package/dist/formats/flac/core/helpers.js.map +1 -1
  65. package/dist/formats/gif/CjsGifFormat.js +49 -0
  66. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  67. package/dist/formats/gif/core/helpers.js +20 -0
  68. package/dist/formats/gif/core/helpers.js.map +1 -1
  69. package/dist/formats/gltf/core/helpers.js +18 -3
  70. package/dist/formats/gltf/core/helpers.js.map +1 -1
  71. package/dist/formats/gltf/core/parser.js +13 -0
  72. package/dist/formats/gltf/core/parser.js.map +1 -1
  73. package/dist/formats/gltf/core/targets.js +10 -0
  74. package/dist/formats/gltf/core/targets.js.map +1 -1
  75. package/dist/formats/gr2/core/bitknit2.js +2 -0
  76. package/dist/formats/gr2/core/bitknit2.js.map +1 -1
  77. package/dist/formats/gr2/core/helpers.js +20 -0
  78. package/dist/formats/gr2/core/helpers.js.map +1 -1
  79. package/dist/formats/gr2/core/tangents.js +9 -9
  80. package/dist/formats/gr2/core/tangents.js.map +1 -1
  81. package/dist/formats/gr2/core/targets.js +10 -0
  82. package/dist/formats/gr2/core/targets.js.map +1 -1
  83. package/dist/formats/index.js +4 -4
  84. package/dist/formats/jpeg/core/helpers.js +52 -0
  85. package/dist/formats/jpeg/core/helpers.js.map +1 -1
  86. package/dist/formats/jpeg/core/jpeg.js +93 -0
  87. package/dist/formats/jpeg/core/jpeg.js.map +1 -1
  88. package/dist/formats/mp3/core/helpers.js +37 -0
  89. package/dist/formats/mp3/core/helpers.js.map +1 -1
  90. package/dist/formats/mp4/core/helpers.js +35 -0
  91. package/dist/formats/mp4/core/helpers.js.map +1 -1
  92. package/dist/formats/obj/core/helpers.js +2 -2
  93. package/dist/formats/obj/core/helpers.js.map +1 -1
  94. package/dist/formats/ogg/CjsOggFormat.js +49 -0
  95. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  96. package/dist/formats/ogg/core/helpers.js +23 -0
  97. package/dist/formats/ogg/core/helpers.js.map +1 -1
  98. package/dist/formats/ogg/core/vorbis.js +13 -0
  99. package/dist/formats/ogg/core/vorbis.js.map +1 -1
  100. package/dist/formats/png/core/helpers.js +52 -0
  101. package/dist/formats/png/core/helpers.js.map +1 -1
  102. package/dist/formats/red/CjsRedFormat.js +3 -1
  103. package/dist/formats/red/CjsRedFormat.js.map +1 -1
  104. package/dist/formats/red/core/CjsRedReader.js +52 -0
  105. package/dist/formats/red/core/CjsRedReader.js.map +1 -1
  106. package/dist/formats/red/core/helpers.js +19 -0
  107. package/dist/formats/red/core/helpers.js.map +1 -1
  108. package/dist/formats/stl/core/stl.js +10 -2
  109. package/dist/formats/stl/core/stl.js.map +1 -1
  110. package/dist/formats/stl/core/targets.js +10 -0
  111. package/dist/formats/stl/core/targets.js.map +1 -1
  112. package/dist/formats/tga/core/helpers.js +47 -0
  113. package/dist/formats/tga/core/helpers.js.map +1 -1
  114. package/dist/formats/wav/core/helpers.js +37 -0
  115. package/dist/formats/wav/core/helpers.js.map +1 -1
  116. package/dist/formats/webm/core/helpers.js +35 -0
  117. package/dist/formats/webm/core/helpers.js.map +1 -1
  118. package/dist/formats/webp/CjsWebpFormat.js +49 -0
  119. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  120. package/dist/formats/webp/core/helpers.js +23 -0
  121. package/dist/formats/webp/core/helpers.js.map +1 -1
  122. package/dist/formats/wem/CjsWemFormat.js +8 -0
  123. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  124. package/dist/formats/wem/core/bitStream.js +2 -0
  125. package/dist/formats/wem/core/bitStream.js.map +1 -1
  126. package/dist/formats/wem/core/helpers.js +20 -0
  127. package/dist/formats/wem/core/helpers.js.map +1 -1
  128. package/dist/formats/yaml/CjsYamlFormat.js +45 -0
  129. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  130. package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
  131. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  132. package/dist/formats/yaml/core/helpers.js +10 -0
  133. package/dist/formats/yaml/core/helpers.js.map +1 -1
  134. package/dist/index.js +57 -44
  135. package/dist/index.js.map +1 -1
  136. package/dist/{CjsResource.js → resource/CjsResource.js} +234 -19
  137. package/dist/resource/CjsResource.js.map +1 -0
  138. package/dist/{resources → resource}/Tr2LightProfileRes.js +5 -4
  139. package/dist/resource/Tr2LightProfileRes.js.map +1 -0
  140. package/dist/{resources → resource/audio}/AudioGeometryResData.js +4 -4
  141. package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
  142. package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
  143. package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
  144. package/dist/resource/audio/CjsAudioRes.js +213 -0
  145. package/dist/resource/audio/CjsAudioRes.js.map +1 -0
  146. package/dist/resource/audio/index.js +4 -0
  147. package/dist/resource/audio/index.js.map +1 -0
  148. package/dist/{resources → resource/geometry}/MeshDecalData.js +3 -3
  149. package/dist/resource/geometry/MeshDecalData.js.map +1 -0
  150. package/dist/{resources → resource/geometry}/MeshDecalLodData.js +3 -3
  151. package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
  152. package/dist/resource/geometry/TriGeometryRes.js +656 -0
  153. package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
  154. package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +4 -4
  155. package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
  156. package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +4 -4
  157. package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
  158. package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +3 -3
  159. package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
  160. package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +5 -5
  161. package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
  162. package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +3 -3
  163. package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
  164. package/dist/{resources → resource/geometry}/TriJointBinding.js +4 -4
  165. package/dist/resource/geometry/TriJointBinding.js.map +1 -0
  166. package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +3 -3
  167. package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
  168. package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +3 -3
  169. package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
  170. package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +3 -3
  171. package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
  172. package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +5 -5
  173. package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
  174. package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +7 -6
  175. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
  176. package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +7 -6
  177. package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
  178. package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
  179. package/dist/resource/geometry/granny/enums.js.map +1 -0
  180. package/dist/resource/geometry/granny/index.js +6 -0
  181. package/dist/resource/geometry/granny/index.js.map +1 -0
  182. package/dist/resource/geometry/index.js +17 -0
  183. package/dist/resource/geometry/index.js.map +1 -0
  184. package/dist/resource/index.js +52 -0
  185. package/dist/resource/index.js.map +1 -0
  186. package/dist/resource/resourceBoundary.js +64 -0
  187. package/dist/resource/resourceBoundary.js.map +1 -0
  188. package/dist/resource/shader/Tr2EffectRes.js +420 -0
  189. package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
  190. package/dist/{resources → resource/shader}/Tr2MaterialArea.js +11 -6
  191. package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
  192. package/dist/{resources → resource/shader}/Tr2MaterialMesh.js +10 -5
  193. package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
  194. package/dist/{resources → resource/shader}/Tr2MaterialRes.js +12 -6
  195. package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
  196. package/dist/resource/shader/Tr2Shader.js +250 -0
  197. package/dist/resource/shader/Tr2Shader.js.map +1 -0
  198. package/dist/{resources → resource/shader}/Tr2ShaderPermutation.js +15 -9
  199. package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
  200. package/dist/resource/shader/index.js +17 -0
  201. package/dist/resource/shader/index.js.map +1 -0
  202. package/dist/resource/shader/portable.js +33 -0
  203. package/dist/resource/shader/portable.js.map +1 -0
  204. package/dist/resource/shader/portableValidation.js +461 -0
  205. package/dist/resource/shader/portableValidation.js.map +1 -0
  206. package/dist/resource/shader/reflection/Tr2EffectConstant.js +100 -0
  207. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
  208. package/dist/resource/shader/reflection/Tr2EffectDefine.js +34 -0
  209. package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
  210. package/dist/resource/shader/reflection/Tr2EffectDescription.js +113 -0
  211. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
  212. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +141 -0
  213. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
  214. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +107 -0
  215. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
  216. package/dist/resource/shader/reflection/Tr2EffectResource.js +90 -0
  217. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
  218. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +235 -0
  219. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
  220. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +71 -0
  221. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
  222. package/dist/resource/shader/reflection/Tr2Pass.js +111 -0
  223. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
  224. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +80 -0
  225. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
  226. package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +84 -7
  227. package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
  228. package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +57 -11
  229. package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
  230. package/dist/{resources → resource/texture}/Tr2ImageRes.js +7 -5
  231. package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
  232. package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +5 -3
  233. package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
  234. package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +3 -3
  235. package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
  236. package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +3 -3
  237. package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
  238. package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +8 -6
  239. package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
  240. package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +3 -3
  241. package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
  242. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +3 -3
  243. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
  244. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +3 -3
  245. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
  246. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +3 -3
  247. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  248. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +3 -3
  249. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
  250. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +3 -3
  251. package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
  252. package/dist/{resources → resource/texture}/TriTextureRes.js +43 -27
  253. package/dist/resource/texture/TriTextureRes.js.map +1 -0
  254. package/dist/resource/texture/index.js +15 -0
  255. package/dist/resource/texture/index.js.map +1 -0
  256. package/dist/{resources → resource/texture}/texturePipelineBehavior.js +61 -61
  257. package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
  258. package/dist/worker/CjsResManMainThreadLoader.js +87 -0
  259. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
  260. package/dist/worker/CjsResManWorker.js +217 -0
  261. package/dist/worker/CjsResManWorker.js.map +1 -0
  262. package/dist/worker/CjsResManWorkerLoader.js +434 -0
  263. package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
  264. package/dist/worker/protocol.js +12 -0
  265. package/dist/worker/protocol.js.map +1 -0
  266. package/docs/README.md +18 -5
  267. package/docs/architecture.md +40 -17
  268. package/docs/concepts/resource-lifecycle.md +2 -1
  269. package/docs/formats/README.md +4 -0
  270. package/docs/reference/classes/README.md +6 -4
  271. package/docs/reference/classes/audio.md +30 -0
  272. package/docs/reference/classes/core.md +31 -11
  273. package/docs/reference/classes/formats.md +1 -1
  274. package/docs/reference/classes/resources.md +151 -41
  275. package/docs/reference/classes/texture.md +7 -7
  276. package/docs/reference/events.md +1 -1
  277. package/docs/reference/motherlode-cache.md +17 -0
  278. package/docs/reference/queues.md +9 -1
  279. package/docs/reference/workers.md +135 -0
  280. package/docs/roadmap.md +27 -1
  281. package/format-notices/black/NOTICE +1 -1
  282. package/package.json +9 -4
  283. package/dist/CjsResManQueue.js.map +0 -1
  284. package/dist/CjsResource.js.map +0 -1
  285. package/dist/CjsResourceSource.js +0 -68
  286. package/dist/CjsResourceSource.js.map +0 -1
  287. package/dist/resourcePath.js +0 -18
  288. package/dist/resourcePath.js.map +0 -1
  289. package/dist/resourceStates.js +0 -9
  290. package/dist/resourceStates.js.map +0 -1
  291. package/dist/resources/AudioGeometryResData.js.map +0 -1
  292. package/dist/resources/GStateBindingCallbackData.js.map +0 -1
  293. package/dist/resources/MeshDecalData.js.map +0 -1
  294. package/dist/resources/MeshDecalLodData.js.map +0 -1
  295. package/dist/resources/Tr2EffectRes.js +0 -71
  296. package/dist/resources/Tr2EffectRes.js.map +0 -1
  297. package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
  298. package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
  299. package/dist/resources/Tr2ImageRes.js.map +0 -1
  300. package/dist/resources/Tr2LightProfileRes.js.map +0 -1
  301. package/dist/resources/Tr2MaterialArea.js.map +0 -1
  302. package/dist/resources/Tr2MaterialMesh.js.map +0 -1
  303. package/dist/resources/Tr2MaterialRes.js.map +0 -1
  304. package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
  305. package/dist/resources/Tr2TextureLodManager.js.map +0 -1
  306. package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
  307. package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
  308. package/dist/resources/Tr2TexturePipeline.js.map +0 -1
  309. package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
  310. package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
  311. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
  312. package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
  313. package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
  314. package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
  315. package/dist/resources/TriGeometryRes.js +0 -239
  316. package/dist/resources/TriGeometryRes.js.map +0 -1
  317. package/dist/resources/TriGeometryResAreaData.js.map +0 -1
  318. package/dist/resources/TriGeometryResJointData.js.map +0 -1
  319. package/dist/resources/TriGeometryResLodData.js.map +0 -1
  320. package/dist/resources/TriGeometryResMeshData.js.map +0 -1
  321. package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
  322. package/dist/resources/TriGrannyRes.js.map +0 -1
  323. package/dist/resources/TriJointBinding.js.map +0 -1
  324. package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
  325. package/dist/resources/TriRtGeometryConstants.js.map +0 -1
  326. package/dist/resources/TriTextureRes.js.map +0 -1
  327. package/dist/resources/enums.js.map +0 -1
  328. package/dist/resources/resourceBoundary.js +0 -47
  329. package/dist/resources/resourceBoundary.js.map +0 -1
  330. package/dist/resources/texturePipelineBehavior.js.map +0 -1
  331. package/dist/texture/CjsTextureArrayRes.js.map +0 -1
  332. package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
@@ -0,0 +1,656 @@
1
+ import { identity as _identity, applyDecs2311 as _applyDecs2311 } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { io, type, carbon, impl } from '@carbonenginejs/runtime-utils/schema';
3
+ import { box3 } from '@carbonenginejs/runtime-utils/box3';
4
+ import { triangleNormalTo } from '@carbonenginejs/runtime-utils/mesh';
5
+ import { ray3 } from '@carbonenginejs/runtime-utils/ray3';
6
+ import { sph3 } from '@carbonenginejs/runtime-utils/sph3';
7
+ import { vec3 } from '@carbonenginejs/runtime-utils/vec3';
8
+ import { vec4 } from '@carbonenginejs/runtime-utils/vec4';
9
+ import { CjsResource as _CjsResource } from '../CjsResource.js';
10
+ import { assertResourcePayloadObject, assertResourcePayloadArray, resourcePayloadError, resourceBoundaryError } from '../resourceBoundary.js';
11
+
12
+ let _initProto, _initClass, _init_forceLod, _init_extra_forceLod, _init_forcedLodIndex, _init_extra_forcedLodIndex, _init_name, _init_extra_name;
13
+
14
+ /**
15
+ * Resource record that owns geometry payload facts (meshes, optional
16
+ * skeletons and animations) and LOD-force metadata, while engine packages
17
+ * decide device buffers, vertex declarations, and draw-time state.
18
+ *
19
+ * Geometry inspection composes the generic math supplied by runtime-utils
20
+ * with resource-specific payload traversal.
21
+ */
22
+ let _TriGeometryRes;
23
+ new class extends _identity {
24
+ static [class TriGeometryRes extends _CjsResource {
25
+ static {
26
+ ({
27
+ e: [_init_forceLod, _init_extra_forceLod, _init_forcedLodIndex, _init_extra_forcedLodIndex, _init_name, _init_extra_name, _initProto],
28
+ c: [_TriGeometryRes, _initClass]
29
+ } = _applyDecs2311(this, [type.define({
30
+ className: "TriGeometryRes",
31
+ family: "resources"
32
+ })], [[[io, io.readwrite, type, type.boolean], 16, "forceLod"], [[io, io.readwrite, type, type.int32], 16, "forcedLodIndex"], [[io, io.readwrite, type, type.string], 16, "name"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshCount"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetAnimationCount"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetSkeletonCount"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetSkeletonData"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshAreaCount"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshName"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshAreaName"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetAreaBoundingBox"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetBoundingBox"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetBoundingSphere"], [[carbon, carbon.method, impl, impl.adapted], 18, "CalculateBoundingBoxFromTransform"], [[carbon, carbon.method, impl, impl.adapted], 18, "RecalculateBoundingSphere"], [[carbon, carbon.method, impl, impl.notSupported], 18, "Reload"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetIntersectionPointNormalBone"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetAreaIntersectionPointNormalBone"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshVertexElements"], [[carbon, carbon.method, impl, impl.notSupported], 18, "SaveMesh"]], 0, void 0, _CjsResource));
33
+ }
34
+ forceLod = (_initProto(this), _init_forceLod(this, false));
35
+ forcedLodIndex = (_init_extra_forceLod(this), _init_forcedLodIndex(this, -1));
36
+ name = (_init_extra_forcedLodIndex(this), _init_name(this, ""));
37
+
38
+ /** Creates a TriGeometryRes with caller-provided initial state. */
39
+ constructor(values = null) {
40
+ super(), _init_extra_name(this);
41
+ this.SetValues(values || {}, {
42
+ markDirty: false,
43
+ skipUpdate: true,
44
+ skipEvents: true
45
+ });
46
+ }
47
+
48
+ /**
49
+ * Attach a plain geometry payload.
50
+ *
51
+ * @param {object|null} payload
52
+ * @param {object|null} options
53
+ * @returns {TriGeometryRes}
54
+ */
55
+ SetPayload(payload = null, options = null) {
56
+ if (payload === null) {
57
+ super.SetPayload(null);
58
+ return this;
59
+ }
60
+ assertResourcePayloadObject("TriGeometryRes", payload);
61
+ assertResourcePayloadArray("TriGeometryRes", payload, "meshes");
62
+ for (const field of ["skeletons", "animations"]) {
63
+ if (payload[field] !== undefined && !Array.isArray(payload[field])) {
64
+ throw resourcePayloadError("TriGeometryRes", "Expected an array when provided.", field);
65
+ }
66
+ }
67
+ super.SetPayload(payload);
68
+ this.SetValues(options || {});
69
+ return this;
70
+ }
71
+
72
+ /**
73
+ * Get mesh count from the CPU geometry payload.
74
+ *
75
+ * @returns {number}
76
+ */
77
+ GetMeshCount() {
78
+ return this.GetPayload()?.meshes?.length || 0;
79
+ }
80
+
81
+ /**
82
+ * Get animation count from the CPU geometry payload.
83
+ *
84
+ * @returns {number}
85
+ */
86
+ GetAnimationCount() {
87
+ return this.GetPayload()?.animations?.length || 0;
88
+ }
89
+
90
+ /**
91
+ * Get skeleton count from the CPU geometry payload.
92
+ *
93
+ * @returns {number}
94
+ */
95
+ GetSkeletonCount() {
96
+ return this.GetPayload()?.skeletons?.length || 0;
97
+ }
98
+
99
+ /**
100
+ * Get one resource-owned skeleton from the CPU geometry payload.
101
+ *
102
+ * @param {number} skeletonIndex
103
+ * @returns {*}
104
+ */
105
+ GetSkeletonData(skeletonIndex = 0) {
106
+ const index = Number(skeletonIndex);
107
+ if (!Number.isInteger(index) || index < 0) {
108
+ return null;
109
+ }
110
+ return this.GetPayload()?.skeletons?.[index] || null;
111
+ }
112
+
113
+ /**
114
+ * Get mesh area count from a CPU geometry payload mesh.
115
+ *
116
+ * @param {number} meshIndex
117
+ * @returns {number}
118
+ */
119
+ GetMeshAreaCount(meshIndex = 0) {
120
+ const mesh = this.GetPayload()?.meshes?.[meshIndex];
121
+ return mesh?.areas?.length || 0;
122
+ }
123
+
124
+ /**
125
+ * Get mesh name from a CPU geometry payload.
126
+ *
127
+ * @param {number} meshIndex
128
+ * @returns {string}
129
+ */
130
+ GetMeshName(meshIndex = 0) {
131
+ return this.GetPayload()?.meshes?.[meshIndex]?.name || "";
132
+ }
133
+
134
+ /**
135
+ * Get mesh area name from a CPU geometry payload.
136
+ *
137
+ * @param {number} meshIndex
138
+ * @param {number} areaIndex
139
+ * @returns {string}
140
+ */
141
+ GetMeshAreaName(meshIndex = 0, areaIndex = 0) {
142
+ return this.GetPayload()?.meshes?.[meshIndex]?.areas?.[areaIndex]?.name || "";
143
+ }
144
+
145
+ /**
146
+ * Get area bounding box from geometry payload data.
147
+ *
148
+ * @param {number} meshIndex
149
+ * @param {number} areaIndex
150
+ * @param {ArrayLike<number>|null} outMin
151
+ * @param {ArrayLike<number>|null} outMax
152
+ * @returns {*|boolean}
153
+ */
154
+ GetAreaBoundingBox(meshIndex = 0, areaIndex = 0, outMin = null, outMax = null) {
155
+ const area = _TriGeometryRes.getMeshAreas(this.GetPayload()?.meshes?.[meshIndex])?.[areaIndex];
156
+ const bounds = _TriGeometryRes.getBounds(area);
157
+ return _TriGeometryRes.copyBounds(bounds, outMin, outMax);
158
+ }
159
+
160
+ /**
161
+ * Get mesh bounding box from geometry payload data.
162
+ * @param {number} meshIndex
163
+ * @param {ArrayLike<number>|null} outMin
164
+ * @param {ArrayLike<number>|null} outMax
165
+ * @returns {*|boolean}
166
+ */
167
+ GetBoundingBox(meshIndex = 0, outMin = null, outMax = null) {
168
+ const payload = this.GetPayload();
169
+ const bounds = _TriGeometryRes.getBounds(payload?.meshes?.[meshIndex]) || _TriGeometryRes.getBounds(payload);
170
+ return _TriGeometryRes.copyBounds(bounds, outMin, outMax);
171
+ }
172
+
173
+ /**
174
+ * Get mesh bounding sphere from geometry payload data.
175
+ * @param {number} meshIndex
176
+ * @param {ArrayLike<number>|null} out
177
+ * @returns {*|boolean}
178
+ */
179
+ GetBoundingSphere(meshIndex = 0, out = null) {
180
+ const payload = this.GetPayload();
181
+ const sphere = _TriGeometryRes.getSphere(payload?.meshes?.[meshIndex]) || _TriGeometryRes.getSphere(payload);
182
+ if (!out) return sphere;
183
+ if (!sphere) return false;
184
+ vec4.copy(out, sphere);
185
+ return true;
186
+ }
187
+
188
+ /**
189
+ * Calculate a transformed bounding box from canonical CPU vertex data.
190
+ *
191
+ * Carbon stores the same matrix bytes as gl-matrix; transforming one point
192
+ * therefore uses the ordinary column-vector index layout.
193
+ *
194
+ * @param {number} meshIndex
195
+ * @param {ArrayLike<number>} transform
196
+ * @returns {{min: number[], max: number[]}|null}
197
+ */
198
+ CalculateBoundingBoxFromTransform(meshIndex = 0, transform = null) {
199
+ if (!transform || transform.length < 16) {
200
+ throw new TypeError("TriGeometryRes transform must contain 16 matrix elements.");
201
+ }
202
+ const mesh = this.GetPayload()?.meshes?.[meshIndex];
203
+ if (!mesh) return null;
204
+ const positions = _TriGeometryRes.getMeshPositions(mesh);
205
+ const sourceBounds = _TriGeometryRes.getBounds(mesh);
206
+ if (!positions && !sourceBounds) return null;
207
+ const bounds = box3.alloc(),
208
+ point = vec3.alloc();
209
+ try {
210
+ if (!_TriGeometryRes.setBoundsFromPositions(bounds, positions, point)) {
211
+ if (!sourceBounds) return null;
212
+ box3.fromBounds(bounds, sourceBounds.min, sourceBounds.max);
213
+ }
214
+ box3.transformMat4(bounds, bounds, transform);
215
+ return {
216
+ min: [bounds[0], bounds[1], bounds[2]],
217
+ max: [bounds[3], bounds[4], bounds[5]]
218
+ };
219
+ } finally {
220
+ vec3.unalloc(point);
221
+ box3.unalloc(bounds);
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Recalculate bounding sphere data from canonical CPU vertex positions.
227
+ *
228
+ * @returns {boolean}
229
+ */
230
+ RecalculateBoundingSphere() {
231
+ let updated = false;
232
+ const sphere = sph3.alloc(),
233
+ point = vec3.alloc();
234
+ try {
235
+ for (const mesh of this.GetPayload()?.meshes || []) {
236
+ if (!_TriGeometryRes.calculateMeshSphere(sphere, mesh, point)) continue;
237
+ _TriGeometryRes.setMeshSphere(mesh, sphere);
238
+ updated = true;
239
+ }
240
+ return updated;
241
+ } finally {
242
+ vec3.unalloc(point);
243
+ sph3.unalloc(sphere);
244
+ }
245
+ }
246
+
247
+ /**
248
+ * Reloading belongs to the resource manager because it owns source and
249
+ * canonical replacement policy.
250
+ *
251
+ * @throws {Error}
252
+ */
253
+ Reload() {
254
+ throw resourceBoundaryError("TriGeometryRes", "Reload", "Request a reload through CjsResMan so source reads and canonical replacement remain manager-owned.");
255
+ }
256
+
257
+ /**
258
+ * Intersect a ray with canonical CPU triangle data.
259
+ *
260
+ * @param {ArrayLike<number>} position
261
+ * @param {ArrayLike<number>} direction
262
+ * @returns {object}
263
+ */
264
+ GetIntersectionPointNormalBone(position, direction) {
265
+ return _TriGeometryRes.intersectGeometry(this.GetPayload()?.meshes, position, direction, -1);
266
+ }
267
+
268
+ /**
269
+ * Intersect a ray with one area index across canonical CPU meshes.
270
+ *
271
+ * @param {ArrayLike<number>} position
272
+ * @param {ArrayLike<number>} direction
273
+ * @param {number} areaIndex
274
+ * @returns {object}
275
+ */
276
+ GetAreaIntersectionPointNormalBone(position, direction, areaIndex = -1) {
277
+ if (!Number.isInteger(areaIndex) || areaIndex < -1) {
278
+ throw new RangeError("TriGeometryRes area index must be -1 or a non-negative integer.");
279
+ }
280
+ return _TriGeometryRes.intersectGeometry(this.GetPayload()?.meshes, position, direction, areaIndex);
281
+ }
282
+
283
+ /**
284
+ * Get vertex element descriptors for a mesh.
285
+ *
286
+ * @param {number} meshIndex
287
+ * @returns {Array<*>}
288
+ */
289
+ GetMeshVertexElements(meshIndex = 0) {
290
+ return this.GetPayload()?.meshes?.[meshIndex]?.vertexElements || [];
291
+ }
292
+
293
+ /**
294
+ * Saving belongs to the selected geometry format writer and destination.
295
+ *
296
+ * @throws {Error}
297
+ */
298
+ SaveMesh() {
299
+ throw resourceBoundaryError("TriGeometryRes", "SaveMesh", "Use a geometry format writer with the resource payload and a caller-owned destination.");
300
+ }
301
+ /**
302
+ * Gets the canonical area list from a mesh or its first LOD.
303
+ *
304
+ * @param {object|null} mesh
305
+ * @returns {Array<*>|null}
306
+ */
307
+ static getMeshAreas(mesh) {
308
+ return mesh?.areas || mesh?.lods?.[0]?.areas || null;
309
+ }
310
+
311
+ /**
312
+ * Gets canonical bounds from a geometry payload object.
313
+ *
314
+ * @param {object|null} value
315
+ * @returns {{min: ArrayLike<number>, max: ArrayLike<number>}|null}
316
+ */
317
+ static getBounds(value) {
318
+ if (!value || typeof value !== "object") return null;
319
+ if (value.bounds?.min && value.bounds?.max) return value.bounds;
320
+ if (value.minBounds && value.maxBounds) {
321
+ return {
322
+ min: value.minBounds,
323
+ max: value.maxBounds
324
+ };
325
+ }
326
+ return null;
327
+ }
328
+
329
+ /**
330
+ * Gets the canonical bounding sphere from a geometry payload object.
331
+ *
332
+ * @param {object|null} value
333
+ * @returns {ArrayLike<number>|null}
334
+ */
335
+ static getSphere(value) {
336
+ if (!value || typeof value !== "object") return null;
337
+ return value.sphere || value.boundingSphere || null;
338
+ }
339
+
340
+ /**
341
+ * Copies bounds into caller-owned outputs, or returns the source object.
342
+ *
343
+ * @param {{min: ArrayLike<number>, max: ArrayLike<number>}|null} bounds
344
+ * @param {ArrayLike<number>|null} outMin
345
+ * @param {ArrayLike<number>|null} outMax
346
+ * @returns {*|boolean}
347
+ */
348
+ static copyBounds(bounds, outMin, outMax) {
349
+ if (!outMin && !outMax) return bounds;
350
+ if (!bounds || !outMin || !outMax) return false;
351
+ vec3.copy(outMin, bounds.min);
352
+ vec3.copy(outMax, bounds.max);
353
+ return true;
354
+ }
355
+
356
+ /**
357
+ * Gets canonical positions from a mesh or its first LOD.
358
+ *
359
+ * @param {object|null} mesh
360
+ * @returns {ArrayLike<number>|Array<ArrayLike<number>>|null}
361
+ */
362
+ static getMeshPositions(mesh) {
363
+ return mesh?.vertex?.position || mesh?.positions || mesh?.lods?.[0]?.vertex?.position || mesh?.lods?.[0]?.positions || null;
364
+ }
365
+
366
+ /**
367
+ * Gets the number of vertices represented by flat or nested positions.
368
+ *
369
+ * @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
370
+ * @returns {number}
371
+ */
372
+ static getPositionCount(positions) {
373
+ if (!positions) return 0;
374
+ return typeof positions[0] === "number" ? Math.floor(positions.length / 3) : positions.length;
375
+ }
376
+
377
+ /**
378
+ * Calculates bounds from canonical positions using caller-owned scratch.
379
+ *
380
+ * @param {ArrayLike<number>} out
381
+ * @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
382
+ * @param {ArrayLike<number>} point
383
+ * @returns {boolean}
384
+ */
385
+ static setBoundsFromPositions(out, positions, point) {
386
+ const count = this.getPositionCount(positions);
387
+ let found = false;
388
+ for (let index = 0; index < count; index++) {
389
+ if (!this.copyPosition(point, positions, index)) continue;
390
+ if (!found) {
391
+ out[0] = out[3] = point[0];
392
+ out[1] = out[4] = point[1];
393
+ out[2] = out[5] = point[2];
394
+ found = true;
395
+ continue;
396
+ }
397
+ out[0] = Math.min(out[0], point[0]);
398
+ out[1] = Math.min(out[1], point[1]);
399
+ out[2] = Math.min(out[2], point[2]);
400
+ out[3] = Math.max(out[3], point[0]);
401
+ out[4] = Math.max(out[4], point[1]);
402
+ out[5] = Math.max(out[5], point[2]);
403
+ }
404
+ return found;
405
+ }
406
+
407
+ /**
408
+ * Calculates a bounding sphere from positions using caller-owned scratch.
409
+ *
410
+ * @param {ArrayLike<number>} out
411
+ * @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
412
+ * @param {ArrayLike<number>} point
413
+ * @returns {boolean}
414
+ */
415
+ static setSphereFromPositions(out, positions, point) {
416
+ const count = this.getPositionCount(positions);
417
+ let found = false,
418
+ minX = Infinity,
419
+ minY = Infinity,
420
+ minZ = Infinity,
421
+ maxX = -Infinity,
422
+ maxY = -Infinity,
423
+ maxZ = -Infinity;
424
+ for (let index = 0; index < count; index++) {
425
+ if (!this.copyPosition(point, positions, index)) continue;
426
+ minX = Math.min(minX, point[0]);
427
+ minY = Math.min(minY, point[1]);
428
+ minZ = Math.min(minZ, point[2]);
429
+ maxX = Math.max(maxX, point[0]);
430
+ maxY = Math.max(maxY, point[1]);
431
+ maxZ = Math.max(maxZ, point[2]);
432
+ found = true;
433
+ }
434
+ if (!found) return false;
435
+ out[0] = (minX + maxX) * 0.5;
436
+ out[1] = (minY + maxY) * 0.5;
437
+ out[2] = (minZ + maxZ) * 0.5;
438
+ let maxSquaredRadius = 0;
439
+ for (let index = 0; index < count; index++) {
440
+ if (!this.copyPosition(point, positions, index)) continue;
441
+ const x = out[0] - point[0],
442
+ y = out[1] - point[1],
443
+ z = out[2] - point[2];
444
+ maxSquaredRadius = Math.max(maxSquaredRadius, x * x + y * y + z * z);
445
+ }
446
+ out[3] = Math.sqrt(maxSquaredRadius);
447
+ return true;
448
+ }
449
+
450
+ /**
451
+ * Calculates a mesh sphere from positions or existing bounds.
452
+ *
453
+ * @param {ArrayLike<number>} out
454
+ * @param {object} mesh
455
+ * @param {ArrayLike<number>} point
456
+ * @returns {boolean}
457
+ */
458
+ static calculateMeshSphere(out, mesh, point) {
459
+ if (this.setSphereFromPositions(out, this.getMeshPositions(mesh), point)) return true;
460
+ const bounds = this.getBounds(mesh);
461
+ if (!bounds) return false;
462
+ sph3.fromBounds(out, bounds.min, bounds.max);
463
+ return true;
464
+ }
465
+
466
+ /**
467
+ * Stores a calculated sphere in the mesh's canonical sphere fields.
468
+ *
469
+ * @param {object} mesh
470
+ * @param {ArrayLike<number>} sphere
471
+ * @returns {void}
472
+ */
473
+ static setMeshSphere(mesh, sphere) {
474
+ if (mesh.sphere && typeof mesh.sphere.set === "function") mesh.sphere.set(sphere);else mesh.sphere = [...sphere];
475
+ if (mesh.boundingSphere && typeof mesh.boundingSphere.set === "function") {
476
+ mesh.boundingSphere.set(sphere);
477
+ } else if ("boundingSphere" in mesh) {
478
+ mesh.boundingSphere = [...sphere];
479
+ }
480
+ }
481
+
482
+ /**
483
+ * Intersects a ray with canonical CPU geometry.
484
+ *
485
+ * @param {Array<object>|null} meshes
486
+ * @param {ArrayLike<number>} position
487
+ * @param {ArrayLike<number>} direction
488
+ * @param {number} areaIndex
489
+ * @returns {object}
490
+ */
491
+ static intersectGeometry(meshes, position, direction, areaIndex) {
492
+ this.validateRayVector(position, "position");
493
+ this.validateRayVector(direction, "direction");
494
+ const ray = ray3.from(ray3.alloc(), position, direction),
495
+ point = vec3.alloc(),
496
+ vertexA = vec3.alloc(),
497
+ vertexB = vec3.alloc(),
498
+ vertexC = vec3.alloc(),
499
+ normal = vec3.alloc();
500
+ let nearest = null;
501
+ try {
502
+ for (let meshIndex = 0; meshIndex < (meshes?.length || 0); meshIndex++) {
503
+ const mesh = meshes[meshIndex];
504
+ const positions = this.getMeshPositions(mesh);
505
+ if (!positions) continue;
506
+ const groups = mesh?.indices || mesh?.lods?.[0]?.indices || null;
507
+ if (ArrayBuffer.isView(groups) || Array.isArray(groups) && typeof groups[0] === "number") {
508
+ if (areaIndex !== -1 && areaIndex !== 0) continue;
509
+ nearest = this.intersectFaces(nearest, groups, 0, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
510
+ continue;
511
+ }
512
+ if (Array.isArray(groups)) {
513
+ for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {
514
+ if (areaIndex !== -1 && areaIndex !== groupIndex) continue;
515
+ const faces = groups[groupIndex]?.faces || groups[groupIndex]?.indices || [];
516
+ nearest = this.intersectFaces(nearest, faces, groupIndex, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
517
+ }
518
+ continue;
519
+ }
520
+ if (areaIndex === -1 || areaIndex === 0) {
521
+ nearest = this.intersectFaces(nearest, null, 0, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
522
+ }
523
+ }
524
+ return nearest || {
525
+ hit: false,
526
+ boneIndex: -1,
527
+ point: [0, 0, 0],
528
+ normal: [0, 0, 0],
529
+ distance: Infinity,
530
+ meshIndex: -1,
531
+ areaIndex
532
+ };
533
+ } finally {
534
+ vec3.unalloc(normal);
535
+ vec3.unalloc(vertexC);
536
+ vec3.unalloc(vertexB);
537
+ vec3.unalloc(vertexA);
538
+ vec3.unalloc(point);
539
+ ray3.unalloc(ray);
540
+ }
541
+ }
542
+
543
+ /**
544
+ * Validates a caller-provided ray vector.
545
+ *
546
+ * @param {ArrayLike<number>} value
547
+ * @param {string} name
548
+ * @returns {void}
549
+ */
550
+ static validateRayVector(value, name) {
551
+ if (!value || value.length < 3 || !Number.isFinite(value[0]) || !Number.isFinite(value[1]) || !Number.isFinite(value[2])) {
552
+ throw new TypeError(`TriGeometryRes ray ${name} must contain three finite numbers.`);
553
+ }
554
+ }
555
+
556
+ /**
557
+ * Intersects a ray with one flat face list.
558
+ *
559
+ * @param {object|null} nearest
560
+ * @param {ArrayLike<number>|null} faces
561
+ * @param {number} areaIndex
562
+ * @param {object} mesh
563
+ * @param {number} meshIndex
564
+ * @param {ArrayLike<number>|Array<ArrayLike<number>>} positions
565
+ * @param {ArrayLike<number>} rayOrigin
566
+ * @param {ArrayLike<number>} ray
567
+ * @param {ArrayLike<number>} point
568
+ * @param {ArrayLike<number>} vertexA
569
+ * @param {ArrayLike<number>} vertexB
570
+ * @param {ArrayLike<number>} vertexC
571
+ * @param {ArrayLike<number>} normal
572
+ * @returns {object|null}
573
+ */
574
+ static intersectFaces(nearest, faces, areaIndex, mesh, meshIndex, positions, rayOrigin, ray, point, vertexA, vertexB, vertexC, normal) {
575
+ const count = faces?.length ?? this.getPositionCount(positions);
576
+ for (let index = 0; index + 2 < count; index += 3) {
577
+ const vertexIndexA = faces ? faces[index] : index,
578
+ vertexIndexB = faces ? faces[index + 1] : index + 1,
579
+ vertexIndexC = faces ? faces[index + 2] : index + 2;
580
+ if (!this.copyPosition(vertexA, positions, vertexIndexA) || !this.copyPosition(vertexB, positions, vertexIndexB) || !this.copyPosition(vertexC, positions, vertexIndexC) || !ray3.getIntersectVertices(point, ray, vertexA, vertexB, vertexC, false)) {
581
+ continue;
582
+ }
583
+ const distance = vec3.distance(rayOrigin, point);
584
+ if (nearest && nearest.distance <= distance) continue;
585
+ if (!nearest) {
586
+ nearest = {
587
+ hit: true,
588
+ boneIndex: -1,
589
+ point: [0, 0, 0],
590
+ normal: [0, 0, 0],
591
+ distance,
592
+ meshIndex,
593
+ areaIndex
594
+ };
595
+ }
596
+ nearest.boneIndex = this.getMeshBoneIndex(mesh, vertexIndexA);
597
+ vec3.copy(nearest.point, point);
598
+ triangleNormalTo(normal, vertexA, vertexB, vertexC);
599
+ vec3.copy(nearest.normal, normal);
600
+ nearest.distance = distance;
601
+ nearest.meshIndex = meshIndex;
602
+ nearest.areaIndex = areaIndex;
603
+ }
604
+ return nearest;
605
+ }
606
+
607
+ /**
608
+ * Copies one flat or nested position into caller-owned output.
609
+ *
610
+ * @param {ArrayLike<number>} out
611
+ * @param {ArrayLike<number>|Array<ArrayLike<number>>} positions
612
+ * @param {number} index
613
+ * @returns {boolean}
614
+ */
615
+ static copyPosition(out, positions, index) {
616
+ if (!Number.isInteger(index) || index < 0) return false;
617
+ if (typeof positions[0] === "number") {
618
+ const offset = index * 3;
619
+ if (offset + 2 >= positions.length) return false;
620
+ out[0] = positions[offset];
621
+ out[1] = positions[offset + 1];
622
+ out[2] = positions[offset + 2];
623
+ return true;
624
+ }
625
+ const point = positions[index];
626
+ if (!point || point.length < 3) return false;
627
+ out[0] = point[0];
628
+ out[1] = point[1];
629
+ out[2] = point[2];
630
+ return true;
631
+ }
632
+
633
+ /**
634
+ * Gets the first blend index for a mesh vertex.
635
+ *
636
+ * @param {object} mesh
637
+ * @param {number} vertexIndex
638
+ * @returns {number}
639
+ */
640
+ static getMeshBoneIndex(mesh, vertexIndex) {
641
+ const indices = mesh?.vertex?.blendIndices || mesh?.blendIndices;
642
+ if (!indices) return -1;
643
+ if (typeof indices[0] === "number") {
644
+ return Number(indices[vertexIndex * 4] ?? indices[vertexIndex] ?? -1);
645
+ }
646
+ return Number(indices[vertexIndex]?.[0] ?? -1);
647
+ }
648
+ }];
649
+ payload = "geometry";
650
+ constructor() {
651
+ super(_TriGeometryRes), _initClass();
652
+ }
653
+ }();
654
+
655
+ export { _TriGeometryRes as TriGeometryRes };
656
+ //# sourceMappingURL=TriGeometryRes.js.map