@iwsdk/core 0.1.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 (326) hide show
  1. package/LICENSE +21 -0
  2. package/dist/asset/asset-manager.d.ts +72 -0
  3. package/dist/asset/asset-manager.d.ts.map +1 -0
  4. package/dist/asset/asset-manager.js +138 -0
  5. package/dist/asset/asset-manager.js.map +1 -0
  6. package/dist/asset/cache-manager.d.ts +44 -0
  7. package/dist/asset/cache-manager.d.ts.map +1 -0
  8. package/dist/asset/cache-manager.js +80 -0
  9. package/dist/asset/cache-manager.js.map +1 -0
  10. package/dist/asset/index.d.ts +9 -0
  11. package/dist/asset/index.d.ts.map +1 -0
  12. package/dist/asset/loaders/audio-loader.d.ts +21 -0
  13. package/dist/asset/loaders/audio-loader.d.ts.map +1 -0
  14. package/dist/asset/loaders/audio-loader.js +57 -0
  15. package/dist/asset/loaders/audio-loader.js.map +1 -0
  16. package/dist/asset/loaders/gltf-loader.d.ts +33 -0
  17. package/dist/asset/loaders/gltf-loader.d.ts.map +1 -0
  18. package/dist/asset/loaders/gltf-loader.js +79 -0
  19. package/dist/asset/loaders/gltf-loader.js.map +1 -0
  20. package/dist/asset/loaders/hdr-texture-loader.d.ts +18 -0
  21. package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -0
  22. package/dist/asset/loaders/hdr-texture-loader.js +65 -0
  23. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -0
  24. package/dist/asset/loaders/texture-loader.d.ts +21 -0
  25. package/dist/asset/loaders/texture-loader.d.ts.map +1 -0
  26. package/dist/asset/loaders/texture-loader.js +57 -0
  27. package/dist/asset/loaders/texture-loader.js.map +1 -0
  28. package/dist/audio/audio-pool.d.ts +59 -0
  29. package/dist/audio/audio-pool.d.ts.map +1 -0
  30. package/dist/audio/audio-pool.js +105 -0
  31. package/dist/audio/audio-pool.js.map +1 -0
  32. package/dist/audio/audio-system.d.ts +326 -0
  33. package/dist/audio/audio-system.d.ts.map +1 -0
  34. package/dist/audio/audio-system.js +478 -0
  35. package/dist/audio/audio-system.js.map +1 -0
  36. package/dist/audio/audio-utils.d.ts +71 -0
  37. package/dist/audio/audio-utils.d.ts.map +1 -0
  38. package/dist/audio/audio-utils.js +145 -0
  39. package/dist/audio/audio-utils.js.map +1 -0
  40. package/dist/audio/audio.d.ts +178 -0
  41. package/dist/audio/audio.d.ts.map +1 -0
  42. package/dist/audio/audio.js +104 -0
  43. package/dist/audio/audio.js.map +1 -0
  44. package/dist/audio/index.d.ts +11 -0
  45. package/dist/audio/index.d.ts.map +1 -0
  46. package/dist/ecs/component-registry.d.ts +54 -0
  47. package/dist/ecs/component-registry.d.ts.map +1 -0
  48. package/dist/ecs/component-registry.js +86 -0
  49. package/dist/ecs/component-registry.js.map +1 -0
  50. package/dist/ecs/component.d.ts +12 -0
  51. package/dist/ecs/component.d.ts.map +1 -0
  52. package/dist/ecs/entity.d.ts +17 -0
  53. package/dist/ecs/entity.d.ts.map +1 -0
  54. package/dist/ecs/entity.js +13 -0
  55. package/dist/ecs/entity.js.map +1 -0
  56. package/dist/ecs/index.d.ts +12 -0
  57. package/dist/ecs/index.d.ts.map +1 -0
  58. package/dist/ecs/system.d.ts +70 -0
  59. package/dist/ecs/system.d.ts.map +1 -0
  60. package/dist/ecs/system.js +79 -0
  61. package/dist/ecs/system.js.map +1 -0
  62. package/dist/ecs/world.d.ts +101 -0
  63. package/dist/ecs/world.d.ts.map +1 -0
  64. package/dist/ecs/world.js +165 -0
  65. package/dist/ecs/world.js.map +1 -0
  66. package/dist/environment/dome-gradient.d.ts +39 -0
  67. package/dist/environment/dome-gradient.d.ts.map +1 -0
  68. package/dist/environment/dome-gradient.js +30 -0
  69. package/dist/environment/dome-gradient.js.map +1 -0
  70. package/dist/environment/dome-texture.d.ts +39 -0
  71. package/dist/environment/dome-texture.d.ts.map +1 -0
  72. package/dist/environment/dome-texture.js +30 -0
  73. package/dist/environment/dome-texture.js.map +1 -0
  74. package/dist/environment/environment-system.d.ts +82 -0
  75. package/dist/environment/environment-system.d.ts.map +1 -0
  76. package/dist/environment/environment-system.js +389 -0
  77. package/dist/environment/environment-system.js.map +1 -0
  78. package/dist/environment/gradient-environment.d.ts +37 -0
  79. package/dist/environment/gradient-environment.d.ts.map +1 -0
  80. package/dist/environment/gradient-environment.js +99 -0
  81. package/dist/environment/gradient-environment.js.map +1 -0
  82. package/dist/environment/ibl-gradient.d.ts +38 -0
  83. package/dist/environment/ibl-gradient.d.ts.map +1 -0
  84. package/dist/environment/ibl-gradient.js +29 -0
  85. package/dist/environment/ibl-gradient.js.map +1 -0
  86. package/dist/environment/ibl-texture.d.ts +36 -0
  87. package/dist/environment/ibl-texture.d.ts.map +1 -0
  88. package/dist/environment/ibl-texture.js +30 -0
  89. package/dist/environment/ibl-texture.js.map +1 -0
  90. package/dist/environment/index.d.ts +12 -0
  91. package/dist/environment/index.d.ts.map +1 -0
  92. package/dist/grab/distance-grabbable.d.ts +115 -0
  93. package/dist/grab/distance-grabbable.d.ts.map +1 -0
  94. package/dist/grab/distance-grabbable.js +102 -0
  95. package/dist/grab/distance-grabbable.js.map +1 -0
  96. package/dist/grab/grab-system.d.ts +320 -0
  97. package/dist/grab/grab-system.d.ts.map +1 -0
  98. package/dist/grab/grab-system.js +239 -0
  99. package/dist/grab/grab-system.js.map +1 -0
  100. package/dist/grab/handles.d.ts +43 -0
  101. package/dist/grab/handles.d.ts.map +1 -0
  102. package/dist/grab/handles.js +132 -0
  103. package/dist/grab/handles.js.map +1 -0
  104. package/dist/grab/index.d.ts +13 -0
  105. package/dist/grab/index.d.ts.map +1 -0
  106. package/dist/grab/index.js +23 -0
  107. package/dist/grab/index.js.map +1 -0
  108. package/dist/grab/one-hand-grabbable.d.ts +80 -0
  109. package/dist/grab/one-hand-grabbable.d.ts.map +1 -0
  110. package/dist/grab/one-hand-grabbable.js +80 -0
  111. package/dist/grab/one-hand-grabbable.js.map +1 -0
  112. package/dist/grab/pointer-events-patch.d.ts +16 -0
  113. package/dist/grab/pointer-events-patch.d.ts.map +1 -0
  114. package/dist/grab/pointer-events-patch.js +223 -0
  115. package/dist/grab/pointer-events-patch.js.map +1 -0
  116. package/dist/grab/two-hands-grabbable.d.ts +103 -0
  117. package/dist/grab/two-hands-grabbable.d.ts.map +1 -0
  118. package/dist/grab/two-hands-grabbable.js +100 -0
  119. package/dist/grab/two-hands-grabbable.js.map +1 -0
  120. package/dist/index.d.ts +27 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +82 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/init/index.d.ts +9 -0
  125. package/dist/init/index.d.ts.map +1 -0
  126. package/dist/init/world-initializer.d.ts +76 -0
  127. package/dist/init/world-initializer.d.ts.map +1 -0
  128. package/dist/init/world-initializer.js +403 -0
  129. package/dist/init/world-initializer.js.map +1 -0
  130. package/dist/init/xr.d.ts +87 -0
  131. package/dist/init/xr.d.ts.map +1 -0
  132. package/dist/init/xr.js +193 -0
  133. package/dist/init/xr.js.map +1 -0
  134. package/dist/input/index.d.ts +9 -0
  135. package/dist/input/index.d.ts.map +1 -0
  136. package/dist/input/input-system.d.ts +52 -0
  137. package/dist/input/input-system.d.ts.map +1 -0
  138. package/dist/input/input-system.js +176 -0
  139. package/dist/input/input-system.js.map +1 -0
  140. package/dist/input/state-tags.d.ts +56 -0
  141. package/dist/input/state-tags.d.ts.map +1 -0
  142. package/dist/input/state-tags.js +63 -0
  143. package/dist/input/state-tags.js.map +1 -0
  144. package/dist/level/index.d.ts +12 -0
  145. package/dist/level/index.d.ts.map +1 -0
  146. package/dist/level/level-entity-creator.d.ts +27 -0
  147. package/dist/level/level-entity-creator.d.ts.map +1 -0
  148. package/dist/level/level-entity-creator.js +110 -0
  149. package/dist/level/level-entity-creator.js.map +1 -0
  150. package/dist/level/level-glxf-importer.d.ts +22 -0
  151. package/dist/level/level-glxf-importer.d.ts.map +1 -0
  152. package/dist/level/level-glxf-importer.js +40 -0
  153. package/dist/level/level-glxf-importer.js.map +1 -0
  154. package/dist/level/level-root.d.ts +18 -0
  155. package/dist/level/level-root.d.ts.map +1 -0
  156. package/dist/level/level-root.js +25 -0
  157. package/dist/level/level-root.js.map +1 -0
  158. package/dist/level/level-system.d.ts +54 -0
  159. package/dist/level/level-system.d.ts.map +1 -0
  160. package/dist/level/level-system.js +134 -0
  161. package/dist/level/level-system.js.map +1 -0
  162. package/dist/level/level-tag.d.ts +25 -0
  163. package/dist/level/level-tag.d.ts.map +1 -0
  164. package/dist/level/level-tag.js +28 -0
  165. package/dist/level/level-tag.js.map +1 -0
  166. package/dist/locomotion/geometries/beveled-cylinder.d.ts +12 -0
  167. package/dist/locomotion/geometries/beveled-cylinder.d.ts.map +1 -0
  168. package/dist/locomotion/geometries/beveled-cylinder.js +64 -0
  169. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -0
  170. package/dist/locomotion/index.d.ts +11 -0
  171. package/dist/locomotion/index.d.ts.map +1 -0
  172. package/dist/locomotion/locomotion.d.ts +239 -0
  173. package/dist/locomotion/locomotion.d.ts.map +1 -0
  174. package/dist/locomotion/locomotion.js +256 -0
  175. package/dist/locomotion/locomotion.js.map +1 -0
  176. package/dist/locomotion/materials/line.d.ts +24 -0
  177. package/dist/locomotion/materials/line.d.ts.map +1 -0
  178. package/dist/locomotion/materials/line.js +307 -0
  179. package/dist/locomotion/materials/line.js.map +1 -0
  180. package/dist/locomotion/slide.d.ts +76 -0
  181. package/dist/locomotion/slide.d.ts.map +1 -0
  182. package/dist/locomotion/slide.js +131 -0
  183. package/dist/locomotion/slide.js.map +1 -0
  184. package/dist/locomotion/teleport.d.ts +68 -0
  185. package/dist/locomotion/teleport.d.ts.map +1 -0
  186. package/dist/locomotion/teleport.js +150 -0
  187. package/dist/locomotion/teleport.js.map +1 -0
  188. package/dist/locomotion/turn.d.ts +77 -0
  189. package/dist/locomotion/turn.d.ts.map +1 -0
  190. package/dist/locomotion/turn.js +126 -0
  191. package/dist/locomotion/turn.js.map +1 -0
  192. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js +13 -0
  193. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js.map +1 -0
  194. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js +154 -0
  195. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js.map +1 -0
  196. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +66 -0
  197. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +1 -0
  198. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +162 -0
  199. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +1 -0
  200. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +519 -0
  201. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +1 -0
  202. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +15 -0
  203. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +1 -0
  204. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +32 -0
  205. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +1 -0
  206. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +10 -0
  207. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +1 -0
  208. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +41 -0
  209. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +1 -0
  210. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +35 -0
  211. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +1 -0
  212. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +24 -0
  213. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +1 -0
  214. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +92 -0
  215. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +1 -0
  216. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +382 -0
  217. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +1 -0
  218. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +2587 -0
  219. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +1 -0
  220. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +477 -0
  221. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +1 -0
  222. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +17 -0
  223. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js.map +1 -0
  224. package/dist/physics/index.d.ts +11 -0
  225. package/dist/physics/index.d.ts.map +1 -0
  226. package/dist/physics/physics-system.d.ts +314 -0
  227. package/dist/physics/physics-system.d.ts.map +1 -0
  228. package/dist/physics/physics-system.js +419 -0
  229. package/dist/physics/physics-system.js.map +1 -0
  230. package/dist/physics/physicsBody.d.ts +83 -0
  231. package/dist/physics/physicsBody.d.ts.map +1 -0
  232. package/dist/physics/physicsBody.js +60 -0
  233. package/dist/physics/physicsBody.js.map +1 -0
  234. package/dist/physics/physicsManipulation.d.ts +51 -0
  235. package/dist/physics/physicsManipulation.d.ts.map +1 -0
  236. package/dist/physics/physicsManipulation.js +46 -0
  237. package/dist/physics/physicsManipulation.js.map +1 -0
  238. package/dist/physics/physicsShape.d.ts +133 -0
  239. package/dist/physics/physicsShape.d.ts.map +1 -0
  240. package/dist/physics/physicsShape.js +97 -0
  241. package/dist/physics/physicsShape.js.map +1 -0
  242. package/dist/physics/utils.d.ts +21 -0
  243. package/dist/physics/utils.d.ts.map +1 -0
  244. package/dist/physics/utils.js +130 -0
  245. package/dist/physics/utils.js.map +1 -0
  246. package/dist/runtime/index.d.ts +8 -0
  247. package/dist/runtime/index.d.ts.map +1 -0
  248. package/dist/runtime/three.d.ts +8 -0
  249. package/dist/runtime/three.d.ts.map +1 -0
  250. package/dist/runtime/three.js +18 -0
  251. package/dist/runtime/three.js.map +1 -0
  252. package/dist/scene-understanding/anchor.d.ts +42 -0
  253. package/dist/scene-understanding/anchor.d.ts.map +1 -0
  254. package/dist/scene-understanding/anchor.js +45 -0
  255. package/dist/scene-understanding/anchor.js.map +1 -0
  256. package/dist/scene-understanding/index.d.ts +11 -0
  257. package/dist/scene-understanding/index.d.ts.map +1 -0
  258. package/dist/scene-understanding/mesh.d.ts +67 -0
  259. package/dist/scene-understanding/mesh.d.ts.map +1 -0
  260. package/dist/scene-understanding/mesh.js +55 -0
  261. package/dist/scene-understanding/mesh.js.map +1 -0
  262. package/dist/scene-understanding/plane.d.ts +39 -0
  263. package/dist/scene-understanding/plane.d.ts.map +1 -0
  264. package/dist/scene-understanding/plane.js +42 -0
  265. package/dist/scene-understanding/plane.js.map +1 -0
  266. package/dist/scene-understanding/scene-understanding-system.d.ts +180 -0
  267. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -0
  268. package/dist/scene-understanding/scene-understanding-system.js +342 -0
  269. package/dist/scene-understanding/scene-understanding-system.js.map +1 -0
  270. package/dist/transform/index.d.ts +10 -0
  271. package/dist/transform/index.d.ts.map +1 -0
  272. package/dist/transform/synced-quaternion.d.ts +35 -0
  273. package/dist/transform/synced-quaternion.d.ts.map +1 -0
  274. package/dist/transform/synced-quaternion.js +128 -0
  275. package/dist/transform/synced-quaternion.js.map +1 -0
  276. package/dist/transform/synced-vector3.d.ts +34 -0
  277. package/dist/transform/synced-vector3.d.ts.map +1 -0
  278. package/dist/transform/synced-vector3.js +106 -0
  279. package/dist/transform/synced-vector3.js.map +1 -0
  280. package/dist/transform/transform.d.ts +100 -0
  281. package/dist/transform/transform.d.ts.map +1 -0
  282. package/dist/transform/transform.js +194 -0
  283. package/dist/transform/transform.js.map +1 -0
  284. package/dist/types/webxr-augmentations.d.ts +23 -0
  285. package/dist/types/webxr-augmentations.d.ts.map +1 -0
  286. package/dist/ui/document.d.ts +112 -0
  287. package/dist/ui/document.d.ts.map +1 -0
  288. package/dist/ui/document.js +298 -0
  289. package/dist/ui/document.js.map +1 -0
  290. package/dist/ui/follow.d.ts +197 -0
  291. package/dist/ui/follow.d.ts.map +1 -0
  292. package/dist/ui/follow.js +143 -0
  293. package/dist/ui/follow.js.map +1 -0
  294. package/dist/ui/index.d.ts +18 -0
  295. package/dist/ui/index.d.ts.map +1 -0
  296. package/dist/ui/screenspace.d.ts +219 -0
  297. package/dist/ui/screenspace.d.ts.map +1 -0
  298. package/dist/ui/screenspace.js +215 -0
  299. package/dist/ui/screenspace.js.map +1 -0
  300. package/dist/ui/ui.d.ts +209 -0
  301. package/dist/ui/ui.d.ts.map +1 -0
  302. package/dist/ui/ui.js +185 -0
  303. package/dist/ui/ui.js.map +1 -0
  304. package/dist/vendor/basis/README.md +46 -0
  305. package/dist/vendor/basis/basis_transcoder.js +19 -0
  306. package/dist/vendor/basis/basis_transcoder.wasm +0 -0
  307. package/dist/vendor/draco/README.md +32 -0
  308. package/dist/vendor/draco/draco_decoder.js +34 -0
  309. package/dist/vendor/draco/draco_decoder.wasm +0 -0
  310. package/dist/vendor/draco/draco_encoder.js +33 -0
  311. package/dist/vendor/draco/draco_wasm_wrapper.js +117 -0
  312. package/dist/vendor/draco/gltf/draco_decoder.js +33 -0
  313. package/dist/vendor/draco/gltf/draco_decoder.wasm +0 -0
  314. package/dist/vendor/draco/gltf/draco_encoder.js +33 -0
  315. package/dist/vendor/draco/gltf/draco_wasm_wrapper.js +116 -0
  316. package/dist/version.d.ts +2 -0
  317. package/dist/version.d.ts.map +1 -0
  318. package/dist/version.js +4 -0
  319. package/dist/version.js.map +1 -0
  320. package/dist/visibility/index.d.ts +8 -0
  321. package/dist/visibility/index.d.ts.map +1 -0
  322. package/dist/visibility/visibility.d.ts +37 -0
  323. package/dist/visibility/visibility.d.ts.map +1 -0
  324. package/dist/visibility/visibility.js +52 -0
  325. package/dist/visibility/visibility.js.map +1 -0
  326. package/package.json +46 -0
