UIStartFightRoomComponentSystem.cs 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using UnityEngine;
  6. using UnityEngine.PlayerLoop;
  7. using UnityEngine.UI;
  8. namespace ET.Client
  9. {
  10. #region 定时器 刷新
  11. [Invoke(TimerInvokeType.fightTimeShow)]
  12. public class UIStartFightRoomComponentChecker : ATimer<UIStartFightRoomComponent>
  13. {
  14. protected override void Run(UIStartFightRoomComponent self)
  15. {
  16. try
  17. {
  18. self.Check();
  19. }
  20. catch (Exception e)
  21. {
  22. Log.Error($"idle check error: {self.Id}\n{e}");
  23. }
  24. }
  25. }
  26. [Invoke(TimerInvokeType.startFightTimeCount)]
  27. public class UIStartFightTimeCountChecker : ATimer<UIStartFightRoomComponent>
  28. {
  29. protected override void Run(UIStartFightRoomComponent self)
  30. {
  31. try
  32. {
  33. self.UpdateTimeCount();
  34. }
  35. catch (Exception e)
  36. {
  37. Log.Error($"idle check error: {self.Id}\n{e}");
  38. }
  39. }
  40. }
  41. #endregion
  42. [FriendOf(typeof(UIStartFightRoomComponent))]
  43. public static class UIStartFightRoomComponentSystem
  44. {
  45. public static void Check(this UIStartFightRoomComponent self)
  46. {
  47. self.timeTxt.text = string.Format("{0}:{1}", DateTime.Now.Hour, DateTime.Now.Minute);
  48. }
  49. public static void UpdateTimeCount(this UIStartFightRoomComponent self)
  50. {
  51. if (self.startTimeCount > 0)
  52. {
  53. self.timeCountTxt.text = self.startTimeCount.ToString();
  54. }
  55. else
  56. {
  57. if (self.startTimer > 0)
  58. TimerComponent.Instance?.Remove(ref self.startTimer);
  59. self.timeCountTxt.text = "";
  60. }
  61. self.startTimeCount = self.startTimeCount - 1;
  62. }
  63. [ObjectSystem]
  64. public class UIStartFightRoomComponentAwakeSystem : AwakeSystem<UIStartFightRoomComponent>
  65. {
  66. protected override void Awake(UIStartFightRoomComponent self, params object[] param)
  67. {
  68. ReferenceCollector rc = self.GetParent<UI>().GameObject.GetComponent<ReferenceCollector>();
  69. //头像部分
  70. self.houseIcon = rc.Get<GameObject>("houseIcon");
  71. self.houseIdTxt = rc.Get<GameObject>("houseIdTxt");
  72. self.gameNumTxt = rc.Get<GameObject>("gameNumTxt");
  73. self.curResidueTxt = rc.Get<GameObject>("curResidueTxt");
  74. //右上系统信息部分
  75. self.wifiImage = rc.Get<GameObject>("wifiImage");
  76. self.powerImage = rc.Get<GameObject>("powerImage");
  77. var timeTxt = rc.Get<GameObject>("timeTxt");
  78. self.timeTxt = timeTxt.GetComponent<UnityEngine.UI.Text>();
  79. self.menuBtn = rc.Get<GameObject>("menuBtn");
  80. self.menuBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuBtn(); });
  81. self.faceBtn = rc.Get<GameObject>("faceBtn");
  82. self.faceBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceBtn(); });
  83. self.videoBtn = rc.Get<GameObject>("videoBtn");
  84. self.videoBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnVideoBtn(); });
  85. //菜单
  86. self.menuPanel = rc.Get<GameObject>("menuPanel");
  87. self.menuPanel.SetActive(false);
  88. self.maskBtn = rc.Get<GameObject>("maskBtn");
  89. self.maskBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelClose(); });
  90. self.menuBackBtn = rc.Get<GameObject>("menuBackBtn");
  91. self.menuBackBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelBack(); });
  92. self.menuQuitBtn = rc.Get<GameObject>("menuQuitBtn");
  93. self.menuQuitBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelQuit(); });
  94. self.menuSettingBtn = rc.Get<GameObject>("menuSettingBtn");
  95. self.menuSettingBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelSetting(); });
  96. //表情面板
  97. self.facePanel = rc.Get<GameObject>("facePanel");
  98. self.facePanel.SetActive(false);
  99. self.fastToggleBtn = rc.Get<GameObject>("fastToggleBtn");
  100. self.fastToggleBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceFastToggleBtn(0); });
  101. self.faceToggleBtn = rc.Get<GameObject>("faceToggleBtn");
  102. self.faceToggleBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceFastToggleBtn(1); });
  103. self.faceAndVideoObj = rc.Get<GameObject>("faceAndVideoObj");
  104. self.faceAndVideoObj.SetActive(false);
  105. self.facePanelCloseBtn = rc.Get<GameObject>("facePanelCloseBtn");
  106. self.facePanelCloseBtn.GetComponent<Button>().onClick.AddListener(() => { self.facePanel.SetActive(false); });
  107. //表情列表以及快捷语列表
  108. self.listFastGridBg = rc.Get<GameObject>("listFastGridBg");
  109. self.listFastGridBg.SetActive(false);
  110. self.listFastContent = rc.Get<GameObject>("listFastContent");
  111. self.gridFastItem = rc.Get<GameObject>("gridFastItem");
  112. self.listFaceGridBg = rc.Get<GameObject>("listFaceGridBg");
  113. self.listFaceGridBg.SetActive(false);
  114. self.listFaceContent = rc.Get<GameObject>("listFaceContent");
  115. self.gridFaceItem = rc.Get<GameObject>("gridFaceItem");
  116. self.shakeDiceImage = rc.Get<GameObject>("shakeDiceImage").GetComponent<UnityEngine.UI.Image>();
  117. self.timeCountTxt = rc.Get<GameObject>("timeCountTxt").GetComponent<UnityEngine.UI.Text>();
  118. //玩
  119. self.readyBtn = rc.Get<GameObject>("readyBtn");
  120. self.readyBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnReadyAndInviteBtn(0); });
  121. self.inviteBtn = rc.Get<GameObject>("inviteBtn");
  122. self.inviteBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnReadyAndInviteBtn(1); });
  123. self.fightCardItem = rc.Get<GameObject>("fightCardItem");
  124. self.fightCardItem.SetActive(false);
  125. GameUtil.Instance.SetCardCloneItem(self.fightCardItem,0);
  126. self.fightCardItem1 = rc.Get<GameObject>("fightCardItem1");
  127. self.fightCardItem1.SetActive(false);
  128. GameUtil.Instance.SetCardCloneItem(self.fightCardItem1, 1);
  129. for (int i = 1;i <= 4;i++)
  130. {
  131. UIStartFightRoomPlayerCom uIStartFightRoomPlayerCom = new UIStartFightRoomPlayerCom();
  132. var playerObj = rc.Get<GameObject>("player" + i);
  133. var playerIconObj = rc.Get<GameObject>("playerIcon" + i);
  134. var readyImage = rc.Get<GameObject>("readyImage" + i);
  135. var playerIconImage = playerIconObj.GetComponent<UnityEngine.UI.Image>();
  136. uIStartFightRoomPlayerCom.playerObj = playerObj;
  137. uIStartFightRoomPlayerCom.readyImage = readyImage;
  138. uIStartFightRoomPlayerCom.playerIcon = playerIconImage;
  139. var fightCardContentNode = rc.Get<GameObject>("fightCardContent" + i);
  140. uIStartFightRoomPlayerCom.fightCardNode = fightCardContentNode;
  141. var disCardContentNode = rc.Get<GameObject>("disCardContent" + i);
  142. uIStartFightRoomPlayerCom.disCardsNode = disCardContentNode;
  143. self.uIStartFightRoomPlayerComs.Add(uIStartFightRoomPlayerCom);
  144. playerObj.SetActive(false);
  145. var playChatObj = rc.Get<GameObject>("playChatObj" + i);
  146. self.playChatObjList.Add(playChatObj);
  147. }
  148. //操作
  149. self.operatorObj = rc.Get<GameObject>("operatorObj");
  150. self.operatorObj.SetActive(false);
  151. int operatorIndex = 1;
  152. for (int i = 1;i <= 5;i++)
  153. {
  154. var operatorObjBtn = rc.Get<GameObject>("operatorBtn" + i);
  155. var btn = operatorObjBtn.GetComponent<Button>();
  156. operatorIndex = i;
  157. btn.onClick.AddListener(()=>
  158. {
  159. self.OnOperatorBtn(operatorIndex);
  160. });
  161. self.operatorObj_btn.Add(operatorObjBtn);
  162. }
  163. self.Init();
  164. }
  165. }
  166. private static async void Init(this UIStartFightRoomComponent self)
  167. {
  168. self.RepeatedTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.fightTimeShow, self);
  169. var startFightRoomInfo = self.ClientScene().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  170. CommonBridge.Instance.dispathPush += DispathPush;
  171. self.readyBtn.SetActive(true);
  172. self.inviteBtn.SetActive(true);
  173. self.houseIdTxt.GetComponent<Text>().text = startFightRoomInfo.roomInfo.RoomId.ToString();
  174. self.gameNumTxt.GetComponent<Text>().text = startFightRoomInfo.roomInfo.OwnerId.ToString();
  175. self.curResidueTxt.GetComponent<Text>().text = "0";
  176. await SoundManager.Instance.PlaySound("common_playing", true);
  177. }
  178. private static void DispathPush(Scene scene, object type)
  179. {
  180. var ui = scene.GetComponent<UIComponent>().Get(UIType.UIStartFightRoom);
  181. var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  182. switch (type)
  183. {
  184. case EventType.JoinRoomPush:
  185. {
  186. var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>();
  187. //处理其他玩家信息
  188. for (int i = 1; i < startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count; i++)
  189. {
  190. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false);
  191. }
  192. if (startFightRoomInfo.roomInfo.OtherInfo != null && startFightRoomInfo.roomInfo.OtherInfo.Count > 0)
  193. {
  194. for (int i = 0; i < startFightRoomInfo.roomInfo.OtherInfo.Count; i++)
  195. {
  196. var otherPlayInfo = startFightRoomInfo.roomInfo.OtherInfo[i];
  197. if (i >= startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count - 1)
  198. {
  199. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(false);
  200. }
  201. else
  202. {
  203. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true);
  204. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(false);
  205. }
  206. }
  207. }
  208. break;
  209. }
  210. case EventType.ReadyPush:
  211. {
  212. var startFightRoomComponent = ui.GetComponent<UIStartFightRoomComponent>();
  213. //先处理自己的信息
  214. if (startFightRoomInfo.roomInfo.MyInfo != null)
  215. {
  216. startFightRoomComponent.readyBtn.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 0);
  217. startFightRoomComponent.inviteBtn.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 0);
  218. startFightRoomComponent.uIStartFightRoomPlayerComs[0].playerObj.SetActive(true);
  219. startFightRoomComponent.faceAndVideoObj.SetActive(true);
  220. startFightRoomComponent.uIStartFightRoomPlayerComs[0].readyImage.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 1);
  221. }
  222. //处理其他玩家信息
  223. for (int i = 1;i < startFightRoomComponent.uIStartFightRoomPlayerComs.Count;i++)
  224. {
  225. startFightRoomComponent.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false);
  226. }
  227. if (startFightRoomInfo.roomInfo.OtherInfo != null && startFightRoomInfo.roomInfo.OtherInfo.Count > 0)
  228. {
  229. for (int i = 0; i < startFightRoomInfo.roomInfo.OtherInfo.Count; i++)
  230. {
  231. var otherPlayInfo = startFightRoomInfo.roomInfo.OtherInfo[i];
  232. if (i >= startFightRoomComponent.uIStartFightRoomPlayerComs.Count - 1)
  233. {
  234. startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(false);
  235. }
  236. else
  237. {
  238. startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true);
  239. startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(otherPlayInfo.state == 1);
  240. }
  241. }
  242. }
  243. break;
  244. }
  245. case EventType.ReadyStartPush:
  246. {
  247. //开始 倒计时
  248. Log.Error("@@@@@ 倒计时: " + startFightRoomInfo.readyStartTimeCount);
  249. var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>();
  250. startFightRoomComponentUI.startTimeCount = startFightRoomInfo.readyStartTimeCount;
  251. startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI);
  252. break;
  253. }
  254. case EventType.GameStartPush:
  255. case EventType.GameDrawCardPush:
  256. case EventType.GameOperationPush:
  257. case EventType.KickPush:
  258. {
  259. //正式开始 发牌
  260. var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>();
  261. var myCardInfo = startFightRoomInfo.roomInfo.MyInfo;
  262. var otherCardInfo = startFightRoomInfo.roomInfo.OtherInfo;
  263. #region 其他玩家牌处理
  264. //处理其他玩家信息
  265. for (int i = 1; i < startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count; i++)
  266. {
  267. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false);
  268. }
  269. if (otherCardInfo != null && otherCardInfo.Count > 0)
  270. {
  271. RefreshPlayCardList(0, otherCardInfo, startFightRoomInfo.roomInfo, startFightRoomComponentUI);
  272. }
  273. #endregion
  274. #region 自己牌处理
  275. //处理牌型
  276. //自己牌
  277. if (myCardInfo != null)
  278. {
  279. RefreshPlayCardList(1, new List<PlayerInfo>() { myCardInfo }, startFightRoomInfo.roomInfo, startFightRoomComponentUI);
  280. }
  281. #endregion
  282. break;
  283. }
  284. case EventType.GameDisCardPush:
  285. {
  286. //其他玩家出推送,处理自己的操作
  287. var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>();
  288. var roomInfo = startFightRoomInfo.roomInfo;
  289. var myCardInfo = roomInfo.MyInfo;
  290. if (myCardInfo != null && myCardInfo.cardInfo != null && myCardInfo.cardInfo.Acts.Count > 0)
  291. {
  292. startFightRoomComponentUI.operatorObj.SetActive(true);
  293. //处理操作按钮
  294. for (int i = 0;i < startFightRoomComponentUI.operatorObj_btn.Count;i++)
  295. {
  296. startFightRoomComponentUI.operatorObj_btn[i].SetActive(false);
  297. }
  298. for (int i = 0; i < myCardInfo.cardInfo.Acts.Count; i++)
  299. {
  300. if (myCardInfo.cardInfo.Acts[i] == 1)
  301. {
  302. startFightRoomComponentUI.operatorObj_btn[i].SetActive(true);
  303. }
  304. }
  305. //重置所有牌的状态
  306. var parentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].fightCardNode;
  307. for (int i = 0;i < parentNode.transform.childCount;i++)
  308. {
  309. StartFightCardItem startFightCardItem = parentNode.transform.GetChild(i).gameObject.GetComponent<StartFightCardItem>();
  310. startFightCardItem.GetDown();
  311. }
  312. GameObjectPool.Instance.ClearRealySelCardList();
  313. //抬起
  314. if (myCardInfo.cardInfo != null && myCardInfo.cardInfo.ActInfo != null && myCardInfo.cardInfo.ActInfo.Count > 0)
  315. {
  316. for (int i = 0; i < myCardInfo.cardInfo.ActInfo.Count; i++)
  317. {
  318. //根据服务器信息 弹起响应的牌
  319. DisCardPushWithOperator(parentNode.transform, myCardInfo.cardInfo.ActInfo[i]);
  320. }
  321. }
  322. //记录当前出的牌
  323. startFightRoomComponentUI.curCardVal = startFightRoomInfo.roomInfo.CurDisCard;
  324. Log.Error("当前出的牌: " + startFightRoomComponentUI.curCardVal);
  325. }
  326. if (startFightRoomInfo.roomInfo.Time > 0)
  327. {
  328. startFightRoomComponentUI.startTimeCount = startFightRoomInfo.roomInfo.Time;
  329. startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI);
  330. }
  331. else
  332. {
  333. Log.Error("清空回合倒计时");
  334. if (startFightRoomComponentUI.startTimer > 0)
  335. {
  336. startFightRoomComponentUI.timeCountTxt.text = "";
  337. TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer);
  338. }
  339. }
  340. break;
  341. }
  342. }
  343. }
  344. #region 右上系统部分
  345. public static void OnMenuBtn(this UIStartFightRoomComponent self)
  346. {
  347. self.menuPanel.SetActive(!self.menuPanel.activeInHierarchy);
  348. }
  349. public static async void OnFaceBtn(this UIStartFightRoomComponent self)
  350. {
  351. await SoundManager.Instance.PlaySound("clickbtnsound");
  352. self.facePanel.SetActive(true);
  353. self.LoadChatData(0);
  354. }
  355. public static void OnVideoBtn(this UIStartFightRoomComponent self)
  356. {
  357. }
  358. #endregion
  359. #region 菜单
  360. public static void OnMenuPanelClose(this UIStartFightRoomComponent self)
  361. {
  362. self.menuPanel.SetActive(false);
  363. }
  364. public static async void OnMenuPanelBack(this UIStartFightRoomComponent self)
  365. {
  366. Action<object> myAction = (param) =>
  367. {
  368. int result = (int)param;
  369. if (result == 1)
  370. {
  371. self.ReturnMainUI().Coroutine();
  372. }
  373. };
  374. Dictionary<string,object> dic = new Dictionary<string, object>()
  375. {
  376. { "callback",myAction},
  377. { "title","提示"},
  378. { "content","返回大厅,你的房间仍会保留。"},
  379. { "yesTxt","确定"},
  380. { "cancelTxt","取消"},
  381. };
  382. await SoundManager.Instance.PlaySound("clickbtnsound");
  383. await UIHelper.Create(self.ClientScene(), UIType.UIAlert, UILayer.High, dic);
  384. }
  385. public static void OnMenuPanelQuit(this UIStartFightRoomComponent self)
  386. {
  387. }
  388. public static void OnMenuPanelSetting(this UIStartFightRoomComponent self)
  389. {
  390. }
  391. #endregion
  392. #region 表情
  393. public static async void OnFaceFastToggleBtn(this UIStartFightRoomComponent self,int index)
  394. {
  395. await SoundManager.Instance.PlaySound("clickbtnsound");
  396. self.LoadChatData(index);
  397. }
  398. static async void LoadChatData(this UIStartFightRoomComponent self, int index)
  399. {
  400. self.listFaceGridBg.SetActive(false);
  401. self.listFastGridBg.SetActive(false);
  402. string[] abName = new string[] { "com_bg1", "com_bg2" };
  403. await ResourcesComponentHelper.Instance.LoadSprite(self.ClientScene(), "commonatlas");
  404. Sprite sprite = ResourcesComponentHelper.Instance.GetSprite("commonatlas", abName[0]);
  405. Sprite sprite1 = ResourcesComponentHelper.Instance.GetSprite("commonatlas", abName[1]);
  406. self.fastToggleBtn.GetComponent<UnityEngine.UI.Image>().sprite = index == 0 ? sprite: sprite1;
  407. self.faceToggleBtn.GetComponent<UnityEngine.UI.Image>().sprite = index == 1 ? sprite : sprite1;
  408. self.CleanChatItem(index);
  409. if (index == 0)
  410. {
  411. self.listFastGridBg.SetActive(true);
  412. var startFightRoomInfo = self.ClientScene().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  413. int sexType = startFightRoomInfo.roomInfo.MyInfo.sex;
  414. var fightConfig = FightChatConfigCategory.Instance.GetAll();
  415. var achievedDic = fightConfig.Where(kvp => kvp.Value.Type == sexType);
  416. foreach (var item in achievedDic)
  417. {
  418. if (GameObjectPool.Instance.chatFastItemPools.Count > 0)
  419. {
  420. GameObject uiFastItem = GameObjectPool.Instance.chatFastItemPools[0];
  421. GameObjectPool.Instance.chatFastItemPools.RemoveAt(0);
  422. uiFastItem.SetActive(true);
  423. uiFastItem.transform.SetParent(self.listFastContent.transform, false);
  424. var txt = uiFastItem.GetComponentInChildren<UnityEngine.UI.Text>();
  425. txt.text = item.Value.Content;
  426. var btn = txt.gameObject.GetComponent<Button>();
  427. btn.onClick.RemoveAllListeners();
  428. btn.onClick.AddListener(async () =>
  429. {
  430. Log.Error("btn click1: " + item.Value.Content + " vedio: " + item.Value.VedioPath);
  431. await SoundManager.Instance.PlaySound(item.Value.VedioPath);
  432. self.facePanel.SetActive(false);
  433. self.playChatObjList[0].SetActive(true);
  434. var playChatTxt = self.playChatObjList[0].GetComponentInChildren<UnityEngine.UI.Text>();
  435. playChatTxt.text = item.Value.Content;
  436. await TimerComponent.Instance.WaitAsync(3000);
  437. self.playChatObjList[0].SetActive(false);
  438. });
  439. }
  440. else
  441. {
  442. var uiFastItem = GameUtil.Instance.InitializeObj(self.gridFastItem);
  443. uiFastItem.gameObject.SetActive(true);
  444. uiFastItem.transform.SetParent(self.listFastContent.transform, false);
  445. var txt = uiFastItem.GetComponentInChildren<UnityEngine.UI.Text>();
  446. txt.text = item.Value.Content;
  447. var btn = txt.gameObject.GetComponent<Button>();
  448. btn.onClick.RemoveAllListeners();
  449. btn.onClick.AddListener(async () =>
  450. {
  451. Log.Error("btn click1: " + item.Value.Content + " vedio: " + item.Value.VedioPath);
  452. await SoundManager.Instance.PlaySound(item.Value.VedioPath);
  453. self.facePanel.SetActive(false);
  454. self.playChatObjList[0].SetActive(true);
  455. var playChatTxt = self.playChatObjList[0].GetComponentInChildren<UnityEngine.UI.Text>();
  456. playChatTxt.text = item.Value.Content;
  457. await TimerComponent.Instance.WaitAsync(3000);
  458. self.playChatObjList[0].SetActive(false);
  459. });
  460. }
  461. }
  462. }
  463. else
  464. {
  465. }
  466. }
  467. static void CleanChatItem(this UIStartFightRoomComponent self,int index)
  468. {
  469. Transform node = null;
  470. List<GameObject> list = null;
  471. if (index == 0)
  472. {
  473. node = self.listFastContent.transform;
  474. list = GameObjectPool.Instance.chatFastItemPools;
  475. }
  476. else
  477. {
  478. node = self.listFaceContent.transform;
  479. list = GameObjectPool.Instance.chatFaceItemPools;
  480. }
  481. for (int i = 0; i < node.childCount; i++)
  482. {
  483. var child = node.GetChild(i);
  484. list.Add(child.gameObject);
  485. child.gameObject.SetActive(false);
  486. }
  487. }
  488. #endregion
  489. #region 邀请以及准备
  490. public static void OnReadyAndInviteBtn(this UIStartFightRoomComponent self, int index)
  491. {
  492. if (index == 0)
  493. {
  494. self.ReadyRes().Coroutine();
  495. }
  496. else
  497. {
  498. //邀请
  499. }
  500. }
  501. #endregion
  502. public static void SetBattery()
  503. {
  504. //var level = SystemInfo.batteryLevel == -1 ? 1 : SystemInfo.batteryLevel;
  505. //batteryLevelImg.fillAmount = level;
  506. //batteryTxt.text = (level * 100).ToString() + "%";
  507. //var isCharging = SystemInfo.batteryStatus == BatteryStatus.Charging;
  508. //charging.gameObject.SetActive(isCharging);
  509. }
  510. static async ETTask ReturnMainUI(this UIStartFightRoomComponent self)
  511. {
  512. var scene = self.ClientScene();
  513. await UIHelper.Remove(scene, UIType.UIStartFightRoom);
  514. var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  515. Dictionary<string, object> dic = new Dictionary<string, object>()
  516. {
  517. { "result",1},
  518. { "roomId",startFightRoomInfo.roomInfo.RoomId.ToString()}
  519. };
  520. await UIHelper.Create(scene, UIType.UIMain, UILayer.Mid, dic);
  521. }
  522. static async ETTask ReadyRes(this UIStartFightRoomComponent self)
  523. {
  524. //try
  525. {
  526. var scene = self.ClientScene();
  527. var session = scene.GetComponent<SessionComponent>().Session;
  528. if (session != null)
  529. {
  530. G2C_Ready g2Ready = (G2C_Ready)await session.Call(
  531. new C2G_Ready() { });
  532. if (g2Ready.Error != ErrorCode.ERR_Success)
  533. {
  534. Log.Error($"g2Ready错误...errCode={g2Ready.Error}" + " mess: " + g2Ready.Message);
  535. return;
  536. }
  537. }
  538. }
  539. //catch (Exception e)
  540. //{
  541. // Log.Error($"准备出错...{e.Message}");
  542. //}
  543. }
  544. public static async void OnCloseAsync(this UIStartFightRoomComponent self)
  545. {
  546. await UIHelper.Remove(self.ClientScene(),UIType.UIStartFightRoom);
  547. }
  548. public static async void OnOperatorBtn(this UIStartFightRoomComponent self, int operatorIndex)
  549. {
  550. var startFightRoomInfo = GameUtil.Instance.GetSceneComponent().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  551. int sexType = startFightRoomInfo.roomInfo.MyInfo.sex;
  552. switch (operatorIndex)
  553. {
  554. case 1:
  555. {
  556. //吃
  557. var list = GameObjectPool.Instance.GetRealySelCardList();
  558. if (list == null || list.Count <= 0 || list.Count > 3)
  559. {
  560. await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list));
  561. return;
  562. }
  563. var isSequence = GameUtil.Instance.CheckIsSequence(list);
  564. if (!isSequence)
  565. {
  566. await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list));
  567. return;
  568. }
  569. int cardVal = list[0];
  570. Log.Error("当前吃牌请求发送的值: " + cardVal);
  571. Dictionary<string, object> dic = new Dictionary<string, object>()
  572. {
  573. { "OpType",operatorIndex},
  574. { "Card",cardVal}
  575. };
  576. await RequestServerUtil.Instance.OpenRequestServer(OuterMessage.C2G_Operation,dic,async (messageObj, errorCode) =>
  577. {
  578. if (errorCode != ErrorCode.ERR_Success)
  579. {
  580. await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}");
  581. return;
  582. }
  583. string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName;
  584. await SoundManager.Instance.PlaySound(string.Concat(soundStrType, "chi"));
  585. });
  586. break;
  587. }
  588. //case 2:
  589. // {
  590. // //碰
  591. // var list = GameObjectPool.Instance.GetRealySelCardList();
  592. // if (list == null || list.Count <= 0 || list.Count > 3)
  593. // {
  594. // await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list));
  595. // return;
  596. // }
  597. // var isSequence = GameUtil.Instance.CheckIsSame(list,0);
  598. // if (!isSequence)
  599. // {
  600. // await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list));
  601. // return;
  602. // }
  603. // int cardVal = list[0];
  604. // Log.Error("当前碰牌请求发送的值: " + cardVal);
  605. // Dictionary<string, object> dic = new Dictionary<string, object>()
  606. // {
  607. // { "OpType",operatorIndex},
  608. // { "Card",0}
  609. // };
  610. // await RequestServerUtil.Instance.OpenRequestServer(OuterMessage.C2G_Operation, dic, async (messageObj, errorCode) =>
  611. // {
  612. // if (errorCode != ErrorCode.ERR_Success)
  613. // {
  614. // await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}");
  615. // return;
  616. // }
  617. // });
  618. // break;
  619. // }
  620. case 2:
  621. case 3:
  622. case 5:
  623. {
  624. //胡 peng guo
  625. Dictionary<string, object> dic = new Dictionary<string, object>()
  626. {
  627. { "OpType",operatorIndex},
  628. { "Card",0}
  629. };
  630. await RequestServerUtil.Instance.OpenRequestServer(OuterMessage.C2G_Operation, dic, async (messageObj, errorCode) =>
  631. {
  632. if (errorCode != ErrorCode.ERR_Success)
  633. {
  634. await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}");
  635. return;
  636. }
  637. if (operatorIndex == 2 || operatorIndex == 3)
  638. {
  639. string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName;
  640. string destSoundStr = operatorIndex == 2? "peng": "hu";
  641. await SoundManager.Instance.PlaySound(string.Concat(soundStrType, destSoundStr));
  642. }
  643. });
  644. break;
  645. }
  646. case 4:
  647. {
  648. //杠
  649. var list = GameObjectPool.Instance.GetRealySelCardList();
  650. if (list == null || list.Count <= 0 || list.Count > 4)
  651. {
  652. await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list));
  653. return;
  654. }
  655. var isSequence = GameUtil.Instance.CheckIsSame(list, 1);
  656. if (!isSequence)
  657. {
  658. await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list));
  659. return;
  660. }
  661. int cardVal = list[0];
  662. Log.Error("当前杠牌请求发送的值: " + cardVal);
  663. Dictionary<string, object> dic = new Dictionary<string, object>()
  664. {
  665. { "OpType",operatorIndex},
  666. { "Card",cardVal}
  667. };
  668. await RequestServerUtil.Instance.OpenRequestServer(OuterMessage.C2G_Operation, dic, async (messageObj, errorCode) =>
  669. {
  670. if (errorCode != ErrorCode.ERR_Success)
  671. {
  672. await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}");
  673. return;
  674. }
  675. string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName;
  676. await SoundManager.Instance.PlaySound(string.Concat(soundStrType, "gang"));
  677. });
  678. break;
  679. }
  680. }
  681. }
  682. public static async void RefreshPlayCardList(int index, List<PlayerInfo> playerInfos,RoomInfo roomInfo, UIStartFightRoomComponent startFightRoomComponentUI)
  683. {
  684. if (index == 0)
  685. {
  686. for (int i = 0; i < playerInfos.Count; i++)
  687. {
  688. var otherPlayInfo = playerInfos[i];
  689. if (i >= startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count - 1)
  690. {
  691. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(false);
  692. }
  693. else
  694. {
  695. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true);
  696. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(false);
  697. var fightCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].fightCardNode;
  698. var disCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].disCardsNode;
  699. CleanCardItemList(fightCardParentNode.transform,0);
  700. for (int p = 0; p < otherPlayInfo.cardInfo.RemainCardsNum; p++)
  701. {
  702. if (GameObjectPool.Instance.fightCardItemPools.Count > 0)
  703. {
  704. GameObject uifightItem = GameObjectPool.Instance.fightCardItemPools[0];
  705. GameObjectPool.Instance.fightCardItemPools.RemoveAt(0);
  706. uifightItem.gameObject.SetActive(true);
  707. uifightItem.transform.SetParent(fightCardParentNode.transform, false);
  708. var sprite = await GameObjectPool.Instance.AcquireSprite(GameSetting.Instance.otherPlayCardSpiteName);
  709. UnityEngine.UI.Image icon = uifightItem.GetComponentInChildren<UnityEngine.UI.Image>();
  710. icon.sprite = sprite;
  711. var btn = icon.gameObject.GetComponent<Button>();
  712. btn.onClick.RemoveAllListeners();
  713. btn.onClick.AddListener(() =>
  714. {
  715. Log.Error("card Click...");
  716. });
  717. }
  718. else
  719. {
  720. int cloneItemIndex = i % 2 == 0? 1 : 0;
  721. var uifightItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(cloneItemIndex));
  722. uifightItem.SetActive(true);
  723. uifightItem.transform.SetParent(fightCardParentNode.transform, false);
  724. var sprite = await GameObjectPool.Instance.AcquireSprite(GameSetting.Instance.otherPlayCardSpiteName);
  725. UnityEngine.UI.Image icon = uifightItem.GetComponentInChildren<UnityEngine.UI.Image>();
  726. icon.sprite = sprite;
  727. }
  728. }
  729. //已经出过的牌列表
  730. CleanCardItemList(disCardParentNode.transform, 1);
  731. if (otherPlayInfo.cardInfo.DisCards != null)
  732. {
  733. for (int l = 0; l < otherPlayInfo.cardInfo.DisCards.Count; l++)
  734. {
  735. int value = otherPlayInfo.cardInfo.DisCards[l];
  736. if (GameObjectPool.Instance.disCardItemPools.Count > 0)
  737. {
  738. GameObject uiDisItem = GameObjectPool.Instance.disCardItemPools[0];
  739. GameObjectPool.Instance.disCardItemPools.RemoveAt(0);
  740. uiDisItem.gameObject.SetActive(true);
  741. uiDisItem.transform.SetParent(disCardParentNode.transform, false);
  742. var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value));
  743. UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>();
  744. icon.sprite = sprite;
  745. }
  746. else
  747. {
  748. int cloneItemIndex = i % 2 == 0 ? 1 : 0;
  749. var uiDisItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(cloneItemIndex));
  750. uiDisItem.SetActive(true);
  751. uiDisItem.transform.SetParent(disCardParentNode.transform, false);
  752. var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value));
  753. UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>();
  754. icon.sprite = sprite;
  755. }
  756. }
  757. }
  758. }
  759. }
  760. }
  761. else
  762. {
  763. var myCardInfo = playerInfos[0];
  764. if (myCardInfo.cardInfo.RemainCards == null)
  765. {
  766. Log.Error("自己牌队列为NULL");
  767. return;
  768. }
  769. var parentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].fightCardNode;
  770. var disCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].disCardsNode;
  771. startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].readyImage.SetActive(false);
  772. Log.Error("card数量: " + myCardInfo.cardInfo.RemainCards.Count);
  773. CleanCardItemList(parentNode.transform,0);
  774. for (int i = 0; i < myCardInfo.cardInfo.RemainCards.Count;i++)
  775. {
  776. var value = myCardInfo.cardInfo.RemainCards[i];
  777. if (GameObjectPool.Instance.fightCardItemPools.Count > 0)
  778. {
  779. GameObject uifightItem = GameObjectPool.Instance.fightCardItemPools[0];
  780. StartFightCardItem startFightCardItem = uifightItem.GetComponent<StartFightCardItem>();
  781. if(startFightCardItem == null)
  782. startFightCardItem = uifightItem.AddComponent<StartFightCardItem>();
  783. GameObjectPool.Instance.fightCardItemPools.RemoveAt(0);
  784. uifightItem.gameObject.SetActive(true);
  785. uifightItem.transform.SetParent(parentNode.transform, false);
  786. startFightCardItem.Init(uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(), value,(val)=>
  787. {
  788. if (myCardInfo.state != roomInfo.OpPos || myCardInfo.id != roomInfo.OpId)
  789. {
  790. Log.Error("不是自己回合");
  791. return;
  792. }
  793. DisCardRequest(val, startFightRoomComponentUI).Coroutine();
  794. });
  795. }
  796. else
  797. {
  798. var uifightItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(0));
  799. StartFightCardItem startFightCardItem = uifightItem.GetComponent<StartFightCardItem>();
  800. if (startFightCardItem == null)
  801. startFightCardItem = uifightItem.AddComponent<StartFightCardItem>();
  802. uifightItem.gameObject.SetActive(true);
  803. uifightItem.transform.SetParent(parentNode.transform, false);
  804. startFightCardItem.Init(uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(), value, (val) =>
  805. {
  806. if (myCardInfo.state != roomInfo.OpPos || myCardInfo.id != roomInfo.OpId)
  807. {
  808. Log.Error("不是自己回合");
  809. return;
  810. }
  811. DisCardRequest(val, startFightRoomComponentUI).Coroutine();
  812. });
  813. }
  814. }
  815. //已经出过的牌列表
  816. CleanCardItemList(disCardParentNode.transform, 1);
  817. if (myCardInfo.cardInfo.DisCards != null)
  818. {
  819. for (int l = 0; l < myCardInfo.cardInfo.DisCards.Count; l++)
  820. {
  821. int value = myCardInfo.cardInfo.DisCards[l];
  822. if (GameObjectPool.Instance.disCardItemPools.Count > 0)
  823. {
  824. GameObject uiDisItem = GameObjectPool.Instance.disCardItemPools[0];
  825. GameObjectPool.Instance.disCardItemPools.RemoveAt(0);
  826. uiDisItem.gameObject.SetActive(true);
  827. uiDisItem.transform.SetParent(disCardParentNode.transform, false);
  828. var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value));
  829. UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>();
  830. icon.sprite = sprite;
  831. }
  832. else
  833. {
  834. var uiDisItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(0));
  835. uiDisItem.SetActive(true);
  836. uiDisItem.transform.SetParent(disCardParentNode.transform, false);
  837. var sprite = await GameObjectPool.Instance.AcquireSprite(string.Concat(GameSetting.Instance.selfPlayCardSpiteName, value));
  838. UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>();
  839. icon.sprite = sprite;
  840. }
  841. }
  842. }
  843. }
  844. //处理每个回合倒计时
  845. Log.Error("当前自己回合");
  846. startFightRoomComponentUI.startTimeCount = roomInfo.Time;
  847. if (startFightRoomComponentUI.startTimer > 0)
  848. {
  849. startFightRoomComponentUI.timeCountTxt.text = "";
  850. TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer);
  851. }
  852. startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI);
  853. //处理当前操作玩家的状态显示
  854. RefreshCenterOperationState(roomInfo.OpPos, startFightRoomComponentUI);
  855. }
  856. //刷新中间表示当前操作玩家
  857. public static async void RefreshCenterOperationState(int OpPos, UIStartFightRoomComponent uIStartFightRoomComponent)
  858. {
  859. await ResourcesComponentHelper.Instance.LoadSprite(GameUtil.Instance.GetSceneComponent(), "fightatlas");
  860. string abName = string.Concat("TimePoint",OpPos);
  861. Sprite sprite = ResourcesComponentHelper.Instance.GetSprite("fightatlas", abName);
  862. uIStartFightRoomComponent.shakeDiceImage.sprite = sprite;
  863. }
  864. #region 请求相关
  865. //操作,chi p hu
  866. public static async ETTask OperationCardRequest(int operationType,int firstCard)
  867. {
  868. try
  869. {
  870. var scene = GameUtil.Instance.GetSceneComponent();
  871. var session = scene.GetComponent<SessionComponent>().Session;
  872. if (session != null)
  873. {
  874. G2C_Operation g2Operation = (G2C_Operation)await session.Call(
  875. new C2G_Operation() { OpType = operationType , Card = firstCard });
  876. if (g2Operation.Error != ErrorCode.ERR_Success)
  877. {
  878. Log.Error($"操作 {operationType} 出错...errCode={g2Operation.Error}");
  879. return;
  880. }
  881. //之后走推送
  882. }
  883. }
  884. catch (Exception e)
  885. {
  886. Log.Error($"操作 {operationType} 出错...{e.Message}");
  887. }
  888. }
  889. //出
  890. public static async ETTask DisCardRequest(int disCard, UIStartFightRoomComponent startFightRoomComponentUI)
  891. {
  892. try
  893. {
  894. var scene = GameUtil.Instance.GetSceneComponent();
  895. var session = scene.GetComponent<SessionComponent>().Session;
  896. if (session != null)
  897. {
  898. G2C_DisCard g2DisCard = (G2C_DisCard)await session.Call(
  899. new C2G_DisCard() { Card = disCard });
  900. if (g2DisCard.Error != ErrorCode.ERR_Success)
  901. {
  902. await CommonUtil.Instance.OpenCommonServerMsgPanel($"出牌{disCard} 出错...errCode={g2DisCard.Error}");
  903. return;
  904. }
  905. var startFightRoomInfo = GameUtil.Instance.GetSceneComponent().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  906. int sexType = startFightRoomInfo.roomInfo.MyInfo.sex;
  907. string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName;
  908. await SoundManager.Instance.PlaySound(string.Concat(soundStrType, disCard));
  909. //出牌之后 暂停回合倒计时
  910. if (startFightRoomComponentUI.startTimer > 0)
  911. {
  912. startFightRoomComponentUI.timeCountTxt.text = "";
  913. TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer);
  914. }
  915. startFightRoomComponentUI.shakeDiceImage.sprite = null;
  916. //之后走推送
  917. }
  918. }
  919. catch (Exception e)
  920. {
  921. Log.Error($"操作 {disCard} 出错...{e.Message}");
  922. }
  923. }
  924. #endregion
  925. public static void CleanCardItemList(Transform node,int index)
  926. {
  927. List<GameObject> tempList = index == 0? GameObjectPool.Instance.fightCardItemPools: GameObjectPool.Instance.disCardItemPools;
  928. for (int i = 0;i < node.childCount;i++)
  929. {
  930. var child = node.GetChild(i);
  931. tempList.Add(child.gameObject);
  932. child.gameObject.SetActive(false);
  933. }
  934. }
  935. public static void DisCardPushWithOperator(Transform node, ActInfo actInfo)
  936. {
  937. ActInfoType actInfoType = (ActInfoType)actInfo.Type;
  938. switch (actInfoType)
  939. {
  940. case ActInfoType.LightPole:
  941. case ActInfoType.BackPole:
  942. case ActInfoType.DarkPole:
  943. {
  944. var cardVal = actInfo.Card;
  945. int loopIndex = 1;
  946. for (int i = 0; i < node.childCount; i++)
  947. {
  948. if (loopIndex > 3)
  949. {
  950. break;
  951. }
  952. var child = node.GetChild(i);
  953. StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>();
  954. if (startFightCardItem.val == cardVal)
  955. {
  956. startFightCardItem.StandUp();
  957. }
  958. loopIndex++;
  959. }
  960. //将出的牌添加到操作列表里面去
  961. GameObjectPool.Instance.OperatoRarealySelCardList(0, cardVal);
  962. break;
  963. }
  964. case ActInfoType.Peng:
  965. {
  966. var cardVal = actInfo.Card;
  967. int loopIndex = 1;
  968. for (int i = 0; i < node.childCount; i++)
  969. {
  970. if (loopIndex >= 3)
  971. {
  972. break;
  973. }
  974. var child = node.GetChild(i);
  975. StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>();
  976. if (startFightCardItem.val == cardVal)
  977. {
  978. startFightCardItem.StandUp();
  979. }
  980. loopIndex++;
  981. }
  982. GameObjectPool.Instance.OperatoRarealySelCardList(0, cardVal);
  983. break;
  984. }
  985. case ActInfoType.Chi:
  986. {
  987. var cardVal = actInfo.Card;
  988. int loopIndex = 1;
  989. for (int i = 0; i < node.childCount; i++)
  990. {
  991. if (loopIndex >= 3)
  992. {
  993. break;
  994. }
  995. var child = node.GetChild(i);
  996. StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>();
  997. if (startFightCardItem.val == cardVal + 1)
  998. {
  999. startFightCardItem.StandUp();
  1000. }
  1001. cardVal = startFightCardItem.val;
  1002. loopIndex++;
  1003. }
  1004. GameObjectPool.Instance.OperatoRarealySelCardList(0, cardVal);
  1005. break;
  1006. }
  1007. }
  1008. }
  1009. [ObjectSystem]
  1010. public class UIStartFightRoomComponentDestroySystem : DestroySystem<UIStartFightRoomComponent>
  1011. {
  1012. protected override void Destroy(UIStartFightRoomComponent self)
  1013. {
  1014. TimerComponent.Instance?.Remove(ref self.RepeatedTimer);
  1015. CommonBridge.Instance.Clear();
  1016. }
  1017. }
  1018. }
  1019. }