NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Game/Reconnnect/GameReconnect.cs

170 lines
4.7 KiB
C#

using Framework;
using Gameplay;
using Gameplay.Guide;
using Gameplay.Level;
using Gameplay.Net;
public static class GameClientReconnect
{
private static bool _isReconnecting;
private static bool _pauseOnReconnect = false;
public static void BackToStart()
{
_isReconnecting = false;
_pauseOnReconnect = false;
var curState = GameStateManager.Instance.GetCurState();
if (curState is not GameStateStart)
{
if (GuideManager.Instance.IsGuiding)
GuideManager.Instance.EndGuide(false);
LevelManager.Instance.ExitLevelOnLogout();
GameStateManager.Instance.ChangeState(new GameStateStart());
WaitingForServer.Instance.EventClear();
Actor.Instance.OnLogout();
}
Actor.Instance.SetIsReconnecting(_isReconnecting);
}
/// <summary>
/// 开始重连,进入重连状态
/// 不可交互
/// </summary>
public static void StartReconnect()
{
_isReconnecting = true;
Actor.Instance.SetIsReconnecting(_isReconnecting);
#region 关卡暂停
if (LevelManager.Instance != null)
{
if (LevelManager.Instance.CurrentLevel != null)
{
if (LevelManager.Instance.CurrentLevel.isInBattle)
{
if (!LevelManager.Instance.CurrentLevel.IsPause())
{
DebugUtil.Log("关卡暂停");
LevelManager.Instance.CurrentLevel.SetPause(true);
_pauseOnReconnect = true;
}
}
}
}
#endregion
WaitingForServer.Instance.EventWaiting(WaitingForServer.EventName.LoginRequest, false);
LegionManager.Instance.ClearMyLegion();
}
/// <summary>
/// 重连状态结束
/// 可以交互
/// </summary>
public static void EndReconnect(bool SendEvent = false)
{
_isReconnecting = false;
WaitingForServer.Instance.EventDone(WaitingForServer.EventName.LoginRequest);
Actor.Instance.SetIsReconnecting(_isReconnecting);
if (SendEvent)
{
DebugUtil.Log("Reconnect back to game");
EventManager.Instance.Send(EventManager.EventName.Relogin_BackToGame);
#region 关卡恢复
if (_pauseOnReconnect)
{
_pauseOnReconnect = false;
if (LevelManager.Instance.CurrentLevel != null && LevelManager.Instance.CurrentLevel.isInBattle)
{
DebugUtil.Log("关卡恢复");
LevelManager.Instance.CurrentLevel.SetPause(false);
}
}
#endregion
}
}
/// <summary>
/// 重连确认,提示玩家是否继续重连
/// 可以交互
/// </summary>
public static void ReconnectConfirm()
{
if (!UINetManager.Instance.IsReconnectConfirmOpening())
{
_OpenReconnectConfirmUI();
}
WaitingForServer.Instance.EventDone(WaitingForServer.EventName.LoginRequest);
}
/// <summary>
/// 再次重连请求,进入重连状态
/// 不可交互
/// </summary>
public static void ReconnectAgain()
{
EventManager.Instance.Send(EventManager.EventName.NetReloginAgain);
WaitingForServer.Instance.EventWaiting(WaitingForServer.EventName.LoginRequest, false);
}
/// <summary>
/// 关闭重连确认窗口
/// (不修改等待事件)
/// </summary>
public static void CloseReconnectConfirm()
{
if (UINetManager.Instance.IsReconnectConfirmOpening())
{
_CloseReconnectConfirmUI();
}
}
public static void HideAllReconnect()
{
CloseReconnectConfirm();
_CloseReconnectNoticeUI();
_CloseReconnectingUI();
}
public static void ShowReconnectNotice(string error)
{
_OpenReconnectNoticeUI(error);
}
public static void HideReconnectNotice()
{
_CloseReconnectNoticeUI();
}
private static void _OpenReconnectingUI()
{
UINetManager.Instance.ShowReconnect();
}
private static void _CloseReconnectingUI()
{
UINetManager.Instance.HideReconnect();
}
private static void _OpenReconnectConfirmUI()
{
UINetManager.Instance.ShowReconnectConfirm();
}
private static void _CloseReconnectConfirmUI()
{
UINetManager.Instance.HideReconnectConfirm();
}
private static void _OpenReconnectNoticeUI(string error)
{
UINetManager.Instance.ShowReconnectNotice(error);
}
private static void _CloseReconnectNoticeUI()
{
UINetManager.Instance.HideReconnectNotice();
}
}