123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- using System;
- using Common.Utility.CombatTimer;
- using Fort23.UTool;
- #if !COMBAT_SERVER
- using UnityEngine;
- #endif
- namespace Common.Utility.CombatTimer
- {
- public class CombatTimer
- {
- public enum TimerType
- {
- GameTimeUpdate, //游戏时间更新,受制于游戏时间
- Invalid, //释放
- }
- public bool isCombat;
- public delegate void OnTimerCallBack();
- private float m_maxDuration;
- public float maxDuration
- {
- get { return m_maxDuration; }
- set { m_maxDuration = value; }
- }
- private int m_curHitCount;
- private uint m_maxHitCount;
- private float duration;
- private OnTimerCallBack m_callBack;
- private TimerType m_type = TimerType.GameTimeUpdate;
- public TimerType Type
- {
- get { return m_type; }
- }
- private int m_timerGuid;
- public int TimerGuid
- {
- get { return m_timerGuid; }
- }
- private bool m_isEnabled = true;
- public bool IsEnabled
- {
- get { return m_isEnabled; }
- set { m_isEnabled = value; }
- }
- public string timerName { set; get; }
- /// <summary>
- /// 当前tiemr 已运行时长
- /// </summary>
- public float Duration
- {
- get { return duration; }
- }
- /// <summary>
- /// 当前tiemr 剩余时长
- /// </summary>
- public float LeftTime
- {
- get { return m_maxDuration - duration; }
- }
- private float m_startTime;
- //public bool isStop;
- public CombatTimer(float duration, OnTimerCallBack callBack, TimerType type = TimerType.GameTimeUpdate,
- uint maxHitCount = 1)
- {
- m_maxDuration = duration;
- m_callBack = callBack;
- m_type = type;
- m_maxHitCount = maxHitCount;
- }
-
- public void Begin()
- {
- m_startTime = 0;
- // m_startTime = Time.unscaledTime;
- }
- public void DeltaUpdate(float dateTime) //Executed by FixedUpdate
- {
- if (!IsEnabled)
- {
- return;
- }
- duration += dateTime;
- if (duration >= m_maxDuration)
- {
- int maxCount = 1;
- if (m_maxDuration != 0)
- {
- maxCount = (int) (duration / m_maxDuration);
- }
- for (int i = 0; i < maxCount; i++)
- {
- m_curHitCount++;
- if (m_callBack != null)
- {
- m_callBack();
- }
-
- if (m_curHitCount >= m_maxHitCount)
- {
- CombatTimerManager.Instance.RemoveTimer(this);
- break;
- }
- else
- {
- duration = duration - m_maxDuration;
- }
- //m_callBack();
- }
- }
- }
- public void Dispose()
- {
- IsEnabled = false;
- m_maxDuration = 0;
- m_callBack = null;
- m_type = TimerType.Invalid;
- m_curHitCount = 0;
- m_maxHitCount = 0;
- }
- } //Timer
- } //Timer
|