UNPKG

polygonjs-engine

Version:

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

41 lines (35 loc) 1.56 kB
import {Constructor} from '../../../../../types/GlobalTypes'; import {MeshBasicMaterial} from 'three/src/materials/MeshBasicMaterial'; import {NodeParamsConfig, ParamConfig} from '../../../utils/params/ParamsConfig'; import {TypedObjNode} from '../../_Base'; import {Group} from 'three/src/objects/Group'; import {Light} from 'three/src/lights/Light'; import {Object3D} from 'three/src/core/Object3D'; import {FlagsControllerD} from '../../../utils/FlagsController'; export function BaseLightHelperParamConfig<TBase extends Constructor>(Base: TBase) { return class Mixin extends Base { showHelper = ParamConfig.BOOLEAN(0); }; } class BaseLightHelperParamsConfig extends BaseLightHelperParamConfig(NodeParamsConfig) {} export abstract class BaseLightHelperObjNode<L extends Light> extends TypedObjNode<Group, BaseLightHelperParamsConfig> { public readonly flags: FlagsControllerD = new FlagsControllerD(this); // public readonly helper: BaseLightHelper<L> | undefined; abstract get light(): L; } export abstract class BaseLightHelper<O extends Object3D, L extends Light, N extends BaseLightHelperObjNode<L>> { protected _object: O = this.createObject(); protected _material = new MeshBasicMaterial({wireframe: true, fog: false}); constructor(protected node: N, private _name: string) {} build() { this._object.matrixAutoUpdate = false; this._object.name = this._name; this.buildHelper(); } protected abstract createObject(): O; protected abstract buildHelper(): void; get object() { return this._object; } abstract update(): void; }