From 31300af412cb282833a922242faef1d12ab21095 Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Fri, 10 May 2024 15:40:54 -0700 Subject: [PATCH] Make directly constructed Nodes a root node --- packages/dev/core/src/Bones/bone.ts | 2 +- packages/dev/core/src/Cameras/camera.ts | 2 +- packages/dev/core/src/Lights/light.ts | 2 +- packages/dev/core/src/Meshes/transformNode.ts | 2 +- packages/dev/core/src/node.ts | 7 ++++++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/dev/core/src/Bones/bone.ts b/packages/dev/core/src/Bones/bone.ts index afa6b232706..d96d9692d3c 100644 --- a/packages/dev/core/src/Bones/bone.ts +++ b/packages/dev/core/src/Bones/bone.ts @@ -101,7 +101,7 @@ export class Bone extends Node { bindMatrix: Nullable = null, index: Nullable = null ) { - super(name, skeleton.getScene()); + super(name, skeleton.getScene(), false); this._skeleton = skeleton; this._localMatrix = localMatrix?.clone() ?? Matrix.Identity(); this._restMatrix = restMatrix ?? this._localMatrix.clone(); diff --git a/packages/dev/core/src/Cameras/camera.ts b/packages/dev/core/src/Cameras/camera.ts index 277bc72c51c..4b15750c756 100644 --- a/packages/dev/core/src/Cameras/camera.ts +++ b/packages/dev/core/src/Cameras/camera.ts @@ -453,7 +453,7 @@ export class Camera extends Node { * @param setActiveOnSceneIfNoneActive Defines if the camera should be set as active after creation if no other camera have been defined in the scene */ constructor(name: string, position: Vector3, scene?: Scene, setActiveOnSceneIfNoneActive = true) { - super(name, scene); + super(name, scene, false); this.getScene().addCamera(this); diff --git a/packages/dev/core/src/Lights/light.ts b/packages/dev/core/src/Lights/light.ts index fbfe968e19a..7c4eef115bc 100644 --- a/packages/dev/core/src/Lights/light.ts +++ b/packages/dev/core/src/Lights/light.ts @@ -370,7 +370,7 @@ export abstract class Light extends Node implements ISortableLight { * @param scene The scene the light belongs too */ constructor(name: string, scene?: Scene) { - super(name, scene); + super(name, scene, false); this.getScene().addLight(this); this._uniformBuffer = new UniformBuffer(this.getScene().getEngine(), undefined, undefined, name); this._buildUniformLayout(); diff --git a/packages/dev/core/src/Meshes/transformNode.ts b/packages/dev/core/src/Meshes/transformNode.ts index 3207c97894d..ff890482552 100644 --- a/packages/dev/core/src/Meshes/transformNode.ts +++ b/packages/dev/core/src/Meshes/transformNode.ts @@ -185,7 +185,7 @@ export class TransformNode extends Node { public onAfterWorldMatrixUpdateObservable = new Observable(); constructor(name: string, scene: Nullable = null, isPure = true) { - super(name, scene); + super(name, scene, false); if (isPure) { this.getScene().addTransformNode(this); diff --git a/packages/dev/core/src/node.ts b/packages/dev/core/src/node.ts index a21418a8a08..00a8c6586bf 100644 --- a/packages/dev/core/src/node.ts +++ b/packages/dev/core/src/node.ts @@ -349,13 +349,18 @@ export class Node implements IBehaviorAware { * Creates a new Node * @param name the name and id to be given to this node * @param scene the scene this node will be added to + * @param isPure indicates this Node is just a Node, and not a derived class like Mesh or Camera */ - constructor(name: string, scene: Nullable = null) { + public constructor(name: string, scene: Nullable = null, isPure = true) { this.name = name; this.id = name; this._scene = (scene || EngineStore.LastCreatedScene); this.uniqueId = this._scene.getUniqueId(); this._initCache(); + + if (isPure) { + this._addToSceneRootNodes(); + } } /**