1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using System;
- using System.Collections.Generic;
- namespace XGame.Framework.Time
- {
- /// <summary>
- /// 闹钟仓储
- /// </summary>
- public class AlarmRepository : IClockTick, ICalibrator, IDisposable
- {
- private List<Alarm> _aliveAlarms = new List<Alarm>();
- public TimeStamp time;
- internal IAlarm AddAlarm(Action action, long curTimeStamp, long triggerTimeStamp)
- {
- var alarm = new Alarm(action, curTimeStamp, triggerTimeStamp);
- _aliveAlarms.Add(alarm);
- return alarm;
- }
- public void SetTime(long timestamp)
- {
- time.timeStamp = timestamp;
- time.realtimeSinceStartup = UnityEngine.Time.realtimeSinceStartup;
- for (int i = 0; i < _aliveAlarms.Count; i++)
- {
- if (_aliveAlarms[i] is ICalibrator calib)
- {
- calib.SetTime(timestamp);
- }
- }
- }
- public void ClockUpdate(int millisecond)
- {
- // 客户端定时器数量较少不考虑时间轮优化
- for (int i = _aliveAlarms.Count - 1; i >= 0; --i)
- {
- if(_aliveAlarms[i].Update(millisecond))
- {
- _aliveAlarms.RemoveAt(i);
- }
- }
- }
- public void Dispose()
- {
- time = default;
- foreach (var item in _aliveAlarms)
- {
- item.Dispose();
- }
- _aliveAlarms.Clear();
- }
- }
- }
|