Beispiel #1
0
        // EaseOutExp(指数関数でのEaseIn)
        //  len: 補間の長さ
        //  sec: 補間時間(秒)
        //  deltaCallback< sec, t, dt, delta >
        //   sec  : 経過秒
        //   t    : 経過補間係数(0~1)
        //   dt   : 前回からの差分時間
        //   delta: 差分値
        static public Result easeOutExp(float len, float sec, System.Func <float, float, float, float, bool> deltaCallback, System.Action finishCallback = null)
        {
            float  preSec = 0.0f;
            Result res    = null;

            if (len >= 0.0f)
            {
                res = new Float(() => {
                    float a = (Mathf.Exp(len) - 1);
                    return(updateTime(ref preSec, len, sec, deltaCallback, finishCallback, (_preSec, _dt) => {
                        return Mathf.Log((sec + (_preSec + _dt) * a) / (sec + _preSec * a));
                    }));
                });
            }
            else
            {
                res = new Float(() => {
                    float a = (Mathf.Exp(-len) - 1);
                    return(updateTime(ref preSec, len, sec, deltaCallback, finishCallback, (_preSec, _dt) => {
                        return Mathf.Log((sec + _preSec * a) / (sec + (_preSec + _dt) * a));
                    }));
                });
            }
            DeltaLerpUpdater.getInstance().add(res);
            return(res);
        }
Beispiel #2
0
        // EaseOut
        //  len: 補間の長さ
        //  sec: 補間時間(秒)
        //  deltaCallback< sec, t, dt, delta >
        //   sec  : 経過秒
        //   t    : 経過補間係数(0~1)
        //   dt   : 前回からの差分時間
        //   delta: 差分値
        static public Result easeOut(float len, float sec, System.Func <float, float, float, float, bool> deltaCallback, System.Action finishCallback = null)
        {
            float preSec = 0.0f;
            var   res    = new Float(() => {
                return(updateTime(ref preSec, len, sec, deltaCallback, finishCallback, (_preSec, _dt) => {
                    return len / sec * _dt * (2.0f - (2.0f * _preSec + _dt) / sec);
                }));
            });

            DeltaLerpUpdater.getInstance().add(res);
            return(res);
        }
Beispiel #3
0
        // EaseInOut
        //  len: 補間の長さ
        //  sec: 補間時間(秒)
        //  deltaCallback< sec, t, dt, delta >
        //   sec  : 経過秒
        //   t    : 経過補間係数(0~1)
        //   dt   : 前回からの差分時間
        //   delta: 差分値
        static public Result easeInOut(float len, float sec, System.Func <float, float, float, float, bool> deltaCallback, System.Action finishCallback = null)
        {
            float preSec = 0.0f;
            float a      = len / (sec * sec);
            var   res    = new Float(() => {
                return(updateTime(ref preSec, len, sec, deltaCallback, finishCallback, (_preSec, _dt) => {
                    float s = _preSec + _dt;
                    return a * (s * s * (3.0f - 2.0f * s / sec) - _preSec * _preSec * (3.0f - 2.0f * _preSec / sec));
                }));
            });

            DeltaLerpUpdater.getInstance().add(res);
            return(res);
        }
Beispiel #4
0
        // EaseOutOver(lenをはみ出すEaseOut)
        //  len: 補間の長さ
        //  sec: 補間時間(秒)
        //  m  : はみ出し強度(0-1)
        //  deltaCallback< sec, t, dt, delta >
        //   sec  : 経過秒
        //   t    : 経過補間係数(0~1)
        //   dt   : 前回からの差分時間
        //   delta: 差分値
        static public Result easeOutOver(float len, float sec, float m, System.Func <float, float, float, float, bool> deltaCallback, System.Action finishCallback = null)
        {
            float preSec = 0.0f;
            float m2     = m * 0.499f + 0.501f;
            float a      = len / (sec * (1.0f - 2.0f * m2));
            float it     = 1.0f / sec;
            var   res    = new Float(() => {
                return(updateTime(ref preSec, len, sec, deltaCallback, finishCallback, (_preSec, _dt) => {
                    return a * (it * (_preSec + _dt) * (_preSec + _dt) - it * _preSec * _preSec - 2.0f * m2 * _dt);
                }));
            });

            DeltaLerpUpdater.getInstance().add(res);
            return(res);
        }
