//* -----------------------------------------------------------------------* /// <summary> /// <para>コンストラクタ。</para> /// <para> /// グラデーション値を設定します。 /// </para> /// </summary> /// /// <param name="fStart">初期値</param> /// <param name="fEnd">最終値</param> /// <param name="fLimit1">限界値1</param> /// <param name="fLimit2">限界値2</param> public SGradation(float fStart, float fEnd, float fLimit1, float fLimit2) { start = fStart; end = fEnd; limit1 = fLimit1; limit2 = fLimit2; interpolate = EInterpolate.clampSmooth; }
//* ────────────-_______________________* //* constructor & destructor ───────────────────────* //* -----------------------------------------------------------------------* /// <summary> /// <para>コンストラクタ。</para> /// <para> /// すべての項目に同一の値を設定します。(グラデーションしません) /// </para> /// </summary> /// /// <param name="fExpr">値</param> public SGradation(float fExpr) { start = fExpr; end = fExpr; limit1 = fExpr; limit2 = fExpr; interpolate = EInterpolate.clampSmooth; }
//* -----------------------------------------------------------------------* /// <summary>値を初期化します。</summary> /// /// <param name="start">開始値。</param> /// <param name="target">目標値。</param> /// <param name="interval">アニメーションに要する時間。</param> /// <param name="interpolate">アニメーションに使用する内分カウンタ。</param> public void reset(float start, float target, int interval, EInterpolate interpolate) { resetCounter(); this.start = start; this.now = start; this.target = target; this.interval = interval; this.interpolate = interpolate; }
//* -----------------------------------------------------------------------* /// <summary> /// <para>コンストラクタ。</para> /// <para> /// グラデーション値を設定します。 /// </para> /// </summary> /// /// <param name="fStart">初期値</param> /// <param name="fEnd">最終値</param> /// <param name="fLimit1">限界値1</param> /// <param name="fLimit2">限界値2</param> /// <param name="interpolate">内分カウンタ。</param> public SGradation( float fStart, float fEnd, float fLimit1, float fLimit2, EInterpolate interpolate) { start = fStart; end = fEnd; limit1 = fLimit1; limit2 = fLimit2; this.interpolate = interpolate; }
//* ────________________________________* //* methods ───────────────────────────────-* //* -----------------------------------------------------------------------* /// <summary>線形補完列挙体に対応する関数を取得します。</summary> /// /// <param name="interpolate">線形補完列挙体。</param> /// <returns>対応する関数へのデリゲート。</returns> /// <exception cref="System.IndexOutOfRangeException"> /// 予約値を設定しようとした場合。 /// </exception> public static Func <float, float, float, float, float> getFunction( this EInterpolate interpolate) { return(interpolateList[(int)interpolate]); }
//* -----------------------------------------------------------------------* /// <summary>線形補完を計算します。</summary> /// /// <param name="interpolate">線形補完列挙体。</param> /// <param name="start"><paramref name="now"/>が0と等しい場合の値</param> /// <param name="end"><paramref name="now"/>が<paramref name="limit"/>と等しい場合の値</param> /// <param name="now">現在時間</param> /// <param name="limit"><paramref name="end"/>に到達する時間</param> /// <returns> /// 0から<paramref name="limit"/>までの<paramref name="now"/>に相当する /// <paramref name="start"/>から<paramref name="end"/>までの値 /// </returns> /// <exception cref="System.IndexOutOfRangeException"> /// 予約値を設定しようとした場合。 /// </exception> public static float interpolate( this EInterpolate interpolate, float start, float end, float now, float limit) { return(interpolate.getFunction()(start, end, now, limit)); }
//* -----------------------------------------------------------------------* /// <summary>線形補完を計算します。</summary> /// /// <param name="interpolate">線形補完列挙体。</param> /// <param name="start"><paramref name="target"/>が0と等しい場合の値</param> /// <param name="end"><paramref name="target"/>が<paramref name="limit"/>と等しい場合の値</param> /// <param name="target">現在時間</param> /// <param name="limit"><paramref name="end"/>に到達する時間</param> /// <returns> /// 0から<paramref name="limit"/>までの<paramref name="target"/>に相当する /// <paramref name="start"/>から<paramref name="end"/>までの値 /// </returns> /// <exception cref="System.IndexOutOfRangeException"> /// 予約値を設定しようとした場合。 /// </exception> public static float interpolate( this EInterpolate interpolate, float start, float end, float target, float limit) { return(interpolate.getLerpFunction()(start, end, target, limit)); }
//* -----------------------------------------------------------------------* /// <summary>アニメーションを開始します。</summary> /// /// <param name="start">開始値。</param> /// <param name="target">目標値。</param> /// <param name="interval">アニメーションに要する時間。</param> /// <param name="interpolate">アニメーションに使用する内分カウンタ。</param> public void run(float start, float target, int interval, EInterpolate interpolate) { reset(start, target, interval, interpolate); nextState = CStateAnimationLite.instance; }