@zephyr3d/scene 0.8.1 → 0.9.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 (241) hide show
  1. package/dist/animation/animationset.js +563 -128
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +2516 -0
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -0
  5. package/dist/animation/fixed_geometry_cache_track.js +138 -0
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -0
  7. package/dist/animation/geometry_cache_utils.js +120 -0
  8. package/dist/animation/geometry_cache_utils.js.map +1 -0
  9. package/dist/animation/ik_modifier.js +9 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +469 -0
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -0
  13. package/dist/animation/joint_dynamics/constraints.js +329 -0
  14. package/dist/animation/joint_dynamics/constraints.js.map +1 -0
  15. package/dist/animation/joint_dynamics/controller.js +699 -0
  16. package/dist/animation/joint_dynamics/controller.js.map +1 -0
  17. package/dist/animation/joint_dynamics/joint_dynamics_system.js +393 -0
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -0
  19. package/dist/animation/joint_dynamics/solver.js +794 -0
  20. package/dist/animation/joint_dynamics/solver.js.map +1 -0
  21. package/dist/animation/joint_dynamics/types.js +19 -0
  22. package/dist/animation/joint_dynamics/types.js.map +1 -0
  23. package/dist/animation/joint_dynamics/vrm_spring_bone.js +46 -0
  24. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +1 -0
  25. package/dist/animation/joint_dynamics_modifier.js +51 -0
  26. package/dist/animation/joint_dynamics_modifier.js.map +1 -0
  27. package/dist/animation/pca_geometry_cache_track.js +222 -0
  28. package/dist/animation/pca_geometry_cache_track.js.map +1 -0
  29. package/dist/animation/skeleton.js +1907 -3
  30. package/dist/animation/skeleton.js.map +1 -1
  31. package/dist/animation/skeleton_modifier.js +3 -5
  32. package/dist/animation/skeleton_modifier.js.map +1 -1
  33. package/dist/animation/spring/multi_chain_spring_system.js +2 -0
  34. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  35. package/dist/animation/spring/spring_chain.js +3 -2
  36. package/dist/animation/spring/spring_chain.js.map +1 -1
  37. package/dist/animation/spring/spring_collider.js +35 -5
  38. package/dist/animation/spring/spring_collider.js.map +1 -1
  39. package/dist/animation/spring/spring_particle.js +1 -0
  40. package/dist/animation/spring/spring_particle.js.map +1 -1
  41. package/dist/animation/spring/spring_system.js +325 -28
  42. package/dist/animation/spring/spring_system.js.map +1 -1
  43. package/dist/animation/spring2/collision.js +469 -0
  44. package/dist/animation/spring2/collision.js.map +1 -0
  45. package/dist/animation/spring2/constraints.js +329 -0
  46. package/dist/animation/spring2/constraints.js.map +1 -0
  47. package/dist/animation/spring2/controller.js +434 -0
  48. package/dist/animation/spring2/controller.js.map +1 -0
  49. package/dist/animation/spring2/math.js +16 -0
  50. package/dist/animation/spring2/math.js.map +1 -0
  51. package/dist/animation/spring2/solver.js +624 -0
  52. package/dist/animation/spring2/solver.js.map +1 -0
  53. package/dist/animation/spring2/spring_system.js +118 -0
  54. package/dist/animation/spring2/spring_system.js.map +1 -0
  55. package/dist/animation/spring2/types.js +19 -0
  56. package/dist/animation/spring2/types.js.map +1 -0
  57. package/dist/animation/spring_modifier.js +17 -1
  58. package/dist/animation/spring_modifier.js.map +1 -1
  59. package/dist/app/engine.js +42 -15
  60. package/dist/app/engine.js.map +1 -1
  61. package/dist/app/runtimescript.js +132 -1
  62. package/dist/app/runtimescript.js.map +1 -1
  63. package/dist/app/screen.js +3 -3
  64. package/dist/app/screen.js.map +1 -1
  65. package/dist/app/scriptingsystem.js +69 -37
  66. package/dist/app/scriptingsystem.js.map +1 -1
  67. package/dist/app/scriptregistry.js +157 -146
  68. package/dist/app/scriptregistry.js.map +1 -1
  69. package/dist/asset/assetmanager.js +2 -1
  70. package/dist/asset/assetmanager.js.map +1 -1
  71. package/dist/asset/loaders/zabc/zabc_loader.js +570 -0
  72. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -0
  73. package/dist/asset/model.js +192 -0
  74. package/dist/asset/model.js.map +1 -1
  75. package/dist/camera/base.js +26 -7
  76. package/dist/camera/base.js.map +1 -1
  77. package/dist/camera/camera.js +146 -24
  78. package/dist/camera/camera.js.map +1 -1
  79. package/dist/camera/fps.js +2 -2
  80. package/dist/camera/fps.js.map +1 -1
  81. package/dist/camera/orbit.js +2 -2
  82. package/dist/camera/orbit.js.map +1 -1
  83. package/dist/index.d.ts +11701 -8506
  84. package/dist/index.js +29 -8
  85. package/dist/index.js.map +1 -1
  86. package/dist/material/lambert.js +1 -1
  87. package/dist/material/lambert.js.map +1 -1
  88. package/dist/material/material.js +9 -3
  89. package/dist/material/material.js.map +1 -1
  90. package/dist/material/meshmaterial.js +54 -7
  91. package/dist/material/meshmaterial.js.map +1 -1
  92. package/dist/material/mixins/lightmodel/blinnphong.js +17 -7
  93. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  94. package/dist/material/mixins/lightmodel/lambert.js +7 -2
  95. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  96. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +108 -16
  97. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  98. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +222 -14
  99. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  100. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +24 -12
  101. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  102. package/dist/material/mixins/lit.js +11 -8
  103. package/dist/material/mixins/lit.js.map +1 -1
  104. package/dist/material/mixins/pbr/common.js +72 -5
  105. package/dist/material/mixins/pbr/common.js.map +1 -1
  106. package/dist/material/pbrblueprint.js +148 -1
  107. package/dist/material/pbrblueprint.js.map +1 -1
  108. package/dist/material/pbrmr.js +125 -2
  109. package/dist/material/pbrmr.js.map +1 -1
  110. package/dist/material/shader/helper.js +10 -4
  111. package/dist/material/shader/helper.js.map +1 -1
  112. package/dist/material/water.js +2 -2
  113. package/dist/material/water.js.map +1 -1
  114. package/dist/posteffect/coloradjust.js +145 -0
  115. package/dist/posteffect/coloradjust.js.map +1 -0
  116. package/dist/posteffect/taa.js +68 -32
  117. package/dist/posteffect/taa.js.map +1 -1
  118. package/dist/render/cluster_light.js +17 -12
  119. package/dist/render/cluster_light.js.map +1 -1
  120. package/dist/render/deferredlightpass.js +510 -0
  121. package/dist/render/deferredlightpass.js.map +1 -0
  122. package/dist/render/deferredshadowlightpass.js +428 -0
  123. package/dist/render/deferredshadowlightpass.js.map +1 -0
  124. package/dist/render/drawable.js.map +1 -1
  125. package/dist/render/drawable_mixin.js +21 -12
  126. package/dist/render/drawable_mixin.js.map +1 -1
  127. package/dist/render/envlight.js +20 -22
  128. package/dist/render/envlight.js.map +1 -1
  129. package/dist/render/gbufferpass.js +50 -0
  130. package/dist/render/gbufferpass.js.map +1 -0
  131. package/dist/render/lightpass.js +1 -2
  132. package/dist/render/lightpass.js.map +1 -1
  133. package/dist/render/primitive.js +1 -1
  134. package/dist/render/primitive.js.map +1 -1
  135. package/dist/render/render_queue.js +3 -2
  136. package/dist/render/render_queue.js.map +1 -1
  137. package/dist/render/renderer.js +5 -358
  138. package/dist/render/renderer.js.map +1 -1
  139. package/dist/render/rendergraph/executor.js +15 -12
  140. package/dist/render/rendergraph/executor.js.map +1 -1
  141. package/dist/render/rendergraph/forward_plus_builder.js +144 -88
  142. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  143. package/dist/render/rendergraph/history_resource_manager.js +178 -0
  144. package/dist/render/rendergraph/history_resource_manager.js.map +1 -0
  145. package/dist/render/rendergraph/rendergraph.js +12 -1
  146. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  147. package/dist/render/rendergraph/types.js +2 -2
  148. package/dist/render/rendergraph/types.js.map +1 -1
  149. package/dist/render/sky.js +26 -9
  150. package/dist/render/sky.js.map +1 -1
  151. package/dist/scene/basesprite.js +4 -3
  152. package/dist/scene/basesprite.js.map +1 -1
  153. package/dist/scene/batchgroup.js +4 -4
  154. package/dist/scene/environment.js +7 -4
  155. package/dist/scene/environment.js.map +1 -1
  156. package/dist/scene/light.js +184 -18
  157. package/dist/scene/light.js.map +1 -1
  158. package/dist/scene/mesh.js +30 -0
  159. package/dist/scene/mesh.js.map +1 -1
  160. package/dist/scene/particlesys.js +3 -2
  161. package/dist/scene/particlesys.js.map +1 -1
  162. package/dist/scene/raycast_visitor.js +29 -3
  163. package/dist/scene/raycast_visitor.js.map +1 -1
  164. package/dist/scene/scene.js +86 -19
  165. package/dist/scene/scene.js.map +1 -1
  166. package/dist/scene/scene_node.js +87 -31
  167. package/dist/scene/scene_node.js.map +1 -1
  168. package/dist/scene/script_attachment.js +59 -0
  169. package/dist/scene/script_attachment.js.map +1 -0
  170. package/dist/scene/terrain-cm/grass.js +3 -2
  171. package/dist/scene/terrain-cm/grass.js.map +1 -1
  172. package/dist/scene/terrain-cm/terrain-cm.js +4 -3
  173. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  174. package/dist/scene/water.js +3 -2
  175. package/dist/scene/water.js.map +1 -1
  176. package/dist/shaders/shadow.js +2 -2
  177. package/dist/shaders/shadow.js.map +1 -1
  178. package/dist/shadow/shadowmapper.js +74 -4
  179. package/dist/shadow/shadowmapper.js.map +1 -1
  180. package/dist/shapes/box.js +163 -0
  181. package/dist/shapes/box.js.map +1 -1
  182. package/dist/shapes/capsule.js +216 -0
  183. package/dist/shapes/capsule.js.map +1 -0
  184. package/dist/shapes/cylinder.js +91 -0
  185. package/dist/shapes/cylinder.js.map +1 -1
  186. package/dist/shapes/plane.js +32 -0
  187. package/dist/shapes/plane.js.map +1 -1
  188. package/dist/shapes/tetrahedron.js +211 -0
  189. package/dist/shapes/tetrahedron.js.map +1 -1
  190. package/dist/shapes/torus.js +173 -0
  191. package/dist/shapes/torus.js.map +1 -1
  192. package/dist/utility/blueprint/common/math.js +111 -1
  193. package/dist/utility/blueprint/common/math.js.map +1 -1
  194. package/dist/utility/blueprint/material/inputs.js +235 -1
  195. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  196. package/dist/utility/blueprint/material/ir.js +154 -10
  197. package/dist/utility/blueprint/material/ir.js.map +1 -1
  198. package/dist/utility/blueprint/material/texture.js +273 -19
  199. package/dist/utility/blueprint/material/texture.js.map +1 -1
  200. package/dist/utility/serialization/json.js +12 -2
  201. package/dist/utility/serialization/json.js.map +1 -1
  202. package/dist/utility/serialization/manager.js +30 -11
  203. package/dist/utility/serialization/manager.js.map +1 -1
  204. package/dist/utility/serialization/scene/animation.js +250 -7
  205. package/dist/utility/serialization/scene/animation.js.map +1 -1
  206. package/dist/utility/serialization/scene/batch.js +4 -2
  207. package/dist/utility/serialization/scene/batch.js.map +1 -1
  208. package/dist/utility/serialization/scene/camera.js +154 -2
  209. package/dist/utility/serialization/scene/camera.js.map +1 -1
  210. package/dist/utility/serialization/scene/cloth_script.js +834 -0
  211. package/dist/utility/serialization/scene/cloth_script.js.map +1 -0
  212. package/dist/utility/serialization/scene/common.js +7 -0
  213. package/dist/utility/serialization/scene/common.js.map +1 -1
  214. package/dist/utility/serialization/scene/light.js +120 -4
  215. package/dist/utility/serialization/scene/light.js.map +1 -1
  216. package/dist/utility/serialization/scene/material.js +453 -1
  217. package/dist/utility/serialization/scene/material.js.map +1 -1
  218. package/dist/utility/serialization/scene/mesh.js +4 -2
  219. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  220. package/dist/utility/serialization/scene/node.js +298 -10
  221. package/dist/utility/serialization/scene/node.js.map +1 -1
  222. package/dist/utility/serialization/scene/particle.js +4 -2
  223. package/dist/utility/serialization/scene/particle.js.map +1 -1
  224. package/dist/utility/serialization/scene/primitive.js +100 -3
  225. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  226. package/dist/utility/serialization/scene/scene.js +130 -3
  227. package/dist/utility/serialization/scene/scene.js.map +1 -1
  228. package/dist/utility/serialization/scene/script.js +66 -0
  229. package/dist/utility/serialization/scene/script.js.map +1 -0
  230. package/dist/utility/serialization/scene/spring_script.js +596 -0
  231. package/dist/utility/serialization/scene/spring_script.js.map +1 -0
  232. package/dist/utility/serialization/scene/sprite.js +5 -3
  233. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  234. package/dist/utility/serialization/scene/terrain.js +4 -2
  235. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  236. package/dist/utility/serialization/scene/water.js +4 -2
  237. package/dist/utility/serialization/scene/water.js.map +1 -1
  238. package/dist/utility/serialization/types.js.map +1 -1
  239. package/dist/values.js +5 -1
  240. package/dist/values.js.map +1 -1
  241. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"scene_node.js","sources":["../../src/scene/scene_node.ts"],"sourcesContent":["import type { Scene } from './scene';\r\nimport type { GraphNode } from './graph_node';\r\nimport type { Mesh } from './mesh';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { PunctualLight, BaseLight } from './light';\r\nimport type { BoundingVolume } from '../utility/bounding_volume';\r\nimport type { BatchGroup } from './batchgroup';\r\nimport type { Visitor } from './visitor';\r\nimport type { IDisposable, Immutable, Nullable, Quaternion } from '@zephyr3d/base';\r\nimport { Disposable, DRef, makeObservable, randomUUID } from '@zephyr3d/base';\r\nimport { Matrix4x4, ObservableQuaternion, ObservableVector3, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type { ParticleSystem } from './particlesys';\r\nimport type { Skeleton } from '../animation';\r\nimport { AnimationSet } from '../animation';\r\nimport type { SharedModel } from '../asset';\r\nimport type { Water } from './water';\r\nimport type { ClipmapTerrain } from './terrain-cm/terrain-cm';\r\nimport type { Metadata } from 'draco3d';\r\nimport { getEngine } from '../app/api';\r\nimport type { Sprite } from './sprite';\r\n\r\n/**\r\n * Iteration callback used by traversal helpers.\r\n *\r\n * Return true to stop traversal early.\r\n *\r\n * @public\r\n */\r\nexport type NodeIterateFunc = ((node: SceneNode) => boolean) | ((node: SceneNode) => void);\r\n\r\n/**\r\n * Visibility state of a node.\r\n *\r\n * - 'visible': force visible\r\n * - 'hidden': force hidden\r\n * - 'inherit': inherits from the closest ancestor that is not 'inherit'\r\n *\r\n * @public\r\n */\r\nexport type SceneNodeVisible = 'visible' | 'inherit' | 'hidden';\r\n\r\n/**\r\n * The base class of all scene graph objects.\r\n *\r\n * @remarks\r\n * Responsibilities:\r\n * - Defines hierarchical transform (position, rotation, scale) with lazily computed matrices.\r\n * - Integrates with the scene graph (parent/children, attachment notifications).\r\n * - Provides traversal utilities (`iterate`, `iterateBottomToTop`, `traverse`).\r\n * - Manages visibility state and CPU/GPU picking flags.\r\n * - Computes and caches local/world bounding volumes, notifies scene for spatial updates.\r\n * - Supports cloning and shared model instancing.\r\n * - Emits events on visibility, transform, bounding volume, attachment, and disposal.\r\n *\r\n * Performance:\r\n * - `localMatrix`, `worldMatrix`, and `invWorldMatrix` are cached until invalidated.\r\n * - Transform mutations and `invalidateBoundingVolume` update caches and spatial structures.\r\n *\r\n * Events:\r\n * - `nodeattached`, `noderemoved`, `visiblechanged`, `transformchanged`, `bvchanged`, `dispose`.\r\n *\r\n * @public\r\n */\r\nexport class SceneNode\r\n extends makeObservable(Disposable)<{\r\n /** Emitted on all ancestors when a node is attached under them. */\r\n nodeattached: [node: SceneNode];\r\n /** Emitted on all ancestors when a node is removed from under them. */\r\n noderemoved: [node: SceneNode];\r\n /** Emitted when effective visibility changes (considering inheritance). */\r\n visiblechanged: [node: SceneNode];\r\n /** Emitted when local/world transform changes. */\r\n transformchanged: [node: SceneNode];\r\n /** Emitted when local/world bounding volume changes. */\r\n bvchanged: [node: SceneNode];\r\n /** Emitted when the node is disposed. */\r\n dispose: [];\r\n }>()\r\n implements IDisposable\r\n{\r\n private static _runTimeId = 1;\r\n /*\r\n static readonly PICK_INHERITED = -1;\r\n static readonly PICK_DISABLED = 0;\r\n static readonly PICK_ENABLED = 1;\r\n */\r\n /** Bounding-box draw mode inherited from nearest graph ancestor. */\r\n static readonly BBOXDRAW_INHERITED = -1;\r\n /** Disable bounding-box visualization. */\r\n static readonly BBOXDRAW_DISABLED = 0;\r\n /** Draw local-space bounding box. */\r\n static readonly BBOXDRAW_LOCAL = 1;\r\n /** Draw world-space bounding box. */\r\n static readonly BBOXDRAW_WORLD = 2;\r\n\r\n /** @internal Runtime unique id. */\r\n protected readonly _runtimeId: number;\r\n /** @internal Unique persistent id. */\r\n protected _id: string;\r\n /** @internal Prefab id */\r\n protected _prefabId: string;\r\n /** @internal Animation set reference. */\r\n protected _animationSet: DRef<AnimationSet>;\r\n /** @internal Optional shared model reference for instancing. */\r\n protected _sharedModel: DRef<SharedModel>;\r\n /** @internal */\r\n protected _jointTypeT: 'none' | 'animated' | 'static';\r\n /** @internal */\r\n protected _jointTypeS: 'none' | 'animated' | 'static';\r\n /** @internal */\r\n protected _jointTypeR: 'none' | 'animated' | 'static';\r\n /** @internal Clip test flag used by renderer. */\r\n protected _clipMode: boolean;\r\n /** @internal Bounding-box visualization mode. */\r\n protected _boxDrawMode: number;\r\n /** @internal Visibility state ('visible'|'hidden'|'inherit'). */\r\n protected _visible: SceneNodeVisible;\r\n /** @internal CPU picking flag. */\r\n protected _pickable: boolean;\r\n /** @internal GPU picking flag. */\r\n protected _gpuPickable: boolean;\r\n /** @internal Friendly name for debugging/UI. */\r\n protected _name: string;\r\n /** @internal Owning scene. */\r\n protected _scene: Nullable<Scene>;\r\n\r\n /** @internal Local-space bounding volume cache. */\r\n protected _bv: Nullable<BoundingVolume>;\r\n /** @internal True if local BV needs recomputing. */\r\n protected _bvDirty: boolean;\r\n /** @internal World-space bounding volume cache. */\r\n protected _bvWorld: Nullable<BoundingVolume>;\r\n\r\n /** @internal Whether this node participates in scene spatial structures (octree). */\r\n private _placeToOctree: boolean;\r\n /** @internal If true, this node cannot be cloned/attached as a child (engine policy). */\r\n private _sealed: boolean;\r\n\r\n /** @internal Parent node. */\r\n protected _parent: Nullable<SceneNode>;\r\n /** @internal Children list (DRef for memory/resource mgmt). */\r\n protected _children: DRef<SceneNode>[];\r\n\r\n /** @internal Local position (observable). */\r\n protected _position: ObservableVector3;\r\n /** @internal Local scale (observable). */\r\n protected _scaling: ObservableVector3;\r\n /** @internal Local rotation (observable quaternion). */\r\n protected _rotation: ObservableQuaternion;\r\n\r\n /** @internal Local transform matrix cache. */\r\n protected _localMatrix: Nullable<Matrix4x4>;\r\n /** @internal World transform matrix cache. */\r\n protected _worldMatrix: Nullable<Matrix4x4>;\r\n /** @internal Determinant of world transform (cached). */\r\n protected _worldMatrixDet: Nullable<number>;\r\n /** @internal Inverse world transform matrix cache. */\r\n protected _invWorldMatrix: Nullable<Matrix4x4>;\r\n\r\n /** @internal Scratch local matrix to avoid allocations. */\r\n protected _tmpLocalMatrix: Matrix4x4;\r\n /** @internal Scratch world matrix to avoid allocations. */\r\n protected _tmpWorldMatrix: Matrix4x4;\r\n\r\n /** @internal Monotonically increasing tag for transform changes. */\r\n protected _transformTag: number;\r\n /** @internal Shared callback used by observables on transform mutation. */\r\n protected _transformChangeCallback: () => void;\r\n\r\n /** @internal Arbitrary metadata payload for this node. */\r\n protected _metaData: Nullable<Metadata>;\r\n /** @internal If true, suppress transform-change callbacks (during bulk updates). */\r\n private _disableCallback: boolean;\r\n /** @internal User-attached script entry (engine-defined). */\r\n private _script: string;\r\n /**\r\n * Construct a scene node.\r\n *\r\n * @remarks\r\n * If a `scene` is provided and this is not the root node, the node is reparented\r\n * under the scene's root immediately.\r\n *\r\n * @param scene - Scene that will own this node.\r\n */\r\n constructor(scene: Nullable<Scene>) {\r\n super();\r\n this._runtimeId = SceneNode._runTimeId++;\r\n this._id = randomUUID();\r\n this._prefabId = '';\r\n this._scene = scene;\r\n this._name = '';\r\n this._animationSet = new DRef();\r\n this._sharedModel = new DRef();\r\n this._jointTypeT = 'none';\r\n this._jointTypeS = 'none';\r\n this._jointTypeR = 'none';\r\n this._bv = null;\r\n this._bvWorld = null;\r\n this._bvDirty = true;\r\n this._clipMode = true;\r\n this._boxDrawMode = SceneNode.BBOXDRAW_DISABLED;\r\n this._visible = 'inherit';\r\n this._pickable = false;\r\n this._gpuPickable = true;\r\n this._placeToOctree = true;\r\n this._sealed = false;\r\n this._children = [];\r\n this._transformChangeCallback = () => this._onTransformChanged(true);\r\n this._position = new ObservableVector3(0, 0, 0).setCallback(this._transformChangeCallback);\r\n this._scaling = new ObservableVector3(1, 1, 1).setCallback(this._transformChangeCallback);\r\n this._rotation = new ObservableQuaternion().setCallback(this._transformChangeCallback);\r\n this._worldMatrix = null;\r\n this._worldMatrixDet = null;\r\n this._invWorldMatrix = null;\r\n this._localMatrix = null;\r\n this._transformTag = 0;\r\n this._disableCallback = false;\r\n this._tmpLocalMatrix = Matrix4x4.identity();\r\n this._tmpWorldMatrix = Matrix4x4.identity();\r\n this._script = '';\r\n this._metaData = null;\r\n this._parent = null;\r\n this.reparent(scene?.rootNode ?? null);\r\n }\r\n /**\r\n * Whether the node should be inserted into the scene's spatial structure.\r\n *\r\n * @remarks\r\n * Toggling this hints the scene to (re)place the node in octree/acceleration structures.\r\n */\r\n get placeToOctree() {\r\n return this._placeToOctree;\r\n }\r\n set placeToOctree(val) {\r\n if (!!val !== this._placeToOctree) {\r\n this._placeToOctree = !!val;\r\n if (this.isGraphNode()) {\r\n this.scene?.invalidateNodePlacement(this);\r\n }\r\n }\r\n }\r\n /**\r\n * Node's runtime unique identifier\r\n */\r\n get runtimeId() {\r\n return this._runtimeId;\r\n }\r\n /**\r\n * Node's persistent identifier.\r\n *\r\n * @remarks\r\n * Changing this affects serialization and registry lookup; ensure uniqueness.\r\n */\r\n get persistentId() {\r\n return this._id;\r\n }\r\n set persistentId(id: string) {\r\n this._id = id;\r\n }\r\n /**\r\n * If not empty, this node was loaded from a prefab\r\n *\r\n * @remarks\r\n * Internal used for serialization\r\n */\r\n get prefabId() {\r\n return this._prefabId;\r\n }\r\n set prefabId(id: string) {\r\n this._prefabId = id;\r\n }\r\n /**\r\n * Get prefab node this node belongs to, or null if this node does not belongs to any prefab\r\n * @returns prefab node this node belongs to\r\n */\r\n getPrefabNode(): Nullable<SceneNode> {\r\n return this._prefabId ? this : (this.parent?.getPrefabNode() ?? null);\r\n }\r\n /**\r\n * Translation type if this is a joint node of any skeleton\r\n *\r\n * @remarks\r\n * Internal used for serialization\r\n */\r\n get jointTypeT() {\r\n return this._jointTypeT;\r\n }\r\n set jointTypeT(val: 'none' | 'animated' | 'static') {\r\n this._jointTypeT = val;\r\n }\r\n /**\r\n * Scale type if this is a joint node of any skeleton\r\n *\r\n * @remarks\r\n * Internal used for serialization\r\n */\r\n get jointTypeS() {\r\n return this._jointTypeS;\r\n }\r\n set jointTypeS(val: 'none' | 'animated' | 'static') {\r\n this._jointTypeS = val;\r\n }\r\n /**\r\n * Rotation type if this is a joint node of any skeleton\r\n *\r\n * @remarks\r\n * Internal used for serialization\r\n */\r\n get jointTypeR() {\r\n return this._jointTypeR;\r\n }\r\n set jointTypeR(val: 'none' | 'animated' | 'static') {\r\n this._jointTypeR = val;\r\n }\r\n /**\r\n * Arbitrary metadata associated with this node.\r\n *\r\n * @remarks\r\n * Stored and transported with the node; format is application-defined.\r\n */\r\n get metaData() {\r\n return this._metaData;\r\n }\r\n set metaData(val: Nullable<Metadata>) {\r\n this._metaData = val;\r\n }\r\n /**\r\n * Attached script filename or identifier (engine-specific).\r\n *\r\n * @remarks\r\n * Integrates with the engine’s scripting system if available.\r\n */\r\n get script() {\r\n return this._script;\r\n }\r\n set script(fileName: string) {\r\n this._script = fileName ?? '';\r\n }\r\n /**\r\n * Display name of the node (for UI/debugging).\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n this._name = val || '';\r\n }\r\n /** The owning scene. */\r\n get scene() {\r\n return this._scene;\r\n }\r\n /**\r\n * Whether this node is currently attached under the scene's root.\r\n */\r\n get attached() {\r\n if (!this._scene) {\r\n return false;\r\n }\r\n let node: Nullable<SceneNode> = this;\r\n while (node && node !== this._scene.rootNode) {\r\n node = node.parent;\r\n }\r\n return node === this._scene.rootNode;\r\n }\r\n /**\r\n * If true, the node is logically sealed; some operations (like cloning as child)\r\n * may be restricted by engine policies.\r\n */\r\n get sealed() {\r\n return this._sealed;\r\n }\r\n set sealed(val) {\r\n this._sealed = val;\r\n }\r\n /**\r\n * Lazily created animation set for this node.\r\n *\r\n * @remarks\r\n * Accessing this schedules the node for update in the scene.\r\n */\r\n get animationSet() {\r\n if (!this._animationSet.get()) {\r\n this._animationSet.set(new AnimationSet(this));\r\n this.scene?.queueUpdateNode(this);\r\n }\r\n return this._animationSet.get()!;\r\n }\r\n /**\r\n * Shared model reference for instancing/streaming systems.\r\n */\r\n get sharedModel() {\r\n return this._sharedModel.get();\r\n }\r\n set sharedModel(model: Nullable<SharedModel>) {\r\n this._sharedModel.set(model);\r\n }\r\n /**\r\n * Clone this node.\r\n *\r\n * @remarks\r\n * If a shared model exists, it may create an instanced node. The clone is\r\n * attached under the same parent; children are cloned based on `method` and `recursive`.\r\n *\r\n * @param method - Clone method ('deep' or 'instance').\r\n * @param recursive - Whether children are cloned recursively.\r\n * @returns New node instance\r\n */\r\n async clone(): Promise<this> {\r\n this.iterate((node) => {\r\n if (node.isClipmapTerrain()) {\r\n throw new Error('Cloning terrain node is not allowed');\r\n }\r\n });\r\n const parent = this.parent;\r\n const tmpParent = new SceneNode(this.scene);\r\n const data = await getEngine().resourceManager.serializeObject(this);\r\n const other = (await getEngine().resourceManager.deserializeObject<this>(tmpParent, data))!;\r\n other.persistentId = randomUUID();\r\n other.parent = parent;\r\n tmpParent.dispose();\r\n const postClonePromises: Promise<void>[] = [];\r\n other.iterate((node) => {\r\n const P = node.onPostClone();\r\n if (P instanceof Promise) {\r\n postClonePromises.push(P);\r\n }\r\n });\r\n if (postClonePromises.length > 0) {\r\n await Promise.all(postClonePromises);\r\n }\r\n return other;\r\n }\r\n /**\r\n * Whether the given node is a direct child of this node.\r\n * @param child - The node to be checked\r\n * @returns true if the given node is a direct child of this node, false otherwise\r\n */\r\n hasChild(child: SceneNode) {\r\n return child && child.parent === this;\r\n }\r\n /**\r\n * Remove all children from this node.\r\n */\r\n removeChildren() {\r\n while (this._children.length) {\r\n this._children[0].get()!.remove();\r\n }\r\n }\r\n /**\r\n * Whether this node is an ancestor (direct or indirect) of the given node.\r\n */\r\n isParentOf(child: Nullable<SceneNode>) {\r\n while (child && child !== this) {\r\n child = child.parent!;\r\n }\r\n return child === this;\r\n }\r\n /**\r\n * Detach this node from its parent.\r\n *\r\n * @returns this\r\n */\r\n remove() {\r\n this.parent = null;\r\n return this;\r\n }\r\n /**\r\n * Depth-first traversal of this node's subtree (pre-order).\r\n *\r\n * @param v - Visitor invoked on each node.\r\n */\r\n traverse(v: Visitor<SceneNode>) {\r\n v.visit(this);\r\n for (const child of this._children) {\r\n child.get()!.traverse(v);\r\n }\r\n }\r\n /**\r\n * Iterate self and descendants in pre-order.\r\n *\r\n * Warning: Do not remove children during this iteration. To allow removal, use `iterateBottomToTop`.\r\n *\r\n * @param callback - Called for each node; if returns true, iteration stops.\r\n * @returns true if iteration was aborted early.\r\n */\r\n iterate(callback: NodeIterateFunc) {\r\n if (callback(this)) {\r\n return true;\r\n }\r\n for (const child of this._children) {\r\n if (child.get()!.iterate(callback)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * Iterate self and descendants in reverse post-order (bottom-to-top).\r\n *\r\n * Child nodes can be safely removed during this iteration.\r\n *\r\n * @param callback - Called for each node; if returns true, iteration stops.\r\n * @returns true if iteration was aborted early.\r\n */\r\n iterateBottomToTop(callback: NodeIterateFunc) {\r\n for (let i = this._children.length - 1; i >= 0; i--) {\r\n const child = this._children[i];\r\n if (child.get()!.iterateBottomToTop(callback)) {\r\n return true;\r\n }\r\n }\r\n if (callback(this)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Type guard: true if this node is a graph node. */\r\n isGraphNode(): this is GraphNode {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a light. */\r\n isLight(): this is BaseLight {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a mesh. */\r\n isMesh(): this is Mesh {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a sprite */\r\n isSprite(): this is Sprite {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a water node. */\r\n isWater(): this is Water {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a particle system. */\r\n isParticleSystem(): this is ParticleSystem {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a batch group. */\r\n isBatchGroup(): this is BatchGroup {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a clipmap terrain. */\r\n isClipmapTerrain(): this is ClipmapTerrain {\r\n return false;\r\n }\r\n /** true if this is a camera node, false otherwise */\r\n isCamera(): this is Camera {\r\n return false;\r\n }\r\n /** true if this is a punctual light node, false otherwise */\r\n isPunctualLight(): this is PunctualLight {\r\n return false;\r\n }\r\n /**\r\n * Computes the bounding volume of the node\r\n * @returns The output bounding volume\r\n */\r\n computeBoundingVolume(): Nullable<BoundingVolume> {\r\n return null;\r\n }\r\n /**\r\n * Gets the bounding volume of the node\r\n * @returns The bounding volume of the node\r\n */\r\n getBoundingVolume(): Nullable<BoundingVolume> {\r\n if (this._bvDirty) {\r\n this._bv = this.computeBoundingVolume();\r\n this._bvDirty = false;\r\n }\r\n return this._bv;\r\n }\r\n /**\r\n * Sets the bounding volume of the node\r\n * @param bv - The bounding volume to set\r\n */\r\n setBoundingVolume(bv: BoundingVolume) {\r\n if (bv !== this._bv) {\r\n this._bv = bv;\r\n this._bvDirty = !this._bv;\r\n this.invalidateWorldBoundingVolume(false);\r\n }\r\n }\r\n /**\r\n * Gets the world space bounding volume of the node\r\n * @returns The world space bounding volume of the node\r\n */\r\n getWorldBoundingVolume(): Nullable<BoundingVolume> {\r\n if (!this._bvWorld) {\r\n this._bvWorld = this.computeWorldBoundingVolume(this.getBoundingVolume());\r\n }\r\n return this._bvWorld;\r\n }\r\n /**\r\n * Computes the world space bounding volume of the node\r\n * @returns The output bounding volume\r\n */\r\n computeWorldBoundingVolume(localBV: Nullable<BoundingVolume>): Nullable<BoundingVolume> {\r\n return localBV?.transform(this.worldMatrix) ?? null;\r\n }\r\n /**\r\n * Force the bounding volume to be recalculated\r\n */\r\n invalidateBoundingVolume() {\r\n this._bvDirty = true;\r\n this.invalidateWorldBoundingVolume(false);\r\n }\r\n /** Force the world space bounding volume to be recalculated */\r\n invalidateWorldBoundingVolume(transformChanged: boolean) {\r\n this._bvWorld = null;\r\n if (this._scene) {\r\n if (transformChanged) {\r\n this.iterate((node) => {\r\n if (node.isGraphNode()) {\r\n this._scene!.invalidateNodePlacement(node);\r\n }\r\n });\r\n } else if (this.isGraphNode()) {\r\n this._scene.invalidateNodePlacement(this);\r\n }\r\n this.dispatchEvent('bvchanged', this);\r\n }\r\n }\r\n /** Clip mode */\r\n get clipTestEnabled() {\r\n return this._clipMode;\r\n }\r\n set clipTestEnabled(val) {\r\n this._clipMode = val;\r\n }\r\n /** Computed value of show state */\r\n get hidden() {\r\n let node: Nullable<SceneNode> = this;\r\n while (node && node._visible === 'inherit') {\r\n node = node.parent;\r\n }\r\n return node ? node._visible === 'hidden' : false;\r\n }\r\n /** Show state */\r\n get showState() {\r\n return this._visible;\r\n }\r\n set showState(val) {\r\n if (val !== this._visible) {\r\n const prevHidden = this.hidden;\r\n this._visible = val;\r\n if (prevHidden !== this.hidden) {\r\n if (this.isGraphNode()) {\r\n this._scene?.invalidateNodePlacement(this);\r\n }\r\n let parent: Nullable<SceneNode> = this;\r\n while (parent) {\r\n parent.dispatchEvent('visiblechanged', this);\r\n parent = parent.parent;\r\n }\r\n this.notifyHiddenChanged();\r\n }\r\n }\r\n }\r\n /** Whether this node is enabled for CPU picking */\r\n get pickable() {\r\n return this._pickable;\r\n }\r\n set pickable(val) {\r\n this._pickable = !!val;\r\n }\r\n /** Whether this node is enabled for GPU picking */\r\n get gpuPickable() {\r\n return this._gpuPickable;\r\n }\r\n set gpuPickable(val) {\r\n this._gpuPickable = !!val;\r\n }\r\n /**\r\n * Finds a scene node by its persistent ID.\r\n *\r\n * @typeParam T - Expected node type.\r\n * @param id - Persistent identifier to match against `SceneNode.persistentId`.\r\n * @returns The first matching node, or `null` if not found.\r\n */\r\n findNodeById<T extends SceneNode>(id: string): T {\r\n let node: Nullable<T> = null;\r\n this.iterate((child) => {\r\n if (child.persistentId === id) {\r\n node = child as T;\r\n return true;\r\n }\r\n });\r\n return node as unknown as T;\r\n }\r\n /**\r\n * Finds a skeleton object by its persistent ID.\r\n * @param id - Persistent identifier to match against `Skeleton.persistentId`.\r\n * @returns The first matchign node, or `null` if not found.\r\n */\r\n findSkeletonById(id: string) {\r\n const prefabNode = this.getPrefabNode() ?? this;\r\n let sk: Nullable<DRef<Skeleton>> = null;\r\n prefabNode.iterate((node) => {\r\n sk = node.animationSet.skeletons.find((s) => s.get()!.persistentId === id) ?? null;\r\n return !!sk;\r\n });\r\n // avoid ts2339 compilation error (maybe a typescript bug?)\r\n return (sk as Nullable<DRef<Skeleton>>)?.get() ?? null;\r\n }\r\n /**\r\n * Finds a scene node by name.\r\n *\r\n * If multiple nodes share the same name, returns the first match encountered\r\n * during traversal.\r\n *\r\n * @typeParam T - Expected node type.\r\n * @param name - Node name to match.\r\n * @returns The first matching node, or `null` if not found.\r\n *\r\n * @remarks\r\n * Names are not guaranteed unique. Prefer IDs for stable references.\r\n */\r\n findNodeByName<T extends SceneNode>(name: string): Nullable<T> {\r\n let node: Nullable<T> = null;\r\n this.iterate((child) => {\r\n if (child.name === name) {\r\n node = child as T;\r\n return true;\r\n }\r\n });\r\n return node;\r\n }\r\n\r\n /** Computed value for bounding box draw mode */\r\n get computedBoundingBoxDrawMode(): number {\r\n if (this._boxDrawMode === SceneNode.BBOXDRAW_INHERITED) {\r\n let parent = this.parent;\r\n while (parent && !parent.isGraphNode()) {\r\n parent = parent.parent;\r\n }\r\n return parent?.computedBoundingBoxDrawMode ?? SceneNode.BBOXDRAW_DISABLED;\r\n }\r\n return this._boxDrawMode;\r\n }\r\n /** Bounding box draw mode */\r\n get boundingBoxDrawMode() {\r\n return this._boxDrawMode;\r\n }\r\n set boundingBoxDrawMode(mode) {\r\n this._boxDrawMode = mode;\r\n }\r\n /** Get called when the node was just created by cloning from other node */\r\n protected onPostClone(): void | Promise<void> {}\r\n /** Disposes the node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this.remove();\r\n this.removeChildren();\r\n this._animationSet.dispose();\r\n this._sharedModel.dispose();\r\n }\r\n /** @internal */\r\n protected _setParent(p: Nullable<SceneNode>) {\r\n if (p && p._scene !== this._scene) {\r\n throw new Error('Parent node and child node must belongs to the same scene');\r\n }\r\n let lastParent = this._parent;\r\n let newParent = p;\r\n if (newParent !== lastParent) {\r\n const willDetach = (!p || !p.attached) && this.attached;\r\n const willAttach = !this.attached && p && p.attached;\r\n if (newParent) {\r\n newParent._children.push(new DRef(this));\r\n }\r\n if (this._parent) {\r\n const index = this._parent._children.findIndex((val) => val.get() === this);\r\n this._parent.children[index].dispose();\r\n this._parent._children.splice(index, 1);\r\n }\r\n this._parent = p;\r\n this._onTransformChanged(false);\r\n if (willDetach) {\r\n this._detached();\r\n }\r\n if (willAttach) {\r\n this._attached();\r\n }\r\n while (lastParent) {\r\n lastParent.dispatchEvent('noderemoved', this);\r\n lastParent = lastParent.parent;\r\n }\r\n while (newParent) {\r\n newParent.dispatchEvent('nodeattached', this);\r\n newParent = newParent.parent;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n if (this._disableCallback) {\r\n return;\r\n }\r\n if (invalidateLocal) {\r\n this._localMatrix = null;\r\n }\r\n this._worldMatrix = null;\r\n this._invWorldMatrix = null;\r\n this._worldMatrixDet = null;\r\n this._transformTag++;\r\n for (const child of this._children) {\r\n child.get()!._onTransformChanged(false);\r\n }\r\n this.invalidateWorldBoundingVolume(true);\r\n this.dispatchEvent('transformchanged', this);\r\n }\r\n /**\r\n * Get called when this node is attached to scene\r\n */\r\n protected _onAttached() {}\r\n /**\r\n * Get called when this node is detached from scene\r\n */\r\n protected _onDetached() {}\r\n /** @internal */\r\n protected _attached() {\r\n this.iterate((child) => {\r\n this.scene!.queueUpdateNode(child);\r\n child._onAttached();\r\n });\r\n }\r\n /** @internal */\r\n protected _detached() {\r\n this.iterate((child) => {\r\n child._onDetached();\r\n });\r\n }\r\n /** @internal */\r\n notifyHiddenChanged() {\r\n this._visibleChanged();\r\n for (const child of this._children) {\r\n if (child.get()!.showState === 'inherit') {\r\n child.get()!.notifyHiddenChanged();\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected _visibleChanged() {}\r\n /** Parent of the xform */\r\n get parent() {\r\n return this._parent;\r\n }\r\n set parent(p) {\r\n if (p !== this._parent) {\r\n this._setParent(p);\r\n }\r\n }\r\n /** Children of this xform */\r\n get children() {\r\n return this._children;\r\n }\r\n /**\r\n * Position of the xform relative to it's parent\r\n */\r\n get position(): Vector3 {\r\n return this._position;\r\n }\r\n set position(val: Vector3) {\r\n this._position.setXYZ(val[0], val[1], val[2]);\r\n }\r\n /**\r\n * Scaling of the xform\r\n */\r\n get scale(): Vector3 {\r\n return this._scaling;\r\n }\r\n set scale(val: Vector3) {\r\n this._scaling.setXYZ(val[0], val[1], val[2]);\r\n }\r\n /**\r\n * Rotation of the xform\r\n */\r\n get rotation(): Quaternion {\r\n return this._rotation;\r\n }\r\n set rotation(val: Quaternion) {\r\n this._rotation.setXYZW(val[0], val[1], val[2], val[3]);\r\n }\r\n /**\r\n * Transform world coordinate to local space\r\n * @param v - point or vector in world space\r\n * @param result - The output result\r\n * @returns The transformed local space coordinate\r\n */\r\n worldToThis(v: Vector3, result?: Vector3): Vector3;\r\n worldToThis(v: Vector4, result?: Vector4): Vector4;\r\n worldToThis(v: Vector3 | Vector4, result?: Vector3 | Vector4): Vector3 | Vector4 {\r\n if (v instanceof Vector3) {\r\n result = result || new Vector3();\r\n this.invWorldMatrix.transformPointAffine(v, result as Vector3);\r\n return result;\r\n } else {\r\n result = result || new Vector4();\r\n this.invWorldMatrix.transformAffine(v, result as Vector4);\r\n return result;\r\n }\r\n }\r\n /**\r\n * Transform coordinate in other coordinate space to local space\r\n * @param other - The other coordinate space\r\n * @param v - point or vector in other coordinate space\r\n * @param result - The output result\r\n * @returns The transformed local space coordinate\r\n */\r\n otherToThis(other: SceneNode, v: Vector3, result?: Vector3): Vector3;\r\n otherToThis(other: SceneNode, v: Vector4, result?: Vector4): Vector4;\r\n otherToThis(other: SceneNode, v: Vector3 | Vector4, result?: Vector3 | Vector4): Vector3 | Vector4 {\r\n return this.worldToThis(other.thisToWorld(v as any, result as any), result as any);\r\n }\r\n /**\r\n * Transform local coordinate to world space\r\n * @param v - point or vector in local space\r\n * @param result - The output result\r\n * @returns The transformed world space coordinate\r\n */\r\n thisToWorld(v: Vector3, result?: Vector3): Vector3;\r\n thisToWorld(v: Vector4, result?: Vector4): Vector4;\r\n thisToWorld(v: Vector3 | Vector4, result?: Vector3 | Vector4): Vector3 | Vector4 {\r\n if (v instanceof Vector3) {\r\n result = result || new Vector3();\r\n this.worldMatrix.transformPointAffine(v, result as Vector3);\r\n return result;\r\n } else {\r\n result = result || new Vector4();\r\n this.worldMatrix.transformAffine(v, result as Vector4);\r\n return result;\r\n }\r\n }\r\n /**\r\n * Transform local space coordinate to other coordinate space\r\n * @param other - The other coordinate space\r\n * @param v - point or vector in localspace\r\n * @param result - The output result\r\n * @returns The transformed coordinate in other coordinate space\r\n */\r\n thisToOther(other: SceneNode, v: Vector3, result?: Vector3): Vector3;\r\n thisToOther(other: SceneNode, v: Vector4, result?: Vector4): Vector4;\r\n thisToOther(other: SceneNode, v: Vector3 | Vector4, result?: Vector3 | Vector4): Vector3 | Vector4 {\r\n return other.worldToThis(this.thisToWorld(v as any, result as any), result as any);\r\n }\r\n /**\r\n * Gets the position of the xform in world space\r\n * @returns position of the xform in world space\r\n */\r\n getWorldPosition(outPos?: Vector3) {\r\n return (\r\n outPos?.setXYZ(this.worldMatrix.m03, this.worldMatrix.m13, this.worldMatrix.m23) ??\r\n new Vector3(this.worldMatrix.m03, this.worldMatrix.m13, this.worldMatrix.m23)\r\n );\r\n }\r\n /**\r\n * Moves the xform by an offset vector\r\n * @param delta - The offset vector\r\n * @returns self\r\n */\r\n moveBy(delta: Vector3) {\r\n this._position.addBy(delta);\r\n return this;\r\n }\r\n /**\r\n * Scales the xform by a given scale factor\r\n * @param factor - The scale factor\r\n * @returns self\r\n */\r\n scaleBy(factor: Vector3) {\r\n this._scaling.mulBy(factor);\r\n return this;\r\n }\r\n /**\r\n * Sets the local transform matrix of the xform\r\n * @param matrix - The transform matrix to set\r\n * @returns self\r\n */\r\n setLocalTransform(matrix: Matrix4x4) {\r\n this._disableCallback = true;\r\n matrix.decompose(this._scaling, this._rotation, this._position);\r\n this._disableCallback = false;\r\n this._onTransformChanged(true);\r\n return this;\r\n }\r\n /** Local transformation matrix of the xform */\r\n get localMatrix(): Immutable<Matrix4x4> {\r\n if (!this._localMatrix) {\r\n this.calculateLocalTransform(this._tmpLocalMatrix);\r\n this._localMatrix = this._tmpLocalMatrix;\r\n }\r\n return this._localMatrix;\r\n }\r\n set localMatrix(matrix: Immutable<Matrix4x4>) {\r\n this.setLocalTransform(matrix);\r\n }\r\n /** World transformation matrix of the xform */\r\n get worldMatrix(): Immutable<Matrix4x4> {\r\n if (!this._worldMatrix) {\r\n this._worldMatrix = this._tmpWorldMatrix;\r\n this.calculateWorldTransform(this._worldMatrix);\r\n }\r\n return this._worldMatrix;\r\n }\r\n /** The determinant of world matrix */\r\n get worldMatrixDet() {\r\n if (this._worldMatrixDet === null) {\r\n this._worldMatrixDet = this.worldMatrix.det();\r\n }\r\n return this._worldMatrixDet;\r\n }\r\n /** Inverse of the world transformation matrix of the xform */\r\n get invWorldMatrix(): Immutable<Matrix4x4> {\r\n if (!this._invWorldMatrix) {\r\n this._invWorldMatrix = Matrix4x4.invertAffine(this.worldMatrix);\r\n }\r\n return this._invWorldMatrix;\r\n }\r\n /**\r\n * Calculate local transform matrix\r\n * @param outMatrix - Matrix object that holds the result of calculation\r\n */\r\n calculateLocalTransform(outMatrix: Matrix4x4) {\r\n outMatrix.compose(this._scaling, this._rotation, this._position);\r\n }\r\n /**\r\n * Calculate world transform matrix\r\n * @param outMatrix - Matrix object that holds the result of calculation\r\n */\r\n calculateWorldTransform(outMatrix: Matrix4x4) {\r\n if (this._parent) {\r\n Matrix4x4.multiplyAffine(this._parent.worldMatrix, this.localMatrix, outMatrix);\r\n } else {\r\n outMatrix.set(this.localMatrix);\r\n }\r\n }\r\n /**\r\n * Sets the local tranformation matrix by a look-at matrix\r\n * @param eye - The eye position used to make the look-at matrix\r\n * @param target - The target position used to make the look-at matrix\r\n * @param up - The up vector used to make the look-at matrix\r\n * @returns self\r\n */\r\n lookAt(eye: Vector3, target: Vector3, up: Vector3) {\r\n this.setLocalTransform(Matrix4x4.lookAt(eye, target, up));\r\n return this;\r\n }\r\n /**\r\n * Update node state once per-frame\r\n * @param frameId - Current frame id\r\n * @param elapsedInSeconds - Elapsed time from game start in seconds\r\n * @param deltaInSeconds - Elapsed time since previous frame in seconds\r\n */\r\n update(frameId: number, elapsedInSeconds: number, deltaInSeconds: number) {\r\n if (!this.attached) {\r\n return;\r\n }\r\n const animationSet = this._animationSet.get();\r\n if (animationSet) {\r\n if (animationSet.numAnimations > 0 || animationSet.skeletons.length > 0) {\r\n animationSet.update(deltaInSeconds);\r\n this.scene!.queueUpdateNode(this);\r\n } else {\r\n this._animationSet.dispose();\r\n }\r\n }\r\n }\r\n /**\r\n * Update node state once per-camera\r\n * @param _camera - Updates according to which camera\r\n * @param _elapsedInSeconds - Elapsed time from game start in seconds\r\n * @param _deltaInSeconds - Elapsed time since previous frame in seconds\r\n */\r\n updatePerCamera(_camera: Camera, _elapsedInSeconds: number, _deltaInSeconds: number) {}\r\n /**\r\n * Removes this node from it's parent and add this node to another parent node if required\r\n * @param p - The new parent node that this node should be added to or null\r\n * @returns self\r\n */\r\n reparent(p?: Nullable<SceneNode>) {\r\n this.parent = p ?? null;\r\n return this;\r\n }\r\n /** @internal */\r\n get transformTag() {\r\n return this._transformTag;\r\n }\r\n}\r\n"],"names":["SceneNode","makeObservable","Disposable","_runTimeId","BBOXDRAW_INHERITED","BBOXDRAW_DISABLED","BBOXDRAW_LOCAL","BBOXDRAW_WORLD","scene","_runtimeId","_id","randomUUID","_prefabId","_scene","_name","_animationSet","DRef","_sharedModel","_jointTypeT","_jointTypeS","_jointTypeR","_bv","_bvWorld","_bvDirty","_clipMode","_boxDrawMode","_visible","_pickable","_gpuPickable","_placeToOctree","_sealed","_children","_transformChangeCallback","_onTransformChanged","_position","ObservableVector3","setCallback","_scaling","_rotation","ObservableQuaternion","_worldMatrix","_worldMatrixDet","_invWorldMatrix","_localMatrix","_transformTag","_disableCallback","_tmpLocalMatrix","Matrix4x4","identity","_tmpWorldMatrix","_script","_metaData","_parent","reparent","rootNode","placeToOctree","val","isGraphNode","invalidateNodePlacement","runtimeId","persistentId","id","prefabId","getPrefabNode","parent","jointTypeT","jointTypeS","jointTypeR","metaData","script","fileName","name","attached","node","sealed","animationSet","get","set","AnimationSet","queueUpdateNode","sharedModel","model","clone","iterate","isClipmapTerrain","Error","tmpParent","data","getEngine","resourceManager","serializeObject","other","deserializeObject","dispose","postClonePromises","P","onPostClone","Promise","push","length","all","hasChild","child","removeChildren","remove","isParentOf","traverse","v","visit","callback","iterateBottomToTop","i","isLight","isMesh","isSprite","isWater","isParticleSystem","isBatchGroup","isCamera","isPunctualLight","computeBoundingVolume","getBoundingVolume","setBoundingVolume","bv","invalidateWorldBoundingVolume","getWorldBoundingVolume","computeWorldBoundingVolume","localBV","transform","worldMatrix","invalidateBoundingVolume","transformChanged","dispatchEvent","clipTestEnabled","hidden","showState","prevHidden","notifyHiddenChanged","pickable","gpuPickable","findNodeById","findSkeletonById","prefabNode","sk","skeletons","find","s","findNodeByName","computedBoundingBoxDrawMode","boundingBoxDrawMode","mode","onDispose","_setParent","p","lastParent","newParent","willDetach","willAttach","index","findIndex","children","splice","_detached","_attached","invalidateLocal","_onAttached","_onDetached","_visibleChanged","position","setXYZ","scale","rotation","setXYZW","worldToThis","result","Vector3","invWorldMatrix","transformPointAffine","Vector4","transformAffine","otherToThis","thisToWorld","thisToOther","getWorldPosition","outPos","m03","m13","m23","moveBy","delta","addBy","scaleBy","factor","mulBy","setLocalTransform","matrix","decompose","localMatrix","calculateLocalTransform","calculateWorldTransform","worldMatrixDet","det","invertAffine","outMatrix","compose","multiplyAffine","lookAt","eye","target","up","update","frameId","elapsedInSeconds","deltaInSeconds","numAnimations","updatePerCamera","_camera","_elapsedInSeconds","_deltaInSeconds","transformTag"],"mappings":";;;;;;;AAyCA;;;;;;;;;;;;;;;;;;;;;IAsBO,MAAMA,SAAAA,SACHC,cAAeC,CAAAA,UAAAA,CAAAA,EAAAA,CAAAA;AAgBvB,IAAA,OAAeC,aAAa,CAAE;AAC9B;;;;AAIA,0EAEA,OAAgBC,kBAAAA,GAAqB,EAAG;+CAExC,OAAgBC,iBAAAA,GAAoB,CAAE;0CAEtC,OAAgBC,cAAAA,GAAiB,CAAE;0CAEnC,OAAgBC,cAAAA,GAAiB,CAAE;wCAGnC,UAAsC;2CAEtC,GAAsB;+BAEtB,SAA4B;8CAE5B,aAA4C;qEAE5C,YAA0C;qBAE1C,WAAsD;qBAEtD,WAAsD;qBAEtD,WAAsD;sDAEtD,SAA6B;sDAE7B,YAA+B;sEAE/B,QAAqC;uCAErC,SAA6B;uCAE7B,YAAgC;qDAEhC,KAAwB;mCAExB,MAAkC;wDAGlC,GAAwC;yDAExC,QAA4B;wDAE5B,QAA6C;0FAG7C,cAAgC;8FAEhC,OAAyB;kCAGzB,OAAuC;oEAEvC,SAAuC;kDAGvC,SAAuC;+CAEvC,QAAsC;6DAEtC,SAA0C;mDAG1C,YAA4C;mDAE5C,YAA4C;8DAE5C,eAA4C;2DAE5C,eAA+C;gEAG/C,eAAqC;gEAErC,eAAqC;yEAGrC,aAAgC;gFAEhC,wBAA+C;+DAG/C,SAAwC;yFAExC,gBAAkC;kEAElC,OAAwB;AACxB;;;;;;;;MASA,WAAA,CAAYC,KAAsB,CAAE;QAClC,KAAK,EAAA;AACL,QAAA,IAAI,CAACC,UAAU,GAAGT,SAAAA,CAAUG,UAAU,EAAA;QACtC,IAAI,CAACO,GAAG,GAAGC,UAAAA,EAAAA;QACX,IAAI,CAACC,SAAS,GAAG,EAAA;QACjB,IAAI,CAACC,MAAM,GAAGL,KAAAA;QACd,IAAI,CAACM,KAAK,GAAG,EAAA;QACb,IAAI,CAACC,aAAa,GAAG,IAAIC,IAAAA,EAAAA;QACzB,IAAI,CAACC,YAAY,GAAG,IAAID,IAAAA,EAAAA;QACxB,IAAI,CAACE,WAAW,GAAG,MAAA;QACnB,IAAI,CAACC,WAAW,GAAG,MAAA;QACnB,IAAI,CAACC,WAAW,GAAG,MAAA;QACnB,IAAI,CAACC,GAAG,GAAG,IAAA;QACX,IAAI,CAACC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,SAAS,GAAG,IAAA;AACjB,QAAA,IAAI,CAACC,YAAY,GAAGzB,SAAAA,CAAUK,iBAAiB;QAC/C,IAAI,CAACqB,QAAQ,GAAG,SAAA;QAChB,IAAI,CAACC,SAAS,GAAG,KAAA;QACjB,IAAI,CAACC,YAAY,GAAG,IAAA;QACpB,IAAI,CAACC,cAAc,GAAG,IAAA;QACtB,IAAI,CAACC,OAAO,GAAG,KAAA;QACf,IAAI,CAACC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAACC,wBAAwB,GAAG,IAAM,IAAI,CAACC,mBAAmB,CAAC,IAAA,CAAA;AAC/D,QAAA,IAAI,CAACC,SAAS,GAAG,IAAIC,iBAAkB,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,CAAGC,WAAW,CAAC,IAAI,CAACJ,wBAAwB,CAAA;AACzF,QAAA,IAAI,CAACK,QAAQ,GAAG,IAAIF,iBAAkB,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,CAAGC,WAAW,CAAC,IAAI,CAACJ,wBAAwB,CAAA;QACxF,IAAI,CAACM,SAAS,GAAG,IAAIC,uBAAuBH,WAAW,CAAC,IAAI,CAACJ,wBAAwB,CAAA;QACrF,IAAI,CAACQ,YAAY,GAAG,IAAA;QACpB,IAAI,CAACC,eAAe,GAAG,IAAA;QACvB,IAAI,CAACC,eAAe,GAAG,IAAA;QACvB,IAAI,CAACC,YAAY,GAAG,IAAA;QACpB,IAAI,CAACC,aAAa,GAAG,CAAA;QACrB,IAAI,CAACC,gBAAgB,GAAG,KAAA;AACxB,QAAA,IAAI,CAACC,eAAe,GAAGC,SAAAA,CAAUC,QAAQ,EAAA;AACzC,QAAA,IAAI,CAACC,eAAe,GAAGF,SAAAA,CAAUC,QAAQ,EAAA;QACzC,IAAI,CAACE,OAAO,GAAG,EAAA;QACf,IAAI,CAACC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,OAAO,GAAG,IAAA;AACf,QAAA,IAAI,CAACC,QAAQ,CAAC7C,KAAAA,EAAO8C,QAAY,IAAA,IAAA,CAAA;AACnC;AACA;;;;;AAKC,MACD,IAAIC,aAAgB,GAAA;QAClB,OAAO,IAAI,CAAC1B,cAAc;AAC5B;IACA,IAAI0B,aAAAA,CAAcC,GAAG,EAAE;AACrB,QAAA,IAAI,CAAC,CAACA,GAAAA,KAAQ,IAAI,CAAC3B,cAAc,EAAE;AACjC,YAAA,IAAI,CAACA,cAAc,GAAG,CAAC,CAAC2B,GAAAA;YACxB,IAAI,IAAI,CAACC,WAAW,EAAI,EAAA;AACtB,gBAAA,IAAI,CAACjD,KAAK,EAAEkD,uBAAAA,CAAwB,IAAI,CAAA;AAC1C;AACF;AACF;AACA;;AAEC,MACD,IAAIC,SAAY,GAAA;QACd,OAAO,IAAI,CAAClD,UAAU;AACxB;AACA;;;;;AAKC,MACD,IAAImD,YAAe,GAAA;QACjB,OAAO,IAAI,CAAClD,GAAG;AACjB;IACA,IAAIkD,YAAAA,CAAaC,EAAU,EAAE;QAC3B,IAAI,CAACnD,GAAG,GAAGmD,EAAAA;AACb;AACA;;;;;AAKC,MACD,IAAIC,QAAW,GAAA;QACb,OAAO,IAAI,CAAClD,SAAS;AACvB;IACA,IAAIkD,QAAAA,CAASD,EAAU,EAAE;QACvB,IAAI,CAACjD,SAAS,GAAGiD,EAAAA;AACnB;AACA;;;AAGC,MACDE,aAAqC,GAAA;QACnC,OAAO,IAAI,CAACnD,SAAS,GAAG,IAAI,GAAI,IAAI,CAACoD,MAAM,EAAED,aAAmB,EAAA,IAAA,IAAA;AAClE;AACA;;;;;AAKC,MACD,IAAIE,UAAa,GAAA;QACf,OAAO,IAAI,CAAC/C,WAAW;AACzB;IACA,IAAI+C,UAAAA,CAAWT,GAAmC,EAAE;QAClD,IAAI,CAACtC,WAAW,GAAGsC,GAAAA;AACrB;AACA;;;;;AAKC,MACD,IAAIU,UAAa,GAAA;QACf,OAAO,IAAI,CAAC/C,WAAW;AACzB;IACA,IAAI+C,UAAAA,CAAWV,GAAmC,EAAE;QAClD,IAAI,CAACrC,WAAW,GAAGqC,GAAAA;AACrB;AACA;;;;;AAKC,MACD,IAAIW,UAAa,GAAA;QACf,OAAO,IAAI,CAAC/C,WAAW;AACzB;IACA,IAAI+C,UAAAA,CAAWX,GAAmC,EAAE;QAClD,IAAI,CAACpC,WAAW,GAAGoC,GAAAA;AACrB;AACA;;;;;AAKC,MACD,IAAIY,QAAW,GAAA;QACb,OAAO,IAAI,CAACjB,SAAS;AACvB;IACA,IAAIiB,QAAAA,CAASZ,GAAuB,EAAE;QACpC,IAAI,CAACL,SAAS,GAAGK,GAAAA;AACnB;AACA;;;;;AAKC,MACD,IAAIa,MAAS,GAAA;QACX,OAAO,IAAI,CAACnB,OAAO;AACrB;IACA,IAAImB,MAAAA,CAAOC,QAAgB,EAAE;QAC3B,IAAI,CAACpB,OAAO,GAAGoB,QAAY,IAAA,EAAA;AAC7B;AACA;;AAEC,MACD,IAAIC,IAAO,GAAA;QACT,OAAO,IAAI,CAACzD,KAAK;AACnB;IACA,IAAIyD,IAAAA,CAAKf,GAAW,EAAE;QACpB,IAAI,CAAC1C,KAAK,GAAG0C,GAAO,IAAA,EAAA;AACtB;6BAEA,IAAIhD,KAAQ,GAAA;QACV,OAAO,IAAI,CAACK,MAAM;AACpB;AACA;;AAEC,MACD,IAAI2D,QAAW,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC3D,MAAM,EAAE;YAChB,OAAO,KAAA;AACT;AACA,QAAA,IAAI4D,OAA4B,IAAI;AACpC,QAAA,MAAOA,QAAQA,IAAS,KAAA,IAAI,CAAC5D,MAAM,CAACyC,QAAQ,CAAE;AAC5CmB,YAAAA,IAAAA,GAAOA,KAAKT,MAAM;AACpB;AACA,QAAA,OAAOS,IAAS,KAAA,IAAI,CAAC5D,MAAM,CAACyC,QAAQ;AACtC;AACA;;;AAGC,MACD,IAAIoB,MAAS,GAAA;QACX,OAAO,IAAI,CAAC5C,OAAO;AACrB;IACA,IAAI4C,MAAAA,CAAOlB,GAAG,EAAE;QACd,IAAI,CAAC1B,OAAO,GAAG0B,GAAAA;AACjB;AACA;;;;;AAKC,MACD,IAAImB,YAAe,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC5D,aAAa,CAAC6D,GAAG,EAAI,EAAA;AAC7B,YAAA,IAAI,CAAC7D,aAAa,CAAC8D,GAAG,CAAC,IAAIC,aAAa,IAAI,CAAA,CAAA;AAC5C,YAAA,IAAI,CAACtE,KAAK,EAAEuE,eAAAA,CAAgB,IAAI,CAAA;AAClC;AACA,QAAA,OAAO,IAAI,CAAChE,aAAa,CAAC6D,GAAG,EAAA;AAC/B;AACA;;AAEC,MACD,IAAII,WAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC/D,YAAY,CAAC2D,GAAG,EAAA;AAC9B;IACA,IAAII,WAAAA,CAAYC,KAA4B,EAAE;AAC5C,QAAA,IAAI,CAAChE,YAAY,CAAC4D,GAAG,CAACI,KAAAA,CAAAA;AACxB;AACA;;;;;;;;;;AAUC,MACD,MAAMC,KAAuB,GAAA;QAC3B,IAAI,CAACC,OAAO,CAAC,CAACV,IAAAA,GAAAA;YACZ,IAAIA,IAAAA,CAAKW,gBAAgB,EAAI,EAAA;AAC3B,gBAAA,MAAM,IAAIC,KAAM,CAAA,qCAAA,CAAA;AAClB;AACF,SAAA,CAAA;QACA,MAAMrB,MAAAA,GAAS,IAAI,CAACA,MAAM;AAC1B,QAAA,MAAMsB,SAAY,GAAA,IAAItF,SAAU,CAAA,IAAI,CAACQ,KAAK,CAAA;AAC1C,QAAA,MAAM+E,OAAO,MAAMC,SAAAA,EAAAA,CAAYC,eAAe,CAACC,eAAe,CAAC,IAAI,CAAA;AACnE,QAAA,MAAMC,QAAS,MAAMH,SAAAA,EAAAA,CAAYC,eAAe,CAACG,iBAAiB,CAAON,SAAWC,EAAAA,IAAAA,CAAAA;AACpFI,QAAAA,KAAAA,CAAM/B,YAAY,GAAGjD,UAAAA,EAAAA;AACrBgF,QAAAA,KAAAA,CAAM3B,MAAM,GAAGA,MAAAA;AACfsB,QAAAA,SAAAA,CAAUO,OAAO,EAAA;AACjB,QAAA,MAAMC,oBAAqC,EAAE;QAC7CH,KAAMR,CAAAA,OAAO,CAAC,CAACV,IAAAA,GAAAA;YACb,MAAMsB,CAAAA,GAAItB,KAAKuB,WAAW,EAAA;AAC1B,YAAA,IAAID,aAAaE,OAAS,EAAA;AACxBH,gBAAAA,iBAAAA,CAAkBI,IAAI,CAACH,CAAAA,CAAAA;AACzB;AACF,SAAA,CAAA;QACA,IAAID,iBAAAA,CAAkBK,MAAM,GAAG,CAAG,EAAA;YAChC,MAAMF,OAAAA,CAAQG,GAAG,CAACN,iBAAAA,CAAAA;AACpB;QACA,OAAOH,KAAAA;AACT;AACA;;;;MAKAU,QAAAA,CAASC,KAAgB,EAAE;AACzB,QAAA,OAAOA,KAASA,IAAAA,KAAAA,CAAMtC,MAAM,KAAK,IAAI;AACvC;AACA;;AAEC,MACDuC,cAAiB,GAAA;AACf,QAAA,MAAO,IAAI,CAACxE,SAAS,CAACoE,MAAM,CAAE;AAC5B,YAAA,IAAI,CAACpE,SAAS,CAAC,EAAE,CAAC6C,GAAG,GAAI4B,MAAM,EAAA;AACjC;AACF;AACA;;MAGAC,UAAAA,CAAWH,KAA0B,EAAE;QACrC,MAAOA,KAAAA,IAASA,KAAU,KAAA,IAAI,CAAE;AAC9BA,YAAAA,KAAAA,GAAQA,MAAMtC,MAAM;AACtB;AACA,QAAA,OAAOsC,UAAU,IAAI;AACvB;AACA;;;;AAIC,MACDE,MAAS,GAAA;QACP,IAAI,CAACxC,MAAM,GAAG,IAAA;AACd,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKA0C,QAAAA,CAASC,CAAqB,EAAE;QAC9BA,CAAEC,CAAAA,KAAK,CAAC,IAAI,CAAA;AACZ,QAAA,KAAK,MAAMN,KAAAA,IAAS,IAAI,CAACvE,SAAS,CAAE;YAClCuE,KAAM1B,CAAAA,GAAG,EAAI8B,CAAAA,QAAQ,CAACC,CAAAA,CAAAA;AACxB;AACF;AACA;;;;;;;MAQAxB,OAAAA,CAAQ0B,QAAyB,EAAE;QACjC,IAAIA,QAAAA,CAAS,IAAI,CAAG,EAAA;YAClB,OAAO,IAAA;AACT;AACA,QAAA,KAAK,MAAMP,KAAAA,IAAS,IAAI,CAACvE,SAAS,CAAE;AAClC,YAAA,IAAIuE,KAAM1B,CAAAA,GAAG,EAAIO,CAAAA,OAAO,CAAC0B,QAAW,CAAA,EAAA;gBAClC,OAAO,IAAA;AACT;AACF;QACA,OAAO,KAAA;AACT;AACA;;;;;;;MAQAC,kBAAAA,CAAmBD,QAAyB,EAAE;QAC5C,IAAK,IAAIE,CAAI,GAAA,IAAI,CAAChF,SAAS,CAACoE,MAAM,GAAG,CAAA,EAAGY,CAAK,IAAA,CAAA,EAAGA,CAAK,EAAA,CAAA;AACnD,YAAA,MAAMT,KAAQ,GAAA,IAAI,CAACvE,SAAS,CAACgF,CAAE,CAAA;AAC/B,YAAA,IAAIT,KAAM1B,CAAAA,GAAG,EAAIkC,CAAAA,kBAAkB,CAACD,QAAW,CAAA,EAAA;gBAC7C,OAAO,IAAA;AACT;AACF;QACA,IAAIA,QAAAA,CAAS,IAAI,CAAG,EAAA;YAClB,OAAO,IAAA;AACT;QACA,OAAO,KAAA;AACT;AACA,0DACApD,WAAiC,GAAA;QAC/B,OAAO,KAAA;AACT;AACA,qDACAuD,OAA6B,GAAA;QAC3B,OAAO,KAAA;AACT;AACA,oDACAC,MAAuB,GAAA;QACrB,OAAO,KAAA;AACT;AACA,qDACAC,QAA2B,GAAA;QACzB,OAAO,KAAA;AACT;AACA,0DACAC,OAAyB,GAAA;QACvB,OAAO,KAAA;AACT;AACA,+DACAC,gBAA2C,GAAA;QACzC,OAAO,KAAA;AACT;AACA,2DACAC,YAAmC,GAAA;QACjC,OAAO,KAAA;AACT;AACA,+DACAjC,gBAA2C,GAAA;QACzC,OAAO,KAAA;AACT;AACA,0DACAkC,QAA2B,GAAA;QACzB,OAAO,KAAA;AACT;AACA,kEACAC,eAAyC,GAAA;QACvC,OAAO,KAAA;AACT;AACA;;;AAGC,MACDC,qBAAkD,GAAA;QAChD,OAAO,IAAA;AACT;AACA;;;AAGC,MACDC,iBAA8C,GAAA;QAC5C,IAAI,IAAI,CAAClG,QAAQ,EAAE;AACjB,YAAA,IAAI,CAACF,GAAG,GAAG,IAAI,CAACmG,qBAAqB,EAAA;YACrC,IAAI,CAACjG,QAAQ,GAAG,KAAA;AAClB;QACA,OAAO,IAAI,CAACF,GAAG;AACjB;AACA;;;MAIAqG,iBAAAA,CAAkBC,EAAkB,EAAE;AACpC,QAAA,IAAIA,EAAO,KAAA,IAAI,CAACtG,GAAG,EAAE;YACnB,IAAI,CAACA,GAAG,GAAGsG,EAAAA;AACX,YAAA,IAAI,CAACpG,QAAQ,GAAG,CAAC,IAAI,CAACF,GAAG;YACzB,IAAI,CAACuG,6BAA6B,CAAC,KAAA,CAAA;AACrC;AACF;AACA;;;AAGC,MACDC,sBAAmD,GAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAACvG,QAAQ,EAAE;YAClB,IAAI,CAACA,QAAQ,GAAG,IAAI,CAACwG,0BAA0B,CAAC,IAAI,CAACL,iBAAiB,EAAA,CAAA;AACxE;QACA,OAAO,IAAI,CAACnG,QAAQ;AACtB;AACA;;;MAIAwG,0BAAAA,CAA2BC,OAAiC,EAA4B;AACtF,QAAA,OAAOA,OAASC,EAAAA,SAAAA,CAAU,IAAI,CAACC,WAAW,CAAK,IAAA,IAAA;AACjD;AACA;;AAEC,MACDC,wBAA2B,GAAA;QACzB,IAAI,CAAC3G,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACqG,6BAA6B,CAAC,KAAA,CAAA;AACrC;oEAEAA,6BAA8BO,CAAAA,gBAAyB,EAAE;QACvD,IAAI,CAAC7G,QAAQ,GAAG,IAAA;QAChB,IAAI,IAAI,CAACT,MAAM,EAAE;AACf,YAAA,IAAIsH,gBAAkB,EAAA;gBACpB,IAAI,CAAChD,OAAO,CAAC,CAACV,IAAAA,GAAAA;oBACZ,IAAIA,IAAAA,CAAKhB,WAAW,EAAI,EAAA;AACtB,wBAAA,IAAI,CAAC5C,MAAM,CAAE6C,uBAAuB,CAACe,IAAAA,CAAAA;AACvC;AACF,iBAAA,CAAA;AACF,aAAA,MAAO,IAAI,IAAI,CAAChB,WAAW,EAAI,EAAA;AAC7B,gBAAA,IAAI,CAAC5C,MAAM,CAAC6C,uBAAuB,CAAC,IAAI,CAAA;AAC1C;AACA,YAAA,IAAI,CAAC0E,aAAa,CAAC,WAAA,EAAa,IAAI,CAAA;AACtC;AACF;qBAEA,IAAIC,eAAkB,GAAA;QACpB,OAAO,IAAI,CAAC7G,SAAS;AACvB;IACA,IAAI6G,eAAAA,CAAgB7E,GAAG,EAAE;QACvB,IAAI,CAAChC,SAAS,GAAGgC,GAAAA;AACnB;wCAEA,IAAI8E,MAAS,GAAA;AACX,QAAA,IAAI7D,OAA4B,IAAI;AACpC,QAAA,MAAOA,IAAQA,IAAAA,IAAAA,CAAK/C,QAAQ,KAAK,SAAW,CAAA;AAC1C+C,YAAAA,IAAAA,GAAOA,KAAKT,MAAM;AACpB;AACA,QAAA,OAAOS,IAAOA,GAAAA,IAAAA,CAAK/C,QAAQ,KAAK,QAAW,GAAA,KAAA;AAC7C;sBAEA,IAAI6G,SAAY,GAAA;QACd,OAAO,IAAI,CAAC7G,QAAQ;AACtB;IACA,IAAI6G,SAAAA,CAAU/E,GAAG,EAAE;AACjB,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAAC9B,QAAQ,EAAE;YACzB,MAAM8G,UAAAA,GAAa,IAAI,CAACF,MAAM;YAC9B,IAAI,CAAC5G,QAAQ,GAAG8B,GAAAA;AAChB,YAAA,IAAIgF,UAAe,KAAA,IAAI,CAACF,MAAM,EAAE;gBAC9B,IAAI,IAAI,CAAC7E,WAAW,EAAI,EAAA;AACtB,oBAAA,IAAI,CAAC5C,MAAM,EAAE6C,uBAAAA,CAAwB,IAAI,CAAA;AAC3C;AACA,gBAAA,IAAIM,SAA8B,IAAI;AACtC,gBAAA,MAAOA,MAAQ,CAAA;oBACbA,MAAOoE,CAAAA,aAAa,CAAC,gBAAA,EAAkB,IAAI,CAAA;AAC3CpE,oBAAAA,MAAAA,GAASA,OAAOA,MAAM;AACxB;AACA,gBAAA,IAAI,CAACyE,mBAAmB,EAAA;AAC1B;AACF;AACF;wDAEA,IAAIC,QAAW,GAAA;QACb,OAAO,IAAI,CAAC/G,SAAS;AACvB;IACA,IAAI+G,QAAAA,CAASlF,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC7B,SAAS,GAAG,CAAC,CAAC6B,GAAAA;AACrB;wDAEA,IAAImF,WAAc,GAAA;QAChB,OAAO,IAAI,CAAC/G,YAAY;AAC1B;IACA,IAAI+G,WAAAA,CAAYnF,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC5B,YAAY,GAAG,CAAC,CAAC4B,GAAAA;AACxB;AACA;;;;;;MAOAoF,YAAAA,CAAkC/E,EAAU,EAAK;AAC/C,QAAA,IAAIY,IAAoB,GAAA,IAAA;QACxB,IAAI,CAACU,OAAO,CAAC,CAACmB,KAAAA,GAAAA;YACZ,IAAIA,KAAAA,CAAM1C,YAAY,KAAKC,EAAI,EAAA;gBAC7BY,IAAO6B,GAAAA,KAAAA;gBACP,OAAO,IAAA;AACT;AACF,SAAA,CAAA;QACA,OAAO7B,IAAAA;AACT;AACA;;;;MAKAoE,gBAAAA,CAAiBhF,EAAU,EAAE;AAC3B,QAAA,MAAMiF,UAAa,GAAA,IAAI,CAAC/E,aAAa,MAAM,IAAI;AAC/C,QAAA,IAAIgF,EAA+B,GAAA,IAAA;QACnCD,UAAW3D,CAAAA,OAAO,CAAC,CAACV,IAAAA,GAAAA;AAClBsE,YAAAA,EAAAA,GAAKtE,IAAKE,CAAAA,YAAY,CAACqE,SAAS,CAACC,IAAI,CAAC,CAACC,CAAAA,GAAMA,CAAEtE,CAAAA,GAAG,EAAIhB,CAAAA,YAAY,KAAKC,EAAO,CAAA,IAAA,IAAA;AAC9E,YAAA,OAAO,CAAC,CAACkF,EAAAA;AACX,SAAA,CAAA;;QAEA,OAAQA,IAAiCnE,GAAS,EAAA,IAAA,IAAA;AACpD;AACA;;;;;;;;;;;;MAaAuE,cAAAA,CAAoC5E,IAAY,EAAe;AAC7D,QAAA,IAAIE,IAAoB,GAAA,IAAA;QACxB,IAAI,CAACU,OAAO,CAAC,CAACmB,KAAAA,GAAAA;YACZ,IAAIA,KAAAA,CAAM/B,IAAI,KAAKA,IAAM,EAAA;gBACvBE,IAAO6B,GAAAA,KAAAA;gBACP,OAAO,IAAA;AACT;AACF,SAAA,CAAA;QACA,OAAO7B,IAAAA;AACT;qDAGA,IAAI2E,2BAAsC,GAAA;AACxC,QAAA,IAAI,IAAI,CAAC3H,YAAY,KAAKzB,SAAAA,CAAUI,kBAAkB,EAAE;YACtD,IAAI4D,MAAAA,GAAS,IAAI,CAACA,MAAM;AACxB,YAAA,MAAOA,MAAU,IAAA,CAACA,MAAOP,CAAAA,WAAW,EAAI,CAAA;AACtCO,gBAAAA,MAAAA,GAASA,OAAOA,MAAM;AACxB;YACA,OAAOA,MAAAA,EAAQoF,2BAA+BpJ,IAAAA,SAAAA,CAAUK,iBAAiB;AAC3E;QACA,OAAO,IAAI,CAACoB,YAAY;AAC1B;kCAEA,IAAI4H,mBAAsB,GAAA;QACxB,OAAO,IAAI,CAAC5H,YAAY;AAC1B;IACA,IAAI4H,mBAAAA,CAAoBC,IAAI,EAAE;QAC5B,IAAI,CAAC7H,YAAY,GAAG6H,IAAAA;AACtB;gFAEA,WAAUtD,GAAoC;6BAE9C,SAAsB,GAAA;AACpB,QAAA,KAAK,CAACuD,SAAAA,EAAAA;AACN,QAAA,IAAI,CAAC/C,MAAM,EAAA;AACX,QAAA,IAAI,CAACD,cAAc,EAAA;QACnB,IAAI,CAACxF,aAAa,CAAC8E,OAAO,EAAA;QAC1B,IAAI,CAAC5E,YAAY,CAAC4E,OAAO,EAAA;AAC3B;AACA,qBACU2D,UAAWC,CAAAA,CAAsB,EAAE;AAC3C,QAAA,IAAIA,KAAKA,CAAE5I,CAAAA,MAAM,KAAK,IAAI,CAACA,MAAM,EAAE;AACjC,YAAA,MAAM,IAAIwE,KAAM,CAAA,2DAAA,CAAA;AAClB;QACA,IAAIqE,UAAAA,GAAa,IAAI,CAACtG,OAAO;AAC7B,QAAA,IAAIuG,SAAYF,GAAAA,CAAAA;AAChB,QAAA,IAAIE,cAAcD,UAAY,EAAA;AAC5B,YAAA,MAAME,UAAa,GAAC,CAAA,CAACH,CAAK,IAAA,CAACA,CAAEjF,CAAAA,QAAQ,KAAK,IAAI,CAACA,QAAQ;YACvD,MAAMqF,UAAAA,GAAa,CAAC,IAAI,CAACrF,QAAQ,IAAIiF,CAAAA,IAAKA,EAAEjF,QAAQ;AACpD,YAAA,IAAImF,SAAW,EAAA;AACbA,gBAAAA,SAAAA,CAAU5H,SAAS,CAACmE,IAAI,CAAC,IAAIlF,KAAK,IAAI,CAAA,CAAA;AACxC;YACA,IAAI,IAAI,CAACoC,OAAO,EAAE;AAChB,gBAAA,MAAM0G,KAAQ,GAAA,IAAI,CAAC1G,OAAO,CAACrB,SAAS,CAACgI,SAAS,CAAC,CAACvG,GAAAA,GAAQA,GAAIoB,CAAAA,GAAG,OAAO,IAAI,CAAA;AAC1E,gBAAA,IAAI,CAACxB,OAAO,CAAC4G,QAAQ,CAACF,KAAAA,CAAM,CAACjE,OAAO,EAAA;AACpC,gBAAA,IAAI,CAACzC,OAAO,CAACrB,SAAS,CAACkI,MAAM,CAACH,KAAO,EAAA,CAAA,CAAA;AACvC;YACA,IAAI,CAAC1G,OAAO,GAAGqG,CAAAA;YACf,IAAI,CAACxH,mBAAmB,CAAC,KAAA,CAAA;AACzB,YAAA,IAAI2H,UAAY,EAAA;AACd,gBAAA,IAAI,CAACM,SAAS,EAAA;AAChB;AACA,YAAA,IAAIL,UAAY,EAAA;AACd,gBAAA,IAAI,CAACM,SAAS,EAAA;AAChB;AACA,YAAA,MAAOT,UAAY,CAAA;gBACjBA,UAAWtB,CAAAA,aAAa,CAAC,aAAA,EAAe,IAAI,CAAA;AAC5CsB,gBAAAA,UAAAA,GAAaA,WAAW1F,MAAM;AAChC;AACA,YAAA,MAAO2F,SAAW,CAAA;gBAChBA,SAAUvB,CAAAA,aAAa,CAAC,cAAA,EAAgB,IAAI,CAAA;AAC5CuB,gBAAAA,SAAAA,GAAYA,UAAU3F,MAAM;AAC9B;AACF;AACF;AACA,qBACU/B,mBAAoBmI,CAAAA,eAAwB,EAAE;QACtD,IAAI,IAAI,CAACvH,gBAAgB,EAAE;AACzB,YAAA;AACF;AACA,QAAA,IAAIuH,eAAiB,EAAA;YACnB,IAAI,CAACzH,YAAY,GAAG,IAAA;AACtB;QACA,IAAI,CAACH,YAAY,GAAG,IAAA;QACpB,IAAI,CAACE,eAAe,GAAG,IAAA;QACvB,IAAI,CAACD,eAAe,GAAG,IAAA;AACvB,QAAA,IAAI,CAACG,aAAa,EAAA;AAClB,QAAA,KAAK,MAAM0D,KAAAA,IAAS,IAAI,CAACvE,SAAS,CAAE;YAClCuE,KAAM1B,CAAAA,GAAG,EAAI3C,CAAAA,mBAAmB,CAAC,KAAA,CAAA;AACnC;QACA,IAAI,CAAC2F,6BAA6B,CAAC,IAAA,CAAA;AACnC,QAAA,IAAI,CAACQ,aAAa,CAAC,kBAAA,EAAoB,IAAI,CAAA;AAC7C;AACA;;MAGUiC,cAAc;AACxB;;MAGUC,cAAc;qBAExB,SAAsB,GAAA;QACpB,IAAI,CAACnF,OAAO,CAAC,CAACmB,KAAAA,GAAAA;AACZ,YAAA,IAAI,CAAC9F,KAAK,CAAEuE,eAAe,CAACuB,KAAAA,CAAAA;AAC5BA,YAAAA,KAAAA,CAAM+D,WAAW,EAAA;AACnB,SAAA,CAAA;AACF;qBAEA,SAAsB,GAAA;QACpB,IAAI,CAAClF,OAAO,CAAC,CAACmB,KAAAA,GAAAA;AACZA,YAAAA,KAAAA,CAAMgE,WAAW,EAAA;AACnB,SAAA,CAAA;AACF;AACA,qBACA7B,mBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC8B,eAAe,EAAA;AACpB,QAAA,KAAK,MAAMjE,KAAAA,IAAS,IAAI,CAACvE,SAAS,CAAE;AAClC,YAAA,IAAIuE,KAAM1B,CAAAA,GAAG,EAAI2D,CAAAA,SAAS,KAAK,SAAW,EAAA;gBACxCjC,KAAM1B,CAAAA,GAAG,GAAI6D,mBAAmB,EAAA;AAClC;AACF;AACF;qBAEA,eAAU8B,GAAkB;+BAE5B,IAAIvG,MAAS,GAAA;QACX,OAAO,IAAI,CAACZ,OAAO;AACrB;IACA,IAAIY,MAAAA,CAAOyF,CAAC,EAAE;AACZ,QAAA,IAAIA,CAAM,KAAA,IAAI,CAACrG,OAAO,EAAE;YACtB,IAAI,CAACoG,UAAU,CAACC,CAAAA,CAAAA;AAClB;AACF;kCAEA,IAAIO,QAAW,GAAA;QACb,OAAO,IAAI,CAACjI,SAAS;AACvB;AACA;;AAEC,MACD,IAAIyI,QAAoB,GAAA;QACtB,OAAO,IAAI,CAACtI,SAAS;AACvB;IACA,IAAIsI,QAAAA,CAAShH,GAAY,EAAE;AACzB,QAAA,IAAI,CAACtB,SAAS,CAACuI,MAAM,CAACjH,GAAG,CAAC,CAAE,CAAA,EAAEA,GAAG,CAAC,CAAA,CAAE,EAAEA,GAAG,CAAC,CAAE,CAAA,CAAA;AAC9C;AACA;;AAEC,MACD,IAAIkH,KAAiB,GAAA;QACnB,OAAO,IAAI,CAACrI,QAAQ;AACtB;IACA,IAAIqI,KAAAA,CAAMlH,GAAY,EAAE;AACtB,QAAA,IAAI,CAACnB,QAAQ,CAACoI,MAAM,CAACjH,GAAG,CAAC,CAAE,CAAA,EAAEA,GAAG,CAAC,CAAA,CAAE,EAAEA,GAAG,CAAC,CAAE,CAAA,CAAA;AAC7C;AACA;;AAEC,MACD,IAAImH,QAAuB,GAAA;QACzB,OAAO,IAAI,CAACrI,SAAS;AACvB;IACA,IAAIqI,QAAAA,CAASnH,GAAe,EAAE;AAC5B,QAAA,IAAI,CAAClB,SAAS,CAACsI,OAAO,CAACpH,GAAG,CAAC,CAAE,CAAA,EAAEA,GAAG,CAAC,CAAA,CAAE,EAAEA,GAAG,CAAC,EAAE,EAAEA,GAAG,CAAC,CAAE,CAAA,CAAA;AACvD;IASAqH,WAAYlE,CAAAA,CAAoB,EAAEmE,MAA0B,EAAqB;AAC/E,QAAA,IAAInE,aAAaoE,OAAS,EAAA;AACxBD,YAAAA,MAAAA,GAASA,UAAU,IAAIC,OAAAA,EAAAA;AACvB,YAAA,IAAI,CAACC,cAAc,CAACC,oBAAoB,CAACtE,CAAGmE,EAAAA,MAAAA,CAAAA;YAC5C,OAAOA,MAAAA;SACF,MAAA;AACLA,YAAAA,MAAAA,GAASA,UAAU,IAAII,OAAAA,EAAAA;AACvB,YAAA,IAAI,CAACF,cAAc,CAACG,eAAe,CAACxE,CAAGmE,EAAAA,MAAAA,CAAAA;YACvC,OAAOA,MAAAA;AACT;AACF;AAUAM,IAAAA,WAAAA,CAAYzF,KAAgB,EAAEgB,CAAoB,EAAEmE,MAA0B,EAAqB;QACjG,OAAO,IAAI,CAACD,WAAW,CAAClF,MAAM0F,WAAW,CAAC1E,GAAUmE,MAAgBA,CAAAA,EAAAA,MAAAA,CAAAA;AACtE;IASAO,WAAY1E,CAAAA,CAAoB,EAAEmE,MAA0B,EAAqB;AAC/E,QAAA,IAAInE,aAAaoE,OAAS,EAAA;AACxBD,YAAAA,MAAAA,GAASA,UAAU,IAAIC,OAAAA,EAAAA;AACvB,YAAA,IAAI,CAAC9C,WAAW,CAACgD,oBAAoB,CAACtE,CAAGmE,EAAAA,MAAAA,CAAAA;YACzC,OAAOA,MAAAA;SACF,MAAA;AACLA,YAAAA,MAAAA,GAASA,UAAU,IAAII,OAAAA,EAAAA;AACvB,YAAA,IAAI,CAACjD,WAAW,CAACkD,eAAe,CAACxE,CAAGmE,EAAAA,MAAAA,CAAAA;YACpC,OAAOA,MAAAA;AACT;AACF;AAUAQ,IAAAA,WAAAA,CAAY3F,KAAgB,EAAEgB,CAAoB,EAAEmE,MAA0B,EAAqB;QACjG,OAAOnF,KAAAA,CAAMkF,WAAW,CAAC,IAAI,CAACQ,WAAW,CAAC1E,GAAUmE,MAAgBA,CAAAA,EAAAA,MAAAA,CAAAA;AACtE;AACA;;;MAIAS,gBAAAA,CAAiBC,MAAgB,EAAE;AACjC,QAAA,OACEA,QAAQf,MAAO,CAAA,IAAI,CAACxC,WAAW,CAACwD,GAAG,EAAE,IAAI,CAACxD,WAAW,CAACyD,GAAG,EAAE,IAAI,CAACzD,WAAW,CAAC0D,GAAG,CAC/E,IAAA,IAAIZ,QAAQ,IAAI,CAAC9C,WAAW,CAACwD,GAAG,EAAE,IAAI,CAACxD,WAAW,CAACyD,GAAG,EAAE,IAAI,CAACzD,WAAW,CAAC0D,GAAG,CAAA;AAEhF;AACA;;;;MAKAC,MAAAA,CAAOC,KAAc,EAAE;AACrB,QAAA,IAAI,CAAC3J,SAAS,CAAC4J,KAAK,CAACD,KAAAA,CAAAA;AACrB,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKAE,OAAAA,CAAQC,MAAe,EAAE;AACvB,QAAA,IAAI,CAAC3J,QAAQ,CAAC4J,KAAK,CAACD,MAAAA,CAAAA;AACpB,QAAA,OAAO,IAAI;AACb;AACA;;;;MAKAE,iBAAAA,CAAkBC,MAAiB,EAAE;QACnC,IAAI,CAACtJ,gBAAgB,GAAG,IAAA;AACxBsJ,QAAAA,MAAAA,CAAOC,SAAS,CAAC,IAAI,CAAC/J,QAAQ,EAAE,IAAI,CAACC,SAAS,EAAE,IAAI,CAACJ,SAAS,CAAA;QAC9D,IAAI,CAACW,gBAAgB,GAAG,KAAA;QACxB,IAAI,CAACZ,mBAAmB,CAAC,IAAA,CAAA;AACzB,QAAA,OAAO,IAAI;AACb;oDAEA,IAAIoK,WAAoC,GAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC1J,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC2J,uBAAuB,CAAC,IAAI,CAACxJ,eAAe,CAAA;AACjD,YAAA,IAAI,CAACH,YAAY,GAAG,IAAI,CAACG,eAAe;AAC1C;QACA,OAAO,IAAI,CAACH,YAAY;AAC1B;IACA,IAAI0J,WAAAA,CAAYF,MAA4B,EAAE;QAC5C,IAAI,CAACD,iBAAiB,CAACC,MAAAA,CAAAA;AACzB;oDAEA,IAAIlE,WAAoC,GAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAACzF,YAAY,EAAE;AACtB,YAAA,IAAI,CAACA,YAAY,GAAG,IAAI,CAACS,eAAe;AACxC,YAAA,IAAI,CAACsJ,uBAAuB,CAAC,IAAI,CAAC/J,YAAY,CAAA;AAChD;QACA,OAAO,IAAI,CAACA,YAAY;AAC1B;2CAEA,IAAIgK,cAAiB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC/J,eAAe,KAAK,IAAM,EAAA;AACjC,YAAA,IAAI,CAACA,eAAe,GAAG,IAAI,CAACwF,WAAW,CAACwE,GAAG,EAAA;AAC7C;QACA,OAAO,IAAI,CAAChK,eAAe;AAC7B;mEAEA,IAAIuI,cAAuC,GAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAACtI,eAAe,EAAE;YACzB,IAAI,CAACA,eAAe,GAAGK,SAAAA,CAAU2J,YAAY,CAAC,IAAI,CAACzE,WAAW,CAAA;AAChE;QACA,OAAO,IAAI,CAACvF,eAAe;AAC7B;AACA;;;MAIA4J,uBAAAA,CAAwBK,SAAoB,EAAE;AAC5CA,QAAAA,SAAAA,CAAUC,OAAO,CAAC,IAAI,CAACvK,QAAQ,EAAE,IAAI,CAACC,SAAS,EAAE,IAAI,CAACJ,SAAS,CAAA;AACjE;AACA;;;MAIAqK,uBAAAA,CAAwBI,SAAoB,EAAE;QAC5C,IAAI,IAAI,CAACvJ,OAAO,EAAE;YAChBL,SAAU8J,CAAAA,cAAc,CAAC,IAAI,CAACzJ,OAAO,CAAC6E,WAAW,EAAE,IAAI,CAACoE,WAAW,EAAEM,SAAAA,CAAAA;SAChE,MAAA;AACLA,YAAAA,SAAAA,CAAU9H,GAAG,CAAC,IAAI,CAACwH,WAAW,CAAA;AAChC;AACF;AACA;;;;;;AAMC,MACDS,OAAOC,GAAY,EAAEC,MAAe,EAAEC,EAAW,EAAE;AACjD,QAAA,IAAI,CAACf,iBAAiB,CAACnJ,UAAU+J,MAAM,CAACC,KAAKC,MAAQC,EAAAA,EAAAA,CAAAA,CAAAA;AACrD,QAAA,OAAO,IAAI;AACb;AACA;;;;;AAKC,MACDC,OAAOC,OAAe,EAAEC,gBAAwB,EAAEC,cAAsB,EAAE;AACxE,QAAA,IAAI,CAAC,IAAI,CAAC7I,QAAQ,EAAE;AAClB,YAAA;AACF;AACA,QAAA,MAAMG,YAAe,GAAA,IAAI,CAAC5D,aAAa,CAAC6D,GAAG,EAAA;AAC3C,QAAA,IAAID,YAAc,EAAA;YAChB,IAAIA,YAAAA,CAAa2I,aAAa,GAAG,CAAA,IAAK3I,aAAaqE,SAAS,CAAC7C,MAAM,GAAG,CAAG,EAAA;AACvExB,gBAAAA,YAAAA,CAAauI,MAAM,CAACG,cAAAA,CAAAA;AACpB,gBAAA,IAAI,CAAC7M,KAAK,CAAEuE,eAAe,CAAC,IAAI,CAAA;aAC3B,MAAA;gBACL,IAAI,CAAChE,aAAa,CAAC8E,OAAO,EAAA;AAC5B;AACF;AACF;AACA;;;;;AAKC,MACD0H,gBAAgBC,OAAe,EAAEC,iBAAyB,EAAEC,eAAuB,EAAE;AACrF;;;;MAKArK,QAAAA,CAASoG,CAAuB,EAAE;QAChC,IAAI,CAACzF,MAAM,GAAGyF,CAAK,IAAA,IAAA;AACnB,QAAA,OAAO,IAAI;AACb;qBAEA,IAAIkE,YAAe,GAAA;QACjB,OAAO,IAAI,CAAC/K,aAAa;AAC3B;AACF;;;;"}
