/// <summary> /// Tickします。 /// </summary> /// <returns>何Tickしたか。</returns> public long Tick() { // 何Tickしたかのカウント var tickCount = 0; var nowTime = DX.GetNowHiPerformanceCount(); // 停止状態の場合、現在時間をそのままプロパティに代入して、終わる。 if (State == TimerState.Stopped) { NowTime = nowTime; return(0); } // 現在時間から以前Tick()したまでの時間の差 var diffTime = nowTime - NowTime; while (diffTime >= Interval) { // 時間の差が間隔未満になるまで進める Value++; tickCount++; if (Value >= End) { if (IsLoop) { // ループ設定かつ現在の値が終了値より大きかったら Value = Begin; Looped?.Invoke(this, null); } else { // 非ループ設定かつ現在の値が終了値より大きかったら、終了値を維持してタイマーを停止する。 Value = End; Stop(); Ended?.Invoke(this, null); } } diffTime -= Interval; } // 余ったdiffTimeを引いて、次Tick()したときにちゃんとなるように NowTime = nowTime - diffTime; return(tickCount); }
private void OnLooped() { Looped?.Invoke(this); _isAtEnd = false; }