@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
102 lines (101 loc) • 3.73 kB
JavaScript
;
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();