import { invoke } from "@tauri-apps/api"; import { AnimationData } from "primitives/AnimatedEntities"; import { AnimatedProperty } from "primitives/AnimatedProperty"; import { AnimatedValue, ValueType } from "primitives/Values"; import { FC, useEffect, useState } from "react"; import { z } from "zod"; import Graph from "./Graph"; type TrackPropertyPathProps = { animatedProperties: Array>; animationData: z.input; }; const TrackPropertyGraph: FC = ({ animatedProperties, animationData, }) => { const [values, setValues] = useState>>([]); useEffect(() => { const tasks: Array>>> = []; animatedProperties.forEach((animatedProperty) => { animatedProperty.animatedValue.type; const animatedValue = animatedProperty.animatedValue; const commonValues: { animatedValue: z.input; startFrame: number; endFrame: number; fps: number; animationData: z.input; } = { animatedValue: AnimatedValue.parse(animatedValue), startFrame: 0, endFrame: 600, fps: 60, animationData: AnimationData.parse(animationData), }; switch (animatedValue.type) { case ValueType.Enum.Number: tasks.push( invoke( "get_values_at_frame_range_from_animated_float", commonValues ).then((data) => { const numbers = data as Array; return [numbers]; }) ); break; case ValueType.Enum.Vec2: tasks.push( invoke( "get_values_at_frame_range_from_animated_float_vec2", commonValues ).then((data) => { const vectors = data as [Array, Array]; const xValues = vectors.map((vec2) => vec2[0]); const yValues = vectors.map((vec2) => vec2[1]); return [xValues, yValues]; }) ); break; case ValueType.Enum.Vec3: tasks.push( invoke( "get_values_at_frame_range_from_animated_float_vec3", commonValues ).then((data) => { const vectors = data as [ Array, Array, Array ]; const xValues = vectors.map((vec2) => vec2[0]); const yValues = vectors.map((vec2) => vec2[1]); const zValues = vectors.map((vec2) => vec2[2]); return [xValues, yValues, zValues]; }) ); break; } }); Promise.all(tasks).then((values) => { const flatValues = values.flat(); console.log("flattened Values", flatValues); setValues(flatValues); }); }, animatedProperties); return (
); }; export default TrackPropertyGraph;