Motion timeline updates (#10242)

* adjust segment math

* simplify interp and fix math

* fix math and update dependency

* push debug

* Revert "push debug"

This reverts commit 07c171b341.
This commit is contained in:
Josh Hawkins
2024-03-04 16:18:27 -06:00
committed by GitHub
parent 282c92c9c8
commit 38e76666e7
3 changed files with 27 additions and 43 deletions

View File

@@ -1,41 +1,39 @@
import { useCallback } from "react";
import { useCallback, useMemo } from "react";
import { MockMotionData } from "@/pages/UIPlayground";
export const useMotionSegmentUtils = (
segmentDuration: number,
motion_events: MockMotionData[],
) => {
const halfSegmentDuration = useMemo(
() => segmentDuration / 2,
[segmentDuration],
);
const getSegmentStart = useCallback(
(time: number): number => {
return Math.floor(time / segmentDuration) * segmentDuration;
return Math.floor(time / halfSegmentDuration) * halfSegmentDuration;
},
[segmentDuration],
[halfSegmentDuration],
);
const getSegmentEnd = useCallback(
(time: number | undefined): number => {
if (time) {
return (
Math.floor(time / segmentDuration) * segmentDuration + segmentDuration
Math.floor(time / halfSegmentDuration) * halfSegmentDuration +
halfSegmentDuration
);
} else {
return Date.now() / 1000 + segmentDuration;
return Date.now() / 1000 + halfSegmentDuration;
}
},
[segmentDuration],
[halfSegmentDuration],
);
const interpolateMotionAudioData = useCallback(
(
value: number,
oldMin: number,
oldMax: number,
newMin: number,
newMax: number,
): number => {
return (
((value - oldMin) / (oldMax - oldMin)) * (newMax - newMin) + newMin
);
(value: number, newMax: number): number => {
return Math.ceil((Math.abs(value) / 100.0) * newMax) || 1;
},
[],
);
@@ -45,7 +43,7 @@ export const useMotionSegmentUtils = (
const matchingEvent = motion_events.find((event) => {
return (
time >= getSegmentStart(event.start_time) &&
time < getSegmentEnd(event.end_time)
time < getSegmentEnd(event.start_time)
);
});
@@ -59,7 +57,7 @@ export const useMotionSegmentUtils = (
const matchingEvent = motion_events.find((event) => {
return (
time >= getSegmentStart(event.start_time) &&
time < getSegmentEnd(event.end_time)
time < getSegmentEnd(event.start_time)
);
});