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