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; } }