UNPKG

polygonjs-engine

Version:

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

35 lines (32 loc) 1.13 kB
import {Constructor} from '../../../../types/GlobalTypes'; import {BaseController} from './_BaseController'; import {Material} from 'three/src/materials/Material'; import {NodeParamsConfig, ParamConfig} from '../../utils/params/ParamsConfig'; import {TypedMatNode} from '../_Base'; export function SkinningParamConfig<TBase extends Constructor>(Base: TBase) { return class Mixin extends Base { /** @param activates skinning for objects animated via a skeleton */ skinning = ParamConfig.BOOLEAN(0); }; } class SkinnedMaterial extends Material { skinning!: boolean; } class SkinningParamsConfig extends SkinningParamConfig(NodeParamsConfig) {} class SkinningMatNode extends TypedMatNode<SkinnedMaterial, SkinningParamsConfig> { create_material() { return new SkinnedMaterial(); } } export class SkinningController extends BaseController { constructor(protected node: SkinningMatNode) { super(node); } static update(node: SkinningMatNode) { const new_skinning = node.pv.skinning; if (new_skinning != node.material.skinning) { node.material.skinning = new_skinning; node.material.needsUpdate = true; } } }