using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
///
/// 战斗模块计时器
///
public class Timer
{
private DateTime mStart = DateTime.MinValue; // 上一次调度时间
private DateTime mNext = DateTime.MaxValue; // 下一次调度时间
private long mInterval = 0; // 调度间隔时间,单位毫秒
private int mTotalTimes = 0; // 总调度次数, -1无限次
private int mCurrentTimes = 0; // 当前已调度时间
///
/// 初始化
///
/// 调度间隔时间,单位毫秒
/// 总调度次数, -1代表无限制
/// 第一次调度间隔时间,单位毫秒
public void Initialize(long interval, long first, int times = -1)
{
mInterval = interval;
mTotalTimes = times;
mCurrentTimes = 0;
mStart = DateTime.Now;
mNext = mStart.AddMilliseconds(first);
}
///
/// 检测计时器是否达到触发时间,如符合则认为本次触发
///
///
public bool IsActive()
{
if (this.IsStop() == true)
return false;
TimeSpan span = DateTime.Now - mNext;
if (span.TotalMilliseconds >= 0)
{
++mCurrentTimes;
mStart = DateTime.Now;
mNext = mStart.AddMilliseconds(mInterval);
return true;
}
return false;
}
///
/// 计时器是否已停止
///
///
public bool IsStop()
{
// 无限制次数永不停止
if (mTotalTimes == -1)
return false;
if (mTotalTimes != -1 && mCurrentTimes > mTotalTimes)
return true;
return false;
}
}