소스 검색

Merge pull request #6331 from TrevorDev/guiLayerAssetContainer

also remove gui layers when assetcontainer is removed
David Catuhe 6 년 전
부모
커밋
9fdcd0908d
2개의 변경된 파일35개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      dist/preview release/what's new.md
  2. 34 0
      src/Layers/layerSceneComponent.ts

+ 1 - 0
dist/preview release/what's new.md

@@ -20,5 +20,6 @@
 - Added `ShadowGenerator.onAfterShadowMapRenderObservable` and `ShadowGenerator.onAfterShadowMapMeshRenderObservable` ([Deltakosh](https://github.com/deltakosh/))
 
 ## Bug fixes
+- Removing assetContainer from scene will also remove gui layers ([TrevorDev](https://github.com/TrevorDev))
 
 ## Breaking changes

+ 34 - 0
src/Layers/layerSceneComponent.ts

@@ -6,6 +6,7 @@ import { _TimeToken } from "../Instrumentation/timeToken";
 import { _DepthCullingState, _StencilState, _AlphaState } from "../States/index";
 import { Layer } from "./layer";
 import { RenderTargetTexture } from "../Materials/Textures/renderTargetTexture";
+import { AbstractScene } from '../abstractScene';
 
 declare module "../abstractScene" {
     export interface AbstractScene {
@@ -127,4 +128,37 @@ export class LayerSceneComponent implements ISceneComponent {
             return this._drawRenderTargetPredicate(layer, false, this.scene.activeCamera!.layerMask, renderTarget);
         });
     }
+
+    /**
+     * Adds all the element from the container to the scene
+     * @param container the container holding the elements
+     */
+    public addFromContainer(container: AbstractScene): void {
+        if (!container.layers) {
+            return;
+        }
+        container.layers.forEach((layer) => {
+            this.scene.layers.push(layer);
+        });
+    }
+
+    /**
+     * Removes all the elements in the container from the scene
+     * @param container contains the elements to remove
+     * @param dispose if the removed element should be disposed (default: false)
+     */
+    public removeFromContainer(container: AbstractScene, dispose = false): void {
+        if (!container.layers) {
+            return;
+        }
+        container.layers.forEach((layer) => {
+            var index = this.scene.layers.indexOf(layer);
+            if (index !== -1) {
+                this.scene.layers.splice(index, 1);
+            }
+            if (dispose) {
+                layer.dispose();
+            }
+        });
+    }
 }