1
+ {"version":3,"file":"scene_node.js","sources":["../../src/scene/scene_node.ts"],"sourcesContent":["import type { Scene } from './scene';\r\nimport type { GraphNode } from './graph_node';\r\nimport type { Mesh } from './mesh';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { PunctualLight, BaseLight } from './light';\r\nimport type { BoundingVolume } from '../utility/bounding_volume';\r\nimport type { BatchGroup } from './batchgroup';\r\nimport type { Visitor } from './visitor';\r\nimport type { IDisposable, Immutable, Nullable, Quaternion } from '@zephyr3d/base';\r\nimport { Disposable, DRef, makeObservable, randomUUID } from '@zephyr3d/base';\r\nimport { Matrix4x4, ObservableQuaternion, ObservableVector3, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type { ParticleSystem } from './particlesys';\r\nimport type { Skeleton } from '../animation';\r\nimport { AnimationSet } from '../animation/animationset';\r\nimport type { SharedModel } from '../asset';\r\nimport type { Water } from './water';\r\nimport type { ClipmapTerrain } from './terrain-cm/terrain-cm';\r\nimport type { Metadata } from 'draco3d';\r\nimport { getEngine } from '../app/api';\r\nimport type { Sprite } from './sprite';\r\nimport {\r\n normalizeScriptAttachmentConfig,\r\n normalizeScriptAttachments,\r\n ScriptAttachment\r\n} from './script_attachment';\r\n\r\n/**\r\n * Iteration callback used by traversal helpers.\r\n *\r\n * Return true to stop traversal early.\r\n *\r\n * @public\r\n */\r\nexport type NodeIterateFunc = ((node: SceneNode) => boolean) | ((node: SceneNode) => void);\r\n\r\n/**\r\n * Visibility state of a node.\r\n *\r\n * - 'visible': force visible\r\n * - 'hidden': force hidden\r\n * - 'inherit': inherits from the closest ancestor that is not 'inherit'\r\n *\r\n * @public\r\n */\r\nexport type SceneNodeVisible = 'visible' | 'inherit' | 'hidden';\r\n\r\n/**\r\n * The base class of all scene graph objects.\r\n *\r\n * @remarks\r\n * Responsibilities:\r\n * - Defines hierarchical transform (position, rotation, scale) with lazily computed matrices.\r\n * - Integrates with the scene graph (parent/children, attachment notifications).\r\n * - Provides traversal utilities (`iterate`, `iterateBottomToTop`, `traverse`).\r\n * - Manages visibility state and CPU/GPU picking flags.\r\n * - Computes and caches local/world bounding volumes, notifies scene for spatial updates.\r\n * - Supports cloning and shared model instancing.\r\n * - Emits events on visibility, transform, bounding volume, attachment, and disposal.\r\n *\r\n * Performance:\r\n * - `localMatrix`, `worldMatrix`, and `invWorldMatrix` are cached until invalidated.\r\n * - Transform mutations and `invalidateBoundingVolume` update caches and spatial structures.\r\n *\r\n * Events:\r\n * - `nodeattached`, `noderemoved`, `visiblechanged`, `transformchanged`, `bvchanged`, `dispose`.\r\n *\r\n * @public\r\n */\r\nexport class SceneNode\r\n extends makeObservable(Disposable)<{\r\n /** Emitted on all ancestors when a node is attached under them. */\r\n nodeattached: [node: SceneNode];\r\n /** Emitted on all ancestors when a node is removed from under them. */\r\n noderemoved: [node: SceneNode];\r\n /** Emitted when effective visibility changes (considering inheritance). */\r\n visiblechanged: [node: SceneNode];\r\n /** Emitted when local/world transform changes. */\r\n transformchanged: [node: SceneNode];\r\n /** Emitted when local/world bounding volume changes. */\r\n bvchanged: [node: SceneNode];\r\n /** Emitted when the node is disposed. */\r\n dispose: [];\r\n }>()\r\n implements IDisposable\r\n{\r\n private static _runTimeId = 1;\r\n /*\r\n static readonly PICK_INHERITED = -1;\r\n static readonly PICK_DISABLED = 0;\r\n static readonly PICK_ENABLED = 1;\r\n */\r\n /** Bounding-box draw mode inherited from nearest graph ancestor. */\r\n static readonly BBOXDRAW_INHERITED = -1;\r\n /** Disable bounding-box visualization. */\r\n static readonly BBOXDRAW_DISABLED = 0;\r\n /** Draw local-space bounding box. */\r\n static readonly BBOXDRAW_LOCAL = 1;\r\n /** Draw world-space bounding box. */\r\n static readonly BBOXDRAW_WORLD = 2;\r\n\r\n /** @internal Runtime unique id. */\r\n protected readonly _runtimeId: number;\r\n /** @internal Unique persistent id. */\r\n protected _id: string;\r\n /** @internal Prefab id */\r\n protected _prefabId: string;\r\n /** @internal Animation set reference. */\r\n protected _animationSet: DRef<AnimationSet>;\r\n /** @internal Optional shared model reference for instancing. */\r\n protected _sharedModel: DRef<SharedModel>;\r\n /** @internal */\r\n protected _jointTypeT: 'none' | 'animated' | 'static';\r\n /** @internal */\r\n protected _jointTypeS: 'none' | 'animated' | 'static';\r\n /** @internal */\r\n protected _jointTypeR: 'none' | 'animated' | 'static';\r\n /** @internal Clip test flag used by renderer. */\r\n protected _clipMode: boolean;\r\n /** @internal Bounding-box visualization mode. */\r\n protected _boxDrawMode: number;\r\n /** @internal Visibility state ('visible'|'hidden'|'inherit'). */\r\n protected _visible: SceneNodeVisible;\r\n /** @internal CPU picking flag. */\r\n protected _pickable: boolean;\r\n /** @internal GPU picking flag. */\r\n protected _gpuPickable: boolean;\r\n /** @internal Friendly name for debugging/UI. */\r\n protected _name: string;\r\n /** @internal Owning scene. */\r\n protected _scene: Nullable<Scene>;\r\n\r\n /** @internal Local-space bounding volume cache. */\r\n protected _bv: Nullable<BoundingVolume>;\r\n /** @internal True if local BV needs recomputing. */\r\n protected _bvDirty: boolean;\r\n /** @internal World-space bounding volume cache. */\r\n protected _bvWorld: Nullable<BoundingVolume>;\r\n\r\n /** @internal Whether this node participates in scene spatial structures (octree). */\r\n private _placeToOctree: boolean;\r\n /** @internal If true, this node cannot be cloned/attached as a child (engine policy). */\r\n private _sealed: boolean;\r\n\r\n /** @internal Parent node. */\r\n protected _parent: Nullable<SceneNode>;\r\n /** @internal Children list (DRef for memory/resource mgmt). */\r\n protected _children: DRef<SceneNode>[];\r\n\r\n /** @internal Local position (observable). */\r\n protected _position: ObservableVector3;\r\n /** @internal Local scale (observable). */\r\n protected _scaling: ObservableVector3;\r\n /** @internal Local rotation (observable quaternion). */\r\n protected _rotation: ObservableQuaternion;\r\n\r\n /** @internal Local transform matrix cache. */\r\n protected _localMatrix: Nullable<Matrix4x4>;\r\n /** @internal World transform matrix cache. */\r\n protected _worldMatrix: Nullable<Matrix4x4>;\r\n /** @internal Determinant of world transform (cached). */\r\n protected _worldMatrixDet: Nullable<number>;\r\n /** @internal Inverse world transform matrix cache. */\r\n protected _invWorldMatrix: Nullable<Matrix4x4>;\r\n\r\n /** @internal Scratch local matrix to avoid allocations. */\r\n protected _tmpLocalMatrix: Matrix4x4;\r\n /** @internal Scratch world matrix to avoid allocations. */\r\n protected _tmpWorldMatrix: Matrix4x4;\r\n\r\n /** @internal Monotonically increasing tag for transform changes. */\r\n protected _transformTag: number;\r\n /** @internal Shared callback used by observables on transform mutation. */\r\n protected _transformChangeCallback: () => void;\r\n\r\n /** @internal Arbitrary metadata payload for this node. */\r\n protected _metaData: Nullable<Metadata>;\r\n /** @internal If greater than zero, suppress transform-change callbacks (during bulk updates). */\r\n private _disableCallback: number;\r\n /** @internal User-attached script entries (engine-defined). */\r\n private _scripts: ScriptAttachment[];\r\n /**\r\n * Construct a scene node.\r\n *\r\n * @remarks\r\n * If a `scene` is provided and this is not the root node, the node is reparented\r\n * under the scene's root immediately.\r\n *\r\n * @param scene - Scene that will own this node.\r\n */\r\n constructor(scene: Nullable<Scene>) {\r\n super();\r\n this._runtimeId = SceneNode._runTimeId++;\r\n this._id = randomUUID();\r\n this._prefabId = '';\r\n this._scene = scene;\r\n this._name = '';\r\n this._animationSet = new DRef();\r\n this._sharedModel = new DRef();\r\n this._jointTypeT = 'none';\r\n this._jointTypeS = 'none';\r\n this._jointTypeR = 'none';\r\n this._bv = null;\r\n this._bvWorld = null;\r\n this._bvDirty = true;\r\n this._clipMode = true;\r\n this._boxDrawMode = SceneNode.BBOXDRAW_DISABLED;\r\n this._visible = 'inherit';\r\n this._pickable = false;\r\n this._gpuPickable = true;\r\n this._placeToOctree = true;\r\n this._sealed = false;\r\n this._children = [];\r\n this._transformChangeCallback = () => this._onTransformChanged(true);\r\n this._position = new ObservableVector3(0, 0, 0).setCallback(this._transformChangeCallback);\r\n this._scaling = new ObservableVector3(1, 1, 1).setCallback(this._transformChangeCallback);\r\n this._rotation = new ObservableQuaternion().setCallback(this._transformChangeCallback);\r\n this._worldMatrix = null;\r\n this._worldMatrixDet = null;\r\n this._invWorldMatrix = null;\r\n this._localMatrix = null;\r\n this._transformTag = 0;\r\n this._disableCallback = 0;\r\n this._tmpLocalMatrix = Matrix4x4.identity();\r\n this._tmpWorldMatrix = Matrix4x4.identity();\r\n this._scripts = [];\r\n this._metaData = null;\r\n this._parent = null;\r\n this.reparent(scene?.rootNode ?? null);\r\n }\r\n /**\r\n * Whether the node should be inserted into the scene's spatial structure.\r\n *\r\n * @remarks\r\n * Toggling this hints the scene to (re)place the node in octree/acceleration structures.\r\n */\r\n get placeToOctree() {\r\n return this._placeToOctree;\r\n }\r\n set placeToOctree(val) {\r\n if (!!val !== this._placeToOctree) {\r\n this._placeToOctree = !!val;\r\n if (this.isGraphNode()) {\r\n this.scene?.invalidateNodePlacement(this);\r\n }\r\n }\r\n }\r\n /**\r\n * Node's runtime unique identifier\r\n */\r\n get runtimeId() {\r\n return this._runtimeId;\r\n }\r\n /**\r\n * Node's persistent identifier.\r\n *\r\n * @remarks\r\n * Changing this affects serialization and registry lookup; ensure uniqueness.\r\n */\r\n get persistentId() {\r\n return this._id;\r\n }\r\n set persistentId(id: string) {\r\n this._id = id;\r\n }\r\n /**\r\n * If not empty, this node was loaded from a prefab\r\n *\r\n * @remarks\r\n * Internal used for serialization\r\n */\r\n get prefabId() {\r\n return this._prefabId;\r\n }\r\n set prefabId(id: string) {\r\n this._prefabId = id;\r\n }\r\n /**\r\n * Get prefab node this node belongs to, or null if this node does not belongs to any prefab\r\n * @returns prefab node this node belongs to\r\n */\r\n getPrefabNode(): Nullable<SceneNode> {\r\n return this._prefabId ? this : (this.parent?.getPrefabNode() ?? null);\r\n }\r\n /**\r\n * Translation type if this is a joint node of any skeleton\r\n *\r\n * @remarks\r\n * Internal used for serialization\r\n */\r\n get jointTypeT() {\r\n return this._jointTypeT;\r\n }\r\n set jointTypeT(val: 'none' | 'animated' | 'static') {\r\n this._jointTypeT = val;\r\n }\r\n /**\r\n * Scale type if this is a joint node of any skeleton\r\n *\r\n * @remarks\r\n * Internal used for serialization\r\n */\r\n get jointTypeS() {\r\n return this._jointTypeS;\r\n }\r\n set jointTypeS(val: 'none' | 'animated' | 'static') {\r\n this._jointTypeS = val;\r\n }\r\n /**\r\n * Rotation type if this is a joint node of any skeleton\r\n *\r\n * @remarks\r\n * Internal used for serialization\r\n */\r\n get jointTypeR() {\r\n return this._jointTypeR;\r\n }\r\n set jointTypeR(val: 'none' | 'animated' | 'static') {\r\n this._jointTypeR = val;\r\n }\r\n /**\r\n * Arbitrary metadata associated with this node.\r\n *\r\n * @remarks\r\n * Stored and transported with the node; format is application-defined.\r\n */\r\n get metaData() {\r\n return this._metaData;\r\n }\r\n set metaData(val: Nullable<Metadata>) {\r\n this._metaData = val;\r\n }\r\n /**\r\n * Attached script filename or identifier (engine-specific).\r\n *\r\n * @remarks\r\n * Integrates with the engine’s scripting system if available.\r\n */\r\n get script() {\r\n return this._scripts[0]?.script ?? '';\r\n }\r\n set script(fileName: string) {\r\n const script = fileName ?? '';\r\n if (!script) {\r\n this._scripts.splice(0, 1);\r\n } else if (this._scripts[0]) {\r\n this._scripts[0].script = script;\r\n } else {\r\n this._scripts.unshift(new ScriptAttachment(script));\r\n }\r\n }\r\n /**\r\n * Script component configuration payload used by editor/runtime script components.\r\n */\r\n get scriptConfig() {\r\n return this._scripts[0]?.config ?? null;\r\n }\r\n set scriptConfig(value: Nullable<object | unknown[]>) {\r\n const normalized = normalizeScriptAttachmentConfig(value);\r\n if (this._scripts[0]) {\r\n this._scripts[0].config = normalized;\r\n } else if (normalized != null) {\r\n this._scripts.unshift(new ScriptAttachment('', normalized));\r\n }\r\n if (this._scripts[0] && !this._scripts[0].script && this._scripts[0].config == null) {\r\n this._scripts.splice(0, 1);\r\n }\r\n }\r\n /**\r\n * All script attachments on this node.\r\n */\r\n get scripts() {\r\n return this._scripts;\r\n }\r\n set scripts(value: ScriptAttachment[]) {\r\n this._scripts = normalizeScriptAttachments(value);\r\n }\r\n /**\r\n * Script configs for all script attachments.\r\n */\r\n get scriptConfigs() {\r\n return this._scripts.map((item) => item.config);\r\n }\r\n set scriptConfigs(value: unknown[]) {\r\n const next = Array.isArray(value) ? value : [];\r\n for (let i = 0; i < Math.max(this._scripts.length, next.length); i++) {\r\n const config = normalizeScriptAttachmentConfig(next[i]);\r\n if (this._scripts[i]) {\r\n this._scripts[i].config = config;\r\n } else if (config != null) {\r\n this._scripts.push(new ScriptAttachment('', config));\r\n }\r\n }\r\n this._scripts = this._scripts.filter((item) => item.script || item.config != null);\r\n }\r\n /**\r\n * Display name of the node (for UI/debugging).\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n this._name = val || '';\r\n }\r\n /** The owning scene. */\r\n get scene() {\r\n return this._scene;\r\n }\r\n /**\r\n * Whether this node is currently attached under the scene's root.\r\n */\r\n get attached() {\r\n if (!this._scene) {\r\n return false;\r\n }\r\n let node: Nullable<SceneNode> = this;\r\n while (node && node !== this._scene.rootNode) {\r\n node = node.parent;\r\n }\r\n return node === this._scene.rootNode;\r\n }\r\n /**\r\n * If true, the node is logically sealed; some operations (like cloning as child)\r\n * may be restricted by engine policies.\r\n */\r\n get sealed() {\r\n return this._sealed;\r\n }\r\n set sealed(val) {\r\n this._sealed = val;\r\n }\r\n /**\r\n * Lazily created animation set for this node.\r\n *\r\n * @remarks\r\n * Accessing this schedules the node for update in the scene.\r\n */\r\n get animationSet() {\r\n if (!this._animationSet.get()) {\r\n this._animationSet.set(new AnimationSet(this));\r\n this.scene?.queueUpdateNode(this);\r\n }\r\n return this._animationSet.get()!;\r\n }\r\n /**\r\n * Shared model reference for instancing/streaming systems.\r\n */\r\n get sharedModel() {\r\n return this._sharedModel.get();\r\n }\r\n set sharedModel(model: Nullable<SharedModel>) {\r\n this._sharedModel.set(model);\r\n }\r\n /**\r\n * Clone this node.\r\n *\r\n * @remarks\r\n * If a shared model exists, it may create an instanced node. The clone is\r\n * attached under the same parent; children are cloned based on `method` and `recursive`.\r\n *\r\n * @param method - Clone method ('deep' or 'instance').\r\n * @param recursive - Whether children are cloned recursively.\r\n * @returns New node instance\r\n */\r\n async clone(): Promise<this> {\r\n this.iterate((node) => {\r\n if (node.isClipmapTerrain()) {\r\n throw new Error('Cloning terrain node is not allowed');\r\n }\r\n });\r\n const parent = this.parent;\r\n const tmpParent = new SceneNode(this.scene);\r\n const data = await getEngine().resourceManager.serializeObject(this);\r\n const other = (await getEngine().resourceManager.deserializeObject<this>(tmpParent, data))!;\r\n other.persistentId = randomUUID();\r\n other.parent = parent;\r\n tmpParent.dispose();\r\n const postClonePromises: Promise<void>[] = [];\r\n other.iterate((node) => {\r\n const P = node.onPostClone();\r\n if (P instanceof Promise) {\r\n postClonePromises.push(P);\r\n }\r\n });\r\n if (postClonePromises.length > 0) {\r\n await Promise.all(postClonePromises);\r\n }\r\n return other;\r\n }\r\n /**\r\n * Whether the given node is a direct child of this node.\r\n * @param child - The node to be checked\r\n * @returns true if the given node is a direct child of this node, false otherwise\r\n */\r\n hasChild(child: SceneNode) {\r\n return child && child.parent === this;\r\n }\r\n /**\r\n * Remove all children from this node.\r\n */\r\n removeChildren() {\r\n while (this._children.length) {\r\n this._children[0].get()!.remove();\r\n }\r\n }\r\n /**\r\n * Whether this node is an ancestor (direct or indirect) of the given node.\r\n */\r\n isParentOf(child: Nullable<SceneNode>) {\r\n while (child && child !== this) {\r\n child = child.parent!;\r\n }\r\n return child === this;\r\n }\r\n /**\r\n * Detach this node from its parent.\r\n *\r\n * @returns this\r\n */\r\n remove() {\r\n this.parent = null;\r\n return this;\r\n }\r\n /**\r\n * Depth-first traversal of this node's subtree (pre-order).\r\n *\r\n * @param v - Visitor invoked on each node.\r\n */\r\n traverse(v: Visitor<SceneNode>) {\r\n v.visit(this);\r\n for (const child of this._children) {\r\n child.get()!.traverse(v);\r\n }\r\n }\r\n /**\r\n * Iterate self and descendants in pre-order.\r\n *\r\n * Warning: Do not remove children during this iteration. To allow removal, use `iterateBottomToTop`.\r\n *\r\n * @param callback - Called for each node; if returns true, iteration stops.\r\n * @returns true if iteration was aborted early.\r\n */\r\n iterate(callback: NodeIterateFunc) {\r\n if (callback(this)) {\r\n return true;\r\n }\r\n for (const child of this._children) {\r\n if (child.get()!.iterate(callback)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * Iterate self and descendants in reverse post-order (bottom-to-top).\r\n *\r\n * Child nodes can be safely removed during this iteration.\r\n *\r\n * @param callback - Called for each node; if returns true, iteration stops.\r\n * @returns true if iteration was aborted early.\r\n */\r\n iterateBottomToTop(callback: NodeIterateFunc) {\r\n for (let i = this._children.length - 1; i >= 0; i--) {\r\n const child = this._children[i];\r\n if (child.get()!.iterateBottomToTop(callback)) {\r\n return true;\r\n }\r\n }\r\n if (callback(this)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Type guard: true if this node is a graph node. */\r\n isGraphNode(): this is GraphNode {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a light. */\r\n isLight(): this is BaseLight {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a mesh. */\r\n isMesh(): this is Mesh {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a sprite */\r\n isSprite(): this is Sprite {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a water node. */\r\n isWater(): this is Water {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a particle system. */\r\n isParticleSystem(): this is ParticleSystem {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a batch group. */\r\n isBatchGroup(): this is BatchGroup {\r\n return false;\r\n }\r\n /** Type guard: true if this node is a clipmap terrain. */\r\n isClipmapTerrain(): this is ClipmapTerrain {\r\n return false;\r\n }\r\n /** true if this is a camera node, false otherwise */\r\n isCamera(): this is Camera {\r\n return false;\r\n }\r\n /** true if this is a punctual light node, false otherwise */\r\n isPunctualLight(): this is PunctualLight {\r\n return false;\r\n }\r\n /**\r\n * Computes the bounding volume of the node\r\n * @returns The output bounding volume\r\n */\r\n computeBoundingVolume(): Nullable<BoundingVolume> {\r\n return null;\r\n }\r\n /**\r\n * Gets the bounding volume of the node\r\n * @returns The bounding volume of the node\r\n */\r\n getBoundingVolume(): Nullable<BoundingVolume> {\r\n if (this._bvDirty) {\r\n this._bv = this.computeBoundingVolume();\r\n this._bvDirty = false;\r\n }\r\n return this._bv;\r\n }\r\n /**\r\n * Sets the bounding volume of the node\r\n * @param bv - The bounding volume to set\r\n */\r\n setBoundingVolume(bv: BoundingVolume) {\r\n if (bv !== this._bv) {\r\n this._bv = bv;\r\n this._bvDirty = !this._bv;\r\n this.invalidateWorldBoundingVolume(false);\r\n }\r\n }\r\n /**\r\n * Gets the world space bounding volume of the node\r\n * @returns The world space bounding volume of the node\r\n */\r\n getWorldBoundingVolume(): Nullable<BoundingVolume> {\r\n if (!this._bvWorld) {\r\n this._bvWorld = this.computeWorldBoundingVolume(this.getBoundingVolume());\r\n }\r\n return this._bvWorld;\r\n }\r\n /**\r\n * Computes the world space bounding volume of the node\r\n * @returns The output bounding volume\r\n */\r\n computeWorldBoundingVolume(localBV: Nullable<BoundingVolume>): Nullable<BoundingVolume> {\r\n return localBV?.transform(this.worldMatrix) ?? null;\r\n }\r\n /**\r\n * Force the bounding volume to be recalculated\r\n */\r\n invalidateBoundingVolume() {\r\n this._bvDirty = true;\r\n this.invalidateWorldBoundingVolume(false);\r\n }\r\n /** Force the world space bounding volume to be recalculated */\r\n invalidateWorldBoundingVolume(transformChanged: boolean) {\r\n this._bvWorld = null;\r\n if (this._scene) {\r\n if (transformChanged) {\r\n this.iterate((node) => {\r\n if (node.isGraphNode()) {\r\n this._scene!.invalidateNodePlacement(node);\r\n }\r\n });\r\n } else if (this.isGraphNode()) {\r\n this._scene.invalidateNodePlacement(this);\r\n }\r\n this.dispatchEvent('bvchanged', this);\r\n }\r\n }\r\n /** Clip mode */\r\n get clipTestEnabled() {\r\n return this._clipMode;\r\n }\r\n set clipTestEnabled(val) {\r\n this._clipMode = val;\r\n }\r\n /** Computed value of show state */\r\n get hidden() {\r\n let node: Nullable<SceneNode> = this;\r\n while (node && node._visible === 'inherit') {\r\n node = node.parent;\r\n }\r\n return node ? node._visible === 'hidden' : false;\r\n }\r\n /** Show state */\r\n get showState() {\r\n return this._visible;\r\n }\r\n set showState(val) {\r\n if (val !== this._visible) {\r\n const prevHidden = this.hidden;\r\n this._visible = val;\r\n if (prevHidden !== this.hidden) {\r\n if (this.isGraphNode()) {\r\n this._scene?.invalidateNodePlacement(this);\r\n }\r\n let parent: Nullable<SceneNode> = this;\r\n while (parent) {\r\n parent.dispatchEvent('visiblechanged', this);\r\n parent = parent.parent;\r\n }\r\n this.notifyHiddenChanged();\r\n }\r\n }\r\n }\r\n /** Whether this node is enabled for CPU picking */\r\n get pickable() {\r\n return this._pickable;\r\n }\r\n set pickable(val) {\r\n this._pickable = !!val;\r\n }\r\n /** Whether this node is enabled for GPU picking */\r\n get gpuPickable() {\r\n return this._gpuPickable;\r\n }\r\n set gpuPickable(val) {\r\n this._gpuPickable = !!val;\r\n }\r\n /**\r\n * Finds a scene node by its persistent ID.\r\n *\r\n * @typeParam T - Expected node type.\r\n * @param id - Persistent identifier to match against `SceneNode.persistentId`.\r\n * @returns The first matching node, or `null` if not found.\r\n */\r\n findNodeById<T extends SceneNode>(id: string): T {\r\n let node: Nullable<T> = null;\r\n this.iterate((child) => {\r\n if (child.persistentId === id) {\r\n node = child as T;\r\n return true;\r\n }\r\n });\r\n return node as unknown as T;\r\n }\r\n /**\r\n * Finds a skeleton object by its persistent ID.\r\n * @param id - Persistent identifier to match against `Skeleton.persistentId`.\r\n * @returns The first matchign node, or `null` if not found.\r\n */\r\n findSkeletonById(id: string) {\r\n const prefabNode = this.getPrefabNode() ?? this;\r\n let sk: Nullable<DRef<Skeleton>> = null;\r\n prefabNode.iterate((node) => {\r\n sk = node.animationSet.skeletons.find((s) => s.get()!.persistentId === id) ?? null;\r\n return !!sk;\r\n });\r\n // avoid ts2339 compilation error (maybe a typescript bug?)\r\n return (sk as Nullable<DRef<Skeleton>>)?.get() ?? null;\r\n }\r\n /**\r\n * Finds a scene node by name.\r\n *\r\n * If multiple nodes share the same name, returns the first match encountered\r\n * during traversal.\r\n *\r\n * @typeParam T - Expected node type.\r\n * @param name - Node name to match.\r\n * @returns The first matching node, or `null` if not found.\r\n *\r\n * @remarks\r\n * Names are not guaranteed unique. Prefer IDs for stable references.\r\n */\r\n findNodeByName<T extends SceneNode>(name: string): Nullable<T> {\r\n let node: Nullable<T> = null;\r\n this.iterate((child) => {\r\n if (child.name === name) {\r\n node = child as T;\r\n return true;\r\n }\r\n });\r\n return node;\r\n }\r\n\r\n /** Computed value for bounding box draw mode */\r\n get computedBoundingBoxDrawMode(): number {\r\n if (this._boxDrawMode === SceneNode.BBOXDRAW_INHERITED) {\r\n let parent = this.parent;\r\n while (parent && !parent.isGraphNode()) {\r\n parent = parent.parent;\r\n }\r\n return parent?.computedBoundingBoxDrawMode ?? SceneNode.BBOXDRAW_DISABLED;\r\n }\r\n return this._boxDrawMode;\r\n }\r\n /** Bounding box draw mode */\r\n get boundingBoxDrawMode() {\r\n return this._boxDrawMode;\r\n }\r\n set boundingBoxDrawMode(mode) {\r\n this._boxDrawMode = mode;\r\n }\r\n invalidateTransform(invalidateLocal = true) {\r\n this._onTransformChanged(invalidateLocal);\r\n }\r\n /** Get called when the node was just created by cloning from other node */\r\n protected onPostClone(): void | Promise<void> {}\r\n /** Disposes the node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this.remove();\r\n this.removeChildren();\r\n this._animationSet.dispose();\r\n this._sharedModel.dispose();\r\n }\r\n /** @internal */\r\n protected _setParent(p: Nullable<SceneNode>) {\r\n if (p && p._scene !== this._scene) {\r\n throw new Error('Parent node and child node must belongs to the same scene');\r\n }\r\n let lastParent = this._parent;\r\n let newParent = p;\r\n if (newParent !== lastParent) {\r\n const willDetach = (!p || !p.attached) && this.attached;\r\n const willAttach = !this.attached && p && p.attached;\r\n if (newParent) {\r\n newParent._children.push(new DRef(this));\r\n }\r\n if (this._parent) {\r\n const index = this._parent._children.findIndex((val) => val.get() === this);\r\n this._parent._children[index].dispose();\r\n this._parent._children.splice(index, 1);\r\n }\r\n this._parent = p;\r\n this._onTransformChanged(false);\r\n if (willDetach) {\r\n this._detached();\r\n }\r\n if (willAttach) {\r\n this._attached();\r\n }\r\n while (lastParent) {\r\n lastParent.dispatchEvent('noderemoved', this);\r\n lastParent = lastParent.parent;\r\n }\r\n while (newParent) {\r\n newParent.dispatchEvent('nodeattached', this);\r\n newParent = newParent.parent;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n if (this._disableCallback > 0) {\r\n return;\r\n }\r\n if (invalidateLocal) {\r\n this._localMatrix = null;\r\n }\r\n this.invalidateWorldBoundingVolume(true);\r\n this.dispatchEvent('transformchanged', this);\r\n if (this._worldMatrix) {\r\n this._transformTag++;\r\n this._worldMatrix = null;\r\n this._invWorldMatrix = null;\r\n this._worldMatrixDet = null;\r\n for (const child of this._children) {\r\n child.get()!._onTransformChanged(false);\r\n }\r\n }\r\n }\r\n /**\r\n * Get called when this node is attached to scene\r\n */\r\n protected _onAttached() {}\r\n /**\r\n * Get called when this node is detached from scene\r\n */\r\n protected _onDetached() {}\r\n /** @internal */\r\n protected _attached() {\r\n this.iterate((child) => {\r\n this.scene!.queueUpdateNode(child);\r\n child._onAttached();\r\n });\r\n }\r\n /** @internal */\r\n protected _detached() {\r\n this.iterate((child) => {\r\n child._onDetached();\r\n });\r\n }\r\n /** @internal */\r\n notifyHiddenChanged() {\r\n this._visibleChanged();\r\n for (const child of this._children) {\r\n if (child.get()!.showState === 'inherit') {\r\n child.get()!.notifyHiddenChanged();\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected _visibleChanged() {}\r\n /** Parent of the xform */\r\n get parent() {\r\n return this._parent;\r\n }\r\n set parent(p) {\r\n if (p !== this._parent) {\r\n this._setParent(p);\r\n }\r\n }\r\n /** Children of this xform */\r\n get children(): SceneNode[] {\r\n return this._children.map((child) => child.get()!);\r\n }\r\n /**\r\n * Position of the xform relative to it's parent\r\n */\r\n get position(): Vector3 {\r\n return this._position;\r\n }\r\n set position(val: Vector3) {\r\n this._position.setXYZ(val[0], val[1], val[2]);\r\n }\r\n /**\r\n * Scaling of the xform\r\n */\r\n get scale(): Vector3 {\r\n return this._scaling;\r\n }\r\n set scale(val: Vector3) {\r\n this._scaling.setXYZ(val[0], val[1], val[2]);\r\n }\r\n /**\r\n * Rotation of the xform\r\n */\r\n get rotation(): Quaternion {\r\n return this._rotation;\r\n }\r\n set rotation(val: Quaternion) {\r\n this._rotation.setXYZW(val[0], val[1], val[2], val[3]);\r\n }\r\n /**\r\n * Transform world coordinate to local space\r\n * @param v - point or vector in world space\r\n * @param result - The output result\r\n * @returns The transformed local space coordinate\r\n */\r\n worldToThis(v: Vector3, result?: Vector3): Vector3;\r\n worldToThis(v: Vector4, result?: Vector4): Vector4;\r\n worldToThis(v: Vector3 | Vector4, result?: Vector3 | Vector4): Vector3 | Vector4 {\r\n if (v instanceof Vector3) {\r\n result = result || new Vector3();\r\n this.invWorldMatrix.transformPointAffine(v, result as Vector3);\r\n return result;\r\n } else {\r\n result = result || new Vector4();\r\n this.invWorldMatrix.transformAffine(v, result as Vector4);\r\n return result;\r\n }\r\n }\r\n /**\r\n * Transform coordinate in other coordinate space to local space\r\n * @param other - The other coordinate space\r\n * @param v - point or vector in other coordinate space\r\n * @param result - The output result\r\n * @returns The transformed local space coordinate\r\n */\r\n otherToThis(other: SceneNode, v: Vector3, result?: Vector3): Vector3;\r\n otherToThis(other: SceneNode, v: Vector4, result?: Vector4): Vector4;\r\n otherToThis(other: SceneNode, v: Vector3 | Vector4, result?: Vector3 | Vector4): Vector3 | Vector4 {\r\n return this.worldToThis(other.thisToWorld(v as any, result as any), result as any);\r\n }\r\n /**\r\n * Transform local coordinate to world space\r\n * @param v - point or vector in local space\r\n * @param result - The output result\r\n * @returns The transformed world space coordinate\r\n */\r\n thisToWorld(v: Vector3, result?: Vector3): Vector3;\r\n thisToWorld(v: Vector4, result?: Vector4): Vector4;\r\n thisToWorld(v: Vector3 | Vector4, result?: Vector3 | Vector4): Vector3 | Vector4 {\r\n if (v instanceof Vector3) {\r\n result = result || new Vector3();\r\n this.worldMatrix.transformPointAffine(v, result as Vector3);\r\n return result;\r\n } else {\r\n result = result || new Vector4();\r\n this.worldMatrix.transformAffine(v, result as Vector4);\r\n return result;\r\n }\r\n }\r\n /**\r\n * Transform local space coordinate to other coordinate space\r\n * @param other - The other coordinate space\r\n * @param v - point or vector in localspace\r\n * @param result - The output result\r\n * @returns The transformed coordinate in other coordinate space\r\n */\r\n thisToOther(other: SceneNode, v: Vector3, result?: Vector3): Vector3;\r\n thisToOther(other: SceneNode, v: Vector4, result?: Vector4): Vector4;\r\n thisToOther(other: SceneNode, v: Vector3 | Vector4, result?: Vector3 | Vector4): Vector3 | Vector4 {\r\n return other.worldToThis(this.thisToWorld(v as any, result as any), result as any);\r\n }\r\n /**\r\n * Gets the position of the xform in world space\r\n * @returns position of the xform in world space\r\n */\r\n getWorldPosition(outPos?: Vector3) {\r\n return (\r\n outPos?.setXYZ(this.worldMatrix.m03, this.worldMatrix.m13, this.worldMatrix.m23) ??\r\n new Vector3(this.worldMatrix.m03, this.worldMatrix.m13, this.worldMatrix.m23)\r\n );\r\n }\r\n /**\r\n * Moves the xform by an offset vector\r\n * @param delta - The offset vector\r\n * @returns self\r\n */\r\n moveBy(delta: Vector3) {\r\n this._position.addBy(delta);\r\n return this;\r\n }\r\n /**\r\n * Scales the xform by a given scale factor\r\n * @param factor - The scale factor\r\n * @returns self\r\n */\r\n scaleBy(factor: Vector3) {\r\n this._scaling.mulBy(factor);\r\n return this;\r\n }\r\n /**\r\n * Sets the local transform matrix of the xform\r\n * @param matrix - The transform matrix to set\r\n * @returns self\r\n */\r\n setLocalTransform(matrix: Matrix4x4) {\r\n this._disableCallback++;\r\n matrix.decompose(this._scaling, this._rotation, this._position);\r\n this._disableCallback--;\r\n this._onTransformChanged(true);\r\n return this;\r\n }\r\n /** Local transformation matrix of the xform */\r\n get localMatrix(): Immutable<Matrix4x4> {\r\n if (!this._localMatrix) {\r\n this.calculateLocalTransform(this._tmpLocalMatrix);\r\n this._localMatrix = this._tmpLocalMatrix;\r\n }\r\n return this._localMatrix;\r\n }\r\n set localMatrix(matrix: Immutable<Matrix4x4>) {\r\n this.setLocalTransform(matrix);\r\n }\r\n /** World transformation matrix of the xform */\r\n get worldMatrix(): Immutable<Matrix4x4> {\r\n this.syncTransform();\r\n return this._worldMatrix!;\r\n }\r\n /** The determinant of world matrix */\r\n get worldMatrixDet(): number {\r\n this.syncTransform();\r\n return this._worldMatrixDet!;\r\n }\r\n /** Inverse of the world transformation matrix of the xform */\r\n get invWorldMatrix(): Immutable<Matrix4x4> {\r\n this.syncTransform();\r\n return this._invWorldMatrix!;\r\n }\r\n /**\r\n * Calculate local transform matrix\r\n * @param outMatrix - Matrix object that holds the result of calculation\r\n */\r\n calculateLocalTransform(outMatrix: Matrix4x4) {\r\n outMatrix.compose(this._scaling, this._rotation, this._position);\r\n }\r\n /**\r\n * Calculate world transform matrix\r\n * @param outMatrix - Matrix object that holds the result of calculation\r\n */\r\n calculateWorldTransform(outMatrix: Matrix4x4) {\r\n if (this._parent) {\r\n Matrix4x4.multiplyAffine(this._parent.worldMatrix, this.localMatrix, outMatrix);\r\n } else {\r\n outMatrix.set(this.localMatrix);\r\n }\r\n }\r\n /**\r\n * Sets the local tranformation matrix by a look-at matrix\r\n * @param eye - The eye position used to make the look-at matrix\r\n * @param target - The target position used to make the look-at matrix\r\n * @param up - The up vector used to make the look-at matrix\r\n * @returns self\r\n */\r\n lookAt(eye: Vector3, target: Vector3, up: Vector3) {\r\n this.setLocalTransform(Matrix4x4.lookAt(eye, target, up));\r\n return this;\r\n }\r\n /**\r\n * Update node state once per-frame\r\n * @param frameId - Current frame id\r\n * @param elapsedInSeconds - Elapsed time from game start in seconds\r\n * @param deltaInSeconds - Elapsed time since previous frame in seconds\r\n */\r\n update(frameId: number, elapsedInSeconds: number, deltaInSeconds: number) {\r\n if (!this.attached) {\r\n return;\r\n }\r\n const animationSet = this._animationSet.get();\r\n if (animationSet) {\r\n if (animationSet.numAnimations > 0 || animationSet.skeletons.length > 0) {\r\n animationSet.update(deltaInSeconds);\r\n this.scene!.queueUpdateNode(this);\r\n } else {\r\n this._animationSet.dispose();\r\n }\r\n }\r\n }\r\n /**\r\n * Update node state once per-camera\r\n * @param _camera - Updates according to which camera\r\n * @param _elapsedInSeconds - Elapsed time from game start in seconds\r\n * @param _deltaInSeconds - Elapsed time since previous frame in seconds\r\n */\r\n updatePerCamera(_camera: Camera, _elapsedInSeconds: number, _deltaInSeconds: number) {}\r\n /**\r\n * Removes this node from it's parent and add this node to another parent node if required\r\n * @param p - The new parent node that this node should be added to or null\r\n * @returns self\r\n */\r\n reparent(p?: Nullable<SceneNode>) {\r\n this.parent = p ?? null;\r\n return this;\r\n }\r\n /** @internal */\r\n get transformTag() {\r\n return this._transformTag;\r\n }\r\n /** @internal */\r\n private syncTransform() {\r\n if (!this._worldMatrix) {\r\n this._worldMatrix = this._tmpWorldMatrix;\r\n this.calculateWorldTransform(this._worldMatrix);\r\n }\r\n if (this._worldMatrixDet === null) {\r\n this._worldMatrixDet = this._worldMatrix.det();\r\n }\r\n if (!this._invWorldMatrix) {\r\n this._invWorldMatrix = Matrix4x4.invertAffine(this._worldMatrix);\r\n }\r\n }\r\n}\r\n"],"names":["SceneNode","makeObservable","Disposable","_runTimeId","BBOXDRAW_INHERITED","BBOXDRAW_DISABLED","BBOXDRAW_LOCAL","BBOXDRAW_WORLD","scene","_runtimeId","_id","randomUUID","_prefabId","_scene","_name","_animationSet","DRef","_sharedModel","_jointTypeT","_jointTypeS","_jointTypeR","_bv","_bvWorld","_bvDirty","_clipMode","_boxDrawMode","_visible","_pickable","_gpuPickable","_placeToOctree","_sealed","_children","_transformChangeCallback","_onTransformChanged","_position","ObservableVector3","setCallback","_scaling","_rotation","ObservableQuaternion","_worldMatrix","_worldMatrixDet","_invWorldMatrix","_localMatrix","_transformTag","_disableCallback","_tmpLocalMatrix","Matrix4x4","identity","_tmpWorldMatrix","_scripts","_metaData","_parent","reparent","rootNode","placeToOctree","val","isGraphNode","invalidateNodePlacement","runtimeId","persistentId","id","prefabId","getPrefabNode","parent","jointTypeT","jointTypeS","jointTypeR","metaData","script","fileName","splice","unshift","ScriptAttachment","scriptConfig","config","value","normalized","normalizeScriptAttachmentConfig","scripts","normalizeScriptAttachments","scriptConfigs","map","item","next","Array","isArray","i","Math","max","length","push","filter","name","attached","node","sealed","animationSet","get","set","AnimationSet","queueUpdateNode","sharedModel","model","clone","iterate","isClipmapTerrain","Error","tmpParent","data","getEngine","resourceManager","serializeObject","other","deserializeObject","dispose","postClonePromises","P","onPostClone","Promise","all","hasChild","child","removeChildren","remove","isParentOf","traverse","v","visit","callback","iterateBottomToTop","isLight","isMesh","isSprite","isWater","isParticleSystem","isBatchGroup","isCamera","isPunctualLight","computeBoundingVolume","getBoundingVolume","setBoundingVolume","bv","invalidateWorldBoundingVolume","getWorldBoundingVolume","computeWorldBoundingVolume","localBV","transform","worldMatrix","invalidateBoundingVolume","transformChanged","dispatchEvent","clipTestEnabled","hidden","showState","prevHidden","notifyHiddenChanged","pickable","gpuPickable","findNodeById","findSkeletonById","prefabNode","sk","skeletons","find","s","findNodeByName","computedBoundingBoxDrawMode","boundingBoxDrawMode","mode","invalidateTransform","invalidateLocal","onDispose","_setParent","p","lastParent","newParent","willDetach","willAttach","index","findIndex","_detached","_attached","_onAttached","_onDetached","_visibleChanged","children","position","setXYZ","scale","rotation","setXYZW","worldToThis","result","Vector3","invWorldMatrix","transformPointAffine","Vector4","transformAffine","otherToThis","thisToWorld","thisToOther","getWorldPosition","outPos","m03","m13","m23","moveBy","delta","addBy","scaleBy","factor","mulBy","setLocalTransform","matrix","decompose","localMatrix","calculateLocalTransform","syncTransform","worldMatrixDet","outMatrix","compose","calculateWorldTransform","multiplyAffine","lookAt","eye","target","up","update","frameId","elapsedInSeconds","deltaInSeconds","numAnimations","updatePerCamera","_camera","_elapsedInSeconds","_deltaInSeconds","transformTag","det","invertAffine"],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ function cloneScriptAttachmentValue(value) {
2
+ if (Array.isArray(value)) {
3
+ return value.map((item)=>cloneScriptAttachmentValue(item));
4
+ }
5
+ if (value && typeof value === 'object') {
6
+ const result = {};
7
+ for (const [key, item] of Object.entries(value)){
8
+ result[key] = cloneScriptAttachmentValue(item);
9
+ }
10
+ return result;
11
+ }
12
+ return value;
13
+ }
14
+ function normalizeScriptAttachmentConfig(value) {
15
+ if (value == null) {
16
+ return null;
17
+ }
18
+ if (Array.isArray(value)) {
19
+ return cloneScriptAttachmentValue(value);
20
+ }
21
+ if (typeof value === 'object') {
22
+ return cloneScriptAttachmentValue(value);
23
+ }
24
+ return null;
25
+ }
26
+ class ScriptAttachment {
27
+ script;
28
+ config;
29
+ constructor(script = '', config = null){
30
+ this.script = script ?? '';
31
+ this.config = normalizeScriptAttachmentConfig(config);
32
+ }
33
+ }
34
+ function normalizeScriptAttachments(value) {
35
+ if (!Array.isArray(value)) {
36
+ return [];
37
+ }
38
+ const result = [];
39
+ for (const item of value){
40
+ if (item instanceof ScriptAttachment) {
41
+ if (item.script || item.config != null) {
42
+ result.push(new ScriptAttachment(item.script, item.config));
43
+ }
44
+ continue;
45
+ }
46
+ if (item && typeof item === 'object') {
47
+ const attachment = item;
48
+ const script = typeof attachment.script === 'string' ? attachment.script : '';
49
+ const config = normalizeScriptAttachmentConfig(attachment.config);
50
+ if (script || config != null) {
51
+ result.push(new ScriptAttachment(script, config));
52
+ }
53
+ }
54
+ }
55
+ return result;
56
+ }
57
+
58
+ export { ScriptAttachment, normalizeScriptAttachmentConfig, normalizeScriptAttachments };
59
+ //# sourceMappingURL=script_attachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script_attachment.js","sources":["../../src/scene/script_attachment.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\n\r\nexport type ScriptAttachmentConfig = Nullable<Record<string, unknown> | unknown[]>;\r\n\r\nfunction cloneScriptAttachmentValue<T>(value: T): T {\r\n if (Array.isArray(value)) {\r\n return value.map((item) => cloneScriptAttachmentValue(item)) as T;\r\n }\r\n if (value && typeof value === 'object') {\r\n const result: Record<string, unknown> = {};\r\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\r\n result[key] = cloneScriptAttachmentValue(item);\r\n }\r\n return result as T;\r\n }\r\n return value;\r\n}\r\n\r\nexport function normalizeScriptAttachmentConfig(value: unknown): ScriptAttachmentConfig {\r\n if (value == null) {\r\n return null;\r\n }\r\n if (Array.isArray(value)) {\r\n return cloneScriptAttachmentValue(value);\r\n }\r\n if (typeof value === 'object') {\r\n return cloneScriptAttachmentValue(value as Record<string, unknown>);\r\n }\r\n return null;\r\n}\r\n\r\nexport class ScriptAttachment {\r\n script: string;\r\n config: ScriptAttachmentConfig;\r\n constructor(script = '', config: ScriptAttachmentConfig = null) {\r\n this.script = script ?? '';\r\n this.config = normalizeScriptAttachmentConfig(config);\r\n }\r\n}\r\n\r\nexport function normalizeScriptAttachments(value: unknown): ScriptAttachment[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n const result: ScriptAttachment[] = [];\r\n for (const item of value) {\r\n if (item instanceof ScriptAttachment) {\r\n if (item.script || item.config != null) {\r\n result.push(new ScriptAttachment(item.script, item.config));\r\n }\r\n continue;\r\n }\r\n if (item && typeof item === 'object') {\r\n const attachment = item as { script?: unknown; config?: unknown };\r\n const script = typeof attachment.script === 'string' ? attachment.script : '';\r\n const config = normalizeScriptAttachmentConfig(attachment.config);\r\n if (script || config != null) {\r\n result.push(new ScriptAttachment(script, config));\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n"],"names":["cloneScriptAttachmentValue","value","Array","isArray","map","item","result","key","Object","entries","normalizeScriptAttachmentConfig","ScriptAttachment","script","config","normalizeScriptAttachments","push","attachment"],"mappings":"AAIA,SAASA,2BAA8BC,KAAQ,EAAA;IAC7C,IAAIC,KAAAA,CAAMC,OAAO,CAACF,KAAQ,CAAA,EAAA;AACxB,QAAA,OAAOA,KAAMG,CAAAA,GAAG,CAAC,CAACC,OAASL,0BAA2BK,CAAAA,IAAAA,CAAAA,CAAAA;AACxD;IACA,IAAIJ,KAAAA,IAAS,OAAOA,KAAAA,KAAU,QAAU,EAAA;AACtC,QAAA,MAAMK,SAAkC,EAAC;QACzC,KAAK,MAAM,CAACC,GAAKF,EAAAA,IAAAA,CAAK,IAAIG,MAAOC,CAAAA,OAAO,CAACR,KAAmC,CAAA,CAAA;YAC1EK,MAAM,CAACC,GAAI,CAAA,GAAGP,0BAA2BK,CAAAA,IAAAA,CAAAA;AAC3C;QACA,OAAOC,MAAAA;AACT;IACA,OAAOL,KAAAA;AACT;AAEO,SAASS,gCAAgCT,KAAc,EAAA;AAC5D,IAAA,IAAIA,SAAS,IAAM,EAAA;QACjB,OAAO,IAAA;AACT;IACA,IAAIC,KAAAA,CAAMC,OAAO,CAACF,KAAQ,CAAA,EAAA;AACxB,QAAA,OAAOD,0BAA2BC,CAAAA,KAAAA,CAAAA;AACpC;IACA,IAAI,OAAOA,UAAU,QAAU,EAAA;AAC7B,QAAA,OAAOD,0BAA2BC,CAAAA,KAAAA,CAAAA;AACpC;IACA,OAAO,IAAA;AACT;AAEO,MAAMU,gBAAAA,CAAAA;IACXC,MAAe;IACfC,MAA+B;AAC/B,IAAA,WAAA,CAAYD,MAAS,GAAA,EAAE,EAAEC,MAAAA,GAAiC,IAAI,CAAE;QAC9D,IAAI,CAACD,MAAM,GAAGA,MAAU,IAAA,EAAA;QACxB,IAAI,CAACC,MAAM,GAAGH,+BAAgCG,CAAAA,MAAAA,CAAAA;AAChD;AACF;AAEO,SAASC,2BAA2Bb,KAAc,EAAA;AACvD,IAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACF,KAAQ,CAAA,EAAA;AACzB,QAAA,OAAO,EAAE;AACX;AACA,IAAA,MAAMK,SAA6B,EAAE;IACrC,KAAK,MAAMD,QAAQJ,KAAO,CAAA;AACxB,QAAA,IAAII,gBAAgBM,gBAAkB,EAAA;AACpC,YAAA,IAAIN,KAAKO,MAAM,IAAIP,IAAKQ,CAAAA,MAAM,IAAI,IAAM,EAAA;gBACtCP,MAAOS,CAAAA,IAAI,CAAC,IAAIJ,gBAAAA,CAAiBN,KAAKO,MAAM,EAAEP,KAAKQ,MAAM,CAAA,CAAA;AAC3D;AACA,YAAA;AACF;QACA,IAAIR,IAAAA,IAAQ,OAAOA,IAAAA,KAAS,QAAU,EAAA;AACpC,YAAA,MAAMW,UAAaX,GAAAA,IAAAA;YACnB,MAAMO,MAAAA,GAAS,OAAOI,UAAWJ,CAAAA,MAAM,KAAK,QAAWI,GAAAA,UAAAA,CAAWJ,MAAM,GAAG,EAAA;YAC3E,MAAMC,MAAAA,GAASH,+BAAgCM,CAAAA,UAAAA,CAAWH,MAAM,CAAA;YAChE,IAAID,MAAAA,IAAUC,UAAU,IAAM,EAAA;AAC5BP,gBAAAA,MAAAA,CAAOS,IAAI,CAAC,IAAIJ,gBAAAA,CAAiBC,MAAQC,EAAAA,MAAAA,CAAAA,CAAAA;AAC3C;AACF;AACF;IACA,OAAOP,MAAAA;AACT;;;;"}
@@ -1,6 +1,8 @@
1
1
  import { Disposable, DRef, AABB, ClipState, nextPowerOf2, DWeakRef } from '@zephyr3d/base';
2
2
  import { getDevice } from '../../app/api.js';
3
3
  import '../../values.js';
4
+ import '../../render/render_queue.js';
5
+ import { Primitive } from '../../render/primitive.js';
4
6
  import '@zephyr3d/device';
5
7
  import '../../material/shader/helper.js';
6
8
  import '../../material/lambert.js';
@@ -16,8 +18,7 @@ import '../../material/pbrblueprint.js';
16
18
  import '../../material/sprite.js';
17
19
  import '../../material/sprite_std.js';
18
20
  import '../../utility/blueprint/material/texture.js';
19
- import '../../render/renderer.js';
20
- import { Primitive } from '../../render/primitive.js';
21
+ import '../../render/rendergraph/forward_plus_builder.js';
21
22
  import '../../render/sky.js';
22
23
  import '../../render/clipmap.js';
23
24
  import '../../shaders/atmosphere.js';