using Framework; using Gameplay; 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) { LevelManager.Instance.ExitLevelOnLogout(); GameStateManager.Instance.ChangeState(new GameStateStart()); WaitingForServer.Instance.EventClear(); Actor.Instance.OnLogout(); } Actor.Instance.SetIsReconnecting(_isReconnecting); } /// /// 开始重连,进入重连状态 /// 不可交互 /// 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); } /// /// 重连状态结束 /// 可以交互 /// 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 } } /// /// 重连确认,提示玩家是否继续重连 /// 可以交互 /// public static void ReconnectConfirm() { if (!UINetManager.Instance.IsReconnectConfirmOpening()) { _OpenReconnectConfirmUI(); } WaitingForServer.Instance.EventDone(WaitingForServer.EventName.LoginRequest); } /// /// 再次重连请求,进入重连状态 /// 不可交互 /// public static void ReconnectAgain() { EventManager.Instance.Send(EventManager.EventName.NetReloginAgain); WaitingForServer.Instance.EventWaiting(WaitingForServer.EventName.LoginRequest, false); } /// /// 关闭重连确认窗口 /// (不修改等待事件) /// 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(); } }