diff --git a/Sources/Plasma/PubUtilLib/plInterp/hsInterp.cpp b/Sources/Plasma/PubUtilLib/plInterp/hsInterp.cpp index 092e7496..8495f710 100644 --- a/Sources/Plasma/PubUtilLib/plInterp/hsInterp.cpp +++ b/Sources/Plasma/PubUtilLib/plInterp/hsInterp.cpp @@ -404,7 +404,7 @@ void hsInterp::GetBoundaryKeyFrames(hsScalar time, UInt32 numKeys, void *keys, U { hsAssert(numKeys>1, "Must have more than 1 keyframe"); int k1, k2; - UInt16 frame = (UInt16)(time * MAX_FRAMES_PER_SEC); + float frame = (time * MAX_FRAMES_PER_SEC); // boundary case, past end if (frame > GetKey(numKeys-1, keys, size)->fFrame) diff --git a/Sources/Plasma/PubUtilLib/plInterp/plAnimTimeConvert.cpp b/Sources/Plasma/PubUtilLib/plInterp/plAnimTimeConvert.cpp index d0f5e4e7..31970667 100644 --- a/Sources/Plasma/PubUtilLib/plInterp/plAnimTimeConvert.cpp +++ b/Sources/Plasma/PubUtilLib/plInterp/plAnimTimeConvert.cpp @@ -557,8 +557,13 @@ hsScalar plAnimTimeConvert::WorldToAnimTime(double wSecs) { if (secs > fLoopEnd) { - secs = fmodf(secs - fLoopBegin, fLoopEnd - fLoopBegin) + fLoopBegin; - wrapped = true; + float result = fmodf(secs - fLoopBegin, fLoopEnd - fLoopBegin) + fLoopBegin; + // if fLoopBegin == fLoopEnd == 0, result will not be a number + if (!isnan(result)) + { + secs = result; + wrapped = true; + } } } } @@ -576,8 +581,13 @@ hsScalar plAnimTimeConvert::WorldToAnimTime(double wSecs) { if (secs < fLoopBegin) { - secs = fLoopEnd - fmodf(fLoopEnd - secs, fLoopEnd - fLoopBegin); - wrapped = true; + float result = fLoopEnd - fmodf(fLoopEnd - secs, fLoopEnd - fLoopBegin); + // if fLoopBegin == fLoopEnd == 0, result will not be a number + if (!isnan(result)) + { + secs = result; + wrapped = true; + } } } }