123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- /// <summary>
- /// 战斗模块计时器
- /// </summary>
- 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; // 当前已调度时间
-
- /// <summary>
- /// 初始化
- /// </summary>
- /// <param name="interval">调度间隔时间,单位毫秒</param>
- /// <param name="times">总调度次数, -1代表无限制</param>
- /// <param name="first">第一次调度间隔时间,单位毫秒</param>
- public void Initialize(long interval, long first, int times = -1)
- {
- mInterval = interval;
- mTotalTimes = times;
- mCurrentTimes = 0;
- mStart = DateTime.Now;
- mNext = mStart.AddMilliseconds(first);
- }
- /// <summary>
- /// 检测计时器是否达到触发时间,如符合则认为本次触发
- /// </summary>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 计时器是否已停止
- /// </summary>
- /// <returns></returns>
- public bool IsStop()
- {
- // 无限制次数永不停止
- if (mTotalTimes == -1)
- return false;
- if (mTotalTimes != -1 && mCurrentTimes > mTotalTimes)
- return true;
- return false;
- }
- }
|