UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

39 lines 1.78 kB
import { filterBoolean } from "@lincode/utils"; import { AnimationClip, BooleanKeyframeTrack, NumberKeyframeTrack } from "three"; import { INVERSE_STANDARD_FRAME } from "../../globals"; import { uuidMap } from "../../collections/idCollections"; import TimelineAudio from "../../display/TimelineAudio"; import createInternalSystem from "../utils/createInternalSystem"; const isBooleanFrameData = (values) => typeof values[0] === "boolean"; const isNumberFrameData = (values) => typeof values[0] === "number"; const framesToKeyframeTrack = (targetName, property, frames) => { const keys = Object.keys(frames); if (!keys.length) return; const values = Object.values(frames); const name = targetName + "." + property; const frameNums = keys.map((frameNum) => Number(frameNum) * INVERSE_STANDARD_FRAME); if (isBooleanFrameData(values)) return new BooleanKeyframeTrack(name, frameNums, values); if (isNumberFrameData(values)) return new NumberKeyframeTrack(name, frameNums, values); }; export const configAnimationDataSystem = createInternalSystem("configAnimationDataSystem", { effect: (self) => { if (!self.data) { self.$clip = self.$loadedClip; return; } self.$clip = new AnimationClip(undefined, undefined, Object.entries(self.data) .map(([uuid, tracks]) => { const instance = uuidMap.get(uuid); if (!instance || instance instanceof TimelineAudio) return []; return Object.entries(tracks) .map(([property, frames]) => framesToKeyframeTrack(uuid, property, frames)) .filter(filterBoolean); }) .flat()); } }); //# sourceMappingURL=configAnimationDataSystem.js.map