Beispiel #5
0
        // 線形補間
        //  len: 補間の長さ
        //  sec: 補間時間(秒)
        //  deltaCallback< sec, t, dt, delta >
        //   sec  : 経過秒
        //   t    : 経過補間係数(0~1)
        //   dt   : 前回からの差分時間
        //   delta: 差分値
        static public Result linear(Color len, float sec, System.Func <float, float, float, Color, bool> deltaCallback, System.Action finishCallback = null)
        {
            if (sec <= 0.0f)
            {
                deltaCallback(0.0f, 1.0f, 0.0f, len);
                return(null);
            }
            float preSec = 0.0f;
            var   res    = new Clr(() => {
                return(updateTime(ref preSec, sec, deltaCallback, finishCallback, (_, _dt) => {
                    return len / sec * _dt;
                }));
            });

            DeltaLerpUpdater.getInstance().add(res);
            return(res);
        }
Beispiel #6
0
        // EaseInOutOver(lenをはみ出すEaseInOut)
        //  len: 補間の長さ
        //  sec: 補間時間(秒)
        //  m  : はみ出し強度(0-1)
        //  deltaCallback< sec, t, dt, delta >
        //   sec  : 経過秒
        //   t    : 経過補間係数(0~1)
        //   dt   : 前回からの差分時間
        //   delta: 差分値
        static public Result easeInOutOver(float len, float sec, float m, System.Func <float, float, float, float, bool> deltaCallback, System.Action finishCallback = null)
        {
            float preSec = 0.0f;
            float m2     = m * 0.2f + 0.8f;
            float p      = len / (sec * (6.0f * m2 * m2 - 6.0f * m2 + 1.0f));
            float a      = -2.0f / (sec * sec);
            float b      = 3.0f / sec;
            float c      = 6.0f * m2 * (m2 - 1);
            var   res    = new Float(() => {
                return(updateTime(ref preSec, len, sec, deltaCallback, finishCallback, (_preSec, _dt) => {
                    float s = _preSec;
                    float sd = _preSec + _dt;
                    return p * (a * (sd * sd * sd - s * s * s) + b * (sd * sd - s * s) + c * (sd - s));
                }));
            });

            DeltaLerpUpdater.getInstance().add(res);
            return(res);
        }
Beispiel #7
0
        // EaseInExp(指数関数でのEaseIn)
        //  len: 補間の長さ
        //  sec: 補間時間(秒)
        //  deltaCallback< sec, t, dt, delta >
        //   sec  : 経過秒
        //   t    : 経過補間係数(0~1)
        //   dt   : 前回からの差分時間
        //   delta: 差分値
        static public Result easeInExp(float len, float sec, System.Func <float, float, float, float, bool> deltaCallback, System.Action finishCallback = null)
        {
            float  preSec = 0.0f;
            Result res    = null;

            if (len >= 0.0f)
            {
                res = new Float(() => {
                    return(updateTime(ref preSec, len, sec, deltaCallback, finishCallback, (_preSec, _dt) => {
                        return Mathf.Pow(1.0f + len, _preSec / sec) * (Mathf.Pow(1.0f + len, _dt / sec) - 1.0f);
                    }));
                });
            }
            else
            {
                res = new Float(() => {
                    return(updateTime(ref preSec, len, sec, deltaCallback, finishCallback, (_preSec, _dt) => {
                        return Mathf.Pow(1.0f - len, _preSec / sec) * (1.0f - Mathf.Pow(1.0f - len, _dt / sec));
                    }));
                });
            }
            DeltaLerpUpdater.getInstance().add(res);
            return(res);
        }
Beispiel #8
0
 public static void clearAllLerps()
 {
     DeltaLerpUpdater.getInstance().clearAll();
 }
Beispiel #9
0
 void Update()
 {
     DeltaLerpUpdater.getInstance().update();
 }