polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
68 lines (59 loc) • 1.84 kB
text/typescript
/**
* 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);
}
}