@codexo/exojs 0.12.0 → 0.14.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 (759) hide show
  1. package/CHANGELOG.md +258 -6
  2. package/README.md +80 -63
  3. package/dist/esm/animation/Tween.js +1 -1
  4. package/dist/esm/animation/Tween.js.map +1 -1
  5. package/dist/esm/animation/TweenManager.d.ts +9 -5
  6. package/dist/esm/animation/TweenManager.d.ts.map +1 -1
  7. package/dist/esm/animation/TweenManager.js +14 -8
  8. package/dist/esm/animation/TweenManager.js.map +1 -1
  9. package/dist/esm/animation/index.d.ts +6 -4
  10. package/dist/esm/animation/index.d.ts.map +1 -1
  11. package/dist/esm/audio/AudioBus.d.ts +12 -12
  12. package/dist/esm/audio/AudioBus.js +29 -29
  13. package/dist/esm/audio/AudioEffect.d.ts +18 -0
  14. package/dist/esm/audio/AudioEffect.d.ts.map +1 -0
  15. package/dist/esm/audio/AudioEffect.js +16 -0
  16. package/dist/esm/audio/AudioEffect.js.map +1 -0
  17. package/dist/esm/audio/AudioGenerator.d.ts +91 -0
  18. package/dist/esm/audio/AudioGenerator.d.ts.map +1 -0
  19. package/dist/esm/audio/AudioGenerator.js +165 -0
  20. package/dist/esm/audio/AudioGenerator.js.map +1 -0
  21. package/dist/esm/audio/AudioGeneratorVoice.d.ts +52 -0
  22. package/dist/esm/audio/AudioGeneratorVoice.d.ts.map +1 -0
  23. package/dist/esm/audio/AudioGeneratorVoice.js +141 -0
  24. package/dist/esm/audio/AudioGeneratorVoice.js.map +1 -0
  25. package/dist/esm/audio/AudioInput.d.ts +39 -0
  26. package/dist/esm/audio/AudioInput.d.ts.map +1 -0
  27. package/dist/esm/audio/AudioInput.js +53 -0
  28. package/dist/esm/audio/AudioInput.js.map +1 -0
  29. package/dist/esm/audio/AudioManager.d.ts +72 -34
  30. package/dist/esm/audio/AudioManager.d.ts.map +1 -1
  31. package/dist/esm/audio/AudioManager.js +97 -51
  32. package/dist/esm/audio/AudioManager.js.map +1 -1
  33. package/dist/esm/audio/AudioStream.d.ts +49 -0
  34. package/dist/esm/audio/AudioStream.d.ts.map +1 -0
  35. package/dist/esm/audio/AudioStream.js +109 -0
  36. package/dist/esm/audio/AudioStream.js.map +1 -0
  37. package/dist/esm/audio/AudioStreamVoice.d.ts +61 -0
  38. package/dist/esm/audio/AudioStreamVoice.d.ts.map +1 -0
  39. package/dist/esm/audio/AudioStreamVoice.js +137 -0
  40. package/dist/esm/audio/AudioStreamVoice.js.map +1 -0
  41. package/dist/esm/audio/BaseVoice.d.ts +111 -0
  42. package/dist/esm/audio/BaseVoice.d.ts.map +1 -0
  43. package/dist/esm/audio/BaseVoice.js +298 -0
  44. package/dist/esm/audio/BaseVoice.js.map +1 -0
  45. package/dist/esm/audio/BiquadEffect.d.ts +53 -0
  46. package/dist/esm/audio/BiquadEffect.d.ts.map +1 -0
  47. package/dist/esm/audio/BiquadEffect.js +110 -0
  48. package/dist/esm/audio/BiquadEffect.js.map +1 -0
  49. package/dist/esm/audio/InputVoice.d.ts +41 -0
  50. package/dist/esm/audio/InputVoice.d.ts.map +1 -0
  51. package/dist/esm/audio/InputVoice.js +85 -0
  52. package/dist/esm/audio/InputVoice.js.map +1 -0
  53. package/dist/esm/audio/NoopVoice.d.ts +29 -0
  54. package/dist/esm/audio/NoopVoice.d.ts.map +1 -0
  55. package/dist/esm/audio/NoopVoice.js +52 -0
  56. package/dist/esm/audio/NoopVoice.js.map +1 -0
  57. package/dist/esm/audio/Playable.d.ts +135 -0
  58. package/dist/esm/audio/Playable.d.ts.map +1 -0
  59. package/dist/esm/audio/Sound.d.ts +64 -69
  60. package/dist/esm/audio/Sound.d.ts.map +1 -1
  61. package/dist/esm/audio/Sound.js +176 -377
  62. package/dist/esm/audio/Sound.js.map +1 -1
  63. package/dist/esm/audio/SoundVoice.d.ts +63 -0
  64. package/dist/esm/audio/SoundVoice.d.ts.map +1 -0
  65. package/dist/esm/audio/SoundVoice.js +168 -0
  66. package/dist/esm/audio/SoundVoice.js.map +1 -0
  67. package/dist/esm/audio/{filters/WorkletFilter.d.ts → WorkletEffect.d.ts} +3 -3
  68. package/dist/esm/audio/WorkletEffect.d.ts.map +1 -0
  69. package/dist/esm/audio/{filters/WorkletFilter.js → WorkletEffect.js} +6 -6
  70. package/dist/esm/audio/WorkletEffect.js.map +1 -0
  71. package/dist/esm/audio/audio-context.js +1 -1
  72. package/dist/esm/audio/audio-context.js.map +1 -1
  73. package/dist/esm/audio/crossFade.d.ts +22 -13
  74. package/dist/esm/audio/crossFade.d.ts.map +1 -1
  75. package/dist/esm/audio/crossFade.js +21 -13
  76. package/dist/esm/audio/crossFade.js.map +1 -1
  77. package/dist/esm/audio/filters/HighpassFilter.d.ts +2 -2
  78. package/dist/esm/audio/filters/HighpassFilter.js +2 -2
  79. package/dist/esm/audio/filters/LowpassFilter.d.ts +2 -2
  80. package/dist/esm/audio/filters/LowpassFilter.js +2 -2
  81. package/dist/esm/audio/filters/index.d.ts +0 -10
  82. package/dist/esm/audio/filters/index.d.ts.map +1 -1
  83. package/dist/esm/audio/index.d.ts +13 -15
  84. package/dist/esm/audio/index.d.ts.map +1 -1
  85. package/dist/esm/core/Application.d.ts +127 -10
  86. package/dist/esm/core/Application.d.ts.map +1 -1
  87. package/dist/esm/core/Application.js +226 -25
  88. package/dist/esm/core/Application.js.map +1 -1
  89. package/dist/esm/core/BuildInfo.js +2 -2
  90. package/dist/esm/core/Color.d.ts +6 -4
  91. package/dist/esm/core/Color.d.ts.map +1 -1
  92. package/dist/esm/core/Color.js +19 -15
  93. package/dist/esm/core/Color.js.map +1 -1
  94. package/dist/esm/core/DisposalScope.d.ts +50 -0
  95. package/dist/esm/core/DisposalScope.d.ts.map +1 -0
  96. package/dist/esm/core/DisposalScope.js +86 -0
  97. package/dist/esm/core/DisposalScope.js.map +1 -0
  98. package/dist/esm/core/Perf.d.ts +10 -22
  99. package/dist/esm/core/Perf.d.ts.map +1 -1
  100. package/dist/esm/core/Perf.js +15 -8
  101. package/dist/esm/core/Perf.js.map +1 -1
  102. package/dist/esm/core/Registry.d.ts +64 -0
  103. package/dist/esm/core/Registry.d.ts.map +1 -0
  104. package/dist/esm/core/Registry.js +79 -0
  105. package/dist/esm/core/Registry.js.map +1 -0
  106. package/dist/esm/core/Scene.d.ts +69 -21
  107. package/dist/esm/core/Scene.d.ts.map +1 -1
  108. package/dist/esm/core/Scene.js +109 -16
  109. package/dist/esm/core/Scene.js.map +1 -1
  110. package/dist/esm/core/SceneManager.d.ts +22 -60
  111. package/dist/esm/core/SceneManager.d.ts.map +1 -1
  112. package/dist/esm/core/SceneManager.js +68 -153
  113. package/dist/esm/core/SceneManager.js.map +1 -1
  114. package/dist/esm/core/SceneNode.d.ts +43 -2
  115. package/dist/esm/core/SceneNode.d.ts.map +1 -1
  116. package/dist/esm/core/SceneNode.js +101 -12
  117. package/dist/esm/core/SceneNode.js.map +1 -1
  118. package/dist/esm/core/Signal.js.map +1 -1
  119. package/dist/esm/core/Stage.d.ts +42 -0
  120. package/dist/esm/core/Stage.d.ts.map +1 -0
  121. package/dist/esm/core/System.d.ts +22 -0
  122. package/dist/esm/core/System.d.ts.map +1 -0
  123. package/dist/esm/core/SystemRegistry.d.ts +35 -0
  124. package/dist/esm/core/SystemRegistry.d.ts.map +1 -0
  125. package/dist/esm/core/SystemRegistry.js +104 -0
  126. package/dist/esm/core/SystemRegistry.js.map +1 -0
  127. package/dist/esm/core/Time.d.ts +15 -0
  128. package/dist/esm/core/Time.d.ts.map +1 -1
  129. package/dist/esm/core/Time.js +25 -0
  130. package/dist/esm/core/Time.js.map +1 -1
  131. package/dist/esm/core/dev.d.ts +9 -4
  132. package/dist/esm/core/dev.d.ts.map +1 -1
  133. package/dist/esm/core/dev.js +5 -0
  134. package/dist/esm/core/dev.js.map +1 -1
  135. package/dist/esm/core/index.d.ts +26 -15
  136. package/dist/esm/core/index.d.ts.map +1 -1
  137. package/dist/esm/core/letterbox.d.ts +25 -0
  138. package/dist/esm/core/letterbox.d.ts.map +1 -0
  139. package/dist/esm/core/letterbox.js +26 -0
  140. package/dist/esm/core/letterbox.js.map +1 -0
  141. package/dist/esm/core/serialization/NodeSerializer.d.ts +71 -0
  142. package/dist/esm/core/serialization/NodeSerializer.d.ts.map +1 -0
  143. package/dist/esm/core/serialization/Prefab.d.ts +49 -0
  144. package/dist/esm/core/serialization/Prefab.d.ts.map +1 -0
  145. package/dist/esm/core/serialization/Prefab.js +61 -0
  146. package/dist/esm/core/serialization/Prefab.js.map +1 -0
  147. package/dist/esm/core/serialization/SerializationRegistry.d.ts +95 -0
  148. package/dist/esm/core/serialization/SerializationRegistry.d.ts.map +1 -0
  149. package/dist/esm/core/serialization/SerializationRegistry.js +108 -0
  150. package/dist/esm/core/serialization/SerializationRegistry.js.map +1 -0
  151. package/dist/esm/core/serialization/commonFields.d.ts +20 -0
  152. package/dist/esm/core/serialization/commonFields.d.ts.map +1 -0
  153. package/dist/esm/core/serialization/commonFields.js +149 -0
  154. package/dist/esm/core/serialization/commonFields.js.map +1 -0
  155. package/dist/esm/core/serialization/coreSerializers.d.ts +9 -0
  156. package/dist/esm/core/serialization/coreSerializers.d.ts.map +1 -0
  157. package/dist/esm/core/serialization/coreSerializers.js +101 -0
  158. package/dist/esm/core/serialization/coreSerializers.js.map +1 -0
  159. package/dist/esm/core/serialization/index.d.ts +6 -0
  160. package/dist/esm/core/serialization/index.d.ts.map +1 -0
  161. package/dist/esm/core/serialization/read.d.ts +65 -0
  162. package/dist/esm/core/serialization/read.d.ts.map +1 -0
  163. package/dist/esm/core/serialization/read.js +48 -0
  164. package/dist/esm/core/serialization/read.js.map +1 -0
  165. package/dist/esm/core/serialization/renderingSerializers.d.ts +7 -0
  166. package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -0
  167. package/dist/esm/core/serialization/renderingSerializers.js +311 -0
  168. package/dist/esm/core/serialization/renderingSerializers.js.map +1 -0
  169. package/dist/esm/core/serialization/serialize.d.ts +56 -0
  170. package/dist/esm/core/serialization/serialize.d.ts.map +1 -0
  171. package/dist/esm/core/serialization/serialize.js +144 -0
  172. package/dist/esm/core/serialization/serialize.js.map +1 -0
  173. package/dist/esm/core/serialization/serializerHelpers.d.ts +46 -0
  174. package/dist/esm/core/serialization/serializerHelpers.d.ts.map +1 -0
  175. package/dist/esm/core/serialization/serializerHelpers.js +161 -0
  176. package/dist/esm/core/serialization/serializerHelpers.js.map +1 -0
  177. package/dist/esm/core/serialization/types.d.ts +49 -0
  178. package/dist/esm/core/serialization/types.d.ts.map +1 -0
  179. package/dist/esm/core/serialization/types.js +9 -0
  180. package/dist/esm/core/serialization/types.js.map +1 -0
  181. package/dist/esm/core/serialization/uiSerializers.d.ts +7 -0
  182. package/dist/esm/core/serialization/uiSerializers.d.ts.map +1 -0
  183. package/dist/esm/core/serialization/uiSerializers.js +206 -0
  184. package/dist/esm/core/serialization/uiSerializers.js.map +1 -0
  185. package/dist/esm/core/types.d.ts +1 -1
  186. package/dist/esm/core/types.d.ts.map +1 -1
  187. package/dist/esm/core/utils.d.ts +1 -16
  188. package/dist/esm/core/utils.d.ts.map +1 -1
  189. package/dist/esm/core/utils.js +2 -100
  190. package/dist/esm/core/utils.js.map +1 -1
  191. package/dist/esm/debug/PerformanceLayer.js +8 -9
  192. package/dist/esm/debug/PerformanceLayer.js.map +1 -1
  193. package/dist/esm/debug/PointerStackLayer.d.ts.map +1 -1
  194. package/dist/esm/debug/PointerStackLayer.js +9 -6
  195. package/dist/esm/debug/PointerStackLayer.js.map +1 -1
  196. package/dist/esm/debug/RenderPassInspectorLayer.d.ts.map +1 -1
  197. package/dist/esm/debug/RenderPassInspectorLayer.js +19 -12
  198. package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
  199. package/dist/esm/extensions/Extension.d.ts +78 -11
  200. package/dist/esm/extensions/Extension.d.ts.map +1 -1
  201. package/dist/esm/extensions/ExtensionRegistry.d.ts.map +1 -1
  202. package/dist/esm/extensions/ExtensionRegistry.js.map +1 -1
  203. package/dist/esm/extensions/materialize.d.ts +9 -1
  204. package/dist/esm/extensions/materialize.d.ts.map +1 -1
  205. package/dist/esm/extensions/materialize.js +17 -2
  206. package/dist/esm/extensions/materialize.js.map +1 -1
  207. package/dist/esm/extensions/snapshot.d.ts +14 -3
  208. package/dist/esm/extensions/snapshot.d.ts.map +1 -1
  209. package/dist/esm/extensions/snapshot.js +51 -14
  210. package/dist/esm/extensions/snapshot.js.map +1 -1
  211. package/dist/esm/index.d.ts +2 -1
  212. package/dist/esm/index.d.ts.map +1 -1
  213. package/dist/esm/index.js +37 -54
  214. package/dist/esm/index.js.map +1 -1
  215. package/dist/esm/input/FocusManager.d.ts +59 -0
  216. package/dist/esm/input/FocusManager.d.ts.map +1 -0
  217. package/dist/esm/input/FocusManager.js +175 -0
  218. package/dist/esm/input/FocusManager.js.map +1 -0
  219. package/dist/esm/input/Gamepad.d.ts.map +1 -1
  220. package/dist/esm/input/Gamepad.js +8 -4
  221. package/dist/esm/input/Gamepad.js.map +1 -1
  222. package/dist/esm/input/GamepadAxis.js +2 -2
  223. package/dist/esm/input/GamepadDefinitions.d.ts.map +1 -1
  224. package/dist/esm/input/GamepadDefinitions.js +6 -2
  225. package/dist/esm/input/GamepadDefinitions.js.map +1 -1
  226. package/dist/esm/input/GestureRecognizer.d.ts +1 -2
  227. package/dist/esm/input/GestureRecognizer.d.ts.map +1 -1
  228. package/dist/esm/input/GestureRecognizer.js +1 -3
  229. package/dist/esm/input/GestureRecognizer.js.map +1 -1
  230. package/dist/esm/input/InputBinding.js +3 -3
  231. package/dist/esm/input/InputBinding.js.map +1 -1
  232. package/dist/esm/input/InputManager.d.ts +7 -2
  233. package/dist/esm/input/InputManager.d.ts.map +1 -1
  234. package/dist/esm/input/InputManager.js +35 -21
  235. package/dist/esm/input/InputManager.js.map +1 -1
  236. package/dist/esm/input/InteractionManager.d.ts +67 -2
  237. package/dist/esm/input/InteractionManager.d.ts.map +1 -1
  238. package/dist/esm/input/InteractionManager.js +165 -41
  239. package/dist/esm/input/InteractionManager.js.map +1 -1
  240. package/dist/esm/input/KeyEvent.d.ts +25 -0
  241. package/dist/esm/input/KeyEvent.d.ts.map +1 -0
  242. package/dist/esm/input/KeyEvent.js +32 -0
  243. package/dist/esm/input/KeyEvent.js.map +1 -0
  244. package/dist/esm/input/Pointer.d.ts +21 -4
  245. package/dist/esm/input/Pointer.d.ts.map +1 -1
  246. package/dist/esm/input/Pointer.js +54 -15
  247. package/dist/esm/input/Pointer.js.map +1 -1
  248. package/dist/esm/input/index.d.ts +3 -1
  249. package/dist/esm/input/index.d.ts.map +1 -1
  250. package/dist/esm/math/AbstractVector.d.ts.map +1 -1
  251. package/dist/esm/math/AbstractVector.js +7 -2
  252. package/dist/esm/math/AbstractVector.js.map +1 -1
  253. package/dist/esm/math/Circle.d.ts.map +1 -1
  254. package/dist/esm/math/Circle.js +5 -1
  255. package/dist/esm/math/Circle.js.map +1 -1
  256. package/dist/esm/math/Line.d.ts +1 -1
  257. package/dist/esm/math/Line.d.ts.map +1 -1
  258. package/dist/esm/math/Line.js +1 -1
  259. package/dist/esm/math/Line.js.map +1 -1
  260. package/dist/esm/math/Matrix.d.ts.map +1 -1
  261. package/dist/esm/math/Matrix.js +6 -1
  262. package/dist/esm/math/Matrix.js.map +1 -1
  263. package/dist/esm/math/ObservableVector.d.ts +26 -8
  264. package/dist/esm/math/ObservableVector.d.ts.map +1 -1
  265. package/dist/esm/math/ObservableVector.js +24 -16
  266. package/dist/esm/math/ObservableVector.js.map +1 -1
  267. package/dist/esm/math/Polygon.d.ts +5 -0
  268. package/dist/esm/math/Polygon.d.ts.map +1 -1
  269. package/dist/esm/math/Polygon.js +27 -3
  270. package/dist/esm/math/Polygon.js.map +1 -1
  271. package/dist/esm/math/Random.d.ts +9 -9
  272. package/dist/esm/math/Random.d.ts.map +1 -1
  273. package/dist/esm/math/Random.js +46 -46
  274. package/dist/esm/math/Random.js.map +1 -1
  275. package/dist/esm/math/Rectangle.d.ts +11 -4
  276. package/dist/esm/math/Rectangle.d.ts.map +1 -1
  277. package/dist/esm/math/Rectangle.js +12 -6
  278. package/dist/esm/math/Rectangle.js.map +1 -1
  279. package/dist/esm/math/Vector.d.ts +1 -1
  280. package/dist/esm/math/Vector.d.ts.map +1 -1
  281. package/dist/esm/math/Vector.js +1 -1
  282. package/dist/esm/math/Vector.js.map +1 -1
  283. package/dist/esm/math/collision-detection.d.ts +42 -0
  284. package/dist/esm/math/collision-detection.d.ts.map +1 -1
  285. package/dist/esm/math/collision-detection.js +54 -4
  286. package/dist/esm/math/collision-detection.js.map +1 -1
  287. package/dist/esm/math/collision-primitives.d.ts.map +1 -1
  288. package/dist/esm/math/collision-primitives.js +4 -0
  289. package/dist/esm/math/collision-primitives.js.map +1 -1
  290. package/dist/esm/math/geometry.d.ts +26 -0
  291. package/dist/esm/math/geometry.d.ts.map +1 -1
  292. package/dist/esm/math/geometry.js +89 -2
  293. package/dist/esm/math/geometry.js.map +1 -1
  294. package/dist/esm/math/index.d.ts +7 -5
  295. package/dist/esm/math/index.d.ts.map +1 -1
  296. package/dist/esm/math/swept-collision.d.ts +13 -0
  297. package/dist/esm/math/swept-collision.d.ts.map +1 -1
  298. package/dist/esm/math/swept-collision.js +15 -1
  299. package/dist/esm/math/swept-collision.js.map +1 -1
  300. package/dist/esm/math/triangulate.d.ts.map +1 -1
  301. package/dist/esm/math/triangulate.js +9 -1
  302. package/dist/esm/math/triangulate.js.map +1 -1
  303. package/dist/esm/math/utils.d.ts +20 -0
  304. package/dist/esm/math/utils.d.ts.map +1 -1
  305. package/dist/esm/math/utils.js +18 -15
  306. package/dist/esm/math/utils.js.map +1 -1
  307. package/dist/esm/renderer-sdk.d.ts +2 -0
  308. package/dist/esm/renderer-sdk.d.ts.map +1 -1
  309. package/dist/esm/{rendering.js → renderer-sdk.js} +1 -1
  310. package/dist/esm/renderer-sdk.js.map +1 -0
  311. package/dist/esm/rendering/CallbackRenderPass.js +1 -1
  312. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  313. package/dist/esm/rendering/Container.d.ts +3 -0
  314. package/dist/esm/rendering/Container.d.ts.map +1 -1
  315. package/dist/esm/rendering/Container.js +28 -5
  316. package/dist/esm/rendering/Container.js.map +1 -1
  317. package/dist/esm/rendering/Drawable.d.ts +47 -0
  318. package/dist/esm/rendering/Drawable.d.ts.map +1 -1
  319. package/dist/esm/rendering/Drawable.js +88 -0
  320. package/dist/esm/rendering/Drawable.js.map +1 -1
  321. package/dist/esm/rendering/GpuResourceAccountant.d.ts +65 -0
  322. package/dist/esm/rendering/GpuResourceAccountant.d.ts.map +1 -0
  323. package/dist/esm/rendering/GpuResourceAccountant.js +130 -0
  324. package/dist/esm/rendering/GpuResourceAccountant.js.map +1 -0
  325. package/dist/esm/rendering/RenderBackend.d.ts +15 -1
  326. package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
  327. package/dist/esm/rendering/RenderBatch.d.ts +55 -0
  328. package/dist/esm/rendering/RenderBatch.d.ts.map +1 -0
  329. package/dist/esm/rendering/RenderBatch.js +107 -0
  330. package/dist/esm/rendering/RenderBatch.js.map +1 -0
  331. package/dist/esm/rendering/RenderNode.d.ts +50 -10
  332. package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
  333. package/dist/esm/rendering/RenderNode.js +113 -20
  334. package/dist/esm/rendering/RenderNode.js.map +1 -1
  335. package/dist/esm/rendering/RenderNodePass.js +2 -2
  336. package/dist/esm/rendering/RenderNodePass.js.map +1 -1
  337. package/dist/esm/rendering/RenderStats.d.ts +39 -0
  338. package/dist/esm/rendering/RenderStats.d.ts.map +1 -1
  339. package/dist/esm/rendering/RenderStats.js +14 -0
  340. package/dist/esm/rendering/RenderStats.js.map +1 -1
  341. package/dist/esm/rendering/RendererRegistry.d.ts.map +1 -1
  342. package/dist/esm/rendering/RendererRegistry.js +20 -23
  343. package/dist/esm/rendering/RendererRegistry.js.map +1 -1
  344. package/dist/esm/rendering/RenderingContext.d.ts +88 -4
  345. package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
  346. package/dist/esm/rendering/RenderingContext.js +107 -5
  347. package/dist/esm/rendering/RenderingContext.js.map +1 -1
  348. package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
  349. package/dist/esm/rendering/TransformBuffer.js +2 -0
  350. package/dist/esm/rendering/TransformBuffer.js.map +1 -1
  351. package/dist/esm/rendering/View.d.ts +47 -15
  352. package/dist/esm/rendering/View.d.ts.map +1 -1
  353. package/dist/esm/rendering/View.js +44 -27
  354. package/dist/esm/rendering/View.js.map +1 -1
  355. package/dist/esm/rendering/coreRendererBindings.d.ts.map +1 -1
  356. package/dist/esm/rendering/coreRendererBindings.js +22 -0
  357. package/dist/esm/rendering/coreRendererBindings.js.map +1 -1
  358. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
  359. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +3 -1
  360. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  361. package/dist/esm/rendering/geometry/Geometry.d.ts.map +1 -1
  362. package/dist/esm/rendering/geometry/Geometry.js +4 -2
  363. package/dist/esm/rendering/geometry/Geometry.js.map +1 -1
  364. package/dist/esm/rendering/gradient/Gradient.d.ts.map +1 -1
  365. package/dist/esm/rendering/gradient/Gradient.js +7 -2
  366. package/dist/esm/rendering/gradient/Gradient.js.map +1 -1
  367. package/dist/esm/rendering/material/MaterialKey.d.ts.map +1 -1
  368. package/dist/esm/rendering/material/MaterialKey.js +2 -0
  369. package/dist/esm/rendering/material/MaterialKey.js.map +1 -1
  370. package/dist/esm/rendering/material/ShaderSource.js +6 -0
  371. package/dist/esm/rendering/material/ShaderSource.js.map +1 -1
  372. package/dist/esm/rendering/mesh/ImmediateMesh.d.ts +48 -0
  373. package/dist/esm/rendering/mesh/ImmediateMesh.d.ts.map +1 -0
  374. package/dist/esm/rendering/mesh/ImmediateMesh.js +85 -0
  375. package/dist/esm/rendering/mesh/ImmediateMesh.js.map +1 -0
  376. package/dist/esm/rendering/mesh/Mesh.d.ts +29 -6
  377. package/dist/esm/rendering/mesh/Mesh.d.ts.map +1 -1
  378. package/dist/esm/rendering/mesh/Mesh.js +40 -13
  379. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  380. package/dist/esm/rendering/pixelSnap.d.ts +219 -0
  381. package/dist/esm/rendering/pixelSnap.d.ts.map +1 -0
  382. package/dist/esm/rendering/pixelSnap.js +187 -0
  383. package/dist/esm/rendering/pixelSnap.js.map +1 -0
  384. package/dist/esm/rendering/plan/RenderCommand.d.ts +31 -9
  385. package/dist/esm/rendering/plan/RenderCommand.d.ts.map +1 -1
  386. package/dist/esm/rendering/plan/RenderCommand.js +23 -21
  387. package/dist/esm/rendering/plan/RenderCommand.js.map +1 -1
  388. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
  389. package/dist/esm/rendering/plan/RenderEffectExecutor.js +1 -0
  390. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
  391. package/dist/esm/rendering/plan/RenderInstruction.d.ts +7 -37
  392. package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
  393. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +17 -2
  394. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
  395. package/dist/esm/rendering/plan/RenderPlanBuilder.js +132 -46
  396. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
  397. package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts.map +1 -1
  398. package/dist/esm/rendering/plan/RenderPlanOptimizer.js +31 -4
  399. package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -1
  400. package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts.map +1 -1
  401. package/dist/esm/rendering/plan/RenderPlanPlayer.js +70 -13
  402. package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -1
  403. package/dist/esm/rendering/plan/RenderScope.d.ts +16 -10
  404. package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
  405. package/dist/esm/rendering/primitives/Graphics.d.ts +6 -0
  406. package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
  407. package/dist/esm/rendering/primitives/Graphics.js +17 -1
  408. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  409. package/dist/esm/rendering/{index.d.ts → public.d.ts} +13 -30
  410. package/dist/esm/rendering/public.d.ts.map +1 -0
  411. package/dist/esm/rendering/shader/ShaderAttribute.d.ts.map +1 -1
  412. package/dist/esm/rendering/shader/ShaderAttribute.js +2 -0
  413. package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
  414. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +11 -0
  415. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
  416. package/dist/esm/rendering/sprite/AnimatedSprite.js +24 -2
  417. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
  418. package/dist/esm/rendering/sprite/NineSliceSprite.d.ts +69 -0
  419. package/dist/esm/rendering/sprite/NineSliceSprite.d.ts.map +1 -0
  420. package/dist/esm/rendering/sprite/NineSliceSprite.js +206 -0
  421. package/dist/esm/rendering/sprite/NineSliceSprite.js.map +1 -0
  422. package/dist/esm/rendering/sprite/RepeatingSprite.d.ts +120 -0
  423. package/dist/esm/rendering/sprite/RepeatingSprite.d.ts.map +1 -0
  424. package/dist/esm/rendering/sprite/RepeatingSprite.js +277 -0
  425. package/dist/esm/rendering/sprite/RepeatingSprite.js.map +1 -0
  426. package/dist/esm/rendering/sprite/Sprite.d.ts +13 -0
  427. package/dist/esm/rendering/sprite/Sprite.d.ts.map +1 -1
  428. package/dist/esm/rendering/sprite/Sprite.js +53 -3
  429. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  430. package/dist/esm/rendering/sprite/nineSlice.d.ts +53 -0
  431. package/dist/esm/rendering/sprite/nineSlice.d.ts.map +1 -0
  432. package/dist/esm/rendering/sprite/nineSlice.js +334 -0
  433. package/dist/esm/rendering/sprite/nineSlice.js.map +1 -0
  434. package/dist/esm/rendering/sprite/repeatingSpritePlan.d.ts +57 -0
  435. package/dist/esm/rendering/sprite/repeatingSpritePlan.d.ts.map +1 -0
  436. package/dist/esm/rendering/sprite/repeatingSpritePlan.js +156 -0
  437. package/dist/esm/rendering/sprite/repeatingSpritePlan.js.map +1 -0
  438. package/dist/esm/rendering/text/BitmapText.d.ts +2 -0
  439. package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
  440. package/dist/esm/rendering/text/BitmapText.js +4 -0
  441. package/dist/esm/rendering/text/BitmapText.js.map +1 -1
  442. package/dist/esm/rendering/text/GlyphAtlas.d.ts.map +1 -1
  443. package/dist/esm/rendering/text/GlyphAtlas.js +2 -1
  444. package/dist/esm/rendering/text/GlyphAtlas.js.map +1 -1
  445. package/dist/esm/rendering/text/GlyphAtlasPool.d.ts +8 -1
  446. package/dist/esm/rendering/text/GlyphAtlasPool.d.ts.map +1 -1
  447. package/dist/esm/rendering/text/GlyphAtlasPool.js +9 -12
  448. package/dist/esm/rendering/text/GlyphAtlasPool.js.map +1 -1
  449. package/dist/esm/rendering/text/GlyphSdf.d.ts.map +1 -1
  450. package/dist/esm/rendering/text/GlyphSdf.js +5 -1
  451. package/dist/esm/rendering/text/GlyphSdf.js.map +1 -1
  452. package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
  453. package/dist/esm/rendering/text/HTMLText.js +1 -0
  454. package/dist/esm/rendering/text/HTMLText.js.map +1 -1
  455. package/dist/esm/rendering/text/Text.d.ts +17 -6
  456. package/dist/esm/rendering/text/Text.d.ts.map +1 -1
  457. package/dist/esm/rendering/text/Text.js +7 -12
  458. package/dist/esm/rendering/text/Text.js.map +1 -1
  459. package/dist/esm/rendering/text/TextLayout.d.ts.map +1 -1
  460. package/dist/esm/rendering/text/TextLayout.js +4 -18
  461. package/dist/esm/rendering/text/TextLayout.js.map +1 -1
  462. package/dist/esm/rendering/texture/DataTexture.js +2 -2
  463. package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
  464. package/dist/esm/rendering/texture/Texture.d.ts +6 -0
  465. package/dist/esm/rendering/texture/Texture.d.ts.map +1 -1
  466. package/dist/esm/rendering/texture/Texture.js +8 -0
  467. package/dist/esm/rendering/texture/Texture.js.map +1 -1
  468. package/dist/esm/rendering/texture/TextureRegion.d.ts +100 -0
  469. package/dist/esm/rendering/texture/TextureRegion.d.ts.map +1 -0
  470. package/dist/esm/rendering/texture/TextureRegion.js +144 -0
  471. package/dist/esm/rendering/texture/TextureRegion.js.map +1 -0
  472. package/dist/esm/rendering/texture/repeat.d.ts +96 -0
  473. package/dist/esm/rendering/texture/repeat.d.ts.map +1 -0
  474. package/dist/esm/rendering/texture/repeat.js +158 -0
  475. package/dist/esm/rendering/texture/repeat.js.map +1 -0
  476. package/dist/esm/rendering/types.d.ts +11 -0
  477. package/dist/esm/rendering/types.d.ts.map +1 -1
  478. package/dist/esm/rendering/types.js +11 -0
  479. package/dist/esm/rendering/types.js.map +1 -1
  480. package/dist/esm/rendering/video/Video.d.ts +7 -3
  481. package/dist/esm/rendering/video/Video.d.ts.map +1 -1
  482. package/dist/esm/rendering/video/Video.js +7 -3
  483. package/dist/esm/rendering/video/Video.js.map +1 -1
  484. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts.map +1 -1
  485. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +2 -2
  486. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
  487. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +41 -2
  488. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
  489. package/dist/esm/rendering/webgl2/WebGl2Backend.js +137 -8
  490. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  491. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.d.ts.map +1 -1
  492. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js +2 -2
  493. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js.map +1 -1
  494. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +17 -0
  495. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts.map +1 -1
  496. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +122 -38
  497. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
  498. package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.d.ts +32 -0
  499. package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.d.ts.map +1 -0
  500. package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js +309 -0
  501. package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js.map +1 -0
  502. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +16 -1
  503. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts.map +1 -1
  504. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +32 -1
  505. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
  506. package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.d.ts +49 -0
  507. package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.d.ts.map +1 -0
  508. package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js +539 -0
  509. package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js.map +1 -0
  510. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.d.ts.map +1 -1
  511. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js +14 -3
  512. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js.map +1 -1
  513. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js +3 -3
  514. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -1
  515. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.d.ts.map +1 -1
  516. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js +11 -2
  517. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js.map +1 -1
  518. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +9 -0
  519. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts.map +1 -1
  520. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +29 -4
  521. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  522. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts.map +1 -1
  523. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +3 -2
  524. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -1
  525. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
  526. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +10 -4
  527. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
  528. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +39 -3
  529. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
  530. package/dist/esm/rendering/webgpu/WebGpuBackend.js +120 -12
  531. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  532. package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
  533. package/dist/esm/rendering/webgpu/WebGpuBlendState.js +3 -0
  534. package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
  535. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +13 -0
  536. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
  537. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +102 -24
  538. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  539. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts +36 -0
  540. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -0
  541. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +363 -0
  542. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -0
  543. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts +52 -0
  544. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -0
  545. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +566 -0
  546. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -0
  547. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +9 -0
  548. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
  549. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +30 -6
  550. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  551. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
  552. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +1 -0
  553. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
  554. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
  555. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +19 -7
  556. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
  557. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +16 -4
  558. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
  559. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +26 -6
  560. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
  561. package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js +1 -1
  562. package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js.map +1 -1
  563. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts +7 -0
  564. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts.map +1 -1
  565. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js +8 -0
  566. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js.map +1 -1
  567. package/dist/esm/resources/Asset.d.ts +1 -1
  568. package/dist/esm/resources/Asset.d.ts.map +1 -1
  569. package/dist/esm/resources/Asset.js +0 -2
  570. package/dist/esm/resources/Asset.js.map +1 -1
  571. package/dist/esm/resources/AssetContainer.d.ts +75 -0
  572. package/dist/esm/resources/AssetContainer.d.ts.map +1 -0
  573. package/dist/esm/resources/AssetContainer.js +100 -0
  574. package/dist/esm/resources/AssetContainer.js.map +1 -0
  575. package/dist/esm/resources/AssetDefinitions.d.ts +3 -3
  576. package/dist/esm/resources/AssetDefinitions.d.ts.map +1 -1
  577. package/dist/esm/resources/Assets.d.ts.map +1 -1
  578. package/dist/esm/resources/Assets.js +0 -1
  579. package/dist/esm/resources/Assets.js.map +1 -1
  580. package/dist/esm/resources/FactoryRegistry.d.ts.map +1 -1
  581. package/dist/esm/resources/FactoryRegistry.js +14 -23
  582. package/dist/esm/resources/FactoryRegistry.js.map +1 -1
  583. package/dist/esm/resources/IndexedDbDatabase.d.ts.map +1 -1
  584. package/dist/esm/resources/IndexedDbDatabase.js +8 -1
  585. package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
  586. package/dist/esm/resources/IndexedDbKeyValueStore.d.ts +37 -0
  587. package/dist/esm/resources/IndexedDbKeyValueStore.d.ts.map +1 -0
  588. package/dist/esm/resources/IndexedDbKeyValueStore.js +58 -0
  589. package/dist/esm/resources/IndexedDbKeyValueStore.js.map +1 -0
  590. package/dist/esm/resources/KeyValueStore.d.ts +31 -0
  591. package/dist/esm/resources/KeyValueStore.d.ts.map +1 -0
  592. package/dist/esm/resources/Loader.d.ts +78 -10
  593. package/dist/esm/resources/Loader.d.ts.map +1 -1
  594. package/dist/esm/resources/Loader.js +119 -15
  595. package/dist/esm/resources/Loader.js.map +1 -1
  596. package/dist/esm/resources/MemoryStore.d.ts +17 -0
  597. package/dist/esm/resources/MemoryStore.d.ts.map +1 -0
  598. package/dist/esm/resources/MemoryStore.js +30 -0
  599. package/dist/esm/resources/MemoryStore.js.map +1 -0
  600. package/dist/esm/resources/WebStorageStore.d.ts +40 -0
  601. package/dist/esm/resources/WebStorageStore.d.ts.map +1 -0
  602. package/dist/esm/resources/WebStorageStore.js +84 -0
  603. package/dist/esm/resources/WebStorageStore.js.map +1 -0
  604. package/dist/esm/resources/coreAssetBindings.d.ts.map +1 -1
  605. package/dist/esm/resources/coreAssetBindings.js +16 -5
  606. package/dist/esm/resources/coreAssetBindings.js.map +1 -1
  607. package/dist/esm/resources/factories/BmFontFactory.js +4 -4
  608. package/dist/esm/resources/factories/BmFontFactory.js.map +1 -1
  609. package/dist/esm/resources/factories/MusicFactory.d.ts +9 -9
  610. package/dist/esm/resources/factories/MusicFactory.d.ts.map +1 -1
  611. package/dist/esm/resources/factories/MusicFactory.js +7 -7
  612. package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
  613. package/dist/esm/resources/factories/SoundFactory.js +2 -2
  614. package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
  615. package/dist/esm/resources/factories/SubtitleFactory.d.ts +11 -1
  616. package/dist/esm/resources/factories/SubtitleFactory.d.ts.map +1 -1
  617. package/dist/esm/resources/factories/SubtitleFactory.js +13 -9
  618. package/dist/esm/resources/factories/SubtitleFactory.js.map +1 -1
  619. package/dist/esm/resources/index.d.ts +51 -34
  620. package/dist/esm/resources/index.d.ts.map +1 -1
  621. package/dist/esm/resources/utils.js +4 -4
  622. package/dist/esm/resources/utils.js.map +1 -1
  623. package/dist/esm/ui/Button.d.ts +54 -0
  624. package/dist/esm/ui/Button.d.ts.map +1 -0
  625. package/dist/esm/ui/Button.js +139 -0
  626. package/dist/esm/ui/Button.js.map +1 -0
  627. package/dist/esm/ui/Label.d.ts +17 -0
  628. package/dist/esm/ui/Label.d.ts.map +1 -0
  629. package/dist/esm/ui/Label.js +37 -0
  630. package/dist/esm/ui/Label.js.map +1 -0
  631. package/dist/esm/ui/Panel.d.ts +38 -0
  632. package/dist/esm/ui/Panel.d.ts.map +1 -0
  633. package/dist/esm/ui/Panel.js +61 -0
  634. package/dist/esm/ui/Panel.js.map +1 -0
  635. package/dist/esm/ui/ProgressBar.d.ts +37 -0
  636. package/dist/esm/ui/ProgressBar.d.ts.map +1 -0
  637. package/dist/esm/ui/ProgressBar.js +76 -0
  638. package/dist/esm/ui/ProgressBar.js.map +1 -0
  639. package/dist/esm/ui/Stack.d.ts +34 -0
  640. package/dist/esm/ui/Stack.d.ts.map +1 -0
  641. package/dist/esm/ui/Stack.js +69 -0
  642. package/dist/esm/ui/Stack.js.map +1 -0
  643. package/dist/esm/ui/UIRoot.d.ts +31 -0
  644. package/dist/esm/ui/UIRoot.d.ts.map +1 -0
  645. package/dist/esm/ui/UIRoot.js +49 -0
  646. package/dist/esm/ui/UIRoot.js.map +1 -0
  647. package/dist/esm/ui/Widget.d.ts +45 -0
  648. package/dist/esm/ui/Widget.d.ts.map +1 -0
  649. package/dist/esm/ui/Widget.js +113 -0
  650. package/dist/esm/ui/Widget.js.map +1 -0
  651. package/dist/esm/ui/index.d.ts +13 -0
  652. package/dist/esm/ui/index.d.ts.map +1 -0
  653. package/dist/exo.debug.esm.js +1 -948
  654. package/dist/exo.debug.esm.js.map +1 -1
  655. package/dist/exo.esm.js +1 -37555
  656. package/dist/exo.esm.js.map +1 -1
  657. package/package.json +31 -13
  658. package/dist/esm/audio/AbstractMedia.d.ts +0 -75
  659. package/dist/esm/audio/AbstractMedia.d.ts.map +0 -1
  660. package/dist/esm/audio/AbstractMedia.js +0 -179
  661. package/dist/esm/audio/AbstractMedia.js.map +0 -1
  662. package/dist/esm/audio/AudioAnalyser.d.ts +0 -128
  663. package/dist/esm/audio/AudioAnalyser.d.ts.map +0 -1
  664. package/dist/esm/audio/AudioAnalyser.js +0 -473
  665. package/dist/esm/audio/AudioAnalyser.js.map +0 -1
  666. package/dist/esm/audio/AudioFilter.d.ts +0 -17
  667. package/dist/esm/audio/AudioFilter.d.ts.map +0 -1
  668. package/dist/esm/audio/AudioFilter.js +0 -15
  669. package/dist/esm/audio/AudioFilter.js.map +0 -1
  670. package/dist/esm/audio/BeatDetector.d.ts +0 -207
  671. package/dist/esm/audio/BeatDetector.d.ts.map +0 -1
  672. package/dist/esm/audio/BeatDetector.js +0 -424
  673. package/dist/esm/audio/BeatDetector.js.map +0 -1
  674. package/dist/esm/audio/Media.d.ts +0 -37
  675. package/dist/esm/audio/Media.d.ts.map +0 -1
  676. package/dist/esm/audio/Music.d.ts +0 -42
  677. package/dist/esm/audio/Music.d.ts.map +0 -1
  678. package/dist/esm/audio/Music.js +0 -164
  679. package/dist/esm/audio/Music.js.map +0 -1
  680. package/dist/esm/audio/OscillatorSound.d.ts +0 -100
  681. package/dist/esm/audio/OscillatorSound.d.ts.map +0 -1
  682. package/dist/esm/audio/OscillatorSound.js +0 -346
  683. package/dist/esm/audio/OscillatorSound.js.map +0 -1
  684. package/dist/esm/audio/dsp/fft.d.ts +0 -23
  685. package/dist/esm/audio/dsp/fft.d.ts.map +0 -1
  686. package/dist/esm/audio/dsp/mel.d.ts +0 -44
  687. package/dist/esm/audio/dsp/mel.d.ts.map +0 -1
  688. package/dist/esm/audio/dsp/mel.js +0 -70
  689. package/dist/esm/audio/dsp/mel.js.map +0 -1
  690. package/dist/esm/audio/dsp/tempogram.d.ts +0 -52
  691. package/dist/esm/audio/dsp/tempogram.d.ts.map +0 -1
  692. package/dist/esm/audio/filters/ChorusFilter.d.ts +0 -54
  693. package/dist/esm/audio/filters/ChorusFilter.d.ts.map +0 -1
  694. package/dist/esm/audio/filters/ChorusFilter.js +0 -155
  695. package/dist/esm/audio/filters/ChorusFilter.js.map +0 -1
  696. package/dist/esm/audio/filters/CompressorFilter.d.ts +0 -54
  697. package/dist/esm/audio/filters/CompressorFilter.d.ts.map +0 -1
  698. package/dist/esm/audio/filters/CompressorFilter.js +0 -123
  699. package/dist/esm/audio/filters/CompressorFilter.js.map +0 -1
  700. package/dist/esm/audio/filters/DelayFilter.d.ts +0 -36
  701. package/dist/esm/audio/filters/DelayFilter.d.ts.map +0 -1
  702. package/dist/esm/audio/filters/DelayFilter.js +0 -114
  703. package/dist/esm/audio/filters/DelayFilter.js.map +0 -1
  704. package/dist/esm/audio/filters/DuckingFilter.d.ts +0 -45
  705. package/dist/esm/audio/filters/DuckingFilter.d.ts.map +0 -1
  706. package/dist/esm/audio/filters/DuckingFilter.js +0 -172
  707. package/dist/esm/audio/filters/DuckingFilter.js.map +0 -1
  708. package/dist/esm/audio/filters/EqualizerFilter.d.ts +0 -51
  709. package/dist/esm/audio/filters/EqualizerFilter.d.ts.map +0 -1
  710. package/dist/esm/audio/filters/EqualizerFilter.js +0 -138
  711. package/dist/esm/audio/filters/EqualizerFilter.js.map +0 -1
  712. package/dist/esm/audio/filters/GranularFilter.d.ts +0 -63
  713. package/dist/esm/audio/filters/GranularFilter.d.ts.map +0 -1
  714. package/dist/esm/audio/filters/GranularFilter.js +0 -107
  715. package/dist/esm/audio/filters/GranularFilter.js.map +0 -1
  716. package/dist/esm/audio/filters/PitchShiftFilter.d.ts +0 -45
  717. package/dist/esm/audio/filters/PitchShiftFilter.d.ts.map +0 -1
  718. package/dist/esm/audio/filters/PitchShiftFilter.js +0 -66
  719. package/dist/esm/audio/filters/PitchShiftFilter.js.map +0 -1
  720. package/dist/esm/audio/filters/ReverbFilter.d.ts +0 -38
  721. package/dist/esm/audio/filters/ReverbFilter.d.ts.map +0 -1
  722. package/dist/esm/audio/filters/ReverbFilter.js +0 -122
  723. package/dist/esm/audio/filters/ReverbFilter.js.map +0 -1
  724. package/dist/esm/audio/filters/VocoderFilter.d.ts +0 -50
  725. package/dist/esm/audio/filters/VocoderFilter.d.ts.map +0 -1
  726. package/dist/esm/audio/filters/VocoderFilter.js +0 -94
  727. package/dist/esm/audio/filters/VocoderFilter.js.map +0 -1
  728. package/dist/esm/audio/filters/WorkletFilter.d.ts.map +0 -1
  729. package/dist/esm/audio/filters/WorkletFilter.js.map +0 -1
  730. package/dist/esm/audio/worklets/beat-detector.worklet.d.ts +0 -2
  731. package/dist/esm/audio/worklets/beat-detector.worklet.d.ts.map +0 -1
  732. package/dist/esm/audio/worklets/beat-detector.worklet.js +0 -647
  733. package/dist/esm/audio/worklets/beat-detector.worklet.js.map +0 -1
  734. package/dist/esm/audio/worklets/granular.worklet.d.ts +0 -2
  735. package/dist/esm/audio/worklets/granular.worklet.d.ts.map +0 -1
  736. package/dist/esm/audio/worklets/granular.worklet.js +0 -89
  737. package/dist/esm/audio/worklets/granular.worklet.js.map +0 -1
  738. package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts +0 -2
  739. package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts.map +0 -1
  740. package/dist/esm/audio/worklets/pitch-shift.worklet.js +0 -74
  741. package/dist/esm/audio/worklets/pitch-shift.worklet.js.map +0 -1
  742. package/dist/esm/audio/worklets/vocoder.worklet.d.ts +0 -2
  743. package/dist/esm/audio/worklets/vocoder.worklet.d.ts.map +0 -1
  744. package/dist/esm/audio/worklets/vocoder.worklet.js +0 -92
  745. package/dist/esm/audio/worklets/vocoder.worklet.js.map +0 -1
  746. package/dist/esm/input/internal/interactionManagerRegistry.d.ts +0 -10
  747. package/dist/esm/input/internal/interactionManagerRegistry.d.ts.map +0 -1
  748. package/dist/esm/input/internal/interactionManagerRegistry.js +0 -10
  749. package/dist/esm/input/internal/interactionManagerRegistry.js.map +0 -1
  750. package/dist/esm/rendering/index.d.ts.map +0 -1
  751. package/dist/esm/rendering/plan/RenderInstruction.js +0 -45
  752. package/dist/esm/rendering/plan/RenderInstruction.js.map +0 -1
  753. package/dist/esm/rendering.d.ts +0 -28
  754. package/dist/esm/rendering.d.ts.map +0 -1
  755. package/dist/esm/rendering.js.map +0 -1
  756. package/dist/esm/resources/JsonStore.d.ts +0 -19
  757. package/dist/esm/resources/JsonStore.d.ts.map +0 -1
  758. package/dist/esm/resources/JsonStore.js +0 -62
  759. package/dist/esm/resources/JsonStore.js.map +0 -1
