using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.Experimental.GlobalIllumination; using UnityEngine.PlayerLoop; using UnityEngine.UI; namespace ET.Client { #region 定时器 刷新 [Invoke(TimerInvokeType.fightTimeShow)] public class UIStartFightRoomComponentChecker : ATimer<UIStartFightRoomComponent> { protected override void Run(UIStartFightRoomComponent self) { try { self.Check(); } catch (Exception e) { Log.Error($"idle check error: {self.Id}\n{e}"); } } } [Invoke(TimerInvokeType.startFightTimeCount)] public class UIStartFightTimeCountChecker : ATimer<UIStartFightRoomComponent> { protected override void Run(UIStartFightRoomComponent self) { try { self.UpdateTimeCount(); } catch (Exception e) { Log.Error($"idle check error: {self.Id}\n{e}"); } } } #endregion [FriendOf(typeof(UIStartFightRoomComponent))] public static class UIStartFightRoomComponentSystem { public static void Check(this UIStartFightRoomComponent self) { self.timeTxt.text = string.Format("{0}:{1}", DateTime.Now.Hour, DateTime.Now.Minute); } public static void UpdateTimeCount(this UIStartFightRoomComponent self) { if (self.startTimeCount > 0) { self.timeCountTxt.text = self.startTimeCount.ToString(); } else { if (self.startTimer > 0) TimerComponent.Instance?.Remove(ref self.startTimer); self.timeCountTxt.text = ""; } self.startTimeCount = self.startTimeCount - 1; } [ObjectSystem] public class UIStartFightRoomComponentAwakeSystem : AwakeSystem<UIStartFightRoomComponent> { protected override void Awake(UIStartFightRoomComponent self, params object[] param) { ReferenceCollector rc = self.GetParent<UI>().GameObject.GetComponent<ReferenceCollector>(); //头像部分 self.houseIcon = rc.Get<GameObject>("houseIcon"); self.houseIdTxt = rc.Get<GameObject>("houseIdTxt"); self.gameNumTxt = rc.Get<GameObject>("gameNumTxt"); self.curResidueTxt = rc.Get<GameObject>("curResidueTxt"); //右上系统信息部分 self.wifiImage = rc.Get<GameObject>("wifiImage"); self.powerImage = rc.Get<GameObject>("powerImage"); var timeTxt = rc.Get<GameObject>("timeTxt"); self.timeTxt = timeTxt.GetComponent<UnityEngine.UI.Text>(); self.menuBtn = rc.Get<GameObject>("menuBtn"); self.menuBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuBtn(); }); self.faceBtn = rc.Get<GameObject>("faceBtn"); self.faceBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceBtn(); }); self.videoBtn = rc.Get<GameObject>("videoBtn"); self.videoBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnVideoBtn(); }); //菜单 self.menuPanel = rc.Get<GameObject>("menuPanel"); self.menuPanel.SetActive(false); self.maskBtn = rc.Get<GameObject>("maskBtn"); self.maskBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelClose(); }); self.menuBackBtn = rc.Get<GameObject>("menuBackBtn"); self.menuBackBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelBack(); }); self.menuQuitBtn = rc.Get<GameObject>("menuQuitBtn"); self.menuQuitBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelQuit(); }); self.menuSettingBtn = rc.Get<GameObject>("menuSettingBtn"); self.menuSettingBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelSetting(); }); //表情面板 self.facePanel = rc.Get<GameObject>("facePanel"); self.facePanel.SetActive(false); self.fastToggleBtn = rc.Get<GameObject>("fastToggleBtn"); self.fastToggleBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceFastToggleBtn(0); }); self.faceToggleBtn = rc.Get<GameObject>("faceToggleBtn"); self.faceToggleBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceFastToggleBtn(1); }); self.faceAndVideoObj = rc.Get<GameObject>("faceAndVideoObj"); self.faceAndVideoObj.SetActive(false); self.facePanelCloseBtn = rc.Get<GameObject>("facePanelCloseBtn"); self.facePanelCloseBtn.GetComponent<Button>().onClick.AddListener(() => { self.facePanel.SetActive(false); }); //表情列表以及快捷语列表 self.listFastGridBg = rc.Get<GameObject>("listFastGridBg"); self.listFastGridBg.SetActive(false); self.listFastContent = rc.Get<GameObject>("listFastContent"); self.gridFastItem = rc.Get<GameObject>("gridFastItem"); self.listFaceGridBg = rc.Get<GameObject>("listFaceGridBg"); self.listFaceGridBg.SetActive(false); self.listFaceContent = rc.Get<GameObject>("listFaceContent"); self.gridFaceItem = rc.Get<GameObject>("gridFaceItem"); self.shakeDiceImage = rc.Get<GameObject>("shakeDiceImage").GetComponent<UnityEngine.UI.Image>(); self.timeCountTxt = rc.Get<GameObject>("timeCountTxt").GetComponent<UnityEngine.UI.Text>(); self.dongTxt = rc.Get<GameObject>("dongTxt").GetComponent<UnityEngine.UI.Text>(); self.nanTxt = rc.Get<GameObject>("nanTxt").GetComponent<UnityEngine.UI.Text>(); self.xiTxt = rc.Get<GameObject>("xiTxt").GetComponent<UnityEngine.UI.Text>(); self.beiTxt = rc.Get<GameObject>("beiTxt").GetComponent<UnityEngine.UI.Text>(); //玩 self.readyBtn = rc.Get<GameObject>("readyBtn"); self.readyBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnReadyAndInviteBtn(0); }); self.inviteBtn = rc.Get<GameObject>("inviteBtn"); self.inviteBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnReadyAndInviteBtn(1); }); self.fightCardItem = rc.Get<GameObject>("fightCardItem"); self.fightCardItem.SetActive(false); GameUtil.Instance.SetCardCloneItem(self.fightCardItem,0); self.fightCardItem1 = rc.Get<GameObject>("fightCardItem1"); self.fightCardItem1.SetActive(false); GameUtil.Instance.SetCardCloneItem(self.fightCardItem1, 1); for (int i = 1;i <= 4;i++) { UIStartFightRoomPlayerCom uIStartFightRoomPlayerCom = new UIStartFightRoomPlayerCom(); var playerObj = rc.Get<GameObject>("player" + i); var playerIconObj = rc.Get<GameObject>("playerIcon" + i); var readyImage = rc.Get<GameObject>("readyImage" + i); var playName = rc.Get<GameObject>("playName" + i).GetComponent<Text>(); var playerIconImage = playerIconObj.GetComponent<UnityEngine.UI.Image>(); uIStartFightRoomPlayerCom.playerObj = playerObj; uIStartFightRoomPlayerCom.readyImage = readyImage; uIStartFightRoomPlayerCom.playerIcon = playerIconImage; uIStartFightRoomPlayerCom.playName = playName; var fightCardContentNode = rc.Get<GameObject>("fightCardContent" + i); uIStartFightRoomPlayerCom.fightCardNode = fightCardContentNode; var disCardContentNode = rc.Get<GameObject>("disCardContent" + i); uIStartFightRoomPlayerCom.disCardsNode = disCardContentNode; var haveBeenOutContentNode = rc.Get<GameObject>("haveBeenOutContent" + i); uIStartFightRoomPlayerCom.haveBeenOutContentNode = haveBeenOutContentNode; self.uIStartFightRoomPlayerComs.Add(uIStartFightRoomPlayerCom); playerObj.SetActive(false); var playChatObj = rc.Get<GameObject>("playChatObj" + i); self.playChatObjList.Add(playChatObj); } //操作 self.operatorObj = rc.Get<GameObject>("operatorObj"); self.operatorObj.SetActive(false); for (int i = 1;i <= 5;i++) { int operatorIndex = 1; var operatorObjBtn = rc.Get<GameObject>("operatorBtn" + i); var btn = operatorObjBtn.GetComponent<Button>(); operatorIndex = i; btn.onClick.AddListener(()=> { self.OnOperatorBtn(operatorIndex); }); self.operatorObj_btn.Add(operatorObjBtn); } self.Init(); } } private static async void Init(this UIStartFightRoomComponent self) { self.RepeatedTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.fightTimeShow, self); var startFightRoomInfo = self.ClientScene().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); CommonBridge.Instance.dispathPush += DispathPush; self.readyBtn.SetActive(true); self.inviteBtn.SetActive(true); self.houseIdTxt.GetComponent<Text>().text = startFightRoomInfo.roomInfo.RoomId.ToString(); self.gameNumTxt.GetComponent<Text>().text = startFightRoomInfo.roomInfo.OwnerId.ToString(); self.curResidueTxt.GetComponent<Text>().text = "0"; await SoundManager.Instance.PlaySound("common_playing", true); } private static void DispathPush(Scene scene, object type) { var ui = scene.GetComponent<UIComponent>().Get(UIType.UIStartFightRoom); var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); switch (type) { case EventType.JoinRoomPush: { var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>(); //处理其他玩家信息 for (int i = 1; i < startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count; i++) { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false); } if (startFightRoomInfo.roomInfo.OtherInfo != null && startFightRoomInfo.roomInfo.OtherInfo.Count > 0) { for (int i = 0; i < startFightRoomInfo.roomInfo.OtherInfo.Count; i++) { var otherPlayInfo = startFightRoomInfo.roomInfo.OtherInfo[i]; if (i >= startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count - 1) { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(false); startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playName.text = ""; } else { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true); startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(false); startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playName.text = startFightRoomInfo.roomInfo.OtherInfo[i].name; } } } RefreshOrientation(startFightRoomInfo.roomInfo.MyInfo.pos, startFightRoomComponentUI); break; } case EventType.ReadyPush: { var startFightRoomComponent = ui.GetComponent<UIStartFightRoomComponent>(); //先处理自己的信息 if (startFightRoomInfo.roomInfo.MyInfo != null) { startFightRoomComponent.readyBtn.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 0); startFightRoomComponent.inviteBtn.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 0); startFightRoomComponent.uIStartFightRoomPlayerComs[0].playerObj.SetActive(true); startFightRoomComponent.faceAndVideoObj.SetActive(true); startFightRoomComponent.uIStartFightRoomPlayerComs[0].readyImage.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 1); } //处理其他玩家信息 for (int i = 1;i < startFightRoomComponent.uIStartFightRoomPlayerComs.Count;i++) { startFightRoomComponent.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false); } if (startFightRoomInfo.roomInfo.OtherInfo != null && startFightRoomInfo.roomInfo.OtherInfo.Count > 0) { for (int i = 0; i < startFightRoomInfo.roomInfo.OtherInfo.Count; i++) { var otherPlayInfo = startFightRoomInfo.roomInfo.OtherInfo[i]; if (i >= startFightRoomComponent.uIStartFightRoomPlayerComs.Count - 1) { startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(false); } else { startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true); startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(otherPlayInfo.state == 1); } } } break; } case EventType.ReadyStartPush: { //开始 倒计时 Log.Error("@@@@@ 倒计时: " + startFightRoomInfo.readyStartTimeCount); var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>(); startFightRoomComponentUI.startTimeCount = startFightRoomInfo.readyStartTimeCount; startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI); break; } case EventType.GameStartPush: case EventType.GameDrawCardPush: case EventType.GameOperationPush: case EventType.KickPush: { //正式开始 发牌 var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>(); RefreshPlayCardList(scene, startFightRoomInfo, startFightRoomComponentUI); break; } case EventType.GameDisCardPush: { //其他玩家出推送,处理自己的操作 var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>(); var roomInfo = startFightRoomInfo.roomInfo; var myCardInfo = roomInfo.MyInfo; var roleInfo = scene.GetComponent<RoleInfoComponment>().GetRoleInfo(); if (myCardInfo != null && myCardInfo.cardInfo != null && myCardInfo.cardInfo.Acts.Count > 0 && roleInfo.roleId == myCardInfo.id) { //处理操作按钮 for (int i = 0;i < startFightRoomComponentUI.operatorObj_btn.Count;i++) { startFightRoomComponentUI.operatorObj_btn[i].SetActive(false); } for (int i = 0; i < myCardInfo.cardInfo.Acts.Count; i++) { if (myCardInfo.cardInfo.Acts[i] == 1) { if (!startFightRoomComponentUI.operatorObj.activeInHierarchy) { startFightRoomComponentUI.operatorObj.SetActive(true); } startFightRoomComponentUI.operatorObj_btn[i].SetActive(true); } } //重置所有牌的状态 var parentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].fightCardNode; for (int i = 0;i < parentNode.transform.childCount;i++) { StartFightCardItem startFightCardItem = parentNode.transform.GetChild(i).gameObject.GetComponent<StartFightCardItem>(); startFightCardItem.GetDown(); } GameObjectPool.Instance.ClearRealySelCardList(); //抬起 if (myCardInfo.cardInfo != null && myCardInfo.cardInfo.ActInfo != null && myCardInfo.cardInfo.ActInfo.Count > 0 && roleInfo.roleId == myCardInfo.id) { for (int i = 0; i < myCardInfo.cardInfo.ActInfo.Count; i++) { //根据服务器信息 弹起响应的牌 DisCardPushWithOperator(parentNode.transform, myCardInfo.cardInfo.ActInfo[i]); } } //记录当前出的牌 GameUtil.Instance.curCardVal = startFightRoomInfo.roomInfo.CurDisCard; Log.Error("当前出的牌: " + GameUtil.Instance.curCardVal); } if (startFightRoomInfo.roomInfo.Time > 0) { startFightRoomComponentUI.startTimeCount = startFightRoomInfo.roomInfo.Time; startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI); } else { Log.Error("清空回合倒计时"); if (startFightRoomComponentUI.startTimer > 0) { startFightRoomComponentUI.timeCountTxt.text = ""; TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer); } } break; } case EventType.HGHHSettlementPush: { Log.Error("@#@#@@@@@ " + startFightRoomInfo.settlementInfo.CurRound); break; } } } #region 右上系统部分 public static void OnMenuBtn(this UIStartFightRoomComponent self) { self.menuPanel.SetActive(!self.menuPanel.activeInHierarchy); } public static async void OnFaceBtn(this UIStartFightRoomComponent self) { await SoundManager.Instance.PlaySound("clickbtnsound"); self.facePanel.SetActive(true); self.LoadChatData(0); } public static void OnVideoBtn(this UIStartFightRoomComponent self) { } #endregion #region 菜单 public static void OnMenuPanelClose(this UIStartFightRoomComponent self) { self.menuPanel.SetActive(false); } public static async void OnMenuPanelBack(this UIStartFightRoomComponent self) { Action<object> myAction = (param) => { int result = (int)param; if (result == 1) { self.ReturnMainUI().Coroutine(); } }; Dictionary<string,object> dic = new Dictionary<string, object>() { { "callback",myAction}, { "title","提示"}, { "content","返回大厅,你的房间仍会保留。"}, { "yesTxt","确定"}, { "cancelTxt","取消"}, }; await SoundManager.Instance.PlaySound("clickbtnsound"); await UIHelper.Create(self.ClientScene(), UIType.UIAlert, UILayer.High, dic); } public static void OnMenuPanelQuit(this UIStartFightRoomComponent self) { } public static void OnMenuPanelSetting(this UIStartFightRoomComponent self) { } #endregion #region 表情 public static async void OnFaceFastToggleBtn(this UIStartFightRoomComponent self,int index) { await SoundManager.Instance.PlaySound("clickbtnsound"); self.LoadChatData(index); } static async void LoadChatData(this UIStartFightRoomComponent self, int index) { self.listFaceGridBg.SetActive(false); self.listFastGridBg.SetActive(false); string[] abName = new string[] { "com_bg1", "com_bg2" }; await ResourcesComponentHelper.Instance.LoadSprite(self.ClientScene(), "commonatlas"); Sprite sprite = ResourcesComponentHelper.Instance.GetSprite("commonatlas", abName[0]); Sprite sprite1 = ResourcesComponentHelper.Instance.GetSprite("commonatlas", abName[1]); self.fastToggleBtn.GetComponent<UnityEngine.UI.Image>().sprite = index == 0 ? sprite: sprite1; self.faceToggleBtn.GetComponent<UnityEngine.UI.Image>().sprite = index == 1 ? sprite : sprite1; self.CleanChatItem(index); if (index == 0) { self.listFastGridBg.SetActive(true); var startFightRoomInfo = self.ClientScene().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); int sexType = startFightRoomInfo.roomInfo.MyInfo.sex; var fightConfig = FightChatConfigCategory.Instance.GetAll(); var achievedDic = fightConfig.Where(kvp => kvp.Value.Type == sexType); foreach (var item in achievedDic) { if (GameObjectPool.Instance.chatFastItemPools.Count > 0) { GameObject uiFastItem = GameObjectPool.Instance.chatFastItemPools[0]; GameObjectPool.Instance.chatFastItemPools.RemoveAt(0); uiFastItem.SetActive(true); uiFastItem.transform.SetParent(self.listFastContent.transform, false); var txt = uiFastItem.GetComponentInChildren<UnityEngine.UI.Text>(); txt.text = item.Value.Desc; var btn = txt.gameObject.GetComponent<Button>(); btn.onClick.RemoveAllListeners(); btn.onClick.AddListener(async () => { Log.Error("btn click1: " + item.Value.Desc + " vedio: " + item.Value.VedioPath); await SoundManager.Instance.PlaySound(item.Value.VedioPath); self.facePanel.SetActive(false); self.playChatObjList[0].SetActive(true); var playChatTxt = self.playChatObjList[0].GetComponentInChildren<UnityEngine.UI.Text>(); playChatTxt.text = item.Value.Desc; await TimerComponent.Instance.WaitAsync(3000); self.playChatObjList[0].SetActive(false); }); } else { var uiFastItem = GameUtil.Instance.InitializeObj(self.gridFastItem); uiFastItem.gameObject.SetActive(true); uiFastItem.transform.SetParent(self.listFastContent.transform, false); var txt = uiFastItem.GetComponentInChildren<UnityEngine.UI.Text>(); txt.text = item.Value.Desc; var btn = txt.gameObject.GetComponent<Button>(); btn.onClick.RemoveAllListeners(); btn.onClick.AddListener(async () => { Log.Error("btn click1: " + item.Value.Desc + " vedio: " + item.Value.VedioPath); await SoundManager.Instance.PlaySound(item.Value.VedioPath); self.facePanel.SetActive(false); self.playChatObjList[0].SetActive(true); var playChatTxt = self.playChatObjList[0].GetComponentInChildren<UnityEngine.UI.Text>(); playChatTxt.text = item.Value.Desc; await TimerComponent.Instance.WaitAsync(3000); self.playChatObjList[0].SetActive(false); }); } } } else { } } static void CleanChatItem(this UIStartFightRoomComponent self,int index) { Transform node = null; List<GameObject> list = null; if (index == 0) { node = self.listFastContent.transform; list = GameObjectPool.Instance.chatFastItemPools; } else { node = self.listFaceContent.transform; list = GameObjectPool.Instance.chatFaceItemPools; } for (int i = 0; i < node.childCount; i++) { var child = node.GetChild(i); list.Add(child.gameObject); child.gameObject.SetActive(false); } } #endregion #region 邀请以及准备 public static void OnReadyAndInviteBtn(this UIStartFightRoomComponent self, int index) { if (index == 0) { self.ReadyRes().Coroutine(); } else { //邀请 } } #endregion public static void SetBattery() { //var level = SystemInfo.batteryLevel == -1 ? 1 : SystemInfo.batteryLevel; //batteryLevelImg.fillAmount = level; //batteryTxt.text = (level * 100).ToString() + "%"; //var isCharging = SystemInfo.batteryStatus == BatteryStatus.Charging; //charging.gameObject.SetActive(isCharging); } static async ETTask ReturnMainUI(this UIStartFightRoomComponent self) { var scene = self.ClientScene(); await UIHelper.Remove(scene, UIType.UIStartFightRoom); var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); Dictionary<string, object> dic = new Dictionary<string, object>() { { "result",1}, { "roomId",startFightRoomInfo.roomInfo.RoomId.ToString()} }; await UIHelper.Create(scene, UIType.UIMain, UILayer.Mid, dic); } static async ETTask ReadyRes(this UIStartFightRoomComponent self) { //try { var scene = self.ClientScene(); var session = scene.GetComponent<SessionComponent>().Session; if (session != null) { G2C_HGHHReady g2Ready = (G2C_HGHHReady)await session.Call( new C2G_HGHHReady() { }); if (g2Ready.Error != ErrorCode.ERR_Success) { Log.Error($"g2Ready错误...errCode={g2Ready.Error}" + " mess: " + g2Ready.Message); return; } } } //catch (Exception e) //{ // Log.Error($"准备出错...{e.Message}"); //} } public static async void OnCloseAsync(this UIStartFightRoomComponent self) { await UIHelper.Remove(self.ClientScene(),UIType.UIStartFightRoom); } //操作请求 public static async void OnOperatorBtn(this UIStartFightRoomComponent self, int operatorIndex) { var startFightRoomInfo = GameUtil.Instance.GetSceneComponent().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); int sexType = startFightRoomInfo.roomInfo.MyInfo.sex; switch (operatorIndex) { //1-5 吃碰杠胡过 case 1: { //吃 //var list = GameObjectPool.Instance.GetRealySelCardList(); //if (list == null || list.Count <= 0 || list.Count > 3) //{ // await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list)); // return; //} //var isSequence = GameUtil.Instance.CheckIsSequence(list); //if (!isSequence) //{ // await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list)); // return; //} int cardVal = GameUtil.Instance.curRequestCardVal; Log.Error("当前吃牌请求发送的值: " + cardVal); Dictionary<string, object> dic = new Dictionary<string, object>() { { "OpType",operatorIndex}, { "Card",cardVal} }; await RequestServerUtil.Instance.OpenRequestServer(HGHHMessage.C2G_HGHHOperation, dic,async (messageObj, errorCode) => { if (errorCode != ErrorCode.ERR_Success) { await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}"); return; } string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName; await SoundManager.Instance.PlaySound(string.Concat(soundStrType, "chi")); self.operatorObj.SetActive(false); }); break; } case 2: case 3: case 5: { var cardType = 0; if (operatorIndex == 2) { var list = GameObjectPool.Instance.GetRealySelCardList(); cardType = list[0]; } //peng 杠 guo Dictionary<string, object> dic = new Dictionary<string, object>() { { "OpType",operatorIndex}, { "Card",cardType} }; await RequestServerUtil.Instance.OpenRequestServer(HGHHMessage.C2G_HGHHOperation, dic, async (messageObj, errorCode) => { if (errorCode != ErrorCode.ERR_Success) { await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}"); return; } self.operatorObj.SetActive(false); if (operatorIndex == 2 || operatorIndex == 3) { string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName; string destSoundStr = operatorIndex == 2? "peng": "hu"; await SoundManager.Instance.PlaySound(string.Concat(soundStrType, destSoundStr)); } }); break; } case 4: { //胡 int cardVal = GameUtil.Instance.curRequestCardVal; Log.Error("当前杠牌请求发送的值: " + cardVal); Dictionary<string, object> dic = new Dictionary<string, object>() { { "OpType",operatorIndex}, { "Card",cardVal} }; await RequestServerUtil.Instance.OpenRequestServer(HGHHMessage.C2G_HGHHOperation, dic, async (messageObj, errorCode) => { if (errorCode != ErrorCode.ERR_Success) { await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}"); return; } self.operatorObj.SetActive(false); string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName; await SoundManager.Instance.PlaySound(string.Concat(soundStrType, "gang")); }); break; } } } public static async void RefreshPlayCardList(Scene scene,StartFightRoomInfo startFightRoomInfo, UIStartFightRoomComponent startFightRoomComponentUI) { var allPos = GetPosList(startFightRoomInfo.roomInfo.MyInfo.pos); List<PlayerInfo> allPlayerInfo = new List<PlayerInfo>(); allPlayerInfo.Add(startFightRoomInfo.roomInfo.MyInfo); allPlayerInfo.AddRange(startFightRoomInfo.roomInfo.OtherInfo); var roleInfo = scene.GetComponent<RoleInfoComponment>().GetRoleInfo(); for (int i = 0; i < allPos.Count; i++) { var playInfo = GetOtherPlayInfoByPos(allPlayerInfo, allPos[i]); if (playInfo == null) { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false); } else { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(true); startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].readyImage.SetActive(false); //身上的牌列表 var fightCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].fightCardNode; //已出过牌的列表 var disCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].disCardsNode; //操作过的 如 吃 碰 杠 列表 var haveBeenOutContentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].haveBeenOutContentNode; //playInfo.cardInfo.RemainCards if (roleInfo.roleId == playInfo.id) { playInfo.cardInfo.RemainCards.Sort(); } int type = i; if (i == 0 || i == 2) { type = 0; } CleanCardItemList(fightCardParentNode.transform, 0, type); for (int p = 0; p < playInfo.cardInfo.RemainCardsNum; p++) { if (GameObjectPool.Instance.fightCardItemPools.Count > 0 && GameObjectPool.Instance.fightCardItemPools.ContainsKey(type) && GameObjectPool.Instance.fightCardItemPools[type].Count > 0) { GameObject uifightItem = GameObjectPool.Instance.fightCardItemPools[type][0]; GameObjectPool.Instance.fightCardItemPools[type].RemoveAt(0); uifightItem.gameObject.SetActive(true); uifightItem.transform.SetParent(fightCardParentNode.transform, false); if (roleInfo.roleId == playInfo.id) { var value = playInfo.cardInfo.RemainCards[p]; StartFightCardItem startFightCardItem = uifightItem.GetComponent<StartFightCardItem>(); if (startFightCardItem == null) startFightCardItem = uifightItem.AddComponent<StartFightCardItem>(); startFightCardItem.Init(uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(), value, (val) => { if (playInfo.pos != startFightRoomInfo.roomInfo.OpPos || playInfo.id != startFightRoomInfo.roomInfo.OpId) { Log.Error($"@@@ 不是自己回合 state: {playInfo.state} ===>opPos: {startFightRoomInfo.roomInfo.OpPos} ===> ID:{playInfo.id} ===> opId: {startFightRoomInfo.roomInfo.OpId}"); return; } DisCardRequest(val, startFightRoomComponentUI).Coroutine(); }); } else { string spiring = ""; switch (i) { case 1: { //右 spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, "0"); break; } case 2: { //shang spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, "0"); break; } case 3: { //zuo spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, "0"); break; } } var sprite = await GameObjectPool.Instance.AcquireSprite(spiring); UnityEngine.UI.Image icon = uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; var btn = icon.gameObject.GetComponent<Button>(); btn.onClick.RemoveAllListeners(); //btn.onClick.AddListener(() => //{ // Log.Error("card Click..."); //}); } } else { if (roleInfo.roleId == playInfo.id) { var uifightItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(0)); uifightItem.SetActive(true); uifightItem.transform.SetParent(fightCardParentNode.transform, false); var value = playInfo.cardInfo.RemainCards[p]; StartFightCardItem startFightCardItem = uifightItem.GetComponent<StartFightCardItem>(); if (startFightCardItem == null) startFightCardItem = uifightItem.AddComponent<StartFightCardItem>(); startFightCardItem.Init(uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(), value, (val) => { if (playInfo.pos != startFightRoomInfo.roomInfo.OpPos || playInfo.id != startFightRoomInfo.roomInfo.OpId) { Log.Error($"@@@ 不是自己回合 state: {playInfo.state} ===>opPos: {startFightRoomInfo.roomInfo.OpPos} ===> ID:{playInfo.id} ===> opId: {startFightRoomInfo.roomInfo.OpId}"); return; } DisCardRequest(val, startFightRoomComponentUI).Coroutine(); }); } else { string spiring = ""; switch (i) { case 1: { //右 spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, "0"); break; } case 2: { //shang spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, "0"); break; } case 3: { //zuo spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, "0"); break; } } var uifightItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(1)); uifightItem.SetActive(true); uifightItem.transform.SetParent(fightCardParentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(spiring); UnityEngine.UI.Image icon = uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; var btn = icon.gameObject.GetComponent<Button>(); btn.onClick.RemoveAllListeners(); //btn.onClick.AddListener(() => //{ // Log.Error("card Click..."); //}); } } startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playName.text = playInfo.name; } //已经出过的牌列表 type = i; if (i == 0 || i == 2) { type = 0; } CleanCardItemList(disCardParentNode.transform, 1, type); if (playInfo.cardInfo.DisCards != null && playInfo.cardInfo.DisCards.Count > 0) { disCardParentNode.transform.parent.gameObject.SetActive(true); disCardParentNode.SetActive(true); for (int l = 0; l < playInfo.cardInfo.DisCards.Count; l++) { int value = playInfo.cardInfo.DisCards[l]; if (GameObjectPool.Instance.disCardItemPools.Count > 0 && GameObjectPool.Instance.disCardItemPools.ContainsKey(type) && GameObjectPool.Instance.disCardItemPools[type].Count > 0) { GameObject uiDisItem = GameObjectPool.Instance.disCardItemPools[type][0]; GameObjectPool.Instance.disCardItemPools[type].RemoveAt(0); uiDisItem.gameObject.SetActive(true); uiDisItem.transform.SetParent(disCardParentNode.transform, false); string spiring = ""; Vector2 sizeDelta = Vector2.zero; if (roleInfo.roleId == playInfo.id) { spiring = string.Concat(GameSetting.Instance.selfPlayCardShowSpiteName, value); } else { switch (i) { case 1: { //右 spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, value); break; } case 2: { //shang spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, value); break; } case 3: { //zuo spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, value); break; } } } var sprite = await GameObjectPool.Instance.AcquireSprite(spiring); UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; //this.icon.gameObject.GetComponent<RectTransform>().sizeDelta = GameUtil.Instance.myHandCardSize; } else { string spiring = ""; if (roleInfo.roleId == playInfo.id) { spiring = string.Concat(GameSetting.Instance.selfPlayCardShowSpiteName, value); } else { switch (i) { case 1: { //右 spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, value); break; } case 2: { //shang spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, value); break; } case 3: { //zuo spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, value); break; } } } var uiDisItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(roleInfo.roleId == playInfo.id?0:1)); uiDisItem.SetActive(true); uiDisItem.transform.SetParent(disCardParentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(spiring); UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; } } } //已经操作过 如 碰 吃刚列表 type = i; if (i == 0 || i == 2) { type = 0; } CleanCardItemList(haveBeenOutContentNode.transform,2, type); if (playInfo.cardInfo.UsedInfo != null && playInfo.cardInfo.UsedInfo.Count > 0) { haveBeenOutContentNode.transform.parent.gameObject.SetActive(true); haveBeenOutContentNode.SetActive(true); var len = playInfo.cardInfo.UsedInfo.Count; for (int l = 0;l < playInfo.cardInfo.UsedInfo.Count;l++) { //这里只存一张 根据类型 自己去补 ActInfo actInfo = playInfo.cardInfo.UsedInfo[l]; List<int> havCardVals = null; ActInfoType actInfoType = (ActInfoType)actInfo.Type; switch (actInfoType) { case ActInfoType.LightPole: case ActInfoType.BackPole: case ActInfoType.DarkPole: { havCardVals = new List<int>() { actInfo.Card, actInfo.Card, actInfo.Card, actInfo.Card}; break; } case ActInfoType.Peng: { havCardVals = new List<int>() { actInfo.Card, actInfo.Card, actInfo.Card}; break; } case ActInfoType.Chi: { havCardVals = new List<int>() { actInfo.Card, actInfo.Card + 1, actInfo.Card + 2}; break; } } for (int k = 0;k < havCardVals.Count;k++) { Log.Error("##@###@@@@@"); if (GameObjectPool.Instance.havCardItemPools.Count > 0 && GameObjectPool.Instance.havCardItemPools.ContainsKey(type) && GameObjectPool.Instance.havCardItemPools[type].Count > 0) { GameObject uiHavItem = GameObjectPool.Instance.havCardItemPools[type][0]; GameObjectPool.Instance.havCardItemPools[type].RemoveAt(0); uiHavItem.gameObject.SetActive(true); uiHavItem.transform.SetParent(haveBeenOutContentNode.transform, false); string spiring = ""; if (roleInfo.roleId == playInfo.id) { spiring = string.Concat(GameSetting.Instance.selfPlayCardShowSpiteName, havCardVals[k]); } else { switch (i) { case 1: { //右 spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, havCardVals[k]); break; } case 2: { //shang spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, havCardVals[k]); break; } case 3: { //zuo spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, havCardVals[k]); break; } } } var sprite = await GameObjectPool.Instance.AcquireSprite(spiring); UnityEngine.UI.Image icon = uiHavItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; } else { string spiring = ""; if (roleInfo.roleId == playInfo.id) { spiring = string.Concat(GameSetting.Instance.selfPlayCardShowSpiteName, havCardVals[k]); } else { switch (i) { case 1: { //右 spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, havCardVals[k]); break; } case 2: { //shang spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, havCardVals[k]); break; } case 3: { //zuo spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, havCardVals[k]); break; } } } var uiHavItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(roleInfo.roleId == playInfo.id ? 0 : 1)); uiHavItem.SetActive(true); uiHavItem.transform.SetParent(haveBeenOutContentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(spiring); UnityEngine.UI.Image icon = uiHavItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; } } } } } } //处理每个回合倒计时 Log.Error("当前自己回合"); startFightRoomComponentUI.startTimeCount = startFightRoomInfo.roomInfo.Time; if (startFightRoomComponentUI.startTimer > 0) { startFightRoomComponentUI.timeCountTxt.text = ""; TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer); } startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI); //处理当前操作玩家的状态显示 RefreshCenterOperationState(startFightRoomInfo.roomInfo.OpPos, startFightRoomComponentUI); } //刷新中间表示当前操作玩家 public static async void RefreshCenterOperationState(int OpPos, UIStartFightRoomComponent uIStartFightRoomComponent) { await ResourcesComponentHelper.Instance.LoadSprite(GameUtil.Instance.GetSceneComponent(), "fightatlas"); string abName = string.Concat("TimePoint",OpPos); Sprite sprite = ResourcesComponentHelper.Instance.GetSprite("fightatlas", abName); uIStartFightRoomComponent.shakeDiceImage.sprite = sprite; } public static void RefreshOrientation(int myPos,UIStartFightRoomComponent uIStartFightRoomComponent) { switch (myPos) { case 0: { uIStartFightRoomComponent.dongTxt.text = uIStartFightRoomComponent.orientationList[0]; uIStartFightRoomComponent.nanTxt.text = uIStartFightRoomComponent.orientationList[1]; uIStartFightRoomComponent.xiTxt.text = uIStartFightRoomComponent.orientationList[2]; uIStartFightRoomComponent.beiTxt.text = uIStartFightRoomComponent.orientationList[3]; break; } case 1: uIStartFightRoomComponent.dongTxt.text = uIStartFightRoomComponent.orientationList[1]; uIStartFightRoomComponent.nanTxt.text = uIStartFightRoomComponent.orientationList[2]; uIStartFightRoomComponent.xiTxt.text = uIStartFightRoomComponent.orientationList[3]; uIStartFightRoomComponent.beiTxt.text = uIStartFightRoomComponent.orientationList[0]; break; case 2: uIStartFightRoomComponent.dongTxt.text = uIStartFightRoomComponent.orientationList[2]; uIStartFightRoomComponent.nanTxt.text = uIStartFightRoomComponent.orientationList[3]; uIStartFightRoomComponent.xiTxt.text = uIStartFightRoomComponent.orientationList[0]; uIStartFightRoomComponent.beiTxt.text = uIStartFightRoomComponent.orientationList[1]; break; case 3: uIStartFightRoomComponent.dongTxt.text = uIStartFightRoomComponent.orientationList[3]; uIStartFightRoomComponent.nanTxt.text = uIStartFightRoomComponent.orientationList[0]; uIStartFightRoomComponent.xiTxt.text = uIStartFightRoomComponent.orientationList[1]; uIStartFightRoomComponent.beiTxt.text = uIStartFightRoomComponent.orientationList[2]; break; } } #region 请求相关 //操作,chi p hu public static async ETTask OperationCardRequest(int operationType,int firstCard) { try { var scene = GameUtil.Instance.GetSceneComponent(); var session = scene.GetComponent<SessionComponent>().Session; if (session != null) { G2C_HGHHOperation g2Operation = (G2C_HGHHOperation)await session.Call( new C2G_HGHHOperation() { OpType = operationType , Card = firstCard }); if (g2Operation.Error != ErrorCode.ERR_Success) { Log.Error($"操作 {operationType} 出错...errCode={g2Operation.Error}"); return; } //之后走推送 } } catch (Exception e) { Log.Error($"操作 {operationType} 出错...{e.Message}"); } } //出 public static async ETTask DisCardRequest(int disCard, UIStartFightRoomComponent startFightRoomComponentUI) { try { var scene = GameUtil.Instance.GetSceneComponent(); var session = scene.GetComponent<SessionComponent>().Session; if (session != null) { G2C_HGHHDisCard g2DisCard = (G2C_HGHHDisCard)await session.Call( new C2G_HGHHDisCard() { Card = disCard }); if (g2DisCard.Error != ErrorCode.ERR_Success) { await CommonUtil.Instance.OpenCommonServerMsgPanel($"出牌{disCard} 出错...errCode={g2DisCard.Error}"); return; } var startFightRoomInfo = GameUtil.Instance.GetSceneComponent().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); int sexType = startFightRoomInfo.roomInfo.MyInfo.sex; string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName; await SoundManager.Instance.PlaySound(string.Concat(soundStrType, disCard)); //出牌之后 暂停回合倒计时 if (startFightRoomComponentUI.startTimer > 0) { startFightRoomComponentUI.timeCountTxt.text = ""; TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer); } startFightRoomComponentUI.shakeDiceImage.sprite = null; //之后走推送 } } catch (Exception e) { Log.Error($"操作 {disCard} 出错...{e.Message}"); } } #endregion //type 上下0 右1 左2 public static void CleanCardItemList(Transform node,int index,int type) { Dictionary<int, List<GameObject>> tempList = null; switch (index) { case 0: { tempList = GameObjectPool.Instance.fightCardItemPools; break; } case 1: { tempList = GameObjectPool.Instance.disCardItemPools; break; } case 2: { tempList = GameObjectPool.Instance.havCardItemPools; break; } } for (int i = 0;i < node.childCount;i++) { var child = node.GetChild(i); if (tempList.ContainsKey(type)) { tempList[type].Add(child.gameObject); } else { tempList.Add(type, new List<GameObject>() { child.gameObject }); } StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>(); if(startFightCardItem != null) startFightCardItem.GetDown(); child.gameObject.SetActive(false); } } public static void DisCardPushWithOperator(Transform node, ActInfo actInfo) { Log.Error("@@@当前牌: " + actInfo.Card); ActInfoType actInfoType = (ActInfoType)actInfo.Type; switch (actInfoType) { case ActInfoType.LightPole: case ActInfoType.BackPole: case ActInfoType.DarkPole: { var cardVal = actInfo.Card; int loopIndex = 1; for (int i = 0; i < node.childCount; i++) { if (loopIndex >= 3) { break; } var child = node.GetChild(i); StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>(); if (startFightCardItem.val == cardVal) { startFightCardItem.StandUp(); loopIndex++; } } break; } case ActInfoType.Peng: { var cardVal = actInfo.Card; int loopIndex = 0; for (int i = 0; i < node.childCount; i++) { if (loopIndex >= 2) { break; } var child = node.GetChild(i); StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>(); if (startFightCardItem.val == cardVal) { startFightCardItem.StandUp(); loopIndex++; } } break; } case ActInfoType.Chi: { var cardVal = actInfo.Card; bool IsExist(List<int> cardVals,int cardVal,out int outCardVal) { outCardVal = 0; for (int i = 0;i < cardVals.Count;i++) { if (cardVals[i] == cardVal) { outCardVal = cardVal; return true; } } return false; } List<int> cardVals = new List<int>() { cardVal, cardVal + 1, cardVal + 2}; List<int> tempCards = new List<int>(); //发1 //出2 1233 for (int i = 0; i < node.childCount; i++) { var child = node.GetChild(i); StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>(); int outCardVal = 0; if (IsExist(cardVals, startFightCardItem.val,out outCardVal)) { Log.Error("##### startFightCardItem.val: " + startFightCardItem.val + " outCardVal: " + outCardVal); if (outCardVal == GameUtil.Instance.curCardVal || tempCards.Contains(startFightCardItem.val)) { continue; } startFightCardItem.StandUp(); tempCards.Add(startFightCardItem.val); } } GameUtil.Instance.curRequestCardVal = cardVal; break; } } } public static PlayerInfo GetOtherPlayInfoByPos(List<PlayerInfo> allPlayerInfos,int pos) { for (int i = 0;i < allPlayerInfos.Count;i++) { if (allPlayerInfos[i].pos == pos) { return allPlayerInfos[i]; } } return null; } //根据自己位置 确定其他座位 public static List<int> GetPosList(int myPos) { List<int> list = null; switch (myPos) { case 0: { list = new List<int>() { 0,1,2,3}; break ; } case 1: { list = new List<int>() { 1,2,3,0}; break; } case 2: { list = new List<int>() { 2,3,0,1}; break; } case 3: { list = new List<int>() { 3,0,1,2}; break; } } return list; } public static void SortList(List<int> list) { list.Sort(); } [ObjectSystem] public class UIStartFightRoomComponentDestroySystem : DestroySystem<UIStartFightRoomComponent> { protected override void Destroy(UIStartFightRoomComponent self) { TimerComponent.Instance?.Remove(ref self.RepeatedTimer); CommonBridge.Instance.Clear(); } } } }