1
This commit is contained in:
@@ -129,6 +129,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
|
||||
public Button btn_TuiChu;
|
||||
public Button btn_Setting;
|
||||
/// <summary>切换房间:重新走一遍加入房间流程(离房 → QuickJoin → 连新房socket → JoinRoom)</summary>
|
||||
public Button btn_ChangeRoom;
|
||||
|
||||
//[Header("我在这")]
|
||||
public GameObject mySitAnim;
|
||||
@@ -540,6 +542,10 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
{
|
||||
StartLeaveCountdown();
|
||||
});
|
||||
// ⭐ 切换房间:离房后重新走一遍加入房间流程(QuickJoin同场次同等级 → 连新房socket → JoinRoom)
|
||||
// 各游戏prefab未拖拽该按钮时为null,做保护
|
||||
if (btn_ChangeRoom != null)
|
||||
btn_ChangeRoom.onClick.AddListener(StartChangeRoom);
|
||||
|
||||
// 服务器广播监听
|
||||
EventCenter.Instance.AddEventListener<SyncGameData>(ConstEventString.SyncGameData_Rotate, SyncGameData_Rotate);
|
||||
@@ -991,43 +997,54 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
}
|
||||
finally
|
||||
{
|
||||
// ⭐ 无论中间是否异常,都必须关闭 GamePanel 并切回 Home
|
||||
// ⭐ 无论中间是否异常,都必须关闭 GamePanel
|
||||
// 否则 GamePanel 留在 panels 字典里,下次进入游戏时 Get 返回非 null 导致无法创建新面板
|
||||
_leaveRoomResponseTcs = null;
|
||||
if (JinDuTiao != null)
|
||||
{
|
||||
try { JinDuTiao.Hide(); } catch { }
|
||||
}
|
||||
// 进入 home 界面(关闭当前游戏面板)
|
||||
switch (GameManager.Instance.gameData.currGameType)
|
||||
if (_isChangeRoom)
|
||||
{
|
||||
case GameType.JQQD:
|
||||
break;
|
||||
case GameType.defaultPanel:
|
||||
|
||||
break;
|
||||
case GameType.FLZY:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelFLZY);
|
||||
break;
|
||||
case GameType.YYSC:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelYYSC);
|
||||
break;
|
||||
case GameType.ZGXQ:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelZGXQ);
|
||||
|
||||
break;
|
||||
case GameType.XJMH:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelXJMH);
|
||||
|
||||
break;
|
||||
case GameType.HHWK:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelHHWK);
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
// ⭐ 切换房间:不回大厅,关闭当前游戏面板(OnHide 卸载场景/关socket),
|
||||
// 然后重新走一遍加入房间流程(QuickJoin → 连新房socket → JoinRoom → RoomJoinNotice 重建面板)
|
||||
_isChangeRoom = false;
|
||||
UIManager.Instance.Close(PanelType);
|
||||
StartChangeRoomJoin();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 进入 home 界面(关闭当前游戏面板)
|
||||
switch (GameManager.Instance.gameData.currGameType)
|
||||
{
|
||||
case GameType.JQQD:
|
||||
break;
|
||||
case GameType.defaultPanel:
|
||||
|
||||
break;
|
||||
case GameType.FLZY:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelFLZY);
|
||||
break;
|
||||
case GameType.YYSC:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelYYSC);
|
||||
break;
|
||||
case GameType.ZGXQ:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelZGXQ);
|
||||
|
||||
break;
|
||||
case GameType.XJMH:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelXJMH);
|
||||
|
||||
break;
|
||||
case GameType.HHWK:
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelHHWK);
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, GameManager.Instance.gameData.currGameType);
|
||||
}
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, GameManager.Instance.gameData.currGameType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1042,6 +1059,53 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
|
||||
#endregion
|
||||
|
||||
#region 切换房间(重新走一遍加入房间流程)
|
||||
|
||||
/// <summary>正在切换房间(离房完成后不回大厅,直接重新快速加入新房间)</summary>
|
||||
private bool _isChangeRoom = false;
|
||||
|
||||
/// <summary>
|
||||
/// 切换房间入口:复用离房流程(LeaveRoom → 卸载资源 → 关面板),
|
||||
/// 离房完成后由 BeginLeaveRoomUnload 的 finally 重新走加入房间流程。
|
||||
/// </summary>
|
||||
public void StartChangeRoom()
|
||||
{
|
||||
if (_leaveRoomResponseTcs != null) return; // 正在离房/切换中,防重复
|
||||
_isChangeRoom = true;
|
||||
// 与点退出一致:离房期间屏蔽帧同步和爆奖特效
|
||||
_isLeavingCountdown = true;
|
||||
RequestLeaveRoom();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重新走加入房间流程(与 UIHome_BY_SelectRoomLevelPanel.OnSelectRoom 快速进入分支完全一致):
|
||||
/// /api/Room/QuickJoin(同场次同等级,服务器分配新房间)→ 连新房 game socket → JoinRoom(-1) 由服务器分配座位,
|
||||
/// 之后服务端推送 RoomJoinNotice → 重新创建游戏面板 + 重载场景,完成切换。
|
||||
/// </summary>
|
||||
private void StartChangeRoomJoin()
|
||||
{
|
||||
var currRoom = GameManager.Instance.gameData.currRoomData;
|
||||
int gameType = currRoom != null ? currRoom.gameType : (int)GameManager.Instance.gameData.currGameType;
|
||||
int level = currRoom != null ? currRoom.roomLevel : 1;
|
||||
APIRequestList.RoomQuickJoin(gameType, level, (resp) =>
|
||||
{
|
||||
if (resp == null || string.IsNullOrEmpty(resp.roomId))
|
||||
{
|
||||
// ⭐ 快速加入失败 → 回大厅,避免卡在无界面状态
|
||||
UIManager.Instance.ShowBoardError("切换房间失败,请稍后重试");
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, GameManager.Instance.gameData.currGameType);
|
||||
return;
|
||||
}
|
||||
// 用 QuickJoin 返回的 webSocketUrl 直接连新房 game socket,然后 JoinRoom(-1) 让服务器分配座位
|
||||
GameManager.Instance.StartGameQuickJoin(resp.webSocketUrl, () =>
|
||||
{
|
||||
WebSocketSendList.JoinRoom(resp.roomId, GameManager.Instance.user.id, -1);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 输入系统(InputModule)
|
||||
private bool IsPointerOverUI(Vector2 pos)
|
||||
{
|
||||
@@ -1343,7 +1407,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
{
|
||||
RectTransform tran = SittingListParent.GetComponent<RectTransform>();
|
||||
tran.gameObject.SetActive(true);
|
||||
tran.DOSizeDelta(new Vector2(466, 143), 0.2f);
|
||||
tran.DOSizeDelta(new Vector2(319, 161), 0.2f);
|
||||
isOpenSetting = true;
|
||||
Vector3 v3 = btn_SettingList.transform.localScale;
|
||||
v3.x = Mathf.Abs(v3.x) * -1;
|
||||
@@ -1357,7 +1421,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
Vector3 v3 = btn_SettingList.transform.localScale;
|
||||
v3.x = Mathf.Abs(v3.x);
|
||||
btn_SettingList.transform.localScale = v3;
|
||||
tran.DOSizeDelta(new Vector2(0, 143), 0.2f).OnComplete(() =>
|
||||
tran.DOSizeDelta(new Vector2(0, 161), 0.2f).OnComplete(() =>
|
||||
{
|
||||
tran.gameObject.SetActive(false);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user