using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UniFramework.Machine; using UniFramework.Event; using UniFramework.Singleton; using YooAsset; public class PatchManager : SingletonInstance, ISingleton { /// /// 运行模式 /// public EPlayMode PlayMode { private set; get; } /// /// 包裹的版本信息 /// public string PackageVersion { set; get; } /// /// 下载器 /// public ResourceDownloaderOperation Downloader { set; get; } private bool _isRun = false; private EventGroup _eventGroup = new EventGroup(); private StateMachine _machine; void ISingleton.OnCreate(object createParam) { } void ISingleton.OnDestroy() { _eventGroup.RemoveAllListener(); } void ISingleton.OnUpdate() { if (_machine != null) _machine.Update(); } /// /// 开启流程 /// public void Run(EPlayMode playMode) { if (_isRun == false) { _isRun = true; PlayMode = playMode; // 注册监听事件 _eventGroup.AddListener(OnHandleEventMessage); _eventGroup.AddListener(OnHandleEventMessage); _eventGroup.AddListener(OnHandleEventMessage); _eventGroup.AddListener(OnHandleEventMessage); _eventGroup.AddListener(OnHandleEventMessage); Debug.Log("开启补丁更新流程..."); _machine = new StateMachine(this); _machine.AddNode(); _machine.AddNode(); _machine.AddNode(); _machine.AddNode(); _machine.AddNode(); _machine.AddNode(); _machine.AddNode(); _machine.AddNode(); _machine.AddNode(); _machine.Run(); } else { Debug.LogWarning("补丁更新已经正在进行中!"); } } /// /// 接收事件 /// private void OnHandleEventMessage(IEventMessage message) { if (message is UserEventDefine.UserTryInitialize) { _machine.ChangeState(); } else if (message is UserEventDefine.UserBeginDownloadWebFiles) { _machine.ChangeState(); } else if (message is UserEventDefine.UserTryUpdatePackageVersion) { _machine.ChangeState(); } else if (message is UserEventDefine.UserTryUpdatePatchManifest) { _machine.ChangeState(); } else if (message is UserEventDefine.UserTryDownloadWebFiles) { _machine.ChangeState(); } else { throw new System.NotImplementedException($"{message.GetType()}"); } } }