using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.PlayerLoop; using UnityEngine.UI; using static System.Net.Mime.MediaTypeNames; namespace ET.Client { #region 战斗推送相关 [Event(SceneType.Client)] public class JoinRoomPush_AddComponent : AEvent<EventType.JoinRoomPush> { protected override async ETTask Run(Scene scene, EventType.JoinRoomPush args) { Log.Error("@@@ 刷新加入房间状态"); CommonBridge.Instance.SetDispathPush(scene,args); } } [Event(SceneType.Client)] public class KickPush_AddComponent : AEvent<EventType.KickPush> { protected override async ETTask Run(Scene scene, EventType.KickPush args) { Log.Error("@@@ 刷新T人之后 房间状态"); CommonBridge.Instance.SetDispathPush(scene,args); } } [Event(SceneType.Client)] public class ReadyPush_AddComponent : AEvent<EventType.ReadyPush> { protected override async ETTask Run(Scene scene, EventType.ReadyPush args) { Log.Error("@@@ 刷新准备之后 房间状态"); CommonBridge.Instance.SetDispathPush(scene, args); } } //都准备之后 开始倒计时推送 [Event(SceneType.Client)] public class ReadyStartPush_AddComponent : AEvent<EventType.ReadyStartPush> { protected override async ETTask Run(Scene scene, EventType.ReadyStartPush args) { Log.Error("@@@ 刷新准备之后 房间状态"); CommonBridge.Instance.SetDispathPush(scene, args); } } //正式开始 发牌 [Event(SceneType.Client)] public class GameStartPush_AddComponent : AEvent<EventType.GameStartPush> { protected override async ETTask Run(Scene scene, EventType.GameStartPush args) { Log.Error("@@@ 正式开始 发牌"); CommonBridge.Instance.SetDispathPush(scene, args); } } //玩家摸牌 [Event(SceneType.Client)] public class GameDrawCardPush_AddComponent : AEvent<EventType.GameDrawCardPush> { protected override async ETTask Run(Scene scene, EventType.GameDrawCardPush args) { Log.Error("@@@ 玩家摸牌"); CommonBridge.Instance.SetDispathPush(scene, args); } } #endregion #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.timeCountObj.SetActive(true); self.timeCountTxt.text = self.startTimeCount.ToString(); } else { self.timeCountObj.SetActive(false); if (self.startTimer > 0) TimerComponent.Instance?.Remove(ref self.startTimer); } 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.timeCountObj = rc.Get<GameObject>("timeCountObj"); self.timeCountTxt = rc.Get<GameObject>("timeCountTxt").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 playerIconImage = playerIconObj.GetComponent<UnityEngine.UI.Image>(); uIStartFightRoomPlayerCom.playerObj = playerObj; uIStartFightRoomPlayerCom.readyImage = readyImage; uIStartFightRoomPlayerCom.playerIcon = playerIconImage; var fightCardContentNode = rc.Get<GameObject>("fightCardContent" + i); uIStartFightRoomPlayerCom.fightCardNode = fightCardContentNode; var disCardContentNode = rc.Get<GameObject>("disCardContent" + i); uIStartFightRoomPlayerCom.disCardsNode = disCardContentNode; self.uIStartFightRoomPlayerComs.Add(uIStartFightRoomPlayerCom); playerObj.SetActive(false); var playChatObj = rc.Get<GameObject>("playChatObj" + i); self.playChatObjList.Add(playChatObj); } 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<UnityEngine.UI.Text>().text = startFightRoomInfo.roomInfo.RoomId.ToString(); self.gameNumTxt.GetComponent<UnityEngine.UI.Text>().text = startFightRoomInfo.roomInfo.OwnerId.ToString(); self.curResidueTxt.GetComponent<UnityEngine.UI.Text>().text = "0"; await SoundManager.Instance.PlaySound("common_playing", true); } private static void DispathPush(Scene scene, object type) { switch (type) { case EventType.JoinRoomPush: { var ui = scene.GetComponent<UIComponent>().Get(UIType.UIStartFightRoom); var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>(); var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); //处理其他玩家信息 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); } else { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true); startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(false); } } } break; } case EventType.KickPush: { break; } case EventType.ReadyPush: { var ui = scene.GetComponent<UIComponent>().Get(UIType.UIStartFightRoom); var startFightRoomComponent = ui.GetComponent<UIStartFightRoomComponent>(); var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); //先处理自己的信息 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: { //开始 倒计时 var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); Log.Error("@@@@@ 倒计时: " + startFightRoomInfo.readyStartTimeCount); var ui = scene.GetComponent<UIComponent>().Get(UIType.UIStartFightRoom); 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: { //正式开始 发牌 var ui = scene.GetComponent<UIComponent>().Get(UIType.UIStartFightRoom); var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>(); var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo(); var myCardInfo = startFightRoomInfo.roomInfo.MyInfo; var otherCardInfo = startFightRoomInfo.roomInfo.OtherInfo; #region 其他玩家牌处理 //处理其他玩家信息 for (int i = 1; i < startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count; i++) { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false); } if (otherCardInfo != null && otherCardInfo.Count > 0) { RefreshPlayCardList(0, otherCardInfo, startFightRoomComponentUI); } #endregion #region 自己牌处理 //处理牌型 //自己牌 if (myCardInfo != null) { RefreshPlayCardList(1, new List<PlayerInfo>() { myCardInfo }, startFightRoomComponentUI); } #endregion 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.Content; var btn = txt.gameObject.GetComponent<Button>(); btn.onClick.RemoveAllListeners(); btn.onClick.AddListener(async () => { Log.Error("btn click1: " + item.Value.Content + " 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.Content; 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.Content; var btn = txt.gameObject.GetComponent<Button>(); btn.onClick.RemoveAllListeners(); btn.onClick.AddListener(() => { Log.Error("btn click2: " + item.Value.Content); }); } } } 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_Ready g2Ready = (G2C_Ready)await session.Call( new C2G_Ready() { }); 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 RefreshPlayCardList(int index, List<PlayerInfo> playerInfos, UIStartFightRoomComponent startFightRoomComponentUI) { if (index == 0) { for (int i = 0; i < playerInfos.Count; i++) { var otherPlayInfo = playerInfos[i]; if (i >= startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count - 1) { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(false); } else { startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true); startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(false); var fightCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].fightCardNode; var disCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].disCardsNode; CleanCardItemList(fightCardParentNode.transform,0); for (int p = 0; p < otherPlayInfo.cardInfo.RemainCardsNum; p++) { if (GameObjectPool.Instance.fightCardItemPools.Count > 0) { GameObject uifightItem = GameObjectPool.Instance.fightCardItemPools[0]; GameObjectPool.Instance.fightCardItemPools.RemoveAt(0); uifightItem.gameObject.SetActive(true); uifightItem.transform.SetParent(fightCardParentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(GameSetting.Instance.otherPlayCardSpiteName); 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 { int cloneItemIndex = i % 2 == 0? 1 : 0; var uifightItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(cloneItemIndex)); uifightItem.SetActive(true); uifightItem.transform.SetParent(fightCardParentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(GameSetting.Instance.otherPlayCardSpiteName); UnityEngine.UI.Image icon = uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; } } //已经出过的牌列表 CleanCardItemList(disCardParentNode.transform, 1); if (otherPlayInfo.cardInfo.DisCards != null) { for (int l = 0; l < otherPlayInfo.cardInfo.DisCards.Count; l++) { int value = otherPlayInfo.cardInfo.DisCards[l]; if (GameObjectPool.Instance.disCardItemPools.Count > 0) { GameObject uiDisItem = GameObjectPool.Instance.disCardItemPools[0]; GameObjectPool.Instance.disCardItemPools.RemoveAt(0); uiDisItem.gameObject.SetActive(true); uiDisItem.transform.SetParent(disCardParentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value)); UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; } else { int cloneItemIndex = i % 2 == 0 ? 1 : 0; var uiDisItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(cloneItemIndex)); uiDisItem.SetActive(true); uiDisItem.transform.SetParent(disCardParentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value)); UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; } } } } } } else { var myCardInfo = playerInfos[0]; if (myCardInfo.cardInfo.RemainCards == null) { Log.Error("自己牌队列为NULL"); return; } var parentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].fightCardNode; var disCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].disCardsNode; startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].readyImage.SetActive(false); Log.Error("card数量: " + myCardInfo.cardInfo.RemainCards.Count); CleanCardItemList(parentNode.transform,0); for (int i = 0; i < myCardInfo.cardInfo.RemainCards.Count;i++) { var value = myCardInfo.cardInfo.RemainCards[i]; if (GameObjectPool.Instance.fightCardItemPools.Count > 0) { GameObject uifightItem = GameObjectPool.Instance.fightCardItemPools[0]; GameObjectPool.Instance.fightCardItemPools.RemoveAt(0); uifightItem.gameObject.SetActive(true); uifightItem.transform.SetParent(parentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value)); 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... " + string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value)); }); } else { var uifightItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(0)); uifightItem.gameObject.SetActive(true); uifightItem.transform.SetParent(parentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value)); UnityEngine.UI.Image icon = uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; icon.gameObject.GetComponent<Button>().onClick.AddListener(() => { Log.Error("card Click... " + string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value)); }); } } //已经出过的牌列表 CleanCardItemList(disCardParentNode.transform, 1); if (myCardInfo.cardInfo.DisCards != null) { for (int l = 0; l < myCardInfo.cardInfo.DisCards.Count; l++) { int value = myCardInfo.cardInfo.DisCards[l]; if (GameObjectPool.Instance.disCardItemPools.Count > 0) { GameObject uiDisItem = GameObjectPool.Instance.disCardItemPools[0]; GameObjectPool.Instance.disCardItemPools.RemoveAt(0); uiDisItem.gameObject.SetActive(true); uiDisItem.transform.SetParent(disCardParentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value)); UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; } else { var uiDisItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(0)); uiDisItem.SetActive(true); uiDisItem.transform.SetParent(disCardParentNode.transform, false); var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value)); UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>(); icon.sprite = sprite; } } } } } public static void CleanCardItemList(Transform node,int index) { List<GameObject> tempList = index == 0? GameObjectPool.Instance.fightCardItemPools: GameObjectPool.Instance.disCardItemPools; for (int i = 0;i < node.childCount;i++) { var child = node.GetChild(i); tempList.Add(child.gameObject); child.gameObject.SetActive(false); } } [ObjectSystem] public class UIStartFightRoomComponentDestroySystem : DestroySystem<UIStartFightRoomComponent> { protected override void Destroy(UIStartFightRoomComponent self) { TimerComponent.Instance?.Remove(ref self.RepeatedTimer); CommonBridge.Instance.Clear(); } } } }