Esempio n. 1
0
    // returns a derived value interpolated from "prev" to "next" at "time".
    static public object    InterpolateKeyValue(SsKeyFrameInterface prevKey, SsKeyFrameInterface nextKey, int time)
    {
        // just returns a start value if prevKey has no curve.
        if (prevKey.Curve.IsNone)
        {
            return(prevKey.ObjectValue);
        }

        // get times at nearest keys away from specified time.
        int startTime = prevKey.Time;
        int endTime   = nextKey.Time;

        float now = 0f;

        if (startTime < endTime)
        {
            now = ((float)(time - startTime)) / (endTime - startTime);
        }

        SsInterpolatable interpolatable = prevKey.ObjectValue as SsInterpolatable;

        if (interpolatable == null)
        {
            return(Interpolate(prevKey.Curve, now, prevKey.ObjectValue, nextKey.ObjectValue, startTime, endTime));
        }
        else
        {
            return((object)interpolatable.GetInterpolated(prevKey.Curve, now, (SsInterpolatable)prevKey.ObjectValue, (SsInterpolatable)nextKey.ObjectValue, startTime, endTime));
        }
    }