29 lines
1.2 KiB
JavaScript
29 lines
1.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.calculateNextFrame = void 0;
|
|
const calculateNextFrame = ({ time, currentFrame: startFrame, playbackSpeed, fps, actualLastFrame, actualFirstFrame, framesAdvanced, shouldLoop, }) => {
|
|
const op = playbackSpeed < 0 ? Math.ceil : Math.floor;
|
|
const framesToAdvance = op((time * playbackSpeed) / (1000 / fps)) - framesAdvanced;
|
|
const nextFrame = framesToAdvance + startFrame;
|
|
const isCurrentFrameOutside = startFrame > actualLastFrame || startFrame < actualFirstFrame;
|
|
const isNextFrameOutside = nextFrame > actualLastFrame || nextFrame < actualFirstFrame;
|
|
const hasEnded = !shouldLoop && isNextFrameOutside && !isCurrentFrameOutside;
|
|
if (playbackSpeed > 0) {
|
|
// Play forwards
|
|
if (isNextFrameOutside) {
|
|
return {
|
|
nextFrame: actualFirstFrame,
|
|
framesToAdvance,
|
|
hasEnded,
|
|
};
|
|
}
|
|
return { nextFrame, framesToAdvance, hasEnded };
|
|
}
|
|
// Reverse playback
|
|
if (isNextFrameOutside) {
|
|
return { nextFrame: actualLastFrame, framesToAdvance, hasEnded };
|
|
}
|
|
return { nextFrame, framesToAdvance, hasEnded };
|
|
};
|
|
exports.calculateNextFrame = calculateNextFrame;
|