@@ -1,4 +1,9 @@
1
1
  import { Container } from '../rendering/Container.js';
2
+ import { UIRoot } from '../ui/UIRoot.js';
3
+ import { DisposalScope } from './DisposalScope.js';
4
+ import { serializeTree, migrate, deserializeInto } from './serialization/serialize.js';
5
+ import { SERIALIZATION_VERSION } from './serialization/types.js';
6
+ import { SystemRegistry } from './SystemRegistry.js';
2
7
 
3
8
  /**
4
9
  * Scene-bound input proxy. Bindings created here are automatically unbound
@@ -22,8 +27,7 @@ class SceneInputs {
22
27
  onTrigger(channel, callback, options) {
23
28
  return this._track(this._scene.app.input.onTrigger(channel, callback, options));
24
29
  }
25
- /** @internal */
26
- _disposeAll() {
30
+ destroy() {
27
31
  for (const binding of this._bindings) {
28
32
  binding.unbind();
29
33
  }
@@ -54,8 +58,7 @@ class SceneTweens {
54
58
  this._tweens.add(tween);
55
59
  return this;
56
60
  }
57
- /** @internal */
58
- _disposeAll() {
61
+ destroy() {
59
62
  for (const tween of this._tweens) {
60
63
  tween.stop();
61
64
  }
@@ -84,9 +87,16 @@ class SceneTweens {
84
87
  class Scene {
85
88
  _app = null;
86
89
  _root = new Container();
87
- _stackMode = 'overlay';
90
+ /**
91
+ * When `true`, the scene's `update` and systems are skipped each frame while
92
+ * it keeps drawing — the simple way to freeze gameplay behind a pause menu
93
+ * (show a panel on `scene.ui`, then set `scene.paused = true`).
94
+ */
95
+ paused = false;
88
96
  _inputs = null;
89
97
  _tweens = null;
98
+ _systems = null;
99
+ _disposal = new DisposalScope();
90
100
  get app() {
91
101
  return this._app;
92
102
  }
@@ -121,7 +131,7 @@ class Scene {
121
131
  if (this._app === null) {
122
132
  throw new Error('Scene.inputs is unavailable before the scene is attached to an Application.');
123
133
  }
124
- this._inputs = new SceneInputs(this);
134
+ this._inputs = this._disposal.track(new SceneInputs(this));
125
135
  }
126
136
  return this._inputs;
127
137
  }
@@ -137,15 +147,62 @@ class Scene {
137
147
  if (this._app === null) {
138
148
  throw new Error('Scene.tweens is unavailable before the scene is attached to an Application.');
139
149
  }
140
- this._tweens = new SceneTweens(this);
150
+ this._tweens = this._disposal.track(new SceneTweens(this));
141
151
  }
142
152
  return this._tweens;
143
153
  }
144
- get stackMode() {
145
- return this._stackMode;
154
+ /**
155
+ * Register a {@link Destroyable} to be destroyed automatically when this
156
+ * scene is destroyed (reverse registration order). Returns its argument for
157
+ * fluent capture: `const world = this.track(new PhysicsWorld())`. The
158
+ * scene-bound `tweens` and `inputs` registries are tracked the same way.
159
+ */
160
+ track(item) {
161
+ return this._disposal.track(item);
146
162
  }
147
- set stackMode(mode) {
148
- this._stackMode = mode;
163
+ /**
164
+ * Scene-bound system registry. Add tickable {@link System}s (e.g. a physics
165
+ * world) via `this.systems.add(world)`; each is updated once per frame after
166
+ * {@link Scene.update} (ascending `order`) and destroyed with the scene — no
167
+ * manual `step()` / `destroy()` wiring. Available before the scene is
168
+ * attached to an Application (systems tick only while the scene is active).
169
+ */
170
+ get systems() {
171
+ if (this._systems === null) {
172
+ this._systems = this._disposal.track(new SystemRegistry());
173
+ }
174
+ return this._systems;
175
+ }
176
+ /** @internal — called by {@link SceneManager} each frame after `update`. */
177
+ _tickSystems(delta) {
178
+ this._systems?._tick(delta);
179
+ }
180
+ _ui = null;
181
+ /**
182
+ * Scene-bound UI layer, rendered screen-fixed on top of the scene content
183
+ * (after {@link Scene.draw}). Lazily created and destroyed with the scene;
184
+ * add widgets via `this.ui.addChild(...)`.
185
+ *
186
+ * Unlike {@link Scene.root}, the UI layer **is** auto-rendered each frame — a
187
+ * first-class overlay that always sits above the world. Its children live in
188
+ * screen space (origin top-left, `0..width` × `0..height`); pointer and
189
+ * keyboard input route to them ahead of the world layer.
190
+ */
191
+ get ui() {
192
+ if (this._ui === null) {
193
+ this._ui = this._disposal.track(new UIRoot());
194
+ // If the scene is already active (its root carries a stage), bind the UI
195
+ // layer now; otherwise SceneManager attaches it when the scene activates.
196
+ if (this._root._getStage() !== null) {
197
+ this._app?.interaction.attachUIRoot(this._ui);
198
+ }
199
+ }
200
+ return this._ui;
201
+ }
202
+ /** @internal — the UI layer if materialized, else `null` (no lazy allocation). */
203
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- UI is an acronym (cf. HTMLText)
204
+ _peekUI() {
205
+ return this._ui;
149
206
  }
150
207
  addChild(child) {
151
208
  this._root.addChild(child);
@@ -155,9 +212,43 @@ class Scene {
155
212
  this._root.removeChild(child);
156
213
  return this;
157
214
  }
158
- setParticipationPolicy(policy) {
159
- if (policy.mode) {
160
- this._stackMode = policy.mode;
215
+ /**
216
+ * Serialize this scene's structural root subtree to a plain, JSON-able
217
+ * {@link SerializedScene} descriptor.
218
+ *
219
+ * Captures **data, not behaviour**: structure, transforms, visuals and asset
220
+ * references — never update logic, signal handlers, tweens or systems. When
221
+ * the scene is attached to an {@link Application}, texture/asset references
222
+ * resolve to their {@link Loader} source keys. Reattach behaviour in code
223
+ * after {@link Scene.deserialize}.
224
+ */
225
+ serialize() {
226
+ const loader = this._app?.loader ?? null;
227
+ const registry = this._app?.serializers;
228
+ const data = { version: SERIALIZATION_VERSION, root: serializeTree(this._root, loader, registry) };
229
+ const ui = this._peekUI();
230
+ if (ui !== null) {
231
+ data.ui = serializeTree(ui, loader, registry);
232
+ }
233
+ return data;
234
+ }
235
+ /**
236
+ * Rebuild this scene's root subtree from a {@link SerializedScene} produced
237
+ * by {@link Scene.serialize}. Existing root children are removed first, then
238
+ * the descriptor's children are reconstructed under {@link Scene.root}.
239
+ *
240
+ * Assets referenced by the data must already be loaded into the
241
+ * application's {@link Loader} (pre-load contract). Older documents are
242
+ * migrated to the current format; documents newer than the running engine
243
+ * throw. Returns `this`.
244
+ */
245
+ deserialize(data) {
246
+ const migrated = migrate(data);
247
+ const loader = this._app?.loader ?? null;
248
+ const registry = this._app?.serializers;
249
+ deserializeInto(this._root, migrated.root, loader, registry);
250
+ if (migrated.ui !== undefined) {
251
+ deserializeInto(this.ui, migrated.ui, loader, registry);
161
252
  }
162
253
  return this;
163
254
  }
@@ -213,10 +304,12 @@ class Scene {
213
304
  // override in subclass
214
305
  }
215
306
  destroy() {
216
- this._inputs?._disposeAll();
307
+ // Destroys everything tracked (scene-bound tweens/inputs + user-tracked
308
+ // resources) in reverse registration order, then the scene-graph root.
309
+ this._disposal.destroy();
217
310
  this._inputs = null;
218
- this._tweens?._disposeAll();
219
311
  this._tweens = null;
312
+ this._systems = null;
220
313
  this._root.destroy();
221
314
  this._app = null;
222
315
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.js","sources":["../../../../src/core/Scene.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Scene.js","sources":["../../../../src/core/Scene.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import type { Application } from './Application';
2
2
  import { Color } from './Color';
3
- import type { SceneParticipationPolicy } from './Scene';
4
3
  import { Scene } from './Scene';
5
4
  import { Signal } from './Signal';
6
5
  import type { Time } from './Time';
@@ -21,90 +20,53 @@ export interface SetSceneOptions {
21
20
  transition?: SceneTransition;
22
21
  }
23
22
  /**
24
- * Options passed to {@link SceneManager.pushScene}. Inherits
25
- * {@link SceneParticipationPolicy} so the pushed scene's stack mode
26
- * can be overridden at the call site without subclassing.
27
- */
28
- export interface PushSceneOptions extends SceneParticipationPolicy {
29
- transition?: SceneTransition;
30
- }
31
- /** Options passed to {@link SceneManager.popScene}. */
32
- export interface PopSceneOptions {
33
- transition?: SceneTransition;
34
- }
35
- /**
36
- * Stack-based scene controller owned by {@link Application}. Maintains an
37
- * ordered stack of {@link Scene} instances, each tagged with its
38
- * participation policy ({@link SceneStackMode}).
39
- * Scenes higher on the stack overlay scenes lower; the policy of each
40
- * scene determines whether scenes below continue to update / render.
41
- *
42
- * Use {@link SceneManager.setScene} to replace the entire stack with one
43
- * scene, {@link SceneManager.pushScene} to overlay a new scene on top, and
44
- * {@link SceneManager.popScene} to remove the topmost. All three accept an
45
- * optional fade transition.
23
+ * Single-active-scene controller owned by {@link Application}. Holds at most one
24
+ * active {@link Scene} (the current "screen"); {@link SceneManager.setScene}
25
+ * switches to a new scene — unloading the previous one with an optional fade
26
+ * transition.
46
27
  *
28
+ * There is no scene stack: overlays, HUDs and pause menus belong on
29
+ * {@link Scene.ui} (the screen-fixed UI layer), and "freeze the game but keep
30
+ * drawing it" is `scene.paused = true` (skips the scene's `update` + systems
31
+ * while it keeps rendering).
47
32
  */
48
33
  export declare class SceneManager {
49
34
  private readonly _app;
50
- private readonly _stack;
35
+ private _activeScene;
51
36
  private readonly _transitionOverlay;
52
37
  private _transition;
53
- /** Fires whenever the topmost scene changes (push, pop, set, or clear). Payload is the new top, or `null` when the stack becomes empty. */
38
+ /** Fires whenever the active scene changes (set or clear). Payload is the new scene, or `null` when cleared. */
54
39
  readonly onChangeScene: Signal<[Scene | null]>;
55
- /** Fires after a scene's `init` resolves and it joins the stack. */
40
+ /** Fires after a scene's `init` resolves and it becomes active. */
56
41
  readonly onStartScene: Signal<[Scene]>;
57
- /** Fires once per frame for the topmost scene after its `update` ran. */
42
+ /** Fires once per frame for the active scene after its `update` ran. */
58
43
  readonly onUpdateScene: Signal<[Scene]>;
59
44
  /** Fires just before a scene is unloaded (`unload` then `destroy`). */
60
45
  readonly onStopScene: Signal<[Scene]>;
61
46
  private readonly _asyncUpdateWarned;
62
47
  private readonly _asyncDrawWarned;
63
- private readonly _updateScratch;
64
- private readonly _drawScratch;
65
48
  constructor(app: Application);
49
+ /** The active scene, or `null` when none is set. */
66
50
  get currentScene(): Scene | null;
67
51
  set currentScene(scene: Scene | null);
68
- get scenes(): readonly Scene[];
69
52
  /**
70
- * Replace the entire scene stack with `scene`, or clear it when `scene`
71
- * is `null`. Existing scenes are unloaded in reverse order. If `scene`
72
- * is already the topmost, only the scenes underneath are unloaded
73
- * (no-op when it is also the only scene).
74
- *
75
- * Throws if `scene` is somewhere in the stack but not the top.
53
+ * Switch to `scene` (or clear to `null`), unloading the previously active
54
+ * scene. No-op when `scene` is already active. An optional fade transition
55
+ * runs the swap at full opacity. The new scene is loaded before the old one
56
+ * is torn down, so there is no blank frame between them.
76
57
  */
77
58
  setScene(scene: Scene | null, options?: SetSceneOptions): Promise<this>;
78
59
  /**
79
- * Push `scene` onto the stack, leaving any underlying scenes intact.
80
- * Resolves once the pushed scene's async `load` + `init` complete.
81
- * `options` may override the scene's declared participation policy
82
- * (stack mode, input mode) for this particular push.
83
- *
84
- * Throws if `scene` is already present in the stack.
85
- */
86
- pushScene(scene: Scene, options?: PushSceneOptions): Promise<this>;
87
- /**
88
- * Remove the topmost scene from the stack. Resolves once the scene's
89
- * `unload` finishes. No-op when the stack is empty.
90
- */
91
- popScene(options?: PopSceneOptions): Promise<this>;
92
- /**
93
- * Per-frame entry point called by {@link Application.update}. Advances
94
- * any active fade transition, then iterates the stack top-to-bottom
95
- * deciding which scenes update and which draw based on each scene's
96
- * participation policy (`opaque` covers everything below, `modal`
97
- * covers only updates).
60
+ * Per-frame entry point called by {@link Application.update}. Advances any
61
+ * active fade transition, then — for the active scene runs `update` and
62
+ * ticks its systems (unless {@link Scene.paused}), draws it, and renders its
63
+ * UI layer on top.
98
64
  */
99
65
  update(delta: Time): this;
100
66
  destroy(): void;
101
67
  private _prepareScene;
102
68
  private _disposeScene;
103
- private _unloadAllScenes;
104
- private _unloadCoveredScenes;
105
- private _unloadAllScenesOnDestroy;
106
- private _resolveParticipationPolicy;
107
- private _resolveParticipants;
69
+ private _unloadActiveSceneOnDestroy;
108
70
  private _runWithTransition;
109
71
  private _advanceTransition;
110
72
  private _executeTransitionAction;
@@ -1 +1 @@
1
- {"version":3,"file":"SceneManager.d.ts","sourceRoot":"","sources":["../../../src/core/SceneManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,wBAAwB,EAAkB,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAWnC;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,yEAAyE;AACzE,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAElD,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,wBAAwB;IAChE,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAgCD;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8C;IACjF,OAAO,CAAC,WAAW,CAAqC;IAExD,2IAA2I;IAC3I,SAAgB,aAAa,yBAAgC;IAC7D,oEAAoE;IACpE,SAAgB,YAAY,kBAAyB;IACrD,yEAAyE;IACzE,SAAgB,aAAa,kBAAyB;IACtD,uEAAuE;IACvE,SAAgB,WAAW,kBAAyB;IAEpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwB;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;IAEzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEzB,GAAG,EAAE,WAAW;IAInC,IAAW,YAAY,IAAI,KAAK,GAAG,IAAI,CAEtC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAE1C;IAED,IAAW,MAAM,IAAI,SAAS,KAAK,EAAE,CAEpC;IAED;;;;;;;OAOG;IACU,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCxF;;;;;;;OAOG;IACU,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnF;;;OAGG;IACU,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBnE;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IA0CzB,OAAO,IAAI,IAAI;YAkBR,aAAa;YA0Cb,aAAa;YAOb,gBAAgB;YAQhB,oBAAoB;YAmBpB,yBAAyB;IAYvC,OAAO,CAAC,2BAA2B;IAMnC,OAAO,CAAC,oBAAoB;YA+Bd,kBAAkB;IAiChC,OAAO,CAAC,kBAAkB;YAyBZ,wBAAwB;IA2BtC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,wBAAwB;CAoBjC"}
1
+ {"version":3,"file":"SceneManager.d.ts","sourceRoot":"","sources":["../../../src/core/SceneManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,yEAAyE;AACzE,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAElD,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAgCD;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8C;IACjF,OAAO,CAAC,WAAW,CAAqC;IAExD,gHAAgH;IAChH,SAAgB,aAAa,yBAAgC;IAC7D,mEAAmE;IACnE,SAAgB,YAAY,kBAAyB;IACrD,wEAAwE;IACxE,SAAgB,aAAa,kBAAyB;IACtD,uEAAuE;IACvE,SAAgB,WAAW,kBAAyB;IAEpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwB;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;gBAEtC,GAAG,EAAE,WAAW;IAInC,oDAAoD;IACpD,IAAW,YAAY,IAAI,KAAK,GAAG,IAAI,CAEtC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAE1C;IAED;;;;;OAKG;IACU,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxF;;;;;OAKG;IACI,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAgDzB,OAAO,IAAI,IAAI;YAkBR,aAAa;YAqDb,aAAa;YAeb,2BAA2B;YAgB3B,kBAAkB;IAiChC,OAAO,CAAC,kBAAkB;YAyBZ,wBAAwB;IA2BtC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,wBAAwB;CAoBjC"}
@@ -18,152 +18,102 @@ const createOverlayMesh = () => new TransitionOverlayMesh({
18
18
  });
19
19
  const defaultFadeTransitionDuration = 220;
20
20
  /**
21
- * Stack-based scene controller owned by {@link Application}. Maintains an
22
- * ordered stack of {@link Scene} instances, each tagged with its
23
- * participation policy ({@link SceneStackMode}).
24
- * Scenes higher on the stack overlay scenes lower; the policy of each
25
- * scene determines whether scenes below continue to update / render.
26
- *
27
- * Use {@link SceneManager.setScene} to replace the entire stack with one
28
- * scene, {@link SceneManager.pushScene} to overlay a new scene on top, and
29
- * {@link SceneManager.popScene} to remove the topmost. All three accept an
30
- * optional fade transition.
21
+ * Single-active-scene controller owned by {@link Application}. Holds at most one
22
+ * active {@link Scene} (the current "screen"); {@link SceneManager.setScene}
23
+ * switches to a new scene — unloading the previous one — with an optional fade
24
+ * transition.
31
25
  *
26
+ * There is no scene stack: overlays, HUDs and pause menus belong on
27
+ * {@link Scene.ui} (the screen-fixed UI layer), and "freeze the game but keep
28
+ * drawing it" is `scene.paused = true` (skips the scene's `update` + systems
29
+ * while it keeps rendering).
32
30
  */
33
31
  class SceneManager {
34
32
  _app;
35
- _stack = [];
33
+ _activeScene = null;
36
34
  _transitionOverlay = createOverlayMesh();
37
35
  _transition = null;
38
- /** Fires whenever the topmost scene changes (push, pop, set, or clear). Payload is the new top, or `null` when the stack becomes empty. */
36
+ /** Fires whenever the active scene changes (set or clear). Payload is the new scene, or `null` when cleared. */
39
37
  onChangeScene = new Signal();
40
- /** Fires after a scene's `init` resolves and it joins the stack. */
38
+ /** Fires after a scene's `init` resolves and it becomes active. */
41
39
  onStartScene = new Signal();
42
- /** Fires once per frame for the topmost scene after its `update` ran. */
40
+ /** Fires once per frame for the active scene after its `update` ran. */
43
41
  onUpdateScene = new Signal();
44
42
  /** Fires just before a scene is unloaded (`unload` then `destroy`). */
45
43
  onStopScene = new Signal();
46
44
  _asyncUpdateWarned = new WeakSet();
47
45
  _asyncDrawWarned = new WeakSet();
48
- _updateScratch = [];
49
- _drawScratch = [];
50
46
  constructor(app) {
51
47
  this._app = app;
52
48
  }
49
+ /** The active scene, or `null` when none is set. */
53
50
  get currentScene() {
54
- return this._stack.at(-1)?.scene ?? null;
51
+ return this._activeScene;
55
52
  }
56
53
  set currentScene(scene) {
57
54
  void this.setScene(scene);
58
55
  }
59
- get scenes() {
60
- return this._stack.map(entry => entry.scene);
61
- }
62
56
  /**
63
- * Replace the entire scene stack with `scene`, or clear it when `scene`
64
- * is `null`. Existing scenes are unloaded in reverse order. If `scene`
65
- * is already the topmost, only the scenes underneath are unloaded
66
- * (no-op when it is also the only scene).
67
- *
68
- * Throws if `scene` is somewhere in the stack but not the top.
57
+ * Switch to `scene` (or clear to `null`), unloading the previously active
58
+ * scene. No-op when `scene` is already active. An optional fade transition
59
+ * runs the swap at full opacity. The new scene is loaded before the old one
60
+ * is torn down, so there is no blank frame between them.
69
61
  */
70
62
  async setScene(scene, options = {}) {
71
63
  await this._runWithTransition(async () => {
72
- if (scene === null) {
73
- await this._unloadAllScenes();
74
- this.onChangeScene.dispatch(null);
75
- return;
76
- }
77
- if (this.currentScene === scene) {
78
- if (this._stack.length > 1) {
79
- await this._unloadCoveredScenes();
80
- }
64
+ if (scene === this._activeScene) {
81
65
  return;
82
66
  }
83
- if (this._stack.some(entry => entry.scene === scene)) {
84
- throw new Error('Cannot set a scene that is already present in the scene stack.');
67
+ if (scene !== null) {
68
+ await this._prepareScene(scene);
85
69
  }
86
- const policy = this._resolveParticipationPolicy(scene);
87
- await this._prepareScene(scene);
88
- await this._unloadAllScenes();
89
- this._stack.push({ scene, policy });
90
- this.onChangeScene.dispatch(scene);
91
- this.onStartScene.dispatch(scene);
92
- }, options.transition);
93
- return this;
94
- }
95
- /**
96
- * Push `scene` onto the stack, leaving any underlying scenes intact.
97
- * Resolves once the pushed scene's async `load` + `init` complete.
98
- * `options` may override the scene's declared participation policy
99
- * (stack mode, input mode) for this particular push.
100
- *
101
- * Throws if `scene` is already present in the stack.
102
- */
103
- async pushScene(scene, options = {}) {
104
- await this._runWithTransition(async () => {
105
- if (this._stack.some(entry => entry.scene === scene)) {
106
- throw new Error('Cannot push a scene instance that is already present in the stack.');
70
+ const previous = this._activeScene;
71
+ this._activeScene = scene;
72
+ if (previous !== null) {
73
+ await this._disposeScene(previous);
107
74
  }
108
- const policy = this._resolveParticipationPolicy(scene, options);
109
- await this._prepareScene(scene);
110
- this._stack.push({ scene, policy });
111
75
  this.onChangeScene.dispatch(scene);
112
- this.onStartScene.dispatch(scene);
113
- }, options.transition);
114
- return this;
115
- }
116
- /**
117
- * Remove the topmost scene from the stack. Resolves once the scene's
118
- * `unload` finishes. No-op when the stack is empty.
119
- */
120
- async popScene(options = {}) {
121
- await this._runWithTransition(async () => {
122
- if (this._stack.length === 0) {
123
- return;
76
+ if (scene !== null) {
77
+ this.onStartScene.dispatch(scene);
124
78
  }
125
- const removed = this._stack.at(-1);
126
- if (!removed) {
127
- return;
128
- }
129
- await this._disposeScene(removed.scene);
130
- this._stack.pop();
131
- this.onChangeScene.dispatch(this.currentScene);
132
79
  }, options.transition);
133
80
  return this;
134
81
  }
135
82
  /**
136
- * Per-frame entry point called by {@link Application.update}. Advances
137
- * any active fade transition, then iterates the stack top-to-bottom
138
- * deciding which scenes update and which draw based on each scene's
139
- * participation policy (`opaque` covers everything below, `modal`
140
- * covers only updates).
83
+ * Per-frame entry point called by {@link Application.update}. Advances any
84
+ * active fade transition, then for the active scene — runs `update` and
85
+ * ticks its systems (unless {@link Scene.paused}), draws it, and renders its
86
+ * UI layer on top.
141
87
  */
142
88
  update(delta) {
143
89
  this._advanceTransition(delta.milliseconds);
144
- this._resolveParticipants();
145
- for (const scene of this._updateScratch) {
146
- // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
147
- const updateResult = scene.update(delta);
148
- if (!this._asyncUpdateWarned.has(scene) && updateResult instanceof Promise) {
149
- this._asyncUpdateWarned.add(scene);
150
- console.warn(`[ExoJS] Scene.update() returned a Promise. update() must be synchronous — async logic here breaks frame timing and silently drops errors. Move async work into load() or init() instead.`);
90
+ const scene = this._activeScene;
91
+ if (scene !== null) {
92
+ if (!scene.paused) {
93
+ // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
94
+ const updateResult = scene.update(delta);
95
+ if (!this._asyncUpdateWarned.has(scene) && updateResult instanceof Promise) {
96
+ this._asyncUpdateWarned.add(scene);
97
+ console.warn(`[ExoJS] Scene.update() returned a Promise. update() must be synchronous — async logic here breaks frame timing and silently drops errors. Move async work into load() or init() instead.`);
98
+ }
99
+ // Tick the scene's systems (e.g. a physics world) after its update().
100
+ scene._tickSystems(delta);
151
101
  }
152
- }
153
- for (const scene of this._drawScratch) {
154
102
  // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
155
103
  const drawResult = scene.draw(this._app.rendering);
156
104
  if (!this._asyncDrawWarned.has(scene) && drawResult instanceof Promise) {
157
105
  this._asyncDrawWarned.add(scene);
158
106
  console.warn(`[ExoJS] Scene.draw() returned a Promise. draw() must be synchronous — an async draw() produces incomplete frames and silently drops errors.`);
159
107
  }
108
+ // Auto-render the scene's screen-fixed UI layer above its content.
109
+ scene._peekUI()?._render(this._app.rendering);
160
110
  }
161
111
  const transitionAlpha = this._getTransitionAlpha();
162
112
  if (transitionAlpha > 0) {
163
113
  this._renderTransitionOverlay(transitionAlpha);
164
114
  }
165
- if (this.currentScene !== null) {
166
- this.onUpdateScene.dispatch(this.currentScene);
115
+ if (scene !== null) {
116
+ this.onUpdateScene.dispatch(scene);
167
117
  }
168
118
  return this;
169
119
  }
@@ -174,7 +124,7 @@ class SceneManager {
174
124
  transition.color.destroy();
175
125
  transition.reject(new Error('SceneManager was destroyed while a transition was active.'));
176
126
  }
177
- void this._unloadAllScenesOnDestroy();
127
+ void this._unloadActiveSceneOnDestroy();
178
128
  this._transitionOverlay.destroy();
179
129
  this.onChangeScene.destroy();
180
130
  this.onStartScene.destroy();
@@ -189,6 +139,14 @@ class SceneManager {
189
139
  if (scene.root.children.length > 0 && scene.draw === Scene.prototype.draw) {
190
140
  console.warn(`[ExoJS] Scene.root has ${scene.root.children.length} child(ren) after init() but draw() is not overridden. Scene.root is not auto-rendered — call context.render(this.root) inside draw().`);
191
141
  }
142
+ // Bind the scene's root to the app's interaction manager so its nodes
143
+ // route picking/bounds notifications to this Application (no global).
144
+ this._app.interaction.attachRoot(scene.root);
145
+ // Bind the UI layer too, if it was materialized before activation.
146
+ const ui = scene._peekUI();
147
+ if (ui !== null) {
148
+ this._app.interaction.attachUIRoot(ui);
149
+ }
192
150
  }
193
151
  catch (error) {
194
152
  let cleanupError = null;
@@ -219,69 +177,26 @@ class SceneManager {
219
177
  async _disposeScene(scene) {
220
178
  this.onStopScene.dispatch(scene);
221
179
  await scene.unload(this._app.loader);
180
+ const ui = scene._peekUI();
181
+ if (ui !== null) {
182
+ this._app.interaction.detachUIRoot(ui);
183
+ }
184
+ this._app.interaction.detachRoot(scene.root);
222
185
  scene.destroy();
223
186
  scene.app = null;
224
187
  }
225
- async _unloadAllScenes() {
226
- for (let index = this._stack.length - 1; index >= 0; index--) {
227
- await this._disposeScene(this._stack[index].scene);
228
- }
229
- this._stack.length = 0;
230
- }
231
- async _unloadCoveredScenes() {
232
- if (this._stack.length <= 1) {
188
+ async _unloadActiveSceneOnDestroy() {
189
+ const scene = this._activeScene;
190
+ if (scene === null) {
233
191
  return;
234
192
  }
235
- const activeEntry = this._stack.at(-1);
236
- if (!activeEntry) {
237
- return;
238
- }
239
- for (let index = this._stack.length - 2; index >= 0; index--) {
240
- await this._disposeScene(this._stack[index].scene);
241
- }
242
- this._stack.length = 0;
243
- this._stack.push(activeEntry);
244
- }
245
- async _unloadAllScenesOnDestroy() {
246
- for (let index = this._stack.length - 1; index >= 0; index--) {
247
- try {
248
- await this._disposeScene(this._stack[index].scene);
249
- }
250
- catch (error) {
251
- console.error('SceneManager.destroy() failed to unload the active scene.', error);
252
- }
193
+ this._activeScene = null;
194
+ try {
195
+ await this._disposeScene(scene);
253
196
  }
254
- this._stack.length = 0;
255
- }
256
- _resolveParticipationPolicy(scene, overrides = {}) {
257
- const mode = overrides.mode ?? scene.stackMode ?? 'overlay';
258
- return { mode };
259
- }
260
- _resolveParticipants() {
261
- const updateScenes = this._updateScratch;
262
- const drawScenes = this._drawScratch;
263
- updateScenes.length = 0;
264
- drawScenes.length = 0;
265
- let allowBelowUpdate = true;
266
- let allowBelowDraw = true;
267
- for (let index = this._stack.length - 1; index >= 0; index--) {
268
- const entry = this._stack[index];
269
- if (allowBelowUpdate) {
270
- updateScenes.push(entry.scene);
271
- }
272
- if (allowBelowDraw) {
273
- drawScenes.push(entry.scene);
274
- }
275
- if (entry.policy.mode === 'opaque') {
276
- allowBelowUpdate = false;
277
- allowBelowDraw = false;
278
- }
279
- else if (entry.policy.mode === 'modal') {
280
- allowBelowUpdate = false;
281
- }
197
+ catch (error) {
198
+ console.error('SceneManager.destroy() failed to unload the active scene.', error);
282
199
  }
283
- updateScenes.reverse();
284
- drawScenes.reverse();
285
200
  }
286
201
  async _runWithTransition(action, transition) {
287
202
  if (transition?.type !== 'fade') {