@@ -0,0 +1,298 @@
1
+ import { Component } from '@pmndrs/uikit';
2
+ import { signal } from '@preact/signals-core';
3
+ import { Group } from 'three';
4
+
5
+ /**
6
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
7
+ *
8
+ * This source code is licensed under the MIT license found in the
9
+ * LICENSE file in the root directory of this source tree.
10
+ */
11
+ /**
12
+ * Lightweight DOM-like wrapper around a UIKit root `Component` that lives in the 3D scene.
13
+ *
14
+ * @remarks
15
+ * - Provides query helpers (`getElementById`, `getElementsByClassName`, `querySelector(All)`).
16
+ * - Maintains reactive target dimensions via {@link targetWidth}/{@link targetHeight} and
17
+ * scales the group to fit while preserving aspect ratio.
18
+ * - Intended to be attached to an entity's `object3D` in world space or to the `camera` for
19
+ * screen‑space UI. Use together with {@link PanelUISystem} and {@link ScreenSpaceUISystem}.
20
+ *
21
+ * @category UI
22
+ */
23
+ class UIKitDocument extends Group {
24
+ /**
25
+ * Create a document backed by a UIKit root component.
26
+ * @param rootComponent The root `Component` produced by `@pmndrs/uikitml` `interpret()`.
27
+ */
28
+ constructor(rootComponent) {
29
+ super();
30
+ this.elementMap = new Map();
31
+ this.classMap = new Map();
32
+ this._abortController = new AbortController();
33
+ /** Reactive target width in meters. Set via {@link setTargetDimensions}. */
34
+ this.targetWidth = signal(0);
35
+ /** Reactive target height in meters. Set via {@link setTargetDimensions}. */
36
+ this.targetHeight = signal(0);
37
+ this._rootElement = rootComponent;
38
+ this.add(this._rootElement);
39
+ this.indexElements(rootComponent);
40
+ this.setupReactiveResizing();
41
+ }
42
+ /**
43
+ * Return the first element with a matching `id` (UIKit property).
44
+ * @param id The element identifier without the `#` prefix.
45
+ */
46
+ getElementById(id) {
47
+ return this.elementMap.get(id) || null;
48
+ }
49
+ /**
50
+ * Return all elements that include `className` in their class list.
51
+ * @param className The class without the preceding dot.
52
+ */
53
+ getElementsByClassName(className) {
54
+ return this.classMap.get(className) || [];
55
+ }
56
+ /**
57
+ * Return the first element matching a simple CSS‑like selector.
58
+ *
59
+ * @remarks
60
+ * Supported selectors:
61
+ * - `#id`
62
+ * - `.class`
63
+ * - Descendant combinations, e.g. `#parent .child`
64
+ */
65
+ querySelector(selector) {
66
+ const results = this.querySelectorAll(selector);
67
+ return results.length > 0 ? results[0] : null;
68
+ }
69
+ /**
70
+ * Return all elements matching a simple CSS‑like selector. See {@link querySelector}.
71
+ */
72
+ querySelectorAll(selector) {
73
+ // Handle descendant selectors (e.g., "#parent .child")
74
+ if (selector.includes(' ')) {
75
+ return this.parseDescendantSelector(selector);
76
+ }
77
+ // Handle simple selectors
78
+ if (selector.startsWith('#')) {
79
+ const element = this.getElementById(selector.substring(1));
80
+ return element ? [element] : [];
81
+ }
82
+ if (selector.startsWith('.')) {
83
+ return this.getElementsByClassName(selector.substring(1));
84
+ }
85
+ return [];
86
+ }
87
+ /** Parse descendant selectors like `#parent .child`. */
88
+ parseDescendantSelector(selector) {
89
+ const parts = selector.trim().split(/\s+/);
90
+ if (parts.length < 2) {
91
+ return [];
92
+ }
93
+ // Start with elements matching the first selector
94
+ let currentElements = this.querySelectorAll(parts[0]);
95
+ // For each subsequent selector part, find descendants
96
+ for (let i = 1; i < parts.length; i++) {
97
+ const nextSelector = parts[i];
98
+ const descendants = [];
99
+ for (const parent of currentElements) {
100
+ const childMatches = this.findDescendants(parent, nextSelector);
101
+ descendants.push(...childMatches);
102
+ }
103
+ currentElements = descendants;
104
+ if (currentElements.length === 0) {
105
+ break;
106
+ }
107
+ }
108
+ return currentElements;
109
+ }
110
+ /** Find all descendants of a parent that match a selector. */
111
+ findDescendants(parent, selector) {
112
+ const results = [];
113
+ this.searchDescendants(parent, selector, results);
114
+ return results;
115
+ }
116
+ /** Recursively search for descendants matching a selector. */
117
+ searchDescendants(parent, selector, results) {
118
+ for (const child of parent.children) {
119
+ if (child instanceof Component) {
120
+ if (this.matchesSelector(child, selector)) {
121
+ results.push(child);
122
+ }
123
+ }
124
+ // Continue searching in children regardless of whether current child matched
125
+ this.searchDescendants(child, selector, results);
126
+ }
127
+ }
128
+ /** Check if a component matches a simple selector (`#id` or `.class`). */
129
+ matchesSelector(component, selector) {
130
+ var _a, _b, _c, _d;
131
+ if (selector.startsWith('#')) {
132
+ const id = (_c = (_b = (_a = component.properties) === null || _a === void 0 ? void 0 : _a.signal) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.value;
133
+ return id === selector.substring(1);
134
+ }
135
+ if (selector.startsWith('.')) {
136
+ const className = selector.substring(1);
137
+ const classList = component.classList
138
+ ? ((_d = component.classList.list) === null || _d === void 0 ? void 0 : _d.filter((c) => typeof c === 'string')) || []
139
+ : [];
140
+ return classList.includes(className);
141
+ }
142
+ return false;
143
+ }
144
+ /**
145
+ * Check if `element` is a descendant of `ancestor`.
146
+ * @returns `true` if `ancestor` appears in the parent chain of `element`.
147
+ */
148
+ isDescendantOf(element, ancestor) {
149
+ let current = element.parent;
150
+ while (current) {
151
+ if (current === ancestor) {
152
+ return true;
153
+ }
154
+ current = current.parent;
155
+ }
156
+ return false;
157
+ }
158
+ /** Convenience for `querySelectorAll("${parent} ${child}")`. */
159
+ querySelectorAllWithin(parentSelector, childSelector) {
160
+ return this.querySelectorAll(`${parentSelector} ${childSelector}`);
161
+ }
162
+ /** Convenience for the first match of `querySelectorAllWithin`. */
163
+ querySelectorWithin(parentSelector, childSelector) {
164
+ return this.querySelector(`${parentSelector} ${childSelector}`);
165
+ }
166
+ /** Set up reactivity that rescales the group when size or target changes. */
167
+ setupReactiveResizing() {
168
+ var _a;
169
+ const abortSignal = this._abortController.signal;
170
+ // React to changes in target dimensions or root component size to apply scaling
171
+ const targetWidthUnsubscribe = this.targetWidth.subscribe(() => this.updateScaling());
172
+ const targetHeightUnsubscribe = this.targetHeight.subscribe(() => this.updateScaling());
173
+ const sizeUnsubscribe = (_a = this._rootElement.size) === null || _a === void 0 ? void 0 : _a.subscribe(() => this.updateScaling());
174
+ abortSignal.addEventListener('abort', () => {
175
+ targetWidthUnsubscribe();
176
+ targetHeightUnsubscribe();
177
+ sizeUnsubscribe === null || sizeUnsubscribe === void 0 ? void 0 : sizeUnsubscribe();
178
+ });
179
+ }
180
+ /** Compute uniform scale to fit the target width/height while preserving aspect ratio. */
181
+ updateScaling() {
182
+ var _a;
183
+ const targetWorldWidth = this.targetWidth.value;
184
+ const targetWorldHeight = this.targetHeight.value;
185
+ const uiNaturalSize = (_a = this._rootElement.size) === null || _a === void 0 ? void 0 : _a.value;
186
+ if (targetWorldWidth > 0 &&
187
+ targetWorldHeight > 0 &&
188
+ uiNaturalSize &&
189
+ Array.isArray(uiNaturalSize) &&
190
+ uiNaturalSize.length >= 2) {
191
+ const [uiWidth, uiHeight] = uiNaturalSize;
192
+ if (typeof uiWidth === 'number' &&
193
+ typeof uiHeight === 'number' &&
194
+ uiWidth > 0 &&
195
+ uiHeight > 0) {
196
+ // Convert UIKit dimensions to world space units (UIKit uses cm units)
197
+ const uiWidthInWorldUnits = uiWidth / 100;
198
+ const uiHeightInWorldUnits = uiHeight / 100;
199
+ const scaleX = targetWorldWidth / uiWidthInWorldUnits;
200
+ const scaleY = targetWorldHeight / uiHeightInWorldUnits;
201
+ const optimalScale = Math.min(scaleX, scaleY);
202
+ // Apply scale to the Group (this), not the root element
203
+ this.scale.setScalar(optimalScale);
204
+ }
205
+ }
206
+ }
207
+ /**
208
+ * Set desired dimensions for the UI in meters. The document computes a uniform scale
209
+ * that fits these constraints while preserving aspect ratio.
210
+ * @param width Target width in meters.
211
+ * @param height Target height in meters.
212
+ */
213
+ setTargetDimensions(width, height) {
214
+ this.targetWidth.value = width;
215
+ this.targetHeight.value = height;
216
+ }
217
+ /**
218
+ * Current intrinsic size of the UIKit root component (in UIKit units, centimeters),
219
+ * if available from the underlying component's `size` signal.
220
+ */
221
+ get computedSize() {
222
+ var _a;
223
+ const sizeValue = (_a = this._rootElement.size) === null || _a === void 0 ? void 0 : _a.value;
224
+ if (sizeValue && Array.isArray(sizeValue) && sizeValue.length >= 2) {
225
+ const [width, height] = sizeValue;
226
+ if (typeof width === 'number' && typeof height === 'number') {
227
+ return { width, height };
228
+ }
229
+ }
230
+ return null;
231
+ }
232
+ /** Return the most recently requested target size in meters. */
233
+ get targetSize() {
234
+ return {
235
+ width: this.targetWidth.value,
236
+ height: this.targetHeight.value,
237
+ };
238
+ }
239
+ /** The root UIKit component for this document. */
240
+ get rootElement() {
241
+ return this._rootElement;
242
+ }
243
+ /**
244
+ * Dispose of internal resources and detach children. Safe to call multiple times.
245
+ */
246
+ dispose() {
247
+ // Abort all effects to clean up signal subscriptions
248
+ this._abortController.abort();
249
+ // Dispose of the root UIKit Component which will clean up all resources
250
+ if (this._rootElement && typeof this._rootElement.dispose === 'function') {
251
+ this._rootElement.dispose();
252
+ }
253
+ // Remove root element from this Group
254
+ this.remove(this._rootElement);
255
+ // Clear internal maps
256
+ this.elementMap.clear();
257
+ this.classMap.clear();
258
+ }
259
+ /** String summary useful for debugging. */
260
+ toString() {
261
+ const elementCount = this.elementMap.size;
262
+ const classCount = this.classMap.size;
263
+ const computed = this.computedSize;
264
+ const target = this.targetSize;
265
+ return `UIKitDocument { elements: ${elementCount}, classes: ${classCount}, computed: ${computed ? `${computed.width}x${computed.height}` : 'none'}, target: ${target.width}x${target.height} }`;
266
+ }
267
+ /** Index IDs and classes for DOM‑like queries. */
268
+ indexElements(object) {
269
+ var _a, _b, _c, _d;
270
+ // Only index UIKit Components, not all Object3Ds
271
+ if (object instanceof Component) {
272
+ // Access id from UIKit's properties system
273
+ const id = (_c = (_b = (_a = object.properties) === null || _a === void 0 ? void 0 : _a.signal) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.value;
274
+ // Access classes from UIKit's ClassList - work around iterator bug by accessing private list
275
+ const classList = object.classList
276
+ ? ((_d = object.classList.list) === null || _d === void 0 ? void 0 : _d.filter((c) => typeof c === 'string')) || []
277
+ : [];
278
+ // Index by ID
279
+ if (id) {
280
+ this.elementMap.set(id, object);
281
+ }
282
+ // Index by class names
283
+ for (const className of classList) {
284
+ if (!this.classMap.has(className)) {
285
+ this.classMap.set(className, []);
286
+ }
287
+ this.classMap.get(className).push(object);
288
+ }
289
+ }
290
+ // Recursively index children
291
+ for (const child of object.children) {
292
+ this.indexElements(child);
293
+ }
294
+ }
295
+ }
296
+
297
+ export { UIKitDocument };
298
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sources":["../../src/ui/document.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Types } from '../ecs/index.js';
8
+ /** Behavior modes for {@link Follower}. @category UI */
9
+ export declare const FollowBehavior: {
10
+ FaceTarget: string;
11
+ PivotY: string;
12
+ NoRotation: string;
13
+ };
14
+ /**
15
+ * Makes an entity follow a target `Object3D` with optional rotation behavior.
16
+ *
17
+ * @remarks
18
+ * - `PivotY` keeps the follower level while rotating around the Y axis to face the target.
19
+ * - `FaceTarget` fully rotates to look at the target.
20
+ * - `NoRotation` only moves position.
21
+ *
22
+ * @example Attach to an entity to follow the HMD at shoulder‑height
23
+ * ```ts
24
+ * entity.addComponent(Follower, {
25
+ * target: xrRig.head,
26
+ * offsetPosition: [0.25, -0.2, -0.35],
27
+ * behavior: FollowBehavior.PivotY,
28
+ * speed: 5,
29
+ * tolerance: 0.3,
30
+ * })
31
+ * ```
32
+ * @category UI
33
+ */
34
+ export declare const Follower: import("elics").Component<{
35
+ /** Object to follow (e.g., `world.player.head`). */
36
+ target: {
37
+ type: Types.Object;
38
+ default: undefined;
39
+ };
40
+ /** Offset from the target in the target's local space. */
41
+ offsetPosition: {
42
+ type: Types.Vec3;
43
+ default: [number, number, number];
44
+ };
45
+ behavior: {
46
+ type: Types.Enum;
47
+ enum: {
48
+ FaceTarget: string;
49
+ PivotY: string;
50
+ NoRotation: string;
51
+ };
52
+ default: string;
53
+ };
54
+ /** Degrees of allowable angular deviation before target snaps forward. */
55
+ maxAngle: {
56
+ type: Types.Float32;
57
+ default: number;
58
+ };
59
+ /** Meters of allowable positional slack before catching up. */
60
+ tolerance: {
61
+ type: Types.Float32;
62
+ default: number;
63
+ };
64
+ /** Lerp speed towards the target position. */
65
+ speed: {
66
+ type: Types.Float32;
67
+ default: number;
68
+ };
69
+ /** Internal: one‑time sync to jump to the target position. */
70
+ needsPositionSync: {
71
+ type: Types.Boolean;
72
+ default: true;
73
+ };
74
+ /** Internal: smoothed follow target in world space. */
75
+ _followTarget: {
76
+ type: Types.Vec3;
77
+ default: [number, number, number];
78
+ };
79
+ }>;
80
+ declare const FollowSystem_base: import("elics").SystemConstructor<import("elics").SystemSchema, {
81
+ follower: {
82
+ required: import("elics").Component<{
83
+ /** Object to follow (e.g., `world.player.head`). */
84
+ target: {
85
+ type: Types.Object;
86
+ default: undefined;
87
+ };
88
+ /** Offset from the target in the target's local space. */
89
+ offsetPosition: {
90
+ type: Types.Vec3;
91
+ default: [number, number, number];
92
+ };
93
+ behavior: {
94
+ type: Types.Enum;
95
+ enum: {
96
+ FaceTarget: string;
97
+ PivotY: string;
98
+ NoRotation: string;
99
+ };
100
+ default: string;
101
+ };
102
+ /** Degrees of allowable angular deviation before target snaps forward. */
103
+ maxAngle: {
104
+ type: Types.Float32;
105
+ default: number;
106
+ };
107
+ /** Meters of allowable positional slack before catching up. */
108
+ tolerance: {
109
+ type: Types.Float32;
110
+ default: number;
111
+ };
112
+ /** Lerp speed towards the target position. */
113
+ speed: {
114
+ type: Types.Float32;
115
+ default: number;
116
+ };
117
+ /** Internal: one‑time sync to jump to the target position. */
118
+ needsPositionSync: {
119
+ type: Types.Boolean;
120
+ default: true;
121
+ };
122
+ /** Internal: smoothed follow target in world space. */
123
+ _followTarget: {
124
+ type: Types.Vec3;
125
+ default: [number, number, number];
126
+ };
127
+ }>[];
128
+ };
129
+ }, import("../ecs/world.js").World, import("../ecs/system.js").System<import("elics").SystemSchema, {
130
+ follower: {
131
+ required: import("elics").Component<{
132
+ /** Object to follow (e.g., `world.player.head`). */
133
+ target: {
134
+ type: Types.Object;
135
+ default: undefined;
136
+ };
137
+ /** Offset from the target in the target's local space. */
138
+ offsetPosition: {
139
+ type: Types.Vec3;
140
+ default: [number, number, number];
141
+ };
142
+ behavior: {
143
+ type: Types.Enum;
144
+ enum: {
145
+ FaceTarget: string;
146
+ PivotY: string;
147
+ NoRotation: string;
148
+ };
149
+ default: string;
150
+ };
151
+ /** Degrees of allowable angular deviation before target snaps forward. */
152
+ maxAngle: {
153
+ type: Types.Float32;
154
+ default: number;
155
+ };
156
+ /** Meters of allowable positional slack before catching up. */
157
+ tolerance: {
158
+ type: Types.Float32;
159
+ default: number;
160
+ };
161
+ /** Lerp speed towards the target position. */
162
+ speed: {
163
+ type: Types.Float32;
164
+ default: number;
165
+ };
166
+ /** Internal: one‑time sync to jump to the target position. */
167
+ needsPositionSync: {
168
+ type: Types.Boolean;
169
+ default: true;
170
+ };
171
+ /** Internal: smoothed follow target in world space. */
172
+ _followTarget: {
173
+ type: Types.Vec3;
174
+ default: [number, number, number];
175
+ };
176
+ }>[];
177
+ };
178
+ }>>;
179
+ /**
180
+ * Updates entities with {@link Follower} to chase a target using smoothed motion,
181
+ * with constraints on angle and distance.
182
+ *
183
+ * @category UI
184
+ */
185
+ export declare class FollowSystem extends FollowSystem_base {
186
+ private followTarget;
187
+ private strictFollowTarget;
188
+ private deltaVec3;
189
+ private targetPosition;
190
+ private followerPosition;
191
+ private targetForward;
192
+ private quat;
193
+ private euler;
194
+ update(delta: number): void;
195
+ }
196
+ export {};
197
+ //# sourceMappingURL=follow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow.d.ts","sourceRoot":"","sources":["../../src/ui/follow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAiC,MAAM,iBAAiB,CAAC;AASvE,wDAAwD;AACxD,eAAO,MAAM,cAAc;;;;CAI1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,QAAQ;IAGjB,oDAAoD;;;;;IAEpD,0DAA0D;;;;;;;;;;;;;;IAO1D,0EAA0E;;;;;IAE1E,+DAA+D;;;;;IAE/D,8CAA8C;;;;;IAE9C,8DAA8D;;;;;IAE9D,uDAAuD;;;;;EAI1D,CAAC;;;;YArBE,oDAAoD;;;;;YAEpD,0DAA0D;;;;;;;;;;;;;;YAO1D,0EAA0E;;;;;YAE1E,+DAA+D;;;;;YAE/D,8CAA8C;;;;;YAE9C,8DAA8D;;;;;YAE9D,uDAAuD;;;;;;;;;;YAjBvD,oDAAoD;;;;;YAEpD,0DAA0D;;;;;;;;;;;;;;YAO1D,0EAA0E;;;;;YAE1E,+DAA+D;;;;;YAE/D,8CAA8C;;;;;YAE9C,8DAA8D;;;;;YAE9D,uDAAuD;;;;;;;;AAM3D;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,iBAEhC;IACA,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,kBAAkB,CAAiB;IAC3C,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,KAAK,CAAe;IAE5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAuE5B"}
@@ -0,0 +1,143 @@
1
+ import { createSystem } from '../ecs/system.js';
2
+ import '../ecs/world.js';
3
+ import { createComponent, Types } from 'elics';
4
+ import '../ecs/component-registry.js';
5
+ import '../runtime/three.js';
6
+ import { Vector3, Quaternion, Euler, MathUtils } from 'three';
7
+
8
+ /**
9
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
10
+ *
11
+ * This source code is licensed under the MIT license found in the
12
+ * LICENSE file in the root directory of this source tree.
13
+ */
14
+ /** Behavior modes for {@link Follower}. @category UI */
15
+ const FollowBehavior = {
16
+ FaceTarget: 'face-target',
17
+ PivotY: 'pivot-y',
18
+ NoRotation: 'no-rotation',
19
+ };
20
+ /**
21
+ * Makes an entity follow a target `Object3D` with optional rotation behavior.
22
+ *
23
+ * @remarks
24
+ * - `PivotY` keeps the follower level while rotating around the Y axis to face the target.
25
+ * - `FaceTarget` fully rotates to look at the target.
26
+ * - `NoRotation` only moves position.
27
+ *
28
+ * @example Attach to an entity to follow the HMD at shoulder‑height
29
+ * ```ts
30
+ * entity.addComponent(Follower, {
31
+ * target: xrRig.head,
32
+ * offsetPosition: [0.25, -0.2, -0.35],
33
+ * behavior: FollowBehavior.PivotY,
34
+ * speed: 5,
35
+ * tolerance: 0.3,
36
+ * })
37
+ * ```
38
+ * @category UI
39
+ */
40
+ const Follower = createComponent('Follower', {
41
+ /** Object to follow (e.g., `world.player.head`). */
42
+ target: { type: Types.Object, default: undefined },
43
+ /** Offset from the target in the target's local space. */
44
+ offsetPosition: { type: Types.Vec3, default: [0, 0, 0] },
45
+ behavior: {
46
+ type: Types.Enum,
47
+ enum: FollowBehavior,
48
+ default: FollowBehavior.PivotY,
49
+ },
50
+ /** Degrees of allowable angular deviation before target snaps forward. */
51
+ maxAngle: { type: Types.Float32, default: 30 },
52
+ /** Meters of allowable positional slack before catching up. */
53
+ tolerance: { type: Types.Float32, default: 0.4 },
54
+ /** Lerp speed towards the target position. */
55
+ speed: { type: Types.Float32, default: 1 },
56
+ /** Internal: one‑time sync to jump to the target position. */
57
+ needsPositionSync: { type: Types.Boolean, default: true },
58
+ /** Internal: smoothed follow target in world space. */
59
+ _followTarget: { type: Types.Vec3, default: [0, 0, 0] },
60
+ }, 'Component for following another object');
61
+ /**
62
+ * Updates entities with {@link Follower} to chase a target using smoothed motion,
63
+ * with constraints on angle and distance.
64
+ *
65
+ * @category UI
66
+ */
67
+ class FollowSystem extends createSystem({
68
+ follower: { required: [Follower] },
69
+ }) {
70
+ constructor() {
71
+ super(...arguments);
72
+ this.followTarget = new Vector3();
73
+ this.strictFollowTarget = new Vector3();
74
+ this.deltaVec3 = new Vector3();
75
+ this.targetPosition = new Vector3();
76
+ this.followerPosition = new Vector3();
77
+ this.targetForward = new Vector3();
78
+ this.quat = new Quaternion();
79
+ this.euler = new Euler();
80
+ }
81
+ update(delta) {
82
+ this.queries.follower.entities.forEach((entity) => {
83
+ const object = entity.object3D;
84
+ const target = entity.getValue(Follower, 'target');
85
+ if (!object || !target || !object.parent) {
86
+ return;
87
+ }
88
+ const followTargetVecView = entity.getVectorView(Follower, '_followTarget');
89
+ this.followTarget.fromArray(followTargetVecView);
90
+ const behavior = entity.getValue(Follower, 'behavior');
91
+ const offsetPosition = entity.getVectorView(Follower, 'offsetPosition');
92
+ target.getWorldQuaternion(this.quat);
93
+ target.getWorldPosition(this.targetPosition);
94
+ if (behavior === FollowBehavior.PivotY) {
95
+ this.euler.setFromQuaternion(this.quat, 'YXZ');
96
+ this.euler.x = 0;
97
+ this.euler.z = 0;
98
+ this.quat.setFromEuler(this.euler);
99
+ }
100
+ this.strictFollowTarget
101
+ .fromArray(offsetPosition)
102
+ .applyQuaternion(this.quat)
103
+ .add(this.targetPosition);
104
+ this.targetForward.set(0, 0, -1).applyQuaternion(this.quat);
105
+ object.getWorldPosition(this.deltaVec3).sub(this.targetPosition);
106
+ if (behavior === FollowBehavior.PivotY) {
107
+ this.targetForward.y = 0;
108
+ this.deltaVec3.y = 0;
109
+ this.strictFollowTarget.y = this.targetPosition.y;
110
+ }
111
+ if (entity.getValue(Follower, 'needsPositionSync')) {
112
+ object.position
113
+ .copy(this.strictFollowTarget)
114
+ .toArray(followTargetVecView);
115
+ entity.setValue(Follower, 'needsPositionSync', false);
116
+ }
117
+ else {
118
+ const distance = object.parent
119
+ .worldToLocal(this.strictFollowTarget)
120
+ .distanceTo(this.followTarget);
121
+ const deltaAngle = MathUtils.radToDeg(Math.acos(this.targetForward.normalize().dot(this.deltaVec3.normalize())));
122
+ if (distance > entity.getValue(Follower, 'tolerance') ||
123
+ deltaAngle > entity.getValue(Follower, 'maxAngle')) {
124
+ this.followTarget
125
+ .copy(this.strictFollowTarget)
126
+ .toArray(followTargetVecView);
127
+ }
128
+ const speed = entity.getValue(Follower, 'speed');
129
+ object.position.lerp(this.followTarget, delta * speed);
130
+ }
131
+ if (behavior === FollowBehavior.FaceTarget ||
132
+ behavior === FollowBehavior.PivotY) {
133
+ if (behavior === FollowBehavior.PivotY) {
134
+ this.targetPosition.y = object.getWorldPosition(this.followerPosition).y;
135
+ }
136
+ object.lookAt(this.targetPosition);
137
+ }
138
+ });
139
+ }
140
+ }
141
+
142
+ export { FollowBehavior, FollowSystem, Follower };
143
+ //# sourceMappingURL=follow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow.js","sources":["../../src/ui/follow.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}