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; }
///
/// 当前tiemr 已运行时长
///
public float Duration
{
get { return duration; }
}
///
/// 当前tiemr 剩余时长
///
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