In the following code, CurrentBlendOutTime is reset and then used when calculating the new CurrentBlendInTime value, causing a sudden jump in blending values. It should be reset only after.
if (bBlendingOut)
{
bBlendingOut = false;
CurrentBlendOutTime = 0.f;
// stop any blendout and reverse it to a blendin
if (OscillationBlendInTime > 0.f)
{
bBlendingIn = true;
CurrentBlendInTime = OscillationBlendInTime * (1.f - CurrentBlendOutTime / OscillationBlendOutTime);
}
else
{
bBlendingIn = false;
CurrentBlendInTime = 0.f;
}
}