UNPKG

@polygonjs/polygonjs

Version:

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

62 lines (61 loc) 1.73 kB
"use strict"; 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++; } }