using Script.Core.Utils.Extend;
namespace System.OfflineSystem
{
///
/// 计时器handler,支持直接序列化
///
[Serializable]
public class OfflineTimeHandler
{
[FJson.Core.FSerialize] private long _timeStamp;
[FJson.Core.FSerialize] private float _duration; //倒计时时长 单位:秒
[FJson.Core.FSerialize] private float _extraTime; //额外时长 单位:秒
private DateTime _startTime;
///
/// 单位时长 : 秒
///
///
public void AddExtraTime (float time)
{
this._extraTime += time;
}
///
/// 获取计时器初始时间
///
public DateTime StartTime
{
get
{
if (this._startTime == default)
{
this._startTime = this._timeStamp.GetDateTime13 ();
}
return this._startTime;
}
}
public float Duration => this._duration; //倒计时时长 单位:秒
///
/// 获取剩余时长 单位:s
///
///
public float RemainingTime ()
{
if (this._duration <= 0)
return 0;
var curDuration = this.CurDuration;
return (float) Math.Max (0 , this._duration - curDuration);
}
///
/// 当前持续时长 , 单位:秒
///
public double CurDuration => (OfflineMgr.Instance.CurTimeNode.EndTime - this.StartTime).TotalSeconds + this._extraTime;
///
/// 计时器是否计时完成
///
public bool HasCountComplete => RemainingTime () <= 0;
public OfflineTimeHandler ()
{
}
internal OfflineTimeHandler (long timeStamp, float duration)
{
this._timeStamp = timeStamp;
this._duration = duration;
}
}
}