UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

102 lines (101 loc) 3.73 kB
"use strict"; import { PerspectiveCamera, RectAreaLight, SpotLight } from "three"; import { ObjectType, registerObjectType } from "./geometry/Constant"; import { monkeyPatchSpotLight } from "./monkeyPatch/SpotLight"; export var GeneratorName = /* @__PURE__ */ ((GeneratorName2) => { GeneratorName2["PERSPECTIVE_CAMERA"] = "perspectiveCamera"; GeneratorName2["PERSPECTIVE_CAMERA_UPDATE"] = "perspectiveCameraUpdate"; GeneratorName2["AREA_LIGHT"] = "areaLight"; GeneratorName2["SPOT_LIGHT"] = "spotLight"; GeneratorName2["SPOT_LIGHT_UPDATE"] = "spotLightUpdate"; return GeneratorName2; })(GeneratorName || {}); const DEFAULT_PERSPECTIVE_CAMERA_CONSTRUCTOR = (options) => { registerObjectType({ type: ObjectType.PERSPECTIVE_CAMERA, checkFunc: (obj) => { if (obj.isPerspectiveCamera) { return ObjectType.PERSPECTIVE_CAMERA; } }, ctor: PerspectiveCamera, humanName: "PerspectiveCamera" }); const { fov, aspect, near, far } = options; return new PerspectiveCamera(fov, aspect, near, far); }; const DEFAULT_PERSPECTIVE_CAMERA_UPDATE = (options) => { }; const DEFAULT_AREA_LIGHT_CONSTRUCTOR = (options) => { registerObjectType({ type: ObjectType.AREA_LIGHT, checkFunc: (obj) => { if (obj.isRectAreaLight) { return ObjectType.AREA_LIGHT; } }, ctor: RectAreaLight, humanName: "AreaLight" }); const { color, intensity, width, height } = options; return new RectAreaLight(color, intensity, width, height); }; const DEFAULT_SPOT_LIGHT_CONSTRUCTOR = () => { registerObjectType({ type: ObjectType.SPOT_LIGHT, checkFunc: (obj) => { if (obj.isSpotLight) { return ObjectType.SPOT_LIGHT; } }, ctor: SpotLight, humanName: ObjectType.SPOT_LIGHT }); const spotLight = new SpotLight(); monkeyPatchSpotLight(spotLight); return spotLight; }; const DEFAULT_SPOT_LIGHT_UPDATE = (options) => { }; class CoreSceneObjectsFactoryClass { constructor() { this._generators = { ["perspectiveCamera" /* PERSPECTIVE_CAMERA */]: DEFAULT_PERSPECTIVE_CAMERA_CONSTRUCTOR, ["perspectiveCameraUpdate" /* PERSPECTIVE_CAMERA_UPDATE */]: DEFAULT_PERSPECTIVE_CAMERA_UPDATE, ["areaLight" /* AREA_LIGHT */]: DEFAULT_AREA_LIGHT_CONSTRUCTOR, ["spotLight" /* SPOT_LIGHT */]: DEFAULT_SPOT_LIGHT_CONSTRUCTOR, ["spotLightUpdate" /* SPOT_LIGHT_UPDATE */]: DEFAULT_SPOT_LIGHT_UPDATE }; } static instance() { return this._instance = this._instance || new CoreSceneObjectsFactoryClass(); } generator(generatorName) { return this._generators[generatorName]; } registerGenerator(generatorName, generator) { this._generators[generatorName] = generator; } // static generators: Generators = { // perspectiveCamera: (options:PerspectiveCameraOptions) => { // registerObjectType({ // type: ObjectType.PERSPECTIVE_CAMERA, // ctor: PerspectiveCamera, // humanName: 'PerspectiveCamera', // }); // const {fov, aspect, near, far}= options // return new PerspectiveCamera(fov, aspect, near, far); // }, // areaLight: (options:AreaLightOptions) => { // registerObjectType({type: ObjectType.AREA_LIGHT, ctor: RectAreaLight, humanName: 'AreaLight'}); // const {color, intensity, width, height}=options // return new RectAreaLight(color, intensity, width, height); // }, // spotLight: () => { // registerObjectType({type: ObjectType.SPOT_LIGHT, ctor: SpotLight, humanName: ObjectType.SPOT_LIGHT}); // return new SpotLight(); // }, // spotLightUpdate: <L extends SpotLight>(options:SpotLightUpdateOptions<L>) => {}, // }; } export const CoreSceneObjectsFactory = CoreSceneObjectsFactoryClass.instance();