@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
48 lines (41 loc) • 1.45 kB
text/typescript
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();
}
}