private FrameBlend ConvertTimeToFrame(int time, int cycleCount)
{
FrameBlend frame = new FrameBlend();
int frameCount = this.FrameCount;
if(frameCount <= 1)
{
frame.Frame1 = 0;
frame.Frame2 = 0;
frame.BackLerp = 0.0f;
frame.FrontLerp = 1.0f;
frame.CycleCount = 0;
}
else if(time <= 0)
{
frame.Frame1 = 0;
frame.Frame2 = 1;
frame.BackLerp = 0.0f;
frame.FrontLerp = 1.0f;
frame.CycleCount = 0;
}
else
{
int frameTime = time * _frameRate;
int frameNumber = frameTime / 1000;
frame.CycleCount = frameNumber / (frameCount - 1);
if((cycleCount > 0) && (frame.CycleCount >= cycleCount))
{
frame.CycleCount = cycleCount - 1;
frame.Frame1 = frameCount - 1;
frame.Frame2 = frame.Frame1;
frame.BackLerp = 0.0f;
frame.FrontLerp = 1.0f;
}
else
{
frame.Frame1 = frameNumber % (frameCount - 1);
frame.Frame2 = frame.Frame1 + 1;
if(frame.Frame2 >= frameCount)
{
frame.Frame2 = 0;
}
frame.BackLerp = (frameTime % 1000) * 0.001f;
frame.FrontLerp = 1.0f - frame.BackLerp;
}
}
return frame;
}