|
|
|
|
@@ -32,21 +32,24 @@ export class BabylonCanvas implements AfterViewInit, OnDestroy {
|
|
|
|
|
private shaderMaterial!: ShaderMaterial;
|
|
|
|
|
private camera!: Camera;
|
|
|
|
|
|
|
|
|
|
//Listener
|
|
|
|
|
private resizeHandler = () => this.handleResize();
|
|
|
|
|
private wheelHandler = (evt: WheelEvent) => evt.preventDefault();
|
|
|
|
|
|
|
|
|
|
ngAfterViewInit(): void {
|
|
|
|
|
this.ngZone.runOutsideAngular(() => {
|
|
|
|
|
this.initBabylon();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*ngOnChanges(changes: SimpleChanges): void {
|
|
|
|
|
//if something changes during runtime, new materials are necessary ans needs maybe build here
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
ngOnDestroy(): void {
|
|
|
|
|
window.removeEventListener('resize', this.resizeHandler);
|
|
|
|
|
|
|
|
|
|
const canvas = this.canvasRef?.nativeElement;
|
|
|
|
|
if (canvas) {
|
|
|
|
|
//remove listener if needed
|
|
|
|
|
canvas.removeEventListener('wheel', this.wheelHandler);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (this.engine) {
|
|
|
|
|
this.engine.dispose();
|
|
|
|
|
}
|
|
|
|
|
@@ -57,12 +60,16 @@ export class BabylonCanvas implements AfterViewInit, OnDestroy {
|
|
|
|
|
this.engine = new Engine(canvas, true);
|
|
|
|
|
this.scene = new Scene(this.engine);
|
|
|
|
|
this.setupCamera(canvas);
|
|
|
|
|
canvas.addEventListener('wheel', (evt: WheelEvent) => evt.preventDefault(), { passive: false });
|
|
|
|
|
this.addListener(canvas);
|
|
|
|
|
this.createShaderMaterial();
|
|
|
|
|
this.createFullScreenRect();
|
|
|
|
|
this.sceneReady.emit(this.scene);
|
|
|
|
|
this.addRenderLoop(canvas);
|
|
|
|
|
this.addResizeHandler();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private addListener(canvas: HTMLCanvasElement) {
|
|
|
|
|
canvas.addEventListener('wheel', this.wheelHandler, {passive: false});
|
|
|
|
|
window.addEventListener('resize', this.resizeHandler);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private setupCamera(canvas: HTMLCanvasElement) {
|
|
|
|
|
@@ -148,12 +155,17 @@ export class BabylonCanvas implements AfterViewInit, OnDestroy {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private addResizeHandler() {
|
|
|
|
|
window.addEventListener('resize', () => {
|
|
|
|
|
private handleResize(): void {
|
|
|
|
|
if (this.engine) {
|
|
|
|
|
this.engine.resize();
|
|
|
|
|
if (this.config.mode === '2D' && this.camera instanceof ArcRotateCamera && this.camera.mode === Camera.ORTHOGRAPHIC_CAMERA) {
|
|
|
|
|
//maybe update the aspect ratio here
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (this.config.mode === '2D' && this.camera instanceof ArcRotateCamera) {
|
|
|
|
|
const viewSize = this.config?.initialViewSize ?? 10;
|
|
|
|
|
this.camera.orthoLeft = -viewSize / 2;
|
|
|
|
|
this.camera.orthoRight = viewSize / 2;
|
|
|
|
|
this.camera.orthoTop = viewSize / 2;
|
|
|
|
|
this.camera.orthoBottom = -viewSize / 2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|