50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import type { ElementAnimations } from "@/model/decorations/animations";
|
|
import { resolveAnimationPathValueAtTime } from "@/animation";
|
|
import type { Transform } from "./index";
|
|
|
|
export function resolveTransformAtTime({
|
|
baseTransform,
|
|
animations,
|
|
localTime,
|
|
}: {
|
|
baseTransform: Transform;
|
|
animations: ElementAnimations | undefined;
|
|
localTime: number;
|
|
}): Transform {
|
|
const safeLocalTime = Math.max(0, localTime);
|
|
return {
|
|
position: {
|
|
x: resolveAnimationPathValueAtTime({
|
|
animations,
|
|
propertyPath: "transform.positionX",
|
|
localTime: safeLocalTime,
|
|
fallbackValue: baseTransform.position.x,
|
|
}),
|
|
y: resolveAnimationPathValueAtTime({
|
|
animations,
|
|
propertyPath: "transform.positionY",
|
|
localTime: safeLocalTime,
|
|
fallbackValue: baseTransform.position.y,
|
|
}),
|
|
},
|
|
scaleX: resolveAnimationPathValueAtTime({
|
|
animations,
|
|
propertyPath: "transform.scaleX",
|
|
localTime: safeLocalTime,
|
|
fallbackValue: baseTransform.scaleX,
|
|
}),
|
|
scaleY: resolveAnimationPathValueAtTime({
|
|
animations,
|
|
propertyPath: "transform.scaleY",
|
|
localTime: safeLocalTime,
|
|
fallbackValue: baseTransform.scaleY,
|
|
}),
|
|
rotate: resolveAnimationPathValueAtTime({
|
|
animations,
|
|
propertyPath: "transform.rotate",
|
|
localTime: safeLocalTime,
|
|
fallbackValue: baseTransform.rotate,
|
|
}),
|
|
};
|
|
}
|