@codexo/exojs 0.14.0 → 0.15.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 (237) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/README.md +2 -4
  3. package/dist/esm/animation/Tween.d.ts.map +1 -1
  4. package/dist/esm/animation/Tween.js +0 -1
  5. package/dist/esm/animation/Tween.js.map +1 -1
  6. package/dist/esm/animation/TweenManager.d.ts +44 -5
  7. package/dist/esm/animation/TweenManager.d.ts.map +1 -1
  8. package/dist/esm/animation/TweenManager.js +57 -5
  9. package/dist/esm/animation/TweenManager.js.map +1 -1
  10. package/dist/esm/animation/TweenSequencer.d.ts +139 -0
  11. package/dist/esm/animation/TweenSequencer.d.ts.map +1 -0
  12. package/dist/esm/animation/TweenSequencer.js +305 -0
  13. package/dist/esm/animation/TweenSequencer.js.map +1 -0
  14. package/dist/esm/animation/index.d.ts +1 -0
  15. package/dist/esm/animation/index.d.ts.map +1 -1
  16. package/dist/esm/audio/WorkletEffect.d.ts +34 -20
  17. package/dist/esm/audio/WorkletEffect.d.ts.map +1 -1
  18. package/dist/esm/audio/WorkletEffect.js +92 -25
  19. package/dist/esm/audio/WorkletEffect.js.map +1 -1
  20. package/dist/esm/core/Application.d.ts +43 -5
  21. package/dist/esm/core/Application.d.ts.map +1 -1
  22. package/dist/esm/core/Application.js +83 -9
  23. package/dist/esm/core/Application.js.map +1 -1
  24. package/dist/esm/core/BuildInfo.js +2 -2
  25. package/dist/esm/core/Codec.d.ts +41 -0
  26. package/dist/esm/core/Codec.d.ts.map +1 -0
  27. package/dist/esm/core/Codec.js +79 -0
  28. package/dist/esm/core/Codec.js.map +1 -0
  29. package/dist/esm/core/FixedTimestep.d.ts +28 -0
  30. package/dist/esm/core/FixedTimestep.d.ts.map +1 -0
  31. package/dist/esm/core/FixedTimestep.js +62 -0
  32. package/dist/esm/core/FixedTimestep.js.map +1 -0
  33. package/dist/esm/core/Scene.d.ts +14 -0
  34. package/dist/esm/core/Scene.d.ts.map +1 -1
  35. package/dist/esm/core/Scene.js +18 -0
  36. package/dist/esm/core/Scene.js.map +1 -1
  37. package/dist/esm/core/SceneManager.d.ts +7 -0
  38. package/dist/esm/core/SceneManager.d.ts.map +1 -1
  39. package/dist/esm/core/SceneManager.js +20 -4
  40. package/dist/esm/core/SceneManager.js.map +1 -1
  41. package/dist/esm/core/SceneNode.d.ts +36 -6
  42. package/dist/esm/core/SceneNode.d.ts.map +1 -1
  43. package/dist/esm/core/SceneNode.js +63 -11
  44. package/dist/esm/core/SceneNode.js.map +1 -1
  45. package/dist/esm/core/Stage.d.ts +7 -0
  46. package/dist/esm/core/Stage.d.ts.map +1 -1
  47. package/dist/esm/core/SystemRegistry.d.ts +5 -0
  48. package/dist/esm/core/SystemRegistry.d.ts.map +1 -1
  49. package/dist/esm/core/SystemRegistry.js +10 -0
  50. package/dist/esm/core/SystemRegistry.js.map +1 -1
  51. package/dist/esm/core/index.d.ts +4 -0
  52. package/dist/esm/core/index.d.ts.map +1 -1
  53. package/dist/esm/core/logging.d.ts +34 -0
  54. package/dist/esm/core/logging.d.ts.map +1 -0
  55. package/dist/esm/core/logging.js +59 -0
  56. package/dist/esm/core/logging.js.map +1 -0
  57. package/dist/esm/core/serialization/commonFields.d.ts.map +1 -1
  58. package/dist/esm/core/serialization/commonFields.js +6 -0
  59. package/dist/esm/core/serialization/commonFields.js.map +1 -1
  60. package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -1
  61. package/dist/esm/core/serialization/renderingSerializers.js +14 -5
  62. package/dist/esm/core/serialization/renderingSerializers.js.map +1 -1
  63. package/dist/esm/index.js +7 -2
  64. package/dist/esm/index.js.map +1 -1
  65. package/dist/esm/input/Gamepad.d.ts +10 -0
  66. package/dist/esm/input/Gamepad.d.ts.map +1 -1
  67. package/dist/esm/input/Gamepad.js +12 -0
  68. package/dist/esm/input/Gamepad.js.map +1 -1
  69. package/dist/esm/input/InputManager.d.ts.map +1 -1
  70. package/dist/esm/input/InputManager.js +5 -0
  71. package/dist/esm/input/InputManager.js.map +1 -1
  72. package/dist/esm/input/InteractionManager.js +4 -4
  73. package/dist/esm/input/InteractionManager.js.map +1 -1
  74. package/dist/esm/math/collision-detection.js +1 -1
  75. package/dist/esm/rendering/BackendTargetPass.d.ts +1 -1
  76. package/dist/esm/rendering/BackendTargetPass.d.ts.map +1 -1
  77. package/dist/esm/rendering/CallbackRenderPass.d.ts +14 -10
  78. package/dist/esm/rendering/CallbackRenderPass.d.ts.map +1 -1
  79. package/dist/esm/rendering/CallbackRenderPass.js +16 -11
  80. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  81. package/dist/esm/rendering/DrawContext.d.ts +48 -0
  82. package/dist/esm/rendering/DrawContext.d.ts.map +1 -0
  83. package/dist/esm/rendering/PassContext.d.ts +42 -0
  84. package/dist/esm/rendering/PassContext.d.ts.map +1 -0
  85. package/dist/esm/rendering/PassContext.js +48 -0
  86. package/dist/esm/rendering/PassContext.js.map +1 -0
  87. package/dist/esm/rendering/RenderBackend.d.ts +14 -0
  88. package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
  89. package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
  90. package/dist/esm/rendering/RenderNode.js +2 -2
  91. package/dist/esm/rendering/RenderNode.js.map +1 -1
  92. package/dist/esm/rendering/RenderNodePass.d.ts +1 -1
  93. package/dist/esm/rendering/RenderNodePass.d.ts.map +1 -1
  94. package/dist/esm/rendering/RenderingContext.d.ts +47 -16
  95. package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
  96. package/dist/esm/rendering/RenderingContext.js +134 -36
  97. package/dist/esm/rendering/RenderingContext.js.map +1 -1
  98. package/dist/esm/rendering/TransformBuffer.d.ts +23 -0
  99. package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
  100. package/dist/esm/rendering/TransformBuffer.js +58 -0
  101. package/dist/esm/rendering/TransformBuffer.js.map +1 -1
  102. package/dist/esm/rendering/View.d.ts +38 -0
  103. package/dist/esm/rendering/View.d.ts.map +1 -1
  104. package/dist/esm/rendering/View.js +37 -0
  105. package/dist/esm/rendering/View.js.map +1 -1
  106. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
  107. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +9 -2
  108. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  109. package/dist/esm/rendering/material/MeshMaterial.d.ts +20 -1
  110. package/dist/esm/rendering/material/MeshMaterial.d.ts.map +1 -1
  111. package/dist/esm/rendering/material/MeshMaterial.js +17 -0
  112. package/dist/esm/rendering/material/MeshMaterial.js.map +1 -1
  113. package/dist/esm/rendering/material/SpriteMaterial.d.ts +20 -1
  114. package/dist/esm/rendering/material/SpriteMaterial.d.ts.map +1 -1
  115. package/dist/esm/rendering/material/SpriteMaterial.js +17 -0
  116. package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -1
  117. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
  118. package/dist/esm/rendering/plan/RenderEffectExecutor.js +7 -2
  119. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
  120. package/dist/esm/rendering/plan/RenderInstruction.d.ts +5 -2
  121. package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
  122. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
  123. package/dist/esm/rendering/plan/RenderPlanBuilder.js +23 -5
  124. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
  125. package/dist/esm/rendering/plan/RenderScope.d.ts +7 -0
  126. package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
  127. package/dist/esm/rendering/primitives/Graphics.d.ts +10 -1
  128. package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
  129. package/dist/esm/rendering/primitives/Graphics.js +30 -9
  130. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  131. package/dist/esm/rendering/public.d.ts +5 -5
  132. package/dist/esm/rendering/public.d.ts.map +1 -1
  133. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +56 -19
  134. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
  135. package/dist/esm/rendering/sprite/AnimatedSprite.js +121 -31
  136. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
  137. package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
  138. package/dist/esm/rendering/text/BitmapText.js +2 -0
  139. package/dist/esm/rendering/text/BitmapText.js.map +1 -1
  140. package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
  141. package/dist/esm/rendering/text/HTMLText.js +2 -2
  142. package/dist/esm/rendering/text/HTMLText.js.map +1 -1
  143. package/dist/esm/rendering/text/Text.d.ts.map +1 -1
  144. package/dist/esm/rendering/text/Text.js +2 -0
  145. package/dist/esm/rendering/text/Text.js.map +1 -1
  146. package/dist/esm/rendering/types.d.ts +37 -13
  147. package/dist/esm/rendering/types.d.ts.map +1 -1
  148. package/dist/esm/rendering/types.js +37 -13
  149. package/dist/esm/rendering/types.js.map +1 -1
  150. package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts +41 -0
  151. package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts.map +1 -0
  152. package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js +222 -0
  153. package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js.map +1 -0
  154. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +34 -1
  155. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
  156. package/dist/esm/rendering/webgl2/WebGl2Backend.js +108 -60
  157. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  158. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
  159. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +50 -11
  160. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
  161. package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js +4 -0
  162. package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js.map +1 -0
  163. package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js +4 -0
  164. package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js.map +1 -0
  165. package/dist/esm/rendering/webgl2/glsl/text.vert.js +1 -1
  166. package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts +72 -0
  167. package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts.map +1 -0
  168. package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js +494 -0
  169. package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js.map +1 -0
  170. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +27 -0
  171. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
  172. package/dist/esm/rendering/webgpu/WebGpuBackend.js +157 -60
  173. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  174. package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
  175. package/dist/esm/rendering/webgpu/WebGpuBlendState.js +5 -29
  176. package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
  177. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +2 -0
  178. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts.map +1 -1
  179. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +2 -1
  180. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
  181. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +4 -0
  182. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
  183. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +3 -1
  184. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  185. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts +2 -0
  186. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -1
  187. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +2 -1
  188. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -1
  189. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +8 -0
  190. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts.map +1 -1
  191. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +20 -0
  192. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -1
  193. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts +6 -0
  194. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -1
  195. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +4 -1
  196. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -1
  197. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +2 -0
  198. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
  199. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +2 -1
  200. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  201. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +2 -0
  202. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
  203. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +2 -1
  204. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
  205. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +2 -0
  206. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
  207. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +3 -2
  208. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
  209. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +3 -1
  210. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
  211. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +29 -5
  212. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
  213. package/dist/esm/resources/Loader.d.ts +13 -0
  214. package/dist/esm/resources/Loader.d.ts.map +1 -1
  215. package/dist/esm/resources/Loader.js +67 -7
  216. package/dist/esm/resources/Loader.js.map +1 -1
  217. package/dist/esm/ui/ScrollContainer.d.ts +63 -0
  218. package/dist/esm/ui/ScrollContainer.d.ts.map +1 -0
  219. package/dist/esm/ui/ScrollContainer.js +99 -0
  220. package/dist/esm/ui/ScrollContainer.js.map +1 -0
  221. package/dist/esm/ui/Tooltip.d.ts +67 -0
  222. package/dist/esm/ui/Tooltip.d.ts.map +1 -0
  223. package/dist/esm/ui/Tooltip.js +133 -0
  224. package/dist/esm/ui/Tooltip.js.map +1 -0
  225. package/dist/esm/ui/index.d.ts +4 -0
  226. package/dist/esm/ui/index.d.ts.map +1 -1
  227. package/dist/exo.esm.js +1 -1
  228. package/dist/exo.esm.js.map +1 -1
  229. package/dist/exo.iife.js +45202 -0
  230. package/dist/exo.iife.js.map +1 -0
  231. package/dist/exo.iife.min.js +2 -0
  232. package/dist/exo.iife.min.js.map +1 -0
  233. package/package.json +15 -3
  234. package/dist/esm/rendering/Camera.d.ts +0 -34
  235. package/dist/esm/rendering/Camera.d.ts.map +0 -1
  236. package/dist/esm/rendering/Camera.js +0 -38
  237. package/dist/esm/rendering/Camera.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Fixed-timestep accumulator (Gaffer's "Fix Your Timestep"). Converts the
3
+ * variable per-frame delta into a whole number of fixed-size steps, carrying the
4
+ * sub-step remainder across frames as an interpolation {@link FixedTimestep.alpha}.
5
+ *
6
+ * Pure timing logic — no scene or signal coupling — so the loop can drive it and
7
+ * tests can exercise the step/alpha maths directly. The {@link maxSteps} cap is
8
+ * the spiral-of-death guard: when a frame is so long it would need more than
9
+ * `maxSteps` catch-up steps, the surplus whole-step backlog is dropped rather
10
+ * than accumulated (which would make the next frame even longer).
11
+ *
12
+ * @internal
13
+ */
14
+ class FixedTimestep {
15
+ _stepMs;
16
+ _maxSteps;
17
+ _accumulatorMs = 0;
18
+ constructor(_stepMs, _maxSteps) {
19
+ this._stepMs = _stepMs;
20
+ this._maxSteps = _maxSteps;
21
+ if (!(_stepMs > 0) || !Number.isFinite(_stepMs)) {
22
+ throw new RangeError(`FixedTimestep: step must be a positive finite number of ms, received ${_stepMs}.`);
23
+ }
24
+ }
25
+ /** The fixed step size in milliseconds. */
26
+ get stepMs() {
27
+ return this._stepMs;
28
+ }
29
+ /** Leftover fraction `[0, 1)` of a step — the render interpolation factor. */
30
+ get alpha() {
31
+ return this._accumulatorMs / this._stepMs;
32
+ }
33
+ /** Add a frame's elapsed time and return how many fixed steps to run now (capped at `maxSteps`). */
34
+ advance(frameDeltaMs) {
35
+ this._accumulatorMs += frameDeltaMs;
36
+ // Tolerance so an accumulator that lands a rounding-error below a whole
37
+ // multiple of the step (e.g. 3×step) still yields that many steps.
38
+ const epsilon = this._stepMs * 1e-9;
39
+ let steps = 0;
40
+ while (this._accumulatorMs >= this._stepMs - epsilon && steps < this._maxSteps) {
41
+ this._accumulatorMs -= this._stepMs;
42
+ steps++;
43
+ }
44
+ // Capped: drop the whole-step backlog, keep only the sub-step remainder so
45
+ // alpha stays in [0, 1) and the next frame does not replay the lost time.
46
+ if (this._accumulatorMs > this._stepMs) {
47
+ this._accumulatorMs %= this._stepMs;
48
+ }
49
+ // Clamp the tiny negative the epsilon subtraction can leave.
50
+ if (this._accumulatorMs < 0) {
51
+ this._accumulatorMs = 0;
52
+ }
53
+ return steps;
54
+ }
55
+ /** Clear the accumulator (e.g. on start/resume so a paused gap is not caught up). */
56
+ reset() {
57
+ this._accumulatorMs = 0;
58
+ }
59
+ }
60
+
61
+ export { FixedTimestep };
62
+ //# sourceMappingURL=FixedTimestep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixedTimestep.js","sources":["../../../../src/core/FixedTimestep.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;AAYG;MACU,aAAa,CAAA;AAIL,IAAA,OAAA;AACA,IAAA,SAAA;IAJX,cAAc,GAAG,CAAC;IAE1B,WAAA,CACmB,OAAe,EACf,SAAiB,EAAA;QADjB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,SAAS,GAAT,SAAS;AAE1B,QAAA,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC/C,YAAA,MAAM,IAAI,UAAU,CAAC,wEAAwE,OAAO,CAAA,CAAA,CAAG,CAAC;QAC1G;IACF;;AAGA,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO;IACrB;;AAGA,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO;IAC3C;;AAGO,IAAA,OAAO,CAAC,YAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,IAAI,YAAY;;;AAInC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI;QACnC,IAAI,KAAK,GAAG,CAAC;AAEb,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9E,YAAA,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO;AACnC,YAAA,KAAK,EAAE;QACT;;;QAIA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO;QACrC;;AAGA,QAAA,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC;QACzB;AAEA,QAAA,OAAO,KAAK;IACd;;IAGO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;IACzB;AACD;;;;"}
@@ -7,6 +7,7 @@ import type { Loader } from '#resources/Loader';
7
7
  import { UIRoot } from '#ui/UIRoot';
8
8
  import type { Application } from './Application';
9
9
  import { type SerializedScene } from './serialization/types';
10
+ import { Signal } from './Signal';
10
11
  import { SystemRegistry } from './SystemRegistry';
11
12
  import type { Time } from './Time';
12
13
  import type { Destroyable } from './types';
@@ -65,6 +66,10 @@ export declare class Scene {
65
66
  * (show a panel on `scene.ui`, then set `scene.paused = true`).
66
67
  */
67
68
  paused: boolean;
69
+ /** Dispatched after the scene finishes loading (after load() and init() complete). */
70
+ readonly onLoad: Signal<[]>;
71
+ /** Dispatched when the scene is about to be unloaded. */
72
+ readonly onUnload: Signal<[]>;
68
73
  private _inputs;
69
74
  private _tweens;
70
75
  private _systems;
@@ -175,6 +180,15 @@ export declare class Scene {
175
180
  * positions, advance timers, drive AI here. Override in subclass.
176
181
  */
177
182
  update(_delta: Time): void;
183
+ /**
184
+ * Fixed-timestep logic hook. Called zero or more times per frame with a
185
+ * constant `delta` ({@link Application.fixedTimeStep}) before {@link Scene.update},
186
+ * so physics and deterministic gameplay advance at a frame-rate-independent
187
+ * rate. Put `physicsWorld.step(delta)` and movement here; leave camera, UI and
188
+ * purely visual work in {@link Scene.update}. Default is a no-op. Override in
189
+ * subclass.
190
+ */
191
+ fixedUpdate(_delta: Time): void;
178
192
  /**
179
193
  * Explicit per-frame rendering entry point. Override to choose
180
194
  * what gets rendered.
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../../src/core/Scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../../src/core/Scene.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { UIRoot } from '../ui/UIRoot.js';
3
3
  import { DisposalScope } from './DisposalScope.js';
4
4
  import { serializeTree, migrate, deserializeInto } from './serialization/serialize.js';
5
5
  import { SERIALIZATION_VERSION } from './serialization/types.js';
6
+ import { Signal } from './Signal.js';
6
7
  import { SystemRegistry } from './SystemRegistry.js';
7
8
 
8
9
  /**
@@ -93,6 +94,10 @@ class Scene {
93
94
  * (show a panel on `scene.ui`, then set `scene.paused = true`).
94
95
  */
95
96
  paused = false;
97
+ /** Dispatched after the scene finishes loading (after load() and init() complete). */
98
+ onLoad = new Signal();
99
+ /** Dispatched when the scene is about to be unloaded. */
100
+ onUnload = new Signal();
96
101
  _inputs = null;
97
102
  _tweens = null;
98
103
  _systems = null;
@@ -277,6 +282,17 @@ class Scene {
277
282
  update(_delta) {
278
283
  // override in subclass
279
284
  }
285
+ /**
286
+ * Fixed-timestep logic hook. Called zero or more times per frame with a
287
+ * constant `delta` ({@link Application.fixedTimeStep}) before {@link Scene.update},
288
+ * so physics and deterministic gameplay advance at a frame-rate-independent
289
+ * rate. Put `physicsWorld.step(delta)` and movement here; leave camera, UI and
290
+ * purely visual work in {@link Scene.update}. Default is a no-op. Override in
291
+ * subclass.
292
+ */
293
+ fixedUpdate(_delta) {
294
+ // override in subclass
295
+ }
280
296
  /**
281
297
  * Explicit per-frame rendering entry point. Override to choose
282
298
  * what gets rendered.
@@ -310,6 +326,8 @@ class Scene {
310
326
  this._inputs = null;
311
327
  this._tweens = null;
312
328
  this._systems = null;
329
+ this.onLoad.destroy();
330
+ this.onUnload.destroy();
313
331
  this._root.destroy();
314
332
  this._app = null;
315
333
  }
@@ -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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"}
@@ -63,6 +63,13 @@ export declare class SceneManager {
63
63
  * UI layer on top.
64
64
  */
65
65
  update(delta: Time): this;
66
+ /**
67
+ * Drive one fixed-timestep step on the active scene (unless paused). Called
68
+ * zero or more times per frame by the {@link Application} loop, ahead of
69
+ * {@link SceneManager.update}. No drawing or transition advance happens here —
70
+ * those are per-frame, not per fixed step.
71
+ */
72
+ fixedUpdate(delta: Time): this;
66
73
  destroy(): void;
67
74
  private _prepareScene;
68
75
  private _disposeScene;
@@ -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,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"}
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;AAEhC,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;IAkDhC;;;;;OAKG;IACI,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAU9B,OAAO,IAAI,IAAI;YAkBR,aAAa;YAwDb,aAAa;YAgBb,2BAA2B;YAgB3B,kBAAkB;IAiChC,OAAO,CAAC,kBAAkB;YAyBZ,wBAAwB;IA2BtC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,wBAAwB;CAoBjC"}
@@ -1,5 +1,6 @@
1
1
  import { Mesh } from '../rendering/mesh/Mesh.js';
2
2
  import { Color } from './Color.js';
3
+ import { logger } from './logging.js';
3
4
  import { Scene } from './Scene.js';
4
5
  import { Signal } from './Signal.js';
5
6
 
@@ -94,7 +95,7 @@ class SceneManager {
94
95
  const updateResult = scene.update(delta);
95
96
  if (!this._asyncUpdateWarned.has(scene) && updateResult instanceof Promise) {
96
97
  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
+ logger.warn('scene', `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
  }
99
100
  // Tick the scene's systems (e.g. a physics world) after its update().
100
101
  scene._tickSystems(delta);
@@ -103,7 +104,7 @@ class SceneManager {
103
104
  const drawResult = scene.draw(this._app.rendering);
104
105
  if (!this._asyncDrawWarned.has(scene) && drawResult instanceof Promise) {
105
106
  this._asyncDrawWarned.add(scene);
106
- console.warn(`[ExoJS] Scene.draw() returned a Promise. draw() must be synchronous — an async draw() produces incomplete frames and silently drops errors.`);
107
+ logger.warn('scene', `Scene.draw() returned a Promise. draw() must be synchronous — an async draw() produces incomplete frames and silently drops errors.`);
107
108
  }
108
109
  // Auto-render the scene's screen-fixed UI layer above its content.
109
110
  scene._peekUI()?._render(this._app.rendering);
@@ -117,6 +118,19 @@ class SceneManager {
117
118
  }
118
119
  return this;
119
120
  }
121
+ /**
122
+ * Drive one fixed-timestep step on the active scene (unless paused). Called
123
+ * zero or more times per frame by the {@link Application} loop, ahead of
124
+ * {@link SceneManager.update}. No drawing or transition advance happens here —
125
+ * those are per-frame, not per fixed step.
126
+ */
127
+ fixedUpdate(delta) {
128
+ const scene = this._activeScene;
129
+ if (scene !== null && !scene.paused) {
130
+ scene.fixedUpdate(delta);
131
+ }
132
+ return this;
133
+ }
120
134
  destroy() {
121
135
  if (this._transition) {
122
136
  const transition = this._transition;
@@ -137,7 +151,7 @@ class SceneManager {
137
151
  await scene.load(this._app.loader);
138
152
  await scene.init(this._app.loader);
139
153
  if (scene.root.children.length > 0 && scene.draw === Scene.prototype.draw) {
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().`);
154
+ logger.warn('scene', `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().`);
141
155
  }
142
156
  // Bind the scene's root to the app's interaction manager so its nodes
143
157
  // route picking/bounds notifications to this Application (no global).
@@ -147,6 +161,7 @@ class SceneManager {
147
161
  if (ui !== null) {
148
162
  this._app.interaction.attachUIRoot(ui);
149
163
  }
164
+ scene.onLoad.dispatch();
150
165
  }
151
166
  catch (error) {
152
167
  let cleanupError = null;
@@ -175,6 +190,7 @@ class SceneManager {
175
190
  }
176
191
  }
177
192
  async _disposeScene(scene) {
193
+ scene.onUnload.dispatch();
178
194
  this.onStopScene.dispatch(scene);
179
195
  await scene.unload(this._app.loader);
180
196
  const ui = scene._peekUI();
@@ -195,7 +211,7 @@ class SceneManager {
195
211
  await this._disposeScene(scene);
196
212
  }
197
213
  catch (error) {
198
- console.error('SceneManager.destroy() failed to unload the active scene.', error);
214
+ logger.error('scene', 'SceneManager.destroy() failed to unload the active scene.', error instanceof Error ? error : undefined);
199
215
  }
200
216
  }
201
217
  async _runWithTransition(action, transition) {
@@ -1 +1 @@
1
- {"version":3,"file":"SceneManager.js","sources":["../../../../src/core/SceneManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SceneManager.js","sources":["../../../../src/core/SceneManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { Interval } from '#math/Interval';
5
5
  import { Matrix } from '#math/Matrix';
6
6
  import { ObservableVector, type ObservableVectorOwner } from '#math/ObservableVector';
7
7
  import { Rectangle } from '#math/Rectangle';
8
- import type { Vector } from '#math/Vector';
8
+ import { Vector } from '#math/Vector';
9
9
  import type { Container } from '#rendering/Container';
10
10
  import type { View } from '#rendering/View';
11
11
  import { Bounds } from './Bounds';
@@ -35,10 +35,10 @@ declare enum SceneNodeTransformFlags {
35
35
  * for this node and every {@link Container} ancestor up the parent chain.
36
36
  * The caches rebuild lazily on the next read.
37
37
  *
38
- * The fast-path `isAlignedBox` getter reports `true` when the rotation is a
39
- * multiple of 90° and both skew components are zero; in that case the
40
- * (cheaper) AABB-based collision test is used instead of the rotated/skewed
41
- * quad SAT path.
38
+ * Collision and hit-testing take the cheaper AABB path when the node's *world*
39
+ * box is axis-aligned (its own and any inherited rotation compose to a multiple
40
+ * of 90° with no skew) and the oriented-quad SAT path otherwise. The public
41
+ * `isAlignedBox` getter reports that predicate for this node's own rotation only.
42
42
  *
43
43
  * `_invalidate*` methods are exported as `public` for friend-class access
44
44
  * from {@link Container} and {@link InteractionManager}; treat them as
@@ -69,6 +69,9 @@ export declare class SceneNode implements Collidable, ObservableVectorOwner {
69
69
  private _parentNode;
70
70
  private _zIndex;
71
71
  private _cullable;
72
+ private _cullArea;
73
+ /** Lazily-built oriented bounding box (the local bounds under the global transform) for rotated-node SAT. */
74
+ private _orientedBounds;
72
75
  /**
73
76
  * Optional human-readable identity for this node. Defaults to `null`.
74
77
  *
@@ -104,8 +107,19 @@ export declare class SceneNode implements Collidable, ObservableVectorOwner {
104
107
  set visible(visible: boolean);
105
108
  get zIndex(): number;
106
109
  set zIndex(zIndex: number);
110
+ /**
111
+ * When `false`, this node is never culled by the viewport check and is
112
+ * always considered in-view. Defaults to `true`.
113
+ */
107
114
  get cullable(): boolean;
108
115
  set cullable(cullable: boolean);
116
+ /**
117
+ * Custom rectangle used for viewport cull intersection test.
118
+ * When set, replaces the default node bounds in cull checks.
119
+ * Set to `null` to restore default bounds-based culling.
120
+ */
121
+ get cullArea(): Rectangle | null;
122
+ set cullArea(rect: Rectangle | null);
109
123
  /**
110
124
  * Horizontal skew angle in degrees. Shears the node along the X axis
111
125
  * (positive values lean the top edge right). Combines correctly with
@@ -138,12 +152,28 @@ export declare class SceneNode implements Collidable, ObservableVectorOwner {
138
152
  getGlobalTransform(): Matrix;
139
153
  getNormals(): Vector[];
140
154
  project(axis: Vector, result?: Interval): Interval;
155
+ /**
156
+ * The node's oriented bounding box: the four local-bounds corners under the
157
+ * global transform, as a {@link Polygon}. Used by the SAT collision path so a
158
+ * rotated node tests its true oriented axes instead of the loose AABB. Built
159
+ * lazily and refreshed in place; only ever reached for non-axis-aligned nodes.
160
+ */
161
+ private _orientedBoundsPolygon;
162
+ /**
163
+ * Whether the node's *world* box is axis-aligned — its own and every inherited
164
+ * rotation/skew compose to a transform that maps axes to axes (a multiple of
165
+ * 90°, no shear). When true the AABB equals the oriented box, so the cheaper
166
+ * AABB collision/hit-test path is exact; otherwise the oriented-quad SAT path
167
+ * is used. Unlike {@link isAlignedBox} (this node's own rotation only), this
168
+ * accounts for a rotated ancestor.
169
+ */
170
+ private _isWorldAligned;
141
171
  intersectsWith(target: Collidable): boolean;
142
172
  collidesWith(target: Collidable): CollisionResponse | null;
143
173
  /**
144
174
  * Hit-test the world-space point `(x, y)` against this node.
145
175
  *
146
- * For axis-aligned nodes ({@link isAlignedBox} rotation a multiple of 90°
176
+ * For world-axis-aligned nodes (own and inherited rotation a multiple of 90°
147
177
  * and no skew) the AABB equals the oriented box, so the cheap
148
178
  * {@link getBounds} test is exact. For rotated or skewed nodes the point is
149
179
  * mapped back into local space with the inverse of the global transform and
@@ -1 +1 @@
1
- {"version":3,"file":"SceneNode.d.ts","sourceRoot":"","sources":["../../../src/core/SceneNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SceneNode.d.ts","sourceRoot":"","sources":["../../../src/core/SceneNode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAUhD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEtF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAMrC,aAAK,uBAAuB;IAC1B,IAAI,IAAI;IACR,WAAW,IAAS;IACpB,QAAQ,IAAS;IACjB,OAAO,IAAS;IAChB,MAAM,IAAS;IACf,IAAI,KAAS;IACb,SAAS,KAIqB;IAC9B,gBAAgB,KAAS;IACzB,eAAe,MAAS,CAAE,gCAAgC;IAC1D,UAAU,MAAS;CACpB;AAeD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,SAAU,YAAW,UAAU,EAAE,qBAAqB;IACjE,SAAgB,aAAa,EAAE,aAAa,CAA2B;IAEvE,SAAgB,KAAK,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAEnD;IAEF,SAAS,CAAC,OAAO,SAAgB;IACjC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAgB;IAC5C,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAqE;IAC1G,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAkE;IACpG,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAmE;IACtG,SAAS,CAAC,SAAS,SAAK;IACxB,SAAS,CAAC,MAAM,SAAK;IACrB,SAAS,CAAC,MAAM,SAAK;IACrB,SAAS,CAAC,IAAI,SAAK;IACnB,SAAS,CAAC,IAAI,SAAK;IAEnB,sEAAsE;IACtE,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAQ;IAEtC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,OAAO,CAAmE;IAClF,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAA0B;IAC3C,6GAA6G;IAC7G,OAAO,CAAC,eAAe,CAAwB;IAE/C;;;;;;OAMG;IACI,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAElC,IAAW,QAAQ,IAAI,gBAAgB,CAEtC;IAED,IAAW,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,EAE7C;IAED,IAAW,CAAC,IAAI,MAAM,CAErB;IAED,IAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAErB;IAED,IAAW,CAAC,IAAI,MAAM,CAErB;IAED,IAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAErB;IAED,yEAAyE;IACzE,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAEnC;IAED,IAAW,KAAK,IAAI,gBAAgB,CAEnC;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,gBAAgB,EAEvC;IAED,IAAW,MAAM,IAAI,gBAAgB,CAEpC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAEzC;IAED;;;;;OAKG;IACH,IAAW,MAAM,IAAI,gBAAgB,CAEpC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAEzC;IAED,IAAW,MAAM,IAAI,SAAS,GAAG,IAAI,CAEpC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,EAEzC;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,OAAO,CAAC,OAAO,EAAE,OAAO,EAElC;IAED,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,MAAM,EAI/B;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAEpC;IAED;;;;OAIG;IACH,IAAW,QAAQ,IAAI,SAAS,GAAG,IAAI,CAEtC;IAED,IAAW,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,EAEzC;IAED;;;;OAIG;IACH,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,OAAO,EAAE,MAAM,EAK/B;IAED;;;;OAIG;IACH,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,OAAO,EAAE,MAAM,EAK/B;IAED,IAAW,YAAY,IAAI,OAAO,CAEjC;IAEM,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,IAAI;IAM3C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWlC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,IAAI;IAMxC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,IAAI;IAOvC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,IAAI;IAMzC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI7B,YAAY,IAAI,MAAM;IAStB,eAAe,IAAI,IAAI;IAwCvB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,IAAI;IAMzC,cAAc,IAAI,SAAS;IAI3B,SAAS,IAAI,SAAS;IAStB,YAAY,IAAI,IAAI;IAMpB,qBAAqB,IAAI,IAAI;IAU7B,kBAAkB,IAAI,MAAM;IAc5B,UAAU,IAAI,MAAM,EAAE;IAItB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,QAAyB,GAAG,QAAQ;IAIzE;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAOhB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAyB3C,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,iBAAiB,GAAG,IAAI;IAmBjE;;;;;;;;;;;;OAYG;IACI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAuBvC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAU3B,OAAO,IAAI,IAAI;IActB;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAI3C,kFAAkF;IAC3E,SAAS,IAAI,KAAK,GAAG,IAAI;IAIhC;;;;;;OAMG;IACI,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAiBjD,kEAAkE;IAC3D,2BAA2B,IAAI,IAAI;IAK1C,kFAAkF;IAClF,SAAS,CAAC,4BAA4B,IAAI,IAAI;IAI9C,6EAA6E;IACtE,wBAAwB,IAAI,IAAI;IAmBvC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;CAMtB"}
@@ -4,8 +4,10 @@ import { Flags } from '../math/Flags.js';
4
4
  import { Interval } from '../math/Interval.js';
5
5
  import { Matrix } from '../math/Matrix.js';
6
6
  import { ObservableVector } from '../math/ObservableVector.js';
7
+ import { Polygon } from '../math/Polygon.js';
7
8
  import { Rectangle } from '../math/Rectangle.js';
8
9
  import { degreesToRadians, trimRotation } from '../math/utils.js';
10
+ import { Vector } from '../math/Vector.js';
9
11
  import { Bounds } from './Bounds.js';
10
12
 
11
13
  // Internal: dirty-flag bits used by SceneNode's transform cache.
@@ -35,6 +37,8 @@ var SceneNodeVectorChannel;
35
37
  SceneNodeVectorChannel[SceneNodeVectorChannel["Origin"] = 2] = "Origin";
36
38
  SceneNodeVectorChannel[SceneNodeVectorChannel["Anchor"] = 3] = "Anchor";
37
39
  })(SceneNodeVectorChannel || (SceneNodeVectorChannel = {}));
40
+ /** Shared scratch for the four oriented corners — written then copied into a node's polygon (single-threaded). */
41
+ const orientedCorners = [new Vector(), new Vector(), new Vector(), new Vector()];
38
42
  /**
39
43
  * Transform-bearing leaf in the scene-graph hierarchy. Carries position,
40
44
  * rotation, scale, skew, origin, and a 2-component {@link Vector} `anchor`
@@ -48,10 +52,10 @@ var SceneNodeVectorChannel;
48
52
  * for this node and every {@link Container} ancestor up the parent chain.
49
53
  * The caches rebuild lazily on the next read.
50
54
  *
51
- * The fast-path `isAlignedBox` getter reports `true` when the rotation is a
52
- * multiple of 90° and both skew components are zero; in that case the
53
- * (cheaper) AABB-based collision test is used instead of the rotated/skewed
54
- * quad SAT path.
55
+ * Collision and hit-testing take the cheaper AABB path when the node's *world*
56
+ * box is axis-aligned (its own and any inherited rotation compose to a multiple
57
+ * of 90° with no skew) and the oriented-quad SAT path otherwise. The public
58
+ * `isAlignedBox` getter reports that predicate for this node's own rotation only.
55
59
  *
56
60
  * `_invalidate*` methods are exported as `public` for friend-class access
57
61
  * from {@link Container} and {@link InteractionManager}; treat them as
@@ -82,6 +86,9 @@ class SceneNode {
82
86
  _parentNode = null;
83
87
  _zIndex = 0;
84
88
  _cullable = true;
89
+ _cullArea = null;
90
+ /** Lazily-built oriented bounding box (the local bounds under the global transform) for rotated-node SAT. */
91
+ _orientedBounds = null;
85
92
  /**
86
93
  * Optional human-readable identity for this node. Defaults to `null`.
87
94
  *
@@ -159,12 +166,27 @@ class SceneNode {
159
166
  this._zIndex = zIndex;
160
167
  }
161
168
  }
169
+ /**
170
+ * When `false`, this node is never culled by the viewport check and is
171
+ * always considered in-view. Defaults to `true`.
172
+ */
162
173
  get cullable() {
163
174
  return this._cullable;
164
175
  }
165
176
  set cullable(cullable) {
166
177
  this._cullable = cullable;
167
178
  }
179
+ /**
180
+ * Custom rectangle used for viewport cull intersection test.
181
+ * When set, replaces the default node bounds in cull checks.
182
+ * Set to `null` to restore default bounds-based culling.
183
+ */
184
+ get cullArea() {
185
+ return this._cullArea;
186
+ }
187
+ set cullArea(rect) {
188
+ this._cullArea = rect;
189
+ }
168
190
  /**
169
191
  * Horizontal skew angle in degrees. Shears the node along the X axis
170
192
  * (positive values lean the top edge right). Combines correctly with
@@ -304,13 +326,41 @@ class SceneNode {
304
326
  return this._globalTransform;
305
327
  }
306
328
  getNormals() {
307
- return this.getBounds().getNormals();
329
+ return this._isWorldAligned() ? this.getBounds().getNormals() : this._orientedBoundsPolygon().getNormals();
308
330
  }
309
331
  project(axis, result = new Interval()) {
310
- return this.getBounds().project(axis, result);
332
+ return this._isWorldAligned() ? this.getBounds().project(axis, result) : this._orientedBoundsPolygon().project(axis, result);
333
+ }
334
+ /**
335
+ * The node's oriented bounding box: the four local-bounds corners under the
336
+ * global transform, as a {@link Polygon}. Used by the SAT collision path so a
337
+ * rotated node tests its true oriented axes instead of the loose AABB. Built
338
+ * lazily and refreshed in place; only ever reached for non-axis-aligned nodes.
339
+ */
340
+ _orientedBoundsPolygon() {
341
+ const bounds = this.getLocalBounds();
342
+ const matrix = this.getGlobalTransform();
343
+ orientedCorners[0].set(bounds.left, bounds.top).transform(matrix);
344
+ orientedCorners[1].set(bounds.right, bounds.top).transform(matrix);
345
+ orientedCorners[2].set(bounds.right, bounds.bottom).transform(matrix);
346
+ orientedCorners[3].set(bounds.left, bounds.bottom).transform(matrix);
347
+ return (this._orientedBounds ??= new Polygon()).setPoints(orientedCorners);
348
+ }
349
+ /**
350
+ * Whether the node's *world* box is axis-aligned — its own and every inherited
351
+ * rotation/skew compose to a transform that maps axes to axes (a multiple of
352
+ * 90°, no shear). When true the AABB equals the oriented box, so the cheaper
353
+ * AABB collision/hit-test path is exact; otherwise the oriented-quad SAT path
354
+ * is used. Unlike {@link isAlignedBox} (this node's own rotation only), this
355
+ * accounts for a rotated ancestor.
356
+ */
357
+ _isWorldAligned() {
358
+ const matrix = this.getGlobalTransform();
359
+ const epsilon = 1e-9;
360
+ return (Math.abs(matrix.b) < epsilon && Math.abs(matrix.c) < epsilon) || (Math.abs(matrix.a) < epsilon && Math.abs(matrix.d) < epsilon);
311
361
  }
312
362
  intersectsWith(target) {
313
- if (this.isAlignedBox) {
363
+ if (this._isWorldAligned()) {
314
364
  return this.getBounds().intersectsWith(target);
315
365
  }
316
366
  switch (target.collisionType) {
@@ -333,7 +383,7 @@ class SceneNode {
333
383
  }
334
384
  }
335
385
  collidesWith(target) {
336
- if (this.isAlignedBox) {
386
+ if (this._isWorldAligned()) {
337
387
  return this.getBounds().collidesWith(target);
338
388
  }
339
389
  switch (target.collisionType) {
@@ -352,7 +402,7 @@ class SceneNode {
352
402
  /**
353
403
  * Hit-test the world-space point `(x, y)` against this node.
354
404
  *
355
- * For axis-aligned nodes ({@link isAlignedBox} rotation a multiple of 90°
405
+ * For world-axis-aligned nodes (own and inherited rotation a multiple of 90°
356
406
  * and no skew) the AABB equals the oriented box, so the cheap
357
407
  * {@link getBounds} test is exact. For rotated or skewed nodes the point is
358
408
  * mapped back into local space with the inverse of the global transform and
@@ -363,7 +413,7 @@ class SceneNode {
363
413
  * empty AABB corners of a rotated node.
364
414
  */
365
415
  contains(x, y) {
366
- if (this.isAlignedBox) {
416
+ if (this._isWorldAligned()) {
367
417
  return this.getBounds().contains(x, y);
368
418
  }
369
419
  const matrix = this.getGlobalTransform();
@@ -384,7 +434,8 @@ class SceneNode {
384
434
  if (!this._cullable) {
385
435
  return true;
386
436
  }
387
- return view.getBounds().intersectsWith(this.getBounds());
437
+ const bounds = this._cullArea ?? this.getBounds();
438
+ return view.getBounds().intersectsWith(bounds);
388
439
  }
389
440
  destroy() {
390
441
  this._transform.destroy();
@@ -396,6 +447,7 @@ class SceneNode {
396
447
  this._localBounds.destroy();
397
448
  this._bounds.destroy();
398
449
  this._anchor.destroy();
450
+ this._orientedBounds?.destroy();
399
451
  }
400
452
  /**
401
453
  * Set this node's owning {@link Stage} (the per-Application service bundle).