UNPKG

polygonjs-engine

Version:

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

68 lines (59 loc) 1.84 kB
/** * Sets easing of animation property * * */ import {TypedAnimNode} from './_Base'; import {TimelineBuilder} from '../../../core/animation/TimelineBuilder'; import {AnimNodeEasing, EASINGS, InOutMode, IN_OUT_MODES} from '../../../core/animation/Constant'; import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig'; class EasingAnimParamsConfig extends NodeParamsConfig { /** @param name of easing */ name = ParamConfig.INTEGER(EASINGS.indexOf(AnimNodeEasing.POWER4), { menu: { entries: EASINGS.map((name, value) => { return {name, value}; }), }, }); /** @param defines if the easing is 'in', 'out' or 'in-out' */ inOut = ParamConfig.INTEGER(IN_OUT_MODES.indexOf(InOutMode.OUT), { menu: { entries: IN_OUT_MODES.map((name, value) => { return {name, value}; }), }, }); } const ParamsConfig = new EasingAnimParamsConfig(); export class EasingAnimNode extends TypedAnimNode<EasingAnimParamsConfig> { params_config = ParamsConfig; static type() { return 'easing'; } initializeNode() { this.io.inputs.setCount(0, 1); this.scene().dispatchController.onAddListener(() => { this.params.onParamsCreated('params_label', () => { this.params.label.init([this.p.name, this.p.inOut], () => { return this.easing_full_name(); }); }); }); } private easing_full_name() { const easing = EASINGS[this.pv.name]; if (easing == AnimNodeEasing.NONE) { return easing; } const in_out = IN_OUT_MODES[this.pv.inOut]; const easing_full_name = `${easing}.${in_out}`; return easing_full_name; } cook(input_contents: TimelineBuilder[]) { const timeline_builder = input_contents[0] || new TimelineBuilder(); const easing_full_name = this.easing_full_name(); timeline_builder.set_easing(easing_full_name); this.set_timeline_builder(timeline_builder); } }