- 引入 UnityGameFramework
- 使用 Luban 替代原来的 UGF 的数据表
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
using GameFramework.Resource;
|
||||
using SepCore.Definition;
|
||||
using SepCore.UI;
|
||||
using UnityEngine;
|
||||
using UnityGameFramework.Runtime;
|
||||
using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;
|
||||
|
||||
namespace SepCore.Procedure
|
||||
{
|
||||
public class ProcedureCheckVersion : ProcedureBase
|
||||
{
|
||||
private bool m_CheckVersionComplete = false;
|
||||
private bool m_NeedUpdateVersion = false;
|
||||
private VersionInfo m_VersionInfo = null;
|
||||
|
||||
protected override void OnEnter(ProcedureOwner procedureOwner)
|
||||
{
|
||||
base.OnEnter(procedureOwner);
|
||||
|
||||
m_CheckVersionComplete = false;
|
||||
m_NeedUpdateVersion = false;
|
||||
m_VersionInfo = null;
|
||||
|
||||
GameEntry.Event.Subscribe(WebRequestSuccessEventArgs.EventId, OnWebRequestSuccess);
|
||||
GameEntry.Event.Subscribe(WebRequestFailureEventArgs.EventId, OnWebRequestFailure);
|
||||
|
||||
// 向服务器请求版本信息
|
||||
GameEntry.WebRequest.AddWebRequest(
|
||||
GameFramework.Utility.Text.Format(GameEntry.BuiltinData.BuildInfo.CheckVersionUrl, GetPlatformPath()),
|
||||
this);
|
||||
}
|
||||
|
||||
protected override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown)
|
||||
{
|
||||
GameEntry.Event.Unsubscribe(WebRequestSuccessEventArgs.EventId, OnWebRequestSuccess);
|
||||
GameEntry.Event.Unsubscribe(WebRequestFailureEventArgs.EventId, OnWebRequestFailure);
|
||||
|
||||
base.OnLeave(procedureOwner, isShutdown);
|
||||
}
|
||||
|
||||
protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
|
||||
{
|
||||
base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
|
||||
|
||||
if (!m_CheckVersionComplete)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_NeedUpdateVersion)
|
||||
{
|
||||
procedureOwner.SetData<VarInt32>("VersionListLength", m_VersionInfo.VersionListLength);
|
||||
procedureOwner.SetData<VarInt32>("VersionListHashCode", m_VersionInfo.VersionListHashCode);
|
||||
procedureOwner.SetData<VarInt32>("VersionListCompressedLength",
|
||||
m_VersionInfo.VersionListCompressedLength);
|
||||
procedureOwner.SetData<VarInt32>("VersionListCompressedHashCode",
|
||||
m_VersionInfo.VersionListCompressedHashCode);
|
||||
ChangeState<ProcedureUpdateVersion>(procedureOwner);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeState<ProcedureVerifyResources>(procedureOwner);
|
||||
}
|
||||
}
|
||||
|
||||
private void GotoUpdateApp(object userData)
|
||||
{
|
||||
string url = null;
|
||||
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
|
||||
url = GameEntry.BuiltinData.BuildInfo.WindowsAppUrl;
|
||||
#elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
|
||||
url = GameEntry.BuiltinData.BuildInfo.MacOSAppUrl;
|
||||
#elif UNITY_IOS
|
||||
url = GameEntry.BuiltinData.BuildInfo.IOSAppUrl;
|
||||
#elif UNITY_ANDROID
|
||||
url = GameEntry.BuiltinData.BuildInfo.AndroidAppUrl;
|
||||
#endif
|
||||
if (!string.IsNullOrEmpty(url))
|
||||
{
|
||||
Application.OpenURL(url);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnWebRequestSuccess(object sender, GameEventArgs e)
|
||||
{
|
||||
WebRequestSuccessEventArgs ne = (WebRequestSuccessEventArgs)e;
|
||||
if (ne.UserData != this)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 解析版本信息
|
||||
byte[] versionInfoBytes = ne.GetWebResponseBytes();
|
||||
string versionInfoString = GameFramework.Utility.Converter.GetString(versionInfoBytes);
|
||||
m_VersionInfo = GameFramework.Utility.Json.ToObject<VersionInfo>(versionInfoString);
|
||||
if (m_VersionInfo == null)
|
||||
{
|
||||
Log.Error("Parse VersionInfo failure.");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Info("Latest game version is '{0} ({1})', local game version is '{2} ({3})'.",
|
||||
m_VersionInfo.LatestGameVersion, m_VersionInfo.InternalGameVersion.ToString(), Version.GameVersion,
|
||||
Version.InternalGameVersion.ToString());
|
||||
|
||||
if (m_VersionInfo.ForceUpdateGame)
|
||||
{
|
||||
// 需要强制更新游戏应用
|
||||
GameEntry.UI.OpenDialog(new DialogParams
|
||||
{
|
||||
Mode = 2,
|
||||
Title = GameEntry.Localization.GetString("ForceUpdate.Title"),
|
||||
Message = GameEntry.Localization.GetString("ForceUpdate.Message"),
|
||||
ConfirmText = GameEntry.Localization.GetString("ForceUpdate.UpdateButton"),
|
||||
OnClickConfirm = GotoUpdateApp,
|
||||
CancelText = GameEntry.Localization.GetString("ForceUpdate.QuitButton"),
|
||||
OnClickCancel = delegate(object userData)
|
||||
{
|
||||
UnityGameFramework.Runtime.GameEntry.Shutdown(ShutdownType.Quit);
|
||||
},
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// 设置资源更新下载地址
|
||||
GameEntry.Resource.UpdatePrefixUri =
|
||||
GameFramework.Utility.Path.GetRegularPath(m_VersionInfo.UpdatePrefixUri);
|
||||
|
||||
m_CheckVersionComplete = true;
|
||||
m_NeedUpdateVersion = GameEntry.Resource.CheckVersionList(m_VersionInfo.InternalResourceVersion) ==
|
||||
CheckVersionListResult.NeedUpdate;
|
||||
}
|
||||
|
||||
private void OnWebRequestFailure(object sender, GameEventArgs e)
|
||||
{
|
||||
WebRequestFailureEventArgs ne = (WebRequestFailureEventArgs)e;
|
||||
if (ne.UserData != this)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Warning("Check version failure, error message is '{0}'.", ne.ErrorMessage);
|
||||
}
|
||||
|
||||
private string GetPlatformPath()
|
||||
{
|
||||
switch (Application.platform)
|
||||
{
|
||||
case RuntimePlatform.WindowsEditor:
|
||||
case RuntimePlatform.WindowsPlayer:
|
||||
return "Windows";
|
||||
|
||||
case RuntimePlatform.OSXEditor:
|
||||
case RuntimePlatform.OSXPlayer:
|
||||
return "MacOS";
|
||||
|
||||
case RuntimePlatform.IPhonePlayer:
|
||||
return "IOS";
|
||||
|
||||
case RuntimePlatform.Android:
|
||||
return "Android";
|
||||
|
||||
default:
|
||||
throw new System.NotSupportedException(
|
||||
GameFramework.Utility.Text.Format("Platform '{0}' is not supported.", Application.platform));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user