2024-08-23 15:49:34 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using AssetManagement;
|
|
|
|
|
using AssetUpdate;
|
|
|
|
|
using Games.Events;
|
|
|
|
|
using Games.GlobeDefine;
|
|
|
|
|
using Module.Log;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.SceneManagement;
|
|
|
|
|
|
|
|
|
|
// 暂时保持这个Ui执行全部登录阶段操作的流程
|
|
|
|
|
public class LoginUILogic : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
private static LoginUILogic _instance;
|
|
|
|
|
|
|
|
|
|
// 初始启动不试图执行更新检查
|
|
|
|
|
private static bool _firstLaunch = true;
|
|
|
|
|
|
|
|
|
|
private void Awake()
|
|
|
|
|
{
|
|
|
|
|
if (_instance)
|
|
|
|
|
Destroy(_instance.gameObject);
|
|
|
|
|
_instance = this;
|
|
|
|
|
// 暂时没有地方初始化LoginData,直接用这个最早激活的玩意搞
|
|
|
|
|
LoginData.Init();
|
|
|
|
|
// GuiTextDebug.debug("LoginUILogic awake");
|
|
|
|
|
AssetUpdateDownloaderTick.CreateInstance();
|
2024-09-23 22:56:51 +08:00
|
|
|
|
print("Init AssetUpdateDownloaderTick");
|
2024-08-23 15:49:34 +08:00
|
|
|
|
if (!LoadAssetBundle.Instance)
|
|
|
|
|
LoadAssetBundle.CreateInstance();
|
|
|
|
|
if (!FirstSceneBg.instance)
|
|
|
|
|
FirstSceneBg.CreateInstance();
|
|
|
|
|
AssetUpdateManager.CreateEventSystem();
|
|
|
|
|
DontDestroyOnLoad(gameObject);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Start()
|
|
|
|
|
{
|
2024-09-23 22:56:51 +08:00
|
|
|
|
Debug.Log("初始化 游戏");
|
2024-08-23 15:49:34 +08:00
|
|
|
|
EventDispatcher.Instance.Add(EventId.SdkPhpLogin, OnPhpLoginComplete);
|
|
|
|
|
// 在开始执行画质Init,防止多余的Shader变体被加载
|
|
|
|
|
QualityDetector.InitQuality();
|
2024-09-23 22:56:51 +08:00
|
|
|
|
QualitySettings.shadowCascades = 2;
|
|
|
|
|
QualitySettings.shadowDistance = 32f;
|
2024-08-23 15:49:34 +08:00
|
|
|
|
QualitySettings.shadowResolution = ShadowResolution.High;
|
2024-09-23 22:56:51 +08:00
|
|
|
|
QualitySettings.shadowmaskMode = ShadowmaskMode.Shadowmask;
|
2024-08-23 15:49:34 +08:00
|
|
|
|
QualitySettings.shadowProjection = ShadowProjection.CloseFit;
|
|
|
|
|
if (FirstSceneBg.instance)
|
|
|
|
|
{
|
|
|
|
|
FirstSceneBg.instance.SetTip("初始化游戏...");
|
|
|
|
|
FirstSceneBg.instance.ShowGameVersion();
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-23 22:56:51 +08:00
|
|
|
|
LoginData.onSdkEvent += OnSdkCallBack;
|
2024-08-23 15:49:34 +08:00
|
|
|
|
LoginData.onServerList += OnServerList;
|
|
|
|
|
if (_firstLaunch || AssetUpdateManager.useResources)
|
|
|
|
|
StartLoadResource();
|
|
|
|
|
else
|
|
|
|
|
StartCoroutine(CheckVersionAction());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
|
{
|
|
|
|
|
LoadResourceUpdate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnDestroy()
|
|
|
|
|
{
|
|
|
|
|
_instance = null;
|
|
|
|
|
if (!SdkControl.appQuit)
|
|
|
|
|
{
|
2024-09-23 22:56:51 +08:00
|
|
|
|
LoginData.onSdkEvent -= OnSdkCallBack;
|
2024-08-23 15:49:34 +08:00
|
|
|
|
LoginData.onServerList -= OnServerList;
|
|
|
|
|
EventDispatcher.Instance.Remove(EventId.SdkPhpLogin, OnPhpLoginComplete);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerator CheckVersionAction()
|
|
|
|
|
{
|
|
|
|
|
var action = new HttpsGetAction(10f);
|
|
|
|
|
action.Start();
|
|
|
|
|
while (!action.UpdateTimeout())
|
|
|
|
|
yield return null;
|
|
|
|
|
var jsonAssetInfo = AssetUpdateManager.HandleHttpGetAction(action);
|
|
|
|
|
if (jsonAssetInfo == null)
|
|
|
|
|
OnJsonError();
|
|
|
|
|
else if (!jsonAssetInfo.apkVersion.Equals(AssetUpdateManager.apkVersion, StringComparison.Ordinal))
|
|
|
|
|
AssetUpdateManager.OpenApkUri(jsonAssetInfo.apkUri);
|
|
|
|
|
else if (jsonAssetInfo.assetVersion != AssetUpdateManager.assetVersion)
|
|
|
|
|
LiteConfirmWin.Open("游戏资源更新", "游戏资源需要更新!\n请重新启动游戏开始更新!",
|
2024-09-23 22:56:51 +08:00
|
|
|
|
new LiteConfirmButtonData("确定", OnRestartConfirm));
|
2024-08-23 15:49:34 +08:00
|
|
|
|
else
|
|
|
|
|
StartLoadResource();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnJsonError()
|
|
|
|
|
{
|
|
|
|
|
StartCoroutine(CheckVersionAction());
|
|
|
|
|
}
|
2024-09-23 22:56:51 +08:00
|
|
|
|
|
2024-08-23 15:49:34 +08:00
|
|
|
|
private static void OnRestartConfirm()
|
|
|
|
|
{
|
|
|
|
|
SdkControl.instance.CloseGame();
|
|
|
|
|
}
|
2024-09-23 22:56:51 +08:00
|
|
|
|
|
2024-08-23 15:49:34 +08:00
|
|
|
|
public static LoginUILogic Instance()
|
|
|
|
|
{
|
|
|
|
|
return _instance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnSdkCallBack(SdkEventData data)
|
|
|
|
|
{
|
|
|
|
|
switch (data.type)
|
|
|
|
|
{
|
|
|
|
|
case SdkEventType.LoginSdk:
|
|
|
|
|
{
|
|
|
|
|
// SdkItem处理登录失败的情况
|
|
|
|
|
if (data.success)
|
|
|
|
|
{
|
|
|
|
|
SdkControl.instance.GetServerList();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var segments = data.args.Split(',');
|
2024-09-23 22:56:51 +08:00
|
|
|
|
var message = segments.Length > 1 ? segments[1] : "登录失败";
|
2024-08-23 15:49:34 +08:00
|
|
|
|
MessageBoxLogic.OpenOKBox("登录失败", message,
|
2024-09-23 22:56:51 +08:00
|
|
|
|
() => SdkControl.instance.LoginSdk(false));
|
2024-08-23 15:49:34 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ConnectToServer(LoginData.ServerListData serverData)
|
|
|
|
|
{
|
|
|
|
|
SdkControl.instance.LoginPhp(serverData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnPhpLoginComplete(object args)
|
|
|
|
|
{
|
|
|
|
|
var loginData = args as SdkPhpLoginResult;
|
|
|
|
|
if (loginData != null)
|
|
|
|
|
{
|
|
|
|
|
if (loginData.success)
|
|
|
|
|
ServerChooseController.Instance().ConnectWithIp(loginData.ip, loginData.port);
|
|
|
|
|
// Hack:登录失败时,port为-1,ip是报错
|
|
|
|
|
else
|
|
|
|
|
MessageBoxLogic.OpenOKBox(loginData.ip, loginData.ip);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MessageBoxLogic.OpenOKBox("无法登录服务器", "请在网络状态良好时再次尝试!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnServerList(string error)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(error))
|
|
|
|
|
TryToInitGame();
|
|
|
|
|
else
|
|
|
|
|
MessageBoxLogic.OpenOKBox(error, error,
|
2024-09-23 22:56:51 +08:00
|
|
|
|
() => SdkControl.instance.GetServerList());
|
2024-08-23 15:49:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void InitUI()
|
|
|
|
|
{
|
|
|
|
|
GameManager.gameManager.SoundManager.PlaySceneMusic();
|
|
|
|
|
LoadAssetBundle.Instance.LoadUI(UIInfo.UiRoot.path, UIInfo.UiRoot.name,
|
2024-09-23 22:56:51 +08:00
|
|
|
|
OnUiRootLoaded, new Hashtable());
|
2024-08-23 15:49:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnUiRootLoaded(string path, GameObject prefab, Hashtable hash)
|
|
|
|
|
{
|
|
|
|
|
if (!prefab)
|
|
|
|
|
{
|
|
|
|
|
LogModule.ErrorLog("Failed to load UiRoot! This is not recoverable!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Instantiate(prefab);
|
|
|
|
|
EnterServerChoose();
|
|
|
|
|
LoadAssetBundle.Instance.StartBackGround();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ReturnToServerChoose()
|
|
|
|
|
{
|
|
|
|
|
NetWorkLogic.GetMe().DisconnectServer();
|
|
|
|
|
LoginData.serverListData.Clear();
|
|
|
|
|
LoginData.accountData = null;
|
|
|
|
|
SdkControl.instance.GetServerList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void LoginSuccess()
|
|
|
|
|
{
|
|
|
|
|
if (LoginData.loginRoleList.Count > 0)
|
|
|
|
|
EnterChooseRole();
|
|
|
|
|
else
|
|
|
|
|
EnterCreateRole();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void EnterServerChoose()
|
|
|
|
|
{
|
|
|
|
|
ShowUiBg(false);
|
|
|
|
|
GuiTextDebug.debug("EnterServerChoose");
|
|
|
|
|
UIManager.ShowUI(UIInfo.ServerChoose);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RetSelectRoleFail(GC_SELECTROLE_RET.SELECTROLE_RESULT result)
|
|
|
|
|
{
|
|
|
|
|
// 选择角色失败,点击确定返回登录界面
|
|
|
|
|
MessageBoxLogic.OpenOKBox(1291, 1000, EnterServerChoose);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void EnterAccount()
|
|
|
|
|
{
|
|
|
|
|
// 未使用Sdk,或者Sdk不提供角色信息的情况
|
|
|
|
|
if (LoginData.accountData != null)
|
|
|
|
|
NetManager.SendUserLogin(LoginData.Ret_Login, false);
|
|
|
|
|
else
|
|
|
|
|
MessageInputLogic.ShowMessageInput(PlayerPreferenceData.LastAccount, "账号", InputAccountResult);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void InputAccountResult(string account)
|
|
|
|
|
{
|
|
|
|
|
if (!string.IsNullOrEmpty(account))
|
|
|
|
|
{
|
|
|
|
|
var accountData = new LoginData.AccountData();
|
|
|
|
|
accountData.SetTestData(account);
|
|
|
|
|
LoginData.accountData = accountData;
|
|
|
|
|
NetManager.SendUserLogin(LoginData.Ret_Login, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void EnterChooseRole() //角色选择
|
|
|
|
|
{
|
|
|
|
|
HideUiBg();
|
|
|
|
|
UIManager.ShowUI(UIInfo.RoleChoose);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void EnterCreateRole()
|
|
|
|
|
{
|
|
|
|
|
HideUiBg();
|
|
|
|
|
UIManager.ShowUI(UIInfo.RoleCreate);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ShowUiBg(bool withTip)
|
|
|
|
|
{
|
|
|
|
|
var bg = FirstSceneBg.instance;
|
|
|
|
|
if (bg)
|
|
|
|
|
{
|
|
|
|
|
bg.gameObject.SetActive(true);
|
|
|
|
|
bg.ShowTip(withTip);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void HideUiBg()
|
|
|
|
|
{
|
|
|
|
|
if (FirstSceneBg.instance)
|
|
|
|
|
FirstSceneBg.instance.gameObject.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void RequestRandomName(int maleOrFemale)
|
|
|
|
|
{
|
2024-09-23 22:56:51 +08:00
|
|
|
|
var packet = (CG_REQ_RANDOMNAME)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_RANDOMNAME);
|
2024-08-23 15:49:34 +08:00
|
|
|
|
packet.SetSex(maleOrFemale);
|
|
|
|
|
packet.SendPacket();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region LoadResourceUpdate
|
|
|
|
|
|
|
|
|
|
private void StartLoadResource()
|
|
|
|
|
{
|
|
|
|
|
_firstLaunch = false;
|
|
|
|
|
SdkControl.instance.LoginSdk(true);
|
|
|
|
|
_LoadStage = LoadStage.InitLua;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private enum LoadStage
|
|
|
|
|
{
|
|
|
|
|
None,
|
|
|
|
|
InitLua,
|
|
|
|
|
Ready,
|
|
|
|
|
ReadyWait,
|
|
|
|
|
FinalStep,
|
|
|
|
|
Complete
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-23 22:56:51 +08:00
|
|
|
|
private LoadStage _LoadStage = LoadStage.None;
|
2024-08-23 15:49:34 +08:00
|
|
|
|
private SceneHandle _loadSceneHandle;
|
|
|
|
|
|
|
|
|
|
private void TryToInitGame()
|
|
|
|
|
{
|
|
|
|
|
if (_LoadStage == LoadStage.Complete && LoginData.serverListData != null)
|
|
|
|
|
{
|
|
|
|
|
//设置当前场景
|
|
|
|
|
if (!GameManager.gameManager)
|
|
|
|
|
{
|
|
|
|
|
var gameGo = new GameObject("GameManager");
|
|
|
|
|
gameGo.AddComponent<GameManager>();
|
|
|
|
|
// 特殊:第一个SceneLogic不会过Loading
|
|
|
|
|
if (!IndependentEffectManager.Instance)
|
|
|
|
|
gameGo.AddComponent<IndependentEffectManager>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GameManager.gameManager.InitGame();
|
|
|
|
|
GameManager.gameManager.UnloadUnusedAssets(true);
|
|
|
|
|
// 初始化UI
|
|
|
|
|
InitUI();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LoadResourceUpdate()
|
|
|
|
|
{
|
|
|
|
|
if (_LoadStage == LoadStage.None || _LoadStage == LoadStage.Complete)
|
|
|
|
|
return;
|
|
|
|
|
if (_LoadStage == LoadStage.InitLua)
|
|
|
|
|
{
|
|
|
|
|
if (FirstSceneBg.instance)
|
|
|
|
|
FirstSceneBg.instance.SetTip("加载游戏脚本中...");
|
|
|
|
|
_LoadStage = LoadStage.Ready;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
LuaMain.InitLusScripts();
|
|
|
|
|
LuaMessageManager.Instance.InitMessageManager();
|
|
|
|
|
//TableManagerLua.Instance.LoadTableLua();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
GuiTextDebug.debug("LoadLua error:" + e);
|
|
|
|
|
LogModule.DebugLog("LoadLua error:" + e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (_LoadStage == LoadStage.Ready)
|
|
|
|
|
{
|
|
|
|
|
if (FirstSceneBg.instance)
|
|
|
|
|
FirstSceneBg.instance.SetTip(UpdateTips.GetTipByID(26));
|
|
|
|
|
if (LoadAssetBundle.Instance.LoadMainScene(GlobeVar.sceneRole, LoadSceneMode.Single, out _loadSceneHandle))
|
|
|
|
|
_LoadStage = LoadStage.ReadyWait;
|
|
|
|
|
}
|
|
|
|
|
else if (_LoadStage == LoadStage.ReadyWait)
|
|
|
|
|
{
|
|
|
|
|
if (_loadSceneHandle == null || _loadSceneHandle.state != SceneHandle.SceneState.notLoad)
|
|
|
|
|
_LoadStage = LoadStage.FinalStep;
|
|
|
|
|
}
|
|
|
|
|
else if (_LoadStage == LoadStage.FinalStep)
|
|
|
|
|
{
|
|
|
|
|
_LoadStage = LoadStage.Complete;
|
|
|
|
|
TryToInitGame();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
}
|