UNPKG

@shopware-ag/dive

Version:

Shopware Spatial Framework

64 lines (54 loc) 1.81 kB
import { PerspectiveCamera } from 'three'; import { DEFAULT_LAYER_MASK, HELPER_LAYER_MASK, PRODUCT_LAYER_MASK, UI_LAYER_MASK, } from '../constant/VisibilityLayerMask.ts'; export type DIVEPerspectiveCameraSettings = { fov: number; near: number; far: number; }; export const DIVEPerspectiveCameraDefaultSettings: DIVEPerspectiveCameraSettings = { fov: 70, near: 0.1, far: 1000, }; /** * A Perspective camera. Can change the layer mask to show different objects. * * @module */ export default class DIVEPerspectiveCamera extends PerspectiveCamera { public static readonly EDITOR_VIEW_LAYER_MASK = DEFAULT_LAYER_MASK | UI_LAYER_MASK | HELPER_LAYER_MASK | PRODUCT_LAYER_MASK; public static readonly LIVE_VIEW_LAYER_MASK = PRODUCT_LAYER_MASK; public onSetCameraLayer: (mask: number) => void = () => {}; constructor( settings: Partial<DIVEPerspectiveCameraSettings> = DIVEPerspectiveCameraDefaultSettings, ) { super( settings.fov || DIVEPerspectiveCameraDefaultSettings.fov, 1, settings.near || DIVEPerspectiveCameraDefaultSettings.near, settings.far || DIVEPerspectiveCameraDefaultSettings.far, ); this.layers.mask = DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK; } public OnResize(width: number, height: number): void { this.aspect = width / height; this.updateProjectionMatrix(); } public SetCameraLayer(layer: 'LIVE' | 'EDITOR'): void { this.layers.mask = layer === 'LIVE' ? DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK : DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK; this.onSetCameraLayer(this.layers.mask); } }