using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityTimer; namespace Ether { public struct TimeData { public int year; public int month; public int day; public int hour; public int minute; public int second; } public class TimeSystem : SingletonAutoMono { [Save] int curTimeSpan = 31104000; public long CurTimeSpan => curTimeSpan; Timer timer; private ActionEvent onTickEvent = new ActionEvent(); public ActionEvent OnTickEvent { get { return onTickEvent; } } public override void Init() { timer?.Cancel(); SaveSystem.Inst.Regist(this); timer = Timer.Register(1, () => { curTimeSpan++; OnTickEvent?.Invoke(); }, isLooped: true, autoDestroyOwner: this); } public TimeData SpanConvertToData(int span) { TimeData data = new TimeData(); data.year = span / 518400; span = span - data.year * 518400; data.month = span / 43200; span = span - data.month * 43200; data.day = span / 1440; span = span - data.day * 1440; data.hour = span / 24; span = span - data.day * 24; data.minute = span % 60; return data; } public int DataCovertToSpan(TimeData data) { return data.year * 518400 + data.month * 43200 + data.day * 1440 + data.hour * 60 + data.minute; } public override void Clear() { timer?.Cancel(); SaveSystem.Inst.UnRegist(this); } } }