using System; using GameData; using GameMessage; using UnityGame; namespace GameFix { /// /// int[] Seat /// - 下标索引表示进入桌子的初始位置号,也是服务器原始玩家数组的索引 /// - 索引对应的内容是存在打乱之后的位置信息 /// public static class GameDeskUtility { #region GameDeskInfo 扩展 /// /// 初始化位置信息 /// public static void InitDeskSeat(this GameDeskInfo deskInfo, int playerCnt) { deskInfo.Seat = new int[playerCnt]; for (int i = 0; i < playerCnt; i++) { deskInfo.Seat[i] = i; } } public static void UpdateSeat(this GameDeskInfo deskInfo, int[] seat) { deskInfo.Seat = (int[])seat.Clone(); } public static int GetServerSeat(this GameDeskInfo deskInfo, int serverSeat) { return GetServerSeat(deskInfo.Seat, serverSeat); } public static int GetNextServerSeat(this GameDeskInfo deskInfo, int serverRealSeat) { return GetNextServerSeat(deskInfo.Seat, serverRealSeat); } public static int GetNextServerSeat(this GameDeskInfo deskInfo, int serverRealSeat, int n) { return GetNextServerSeat(deskInfo.Seat, serverRealSeat, n); } public static void SwitchSeat(this GameDeskInfo deskInfo, int originalSeat, int targetSeat) { SwitchSeat(deskInfo.Seat, originalSeat, targetSeat); } #if !Server public static int ClientToServerSeat(this GameDeskInfo deskInfo, int clientSeat) { return ClientToServerSeat(deskInfo.Seat, clientSeat); } public static int ServerToClientSeat(this GameDeskInfo deskInfo, int serverSeat) { return ServerToClientSeat(deskInfo.Seat, serverSeat); } #endif #endregion #if !Server /// /// 客户端转服务器位置 /// public static int ClientToServerSeat(int[] seat, int clientSeat) { if (UnityGame.hjhaGlobale.Instance.userData == null) { return -1; } if (seat == null || seat.Length < clientSeat) { return -1; } if (seat.Length <= 0) { return -1; } if (clientSeat < 0) { return 0; } int mySeat = UnityGame.hjhaGlobale.Instance.userData.seat; mySeat = Array.IndexOf(seat, mySeat); if (mySeat < 0) { if (hjhaGlobale.Instance.userData.state == (int)PlayerState.Desk || hjhaGlobale.Instance.userData.state == (int)PlayerState.Ready || hjhaGlobale.Instance.userData.state == (int)PlayerState.War) { UnityEngine.Debug.LogError($"位置信息错误:MySeat={mySeat}"); } return -1; } int serverSeat = (mySeat + clientSeat) % seat.Length; return GetServerSeat(seat, serverSeat); } /// /// 服务器转客户端位置 /// public static int ServerToClientSeat(int[] seat, int serverSeat) { if (UnityGame.hjhaGlobale.Instance.userData == null) { return -1; } if (seat == null || seat.Length < serverSeat) { return -1; } int seatCnt = seat.Length; if (seatCnt <= 0) { return -1; } if (serverSeat < 0) { return -1; } int mySeat = UnityGame.hjhaGlobale.Instance.userData.seat; mySeat = Array.IndexOf(seat, mySeat); serverSeat = Array.IndexOf(seat, serverSeat); if (mySeat < 0 || serverSeat < 0) { UnityEngine.Debug.LogError($"位置信息错误:ServerSeat={serverSeat} MySeat={mySeat}"); return -1; } return (serverSeat - mySeat + seatCnt) % seatCnt; } #endif /// /// 获取真实的服务器位置 /// public static int GetServerSeat(int[] seat, int serverSeat) { if (seat == null || seat.Length < serverSeat) { #if Server MrWu.Debug.Debug.Error($"位置信息错误:serverSeat={serverSeat}"); #endif return serverSeat; } return seat[serverSeat]; } /// /// 获取 [serverSeat] 下N个玩家的服务器的位置 /// public static int GetNextServerSeat(int[] seat, int serverSeat, int n) { if (seat == null || seat.Length < serverSeat) { #if Server MrWu.Debug.Debug.Error($"位置信息错误:serverSeat={serverSeat}"); #endif return serverSeat; } serverSeat = Array.IndexOf(seat, serverSeat); if (serverSeat < 0) { #if Server MrWu.Debug.Debug.Error($"位置信息错误:serverSeat={serverSeat}"); #endif return serverSeat; } var nextSeat = (serverSeat + n) % seat.Length; return GetServerSeat(seat, nextSeat); } /// /// 获取 [serverSeat] 下一个玩家的服务器的位置 /// public static int GetNextServerSeat(int[] seat, int serverSeat) { return GetNextServerSeat(seat, serverSeat, 1); } /// /// 交换位置 /// public static void SwitchSeat(int[] seat, int originalSeat, int targetSeat) { (seat[originalSeat], seat[targetSeat]) = (seat[targetSeat], seat[originalSeat]); } } }