UNPKG

@polygonjs/polygonjs

Version:

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

48 lines (41 loc) 1.45 kB
import {Constructor} from '../../../../../types/GlobalTypes'; import {BaseNodeType} from '../../../_Base'; import {ParamConfig} from '../../../utils/params/ParamsConfig'; import {isBooleanTrue} from '../../../../../core/BooleanValue'; import {RootManagerNode} from '../../Root'; const CallbackOptions = { computeOnDirty: false, callback: (node: BaseNodeType) => { SceneAutoUpdateController.update(node as RootManagerNode); }, }; export function SceneAutoUpdateParamConfig<TBase extends Constructor>(Base: TBase) { return class Mixin extends Base { /** @param autoUpdate */ autoUpdate = ParamConfig.BOOLEAN(1, { ...CallbackOptions, separatorBefore: true, }); }; } // class SceneAutoUpdateParamsConfig extends SceneAutoUpdateParamConfig(NodeParamsConfig) {} // abstract class SceneAutoUpdateNode extends TypedNode<any, SceneAutoUpdateParamsConfig> { // readonly sceneAutoUpdateController = new SceneAutoUpdateController(this); // protected _object = new Scene(); // get object() { // return this._object; // } // } export class SceneAutoUpdateController { constructor(protected node: RootManagerNode) {} async update() { const scene = this.node.object; const pv = this.node.pv; if (isBooleanTrue(pv.autoUpdate) != scene.matrixWorldAutoUpdate) { scene.matrixWorldAutoUpdate = isBooleanTrue(pv.autoUpdate); } } static async update(node: RootManagerNode) { node.sceneAutoUpdateController.update(); } }