@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
62 lines (61 loc) • 1.73 kB
JavaScript
;
import { isArray } from "../Type";
import { createKeyframeTangent, copyKeyframeTangent } from "./KeyframeTangent";
export function createKeyframeData() {
return { pos: 0, value: 0, in: { slope: 0, accel: 0 } };
}
export function channelDataFromString(content, target) {
try {
let json = JSON.parse(content);
if (isArray(json)) {
let i = 0;
for (const targetSubElement of target) {
const jsonElement = json[i] || json[0];
copyChannelData(jsonElement, targetSubElement);
i++;
}
} else {
for (const targetSubElement of target) {
copyChannelData(json, targetSubElement);
}
}
} catch (e) {
console.warn("invalid channel data");
console.log(e);
console.log(target);
}
}
export function channelDataToString(data) {
if (data.length == 1) {
return JSON.stringify(data[0]);
}
return JSON.stringify(data);
}
export function copyKeyframeData(src, target) {
target.pos = src.pos;
target.value = src.value;
copyKeyframeTangent(src.in, target.in);
if (src.out) {
if (!target.out) {
target.out = createKeyframeTangent();
}
copyKeyframeTangent(src.out, target.out);
} else {
delete target.out;
}
}
export function copyChannelData(src, target) {
target.interpolation = src.interpolation;
target.keyframes.splice(src.keyframes.length, target.keyframes.length);
const srcKeyframes = src.keyframes;
let i = 0;
for (const srcKeyframe of srcKeyframes) {
let targetKeyframe = target.keyframes[i];
if (!targetKeyframe) {
targetKeyframe = createKeyframeData();
target.keyframes[i] = targetKeyframe;
}
copyKeyframeData(srcKeyframe, targetKeyframe);
i++;
}
}