UIStartFightRoomComponentSystem.cs 72 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using UnityEngine;
  6. using UnityEngine.Experimental.GlobalIllumination;
  7. using UnityEngine.PlayerLoop;
  8. using UnityEngine.UI;
  9. namespace ET.Client
  10. {
  11. #region 定时器 刷新
  12. [Invoke(TimerInvokeType.fightTimeShow)]
  13. public class UIStartFightRoomComponentChecker : ATimer<UIStartFightRoomComponent>
  14. {
  15. protected override void Run(UIStartFightRoomComponent self)
  16. {
  17. try
  18. {
  19. self.Check();
  20. }
  21. catch (Exception e)
  22. {
  23. Log.Error($"idle check error: {self.Id}\n{e}");
  24. }
  25. }
  26. }
  27. [Invoke(TimerInvokeType.startFightTimeCount)]
  28. public class UIStartFightTimeCountChecker : ATimer<UIStartFightRoomComponent>
  29. {
  30. protected override void Run(UIStartFightRoomComponent self)
  31. {
  32. try
  33. {
  34. self.UpdateTimeCount();
  35. }
  36. catch (Exception e)
  37. {
  38. Log.Error($"idle check error: {self.Id}\n{e}");
  39. }
  40. }
  41. }
  42. #endregion
  43. [FriendOf(typeof(UIStartFightRoomComponent))]
  44. public static class UIStartFightRoomComponentSystem
  45. {
  46. public static void Check(this UIStartFightRoomComponent self)
  47. {
  48. self.timeTxt.text = string.Format("{0}:{1}", DateTime.Now.Hour, DateTime.Now.Minute);
  49. }
  50. public static void UpdateTimeCount(this UIStartFightRoomComponent self)
  51. {
  52. if (self.startTimeCount > 0)
  53. {
  54. self.timeCountTxt.text = self.startTimeCount.ToString();
  55. }
  56. else
  57. {
  58. if (self.startTimer > 0)
  59. TimerComponent.Instance?.Remove(ref self.startTimer);
  60. self.timeCountTxt.text = "";
  61. }
  62. self.startTimeCount = self.startTimeCount - 1;
  63. }
  64. [ObjectSystem]
  65. public class UIStartFightRoomComponentAwakeSystem : AwakeSystem<UIStartFightRoomComponent>
  66. {
  67. protected override void Awake(UIStartFightRoomComponent self, params object[] param)
  68. {
  69. ReferenceCollector rc = self.GetParent<UI>().GameObject.GetComponent<ReferenceCollector>();
  70. //头像部分
  71. self.houseIcon = rc.Get<GameObject>("houseIcon");
  72. self.houseIdTxt = rc.Get<GameObject>("houseIdTxt");
  73. self.gameNumTxt = rc.Get<GameObject>("gameNumTxt");
  74. self.curResidueTxt = rc.Get<GameObject>("curResidueTxt");
  75. //右上系统信息部分
  76. self.wifiImage = rc.Get<GameObject>("wifiImage");
  77. self.powerImage = rc.Get<GameObject>("powerImage");
  78. var timeTxt = rc.Get<GameObject>("timeTxt");
  79. self.timeTxt = timeTxt.GetComponent<UnityEngine.UI.Text>();
  80. self.menuBtn = rc.Get<GameObject>("menuBtn");
  81. self.menuBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuBtn(); });
  82. self.faceBtn = rc.Get<GameObject>("faceBtn");
  83. self.faceBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceBtn(); });
  84. self.videoBtn = rc.Get<GameObject>("videoBtn");
  85. self.videoBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnVideoBtn(); });
  86. //菜单
  87. self.menuPanel = rc.Get<GameObject>("menuPanel");
  88. self.menuPanel.SetActive(false);
  89. self.maskBtn = rc.Get<GameObject>("maskBtn");
  90. self.maskBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelClose(); });
  91. self.menuBackBtn = rc.Get<GameObject>("menuBackBtn");
  92. self.menuBackBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelBack(); });
  93. self.menuQuitBtn = rc.Get<GameObject>("menuQuitBtn");
  94. self.menuQuitBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelQuit(); });
  95. self.menuSettingBtn = rc.Get<GameObject>("menuSettingBtn");
  96. self.menuSettingBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnMenuPanelSetting(); });
  97. //表情面板
  98. self.facePanel = rc.Get<GameObject>("facePanel");
  99. self.facePanel.SetActive(false);
  100. self.fastToggleBtn = rc.Get<GameObject>("fastToggleBtn");
  101. self.fastToggleBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceFastToggleBtn(0); });
  102. self.faceToggleBtn = rc.Get<GameObject>("faceToggleBtn");
  103. self.faceToggleBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnFaceFastToggleBtn(1); });
  104. self.faceAndVideoObj = rc.Get<GameObject>("faceAndVideoObj");
  105. self.faceAndVideoObj.SetActive(false);
  106. self.facePanelCloseBtn = rc.Get<GameObject>("facePanelCloseBtn");
  107. self.facePanelCloseBtn.GetComponent<Button>().onClick.AddListener(() => { self.facePanel.SetActive(false); });
  108. //表情列表以及快捷语列表
  109. self.listFastGridBg = rc.Get<GameObject>("listFastGridBg");
  110. self.listFastGridBg.SetActive(false);
  111. self.listFastContent = rc.Get<GameObject>("listFastContent");
  112. self.gridFastItem = rc.Get<GameObject>("gridFastItem");
  113. self.listFaceGridBg = rc.Get<GameObject>("listFaceGridBg");
  114. self.listFaceGridBg.SetActive(false);
  115. self.listFaceContent = rc.Get<GameObject>("listFaceContent");
  116. self.gridFaceItem = rc.Get<GameObject>("gridFaceItem");
  117. self.shakeDiceImage = rc.Get<GameObject>("shakeDiceImage").GetComponent<UnityEngine.UI.Image>();
  118. self.timeCountTxt = rc.Get<GameObject>("timeCountTxt").GetComponent<UnityEngine.UI.Text>();
  119. self.dongTxt = rc.Get<GameObject>("dongTxt").GetComponent<UnityEngine.UI.Text>();
  120. self.nanTxt = rc.Get<GameObject>("nanTxt").GetComponent<UnityEngine.UI.Text>();
  121. self.xiTxt = rc.Get<GameObject>("xiTxt").GetComponent<UnityEngine.UI.Text>();
  122. self.beiTxt = rc.Get<GameObject>("beiTxt").GetComponent<UnityEngine.UI.Text>();
  123. //玩
  124. self.readyBtn = rc.Get<GameObject>("readyBtn");
  125. self.readyBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnReadyAndInviteBtn(0); });
  126. self.inviteBtn = rc.Get<GameObject>("inviteBtn");
  127. self.inviteBtn.GetComponent<Button>().onClick.AddListener(() => { self.OnReadyAndInviteBtn(1); });
  128. self.fightCardItem = rc.Get<GameObject>("fightCardItem");
  129. self.fightCardItem.SetActive(false);
  130. GameUtil.Instance.SetCardCloneItem(self.fightCardItem,0);
  131. self.fightCardItem1 = rc.Get<GameObject>("fightCardItem1");
  132. self.fightCardItem1.SetActive(false);
  133. GameUtil.Instance.SetCardCloneItem(self.fightCardItem1, 1);
  134. for (int i = 1;i <= 4;i++)
  135. {
  136. UIStartFightRoomPlayerCom uIStartFightRoomPlayerCom = new UIStartFightRoomPlayerCom();
  137. var playerObj = rc.Get<GameObject>("player" + i);
  138. var playerIconObj = rc.Get<GameObject>("playerIcon" + i);
  139. var readyImage = rc.Get<GameObject>("readyImage" + i);
  140. var playName = rc.Get<GameObject>("playName" + i).GetComponent<Text>();
  141. var playerIconImage = playerIconObj.GetComponent<UnityEngine.UI.Image>();
  142. uIStartFightRoomPlayerCom.playerObj = playerObj;
  143. uIStartFightRoomPlayerCom.readyImage = readyImage;
  144. uIStartFightRoomPlayerCom.playerIcon = playerIconImage;
  145. uIStartFightRoomPlayerCom.playName = playName;
  146. var fightCardContentNode = rc.Get<GameObject>("fightCardContent" + i);
  147. uIStartFightRoomPlayerCom.fightCardNode = fightCardContentNode;
  148. var disCardContentNode = rc.Get<GameObject>("disCardContent" + i);
  149. uIStartFightRoomPlayerCom.disCardsNode = disCardContentNode;
  150. var haveBeenOutContentNode = rc.Get<GameObject>("haveBeenOutContent" + i);
  151. uIStartFightRoomPlayerCom.haveBeenOutContentNode = haveBeenOutContentNode;
  152. self.uIStartFightRoomPlayerComs.Add(uIStartFightRoomPlayerCom);
  153. playerObj.SetActive(false);
  154. var playChatObj = rc.Get<GameObject>("playChatObj" + i);
  155. self.playChatObjList.Add(playChatObj);
  156. }
  157. //操作
  158. self.operatorObj = rc.Get<GameObject>("operatorObj");
  159. self.operatorObj.SetActive(false);
  160. for (int i = 1;i <= 5;i++)
  161. {
  162. int operatorIndex = 1;
  163. var operatorObjBtn = rc.Get<GameObject>("operatorBtn" + i);
  164. var btn = operatorObjBtn.GetComponent<Button>();
  165. operatorIndex = i;
  166. btn.onClick.AddListener(()=>
  167. {
  168. self.OnOperatorBtn(operatorIndex);
  169. });
  170. self.operatorObj_btn.Add(operatorObjBtn);
  171. }
  172. self.Init();
  173. }
  174. }
  175. private static async void Init(this UIStartFightRoomComponent self)
  176. {
  177. self.RepeatedTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.fightTimeShow, self);
  178. var startFightRoomInfo = self.ClientScene().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  179. CommonBridge.Instance.dispathPush += DispathPush;
  180. self.readyBtn.SetActive(true);
  181. self.inviteBtn.SetActive(true);
  182. self.houseIdTxt.GetComponent<Text>().text = startFightRoomInfo.roomInfo.RoomId.ToString();
  183. self.gameNumTxt.GetComponent<Text>().text = startFightRoomInfo.roomInfo.OwnerId.ToString();
  184. self.curResidueTxt.GetComponent<Text>().text = "0";
  185. await SoundManager.Instance.PlaySound("common_playing", true);
  186. }
  187. private static void DispathPush(Scene scene, object type)
  188. {
  189. var ui = scene.GetComponent<UIComponent>().Get(UIType.UIStartFightRoom);
  190. var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  191. switch (type)
  192. {
  193. case EventType.JoinRoomPush:
  194. {
  195. var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>();
  196. //处理其他玩家信息
  197. for (int i = 1; i < startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count; i++)
  198. {
  199. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false);
  200. }
  201. if (startFightRoomInfo.roomInfo.OtherInfo != null && startFightRoomInfo.roomInfo.OtherInfo.Count > 0)
  202. {
  203. for (int i = 0; i < startFightRoomInfo.roomInfo.OtherInfo.Count; i++)
  204. {
  205. var otherPlayInfo = startFightRoomInfo.roomInfo.OtherInfo[i];
  206. if (i >= startFightRoomComponentUI.uIStartFightRoomPlayerComs.Count - 1)
  207. {
  208. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(false);
  209. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playName.text = "";
  210. }
  211. else
  212. {
  213. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true);
  214. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(false);
  215. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i + 1].playName.text = startFightRoomInfo.roomInfo.OtherInfo[i].name;
  216. }
  217. }
  218. }
  219. RefreshOrientation(startFightRoomInfo.roomInfo.MyInfo.pos, startFightRoomComponentUI);
  220. break;
  221. }
  222. case EventType.ReadyPush:
  223. {
  224. var startFightRoomComponent = ui.GetComponent<UIStartFightRoomComponent>();
  225. //先处理自己的信息
  226. if (startFightRoomInfo.roomInfo.MyInfo != null)
  227. {
  228. startFightRoomComponent.readyBtn.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 0);
  229. startFightRoomComponent.inviteBtn.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 0);
  230. startFightRoomComponent.uIStartFightRoomPlayerComs[0].playerObj.SetActive(true);
  231. startFightRoomComponent.faceAndVideoObj.SetActive(true);
  232. startFightRoomComponent.uIStartFightRoomPlayerComs[0].readyImage.SetActive(startFightRoomInfo.roomInfo.MyInfo.state == 1);
  233. }
  234. //处理其他玩家信息
  235. for (int i = 1;i < startFightRoomComponent.uIStartFightRoomPlayerComs.Count;i++)
  236. {
  237. startFightRoomComponent.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false);
  238. }
  239. if (startFightRoomInfo.roomInfo.OtherInfo != null && startFightRoomInfo.roomInfo.OtherInfo.Count > 0)
  240. {
  241. for (int i = 0; i < startFightRoomInfo.roomInfo.OtherInfo.Count; i++)
  242. {
  243. var otherPlayInfo = startFightRoomInfo.roomInfo.OtherInfo[i];
  244. if (i >= startFightRoomComponent.uIStartFightRoomPlayerComs.Count - 1)
  245. {
  246. startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(false);
  247. }
  248. else
  249. {
  250. startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].playerObj.SetActive(true);
  251. startFightRoomComponent.uIStartFightRoomPlayerComs[i + 1].readyImage.SetActive(otherPlayInfo.state == 1);
  252. }
  253. }
  254. }
  255. break;
  256. }
  257. case EventType.ReadyStartPush:
  258. {
  259. //开始 倒计时
  260. Log.Error("@@@@@ 倒计时: " + startFightRoomInfo.readyStartTimeCount);
  261. var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>();
  262. startFightRoomComponentUI.startTimeCount = startFightRoomInfo.readyStartTimeCount;
  263. startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI);
  264. break;
  265. }
  266. case EventType.GameStartPush:
  267. case EventType.GameDrawCardPush:
  268. case EventType.GameOperationPush:
  269. case EventType.KickPush:
  270. {
  271. //正式开始 发牌
  272. var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>();
  273. RefreshPlayCardList(scene, startFightRoomInfo, startFightRoomComponentUI);
  274. break;
  275. }
  276. case EventType.GameDisCardPush:
  277. {
  278. //其他玩家出推送,处理自己的操作
  279. var startFightRoomComponentUI = ui.GetComponent<UIStartFightRoomComponent>();
  280. var roomInfo = startFightRoomInfo.roomInfo;
  281. var myCardInfo = roomInfo.MyInfo;
  282. var roleInfo = scene.GetComponent<RoleInfoComponment>().GetRoleInfo();
  283. if (myCardInfo != null && myCardInfo.cardInfo != null && myCardInfo.cardInfo.Acts.Count > 0 && roleInfo.roleId == myCardInfo.id)
  284. {
  285. //处理操作按钮
  286. for (int i = 0;i < startFightRoomComponentUI.operatorObj_btn.Count;i++)
  287. {
  288. startFightRoomComponentUI.operatorObj_btn[i].SetActive(false);
  289. }
  290. for (int i = 0; i < myCardInfo.cardInfo.Acts.Count; i++)
  291. {
  292. if (myCardInfo.cardInfo.Acts[i] == 1)
  293. {
  294. if (!startFightRoomComponentUI.operatorObj.activeInHierarchy)
  295. {
  296. startFightRoomComponentUI.operatorObj.SetActive(true);
  297. }
  298. startFightRoomComponentUI.operatorObj_btn[i].SetActive(true);
  299. }
  300. }
  301. //重置所有牌的状态
  302. var parentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[0].fightCardNode;
  303. for (int i = 0;i < parentNode.transform.childCount;i++)
  304. {
  305. StartFightCardItem startFightCardItem = parentNode.transform.GetChild(i).gameObject.GetComponent<StartFightCardItem>();
  306. startFightCardItem.GetDown();
  307. }
  308. GameObjectPool.Instance.ClearRealySelCardList();
  309. //抬起
  310. if (myCardInfo.cardInfo != null && myCardInfo.cardInfo.ActInfo != null && myCardInfo.cardInfo.ActInfo.Count > 0 && roleInfo.roleId == myCardInfo.id)
  311. {
  312. for (int i = 0; i < myCardInfo.cardInfo.ActInfo.Count; i++)
  313. {
  314. //根据服务器信息 弹起响应的牌
  315. DisCardPushWithOperator(parentNode.transform, myCardInfo.cardInfo.ActInfo[i]);
  316. }
  317. }
  318. //记录当前出的牌
  319. GameUtil.Instance.curCardVal = startFightRoomInfo.roomInfo.CurDisCard;
  320. Log.Error("当前出的牌: " + GameUtil.Instance.curCardVal);
  321. }
  322. if (startFightRoomInfo.roomInfo.Time > 0)
  323. {
  324. startFightRoomComponentUI.startTimeCount = startFightRoomInfo.roomInfo.Time;
  325. startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI);
  326. }
  327. else
  328. {
  329. Log.Error("清空回合倒计时");
  330. if (startFightRoomComponentUI.startTimer > 0)
  331. {
  332. startFightRoomComponentUI.timeCountTxt.text = "";
  333. TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer);
  334. }
  335. }
  336. break;
  337. }
  338. case EventType.HGHHSettlementPush:
  339. {
  340. Log.Error("@#@#@@@@@ " + startFightRoomInfo.settlementInfo.CurRound);
  341. break;
  342. }
  343. }
  344. }
  345. #region 右上系统部分
  346. public static void OnMenuBtn(this UIStartFightRoomComponent self)
  347. {
  348. self.menuPanel.SetActive(!self.menuPanel.activeInHierarchy);
  349. }
  350. public static async void OnFaceBtn(this UIStartFightRoomComponent self)
  351. {
  352. await SoundManager.Instance.PlaySound("clickbtnsound");
  353. self.facePanel.SetActive(true);
  354. self.LoadChatData(0);
  355. }
  356. public static void OnVideoBtn(this UIStartFightRoomComponent self)
  357. {
  358. }
  359. #endregion
  360. #region 菜单
  361. public static void OnMenuPanelClose(this UIStartFightRoomComponent self)
  362. {
  363. self.menuPanel.SetActive(false);
  364. }
  365. public static async void OnMenuPanelBack(this UIStartFightRoomComponent self)
  366. {
  367. Action<object> myAction = (param) =>
  368. {
  369. int result = (int)param;
  370. if (result == 1)
  371. {
  372. self.ReturnMainUI().Coroutine();
  373. }
  374. };
  375. Dictionary<string,object> dic = new Dictionary<string, object>()
  376. {
  377. { "callback",myAction},
  378. { "title","提示"},
  379. { "content","返回大厅,你的房间仍会保留。"},
  380. { "yesTxt","确定"},
  381. { "cancelTxt","取消"},
  382. };
  383. await SoundManager.Instance.PlaySound("clickbtnsound");
  384. await UIHelper.Create(self.ClientScene(), UIType.UIAlert, UILayer.High, dic);
  385. }
  386. public static void OnMenuPanelQuit(this UIStartFightRoomComponent self)
  387. {
  388. }
  389. public static void OnMenuPanelSetting(this UIStartFightRoomComponent self)
  390. {
  391. }
  392. #endregion
  393. #region 表情
  394. public static async void OnFaceFastToggleBtn(this UIStartFightRoomComponent self,int index)
  395. {
  396. await SoundManager.Instance.PlaySound("clickbtnsound");
  397. self.LoadChatData(index);
  398. }
  399. static async void LoadChatData(this UIStartFightRoomComponent self, int index)
  400. {
  401. self.listFaceGridBg.SetActive(false);
  402. self.listFastGridBg.SetActive(false);
  403. string[] abName = new string[] { "com_bg1", "com_bg2" };
  404. await ResourcesComponentHelper.Instance.LoadSprite(self.ClientScene(), "commonatlas");
  405. Sprite sprite = ResourcesComponentHelper.Instance.GetSprite("commonatlas", abName[0]);
  406. Sprite sprite1 = ResourcesComponentHelper.Instance.GetSprite("commonatlas", abName[1]);
  407. self.fastToggleBtn.GetComponent<UnityEngine.UI.Image>().sprite = index == 0 ? sprite: sprite1;
  408. self.faceToggleBtn.GetComponent<UnityEngine.UI.Image>().sprite = index == 1 ? sprite : sprite1;
  409. self.CleanChatItem(index);
  410. if (index == 0)
  411. {
  412. self.listFastGridBg.SetActive(true);
  413. var startFightRoomInfo = self.ClientScene().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  414. int sexType = startFightRoomInfo.roomInfo.MyInfo.sex;
  415. var fightConfig = FightChatConfigCategory.Instance.GetAll();
  416. var achievedDic = fightConfig.Where(kvp => kvp.Value.Type == sexType);
  417. foreach (var item in achievedDic)
  418. {
  419. if (GameObjectPool.Instance.chatFastItemPools.Count > 0)
  420. {
  421. GameObject uiFastItem = GameObjectPool.Instance.chatFastItemPools[0];
  422. GameObjectPool.Instance.chatFastItemPools.RemoveAt(0);
  423. uiFastItem.SetActive(true);
  424. uiFastItem.transform.SetParent(self.listFastContent.transform, false);
  425. var txt = uiFastItem.GetComponentInChildren<UnityEngine.UI.Text>();
  426. txt.text = item.Value.Desc;
  427. var btn = txt.gameObject.GetComponent<Button>();
  428. btn.onClick.RemoveAllListeners();
  429. btn.onClick.AddListener(async () =>
  430. {
  431. Log.Error("btn click1: " + item.Value.Desc + " vedio: " + item.Value.VedioPath);
  432. await SoundManager.Instance.PlaySound(item.Value.VedioPath);
  433. self.facePanel.SetActive(false);
  434. self.playChatObjList[0].SetActive(true);
  435. var playChatTxt = self.playChatObjList[0].GetComponentInChildren<UnityEngine.UI.Text>();
  436. playChatTxt.text = item.Value.Desc;
  437. await TimerComponent.Instance.WaitAsync(3000);
  438. self.playChatObjList[0].SetActive(false);
  439. });
  440. }
  441. else
  442. {
  443. var uiFastItem = GameUtil.Instance.InitializeObj(self.gridFastItem);
  444. uiFastItem.gameObject.SetActive(true);
  445. uiFastItem.transform.SetParent(self.listFastContent.transform, false);
  446. var txt = uiFastItem.GetComponentInChildren<UnityEngine.UI.Text>();
  447. txt.text = item.Value.Desc;
  448. var btn = txt.gameObject.GetComponent<Button>();
  449. btn.onClick.RemoveAllListeners();
  450. btn.onClick.AddListener(async () =>
  451. {
  452. Log.Error("btn click1: " + item.Value.Desc + " vedio: " + item.Value.VedioPath);
  453. await SoundManager.Instance.PlaySound(item.Value.VedioPath);
  454. self.facePanel.SetActive(false);
  455. self.playChatObjList[0].SetActive(true);
  456. var playChatTxt = self.playChatObjList[0].GetComponentInChildren<UnityEngine.UI.Text>();
  457. playChatTxt.text = item.Value.Desc;
  458. await TimerComponent.Instance.WaitAsync(3000);
  459. self.playChatObjList[0].SetActive(false);
  460. });
  461. }
  462. }
  463. }
  464. else
  465. {
  466. }
  467. }
  468. static void CleanChatItem(this UIStartFightRoomComponent self,int index)
  469. {
  470. Transform node = null;
  471. List<GameObject> list = null;
  472. if (index == 0)
  473. {
  474. node = self.listFastContent.transform;
  475. list = GameObjectPool.Instance.chatFastItemPools;
  476. }
  477. else
  478. {
  479. node = self.listFaceContent.transform;
  480. list = GameObjectPool.Instance.chatFaceItemPools;
  481. }
  482. for (int i = 0; i < node.childCount; i++)
  483. {
  484. var child = node.GetChild(i);
  485. list.Add(child.gameObject);
  486. child.gameObject.SetActive(false);
  487. }
  488. }
  489. #endregion
  490. #region 邀请以及准备
  491. public static void OnReadyAndInviteBtn(this UIStartFightRoomComponent self, int index)
  492. {
  493. if (index == 0)
  494. {
  495. self.ReadyRes().Coroutine();
  496. }
  497. else
  498. {
  499. //邀请
  500. }
  501. }
  502. #endregion
  503. public static void SetBattery()
  504. {
  505. //var level = SystemInfo.batteryLevel == -1 ? 1 : SystemInfo.batteryLevel;
  506. //batteryLevelImg.fillAmount = level;
  507. //batteryTxt.text = (level * 100).ToString() + "%";
  508. //var isCharging = SystemInfo.batteryStatus == BatteryStatus.Charging;
  509. //charging.gameObject.SetActive(isCharging);
  510. }
  511. static async ETTask ReturnMainUI(this UIStartFightRoomComponent self)
  512. {
  513. var scene = self.ClientScene();
  514. await UIHelper.Remove(scene, UIType.UIStartFightRoom);
  515. var startFightRoomInfo = scene.GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  516. Dictionary<string, object> dic = new Dictionary<string, object>()
  517. {
  518. { "result",1},
  519. { "roomId",startFightRoomInfo.roomInfo.RoomId.ToString()}
  520. };
  521. await UIHelper.Create(scene, UIType.UIMain, UILayer.Mid, dic);
  522. }
  523. static async ETTask ReadyRes(this UIStartFightRoomComponent self)
  524. {
  525. //try
  526. {
  527. var scene = self.ClientScene();
  528. var session = scene.GetComponent<SessionComponent>().Session;
  529. if (session != null)
  530. {
  531. G2C_HGHHReady g2Ready = (G2C_HGHHReady)await session.Call(
  532. new C2G_HGHHReady() { });
  533. if (g2Ready.Error != ErrorCode.ERR_Success)
  534. {
  535. Log.Error($"g2Ready错误...errCode={g2Ready.Error}" + " mess: " + g2Ready.Message);
  536. return;
  537. }
  538. }
  539. }
  540. //catch (Exception e)
  541. //{
  542. // Log.Error($"准备出错...{e.Message}");
  543. //}
  544. }
  545. public static async void OnCloseAsync(this UIStartFightRoomComponent self)
  546. {
  547. await UIHelper.Remove(self.ClientScene(),UIType.UIStartFightRoom);
  548. }
  549. //操作请求
  550. public static async void OnOperatorBtn(this UIStartFightRoomComponent self, int operatorIndex)
  551. {
  552. var startFightRoomInfo = GameUtil.Instance.GetSceneComponent().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  553. int sexType = startFightRoomInfo.roomInfo.MyInfo.sex;
  554. switch (operatorIndex)
  555. {
  556. //1-5 吃碰杠胡过
  557. case 1:
  558. {
  559. //吃
  560. //var list = GameObjectPool.Instance.GetRealySelCardList();
  561. //if (list == null || list.Count <= 0 || list.Count > 3)
  562. //{
  563. // await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list));
  564. // return;
  565. //}
  566. //var isSequence = GameUtil.Instance.CheckIsSequence(list);
  567. //if (!isSequence)
  568. //{
  569. // await CommonUtil.Instance.OpenCommonServerMsgPanel("出牌不符合条件,请重新调整 " + string.Join(", ", list));
  570. // return;
  571. //}
  572. int cardVal = GameUtil.Instance.curRequestCardVal;
  573. Log.Error("当前吃牌请求发送的值: " + cardVal);
  574. Dictionary<string, object> dic = new Dictionary<string, object>()
  575. {
  576. { "OpType",operatorIndex},
  577. { "Card",cardVal}
  578. };
  579. await RequestServerUtil.Instance.OpenRequestServer(HGHHMessage.C2G_HGHHOperation, dic,async (messageObj, errorCode) =>
  580. {
  581. if (errorCode != ErrorCode.ERR_Success)
  582. {
  583. await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}");
  584. return;
  585. }
  586. string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName;
  587. await SoundManager.Instance.PlaySound(string.Concat(soundStrType, "chi"));
  588. self.operatorObj.SetActive(false);
  589. });
  590. break;
  591. }
  592. case 2:
  593. case 3:
  594. case 5:
  595. {
  596. var cardType = 0;
  597. if (operatorIndex == 2)
  598. {
  599. var list = GameObjectPool.Instance.GetRealySelCardList();
  600. cardType = list[0];
  601. }
  602. //peng 杠 guo
  603. Dictionary<string, object> dic = new Dictionary<string, object>()
  604. {
  605. { "OpType",operatorIndex},
  606. { "Card",cardType}
  607. };
  608. await RequestServerUtil.Instance.OpenRequestServer(HGHHMessage.C2G_HGHHOperation, dic, async (messageObj, errorCode) =>
  609. {
  610. if (errorCode != ErrorCode.ERR_Success)
  611. {
  612. await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}");
  613. return;
  614. }
  615. self.operatorObj.SetActive(false);
  616. if (operatorIndex == 2 || operatorIndex == 3)
  617. {
  618. string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName;
  619. string destSoundStr = operatorIndex == 2? "peng": "hu";
  620. await SoundManager.Instance.PlaySound(string.Concat(soundStrType, destSoundStr));
  621. }
  622. });
  623. break;
  624. }
  625. case 4:
  626. {
  627. //胡
  628. int cardVal = GameUtil.Instance.curRequestCardVal;
  629. Log.Error("当前杠牌请求发送的值: " + cardVal);
  630. Dictionary<string, object> dic = new Dictionary<string, object>()
  631. {
  632. { "OpType",operatorIndex},
  633. { "Card",cardVal}
  634. };
  635. await RequestServerUtil.Instance.OpenRequestServer(HGHHMessage.C2G_HGHHOperation, dic, async (messageObj, errorCode) =>
  636. {
  637. if (errorCode != ErrorCode.ERR_Success)
  638. {
  639. await CommonUtil.Instance.OpenCommonServerMsgPanel($"操作失败,errCode={errorCode},operatorType={operatorIndex}");
  640. return;
  641. }
  642. self.operatorObj.SetActive(false);
  643. string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName;
  644. await SoundManager.Instance.PlaySound(string.Concat(soundStrType, "gang"));
  645. });
  646. break;
  647. }
  648. }
  649. }
  650. public static async void RefreshPlayCardList(Scene scene,StartFightRoomInfo startFightRoomInfo, UIStartFightRoomComponent startFightRoomComponentUI)
  651. {
  652. var allPos = GetPosList(startFightRoomInfo.roomInfo.MyInfo.pos);
  653. List<PlayerInfo> allPlayerInfo = new List<PlayerInfo>();
  654. allPlayerInfo.Add(startFightRoomInfo.roomInfo.MyInfo);
  655. allPlayerInfo.AddRange(startFightRoomInfo.roomInfo.OtherInfo);
  656. var roleInfo = scene.GetComponent<RoleInfoComponment>().GetRoleInfo();
  657. for (int i = 0; i < allPos.Count; i++)
  658. {
  659. var playInfo = GetOtherPlayInfoByPos(allPlayerInfo, allPos[i]);
  660. if (playInfo == null)
  661. {
  662. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(false);
  663. }
  664. else
  665. {
  666. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playerObj.SetActive(true);
  667. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].readyImage.SetActive(false);
  668. //身上的牌列表
  669. var fightCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].fightCardNode;
  670. //已出过牌的列表
  671. var disCardParentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].disCardsNode;
  672. //操作过的 如 吃 碰 杠 列表
  673. var haveBeenOutContentNode = startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].haveBeenOutContentNode;
  674. //playInfo.cardInfo.RemainCards
  675. if (roleInfo.roleId == playInfo.id)
  676. {
  677. playInfo.cardInfo.RemainCards.Sort();
  678. }
  679. int type = i;
  680. if (i == 0 || i == 2)
  681. {
  682. type = 0;
  683. }
  684. CleanCardItemList(fightCardParentNode.transform, 0, type);
  685. for (int p = 0; p < playInfo.cardInfo.RemainCardsNum; p++)
  686. {
  687. if (GameObjectPool.Instance.fightCardItemPools.Count > 0 && GameObjectPool.Instance.fightCardItemPools.ContainsKey(type) && GameObjectPool.Instance.fightCardItemPools[type].Count > 0)
  688. {
  689. GameObject uifightItem = GameObjectPool.Instance.fightCardItemPools[type][0];
  690. GameObjectPool.Instance.fightCardItemPools[type].RemoveAt(0);
  691. uifightItem.gameObject.SetActive(true);
  692. uifightItem.transform.SetParent(fightCardParentNode.transform, false);
  693. if (roleInfo.roleId == playInfo.id)
  694. {
  695. var value = playInfo.cardInfo.RemainCards[p];
  696. StartFightCardItem startFightCardItem = uifightItem.GetComponent<StartFightCardItem>();
  697. if (startFightCardItem == null)
  698. startFightCardItem = uifightItem.AddComponent<StartFightCardItem>();
  699. startFightCardItem.Init(uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(), value, (val) =>
  700. {
  701. if (playInfo.pos != startFightRoomInfo.roomInfo.OpPos || playInfo.id != startFightRoomInfo.roomInfo.OpId)
  702. {
  703. Log.Error($"@@@ 不是自己回合 state: {playInfo.state} ===>opPos: {startFightRoomInfo.roomInfo.OpPos} ===> ID:{playInfo.id} ===> opId: {startFightRoomInfo.roomInfo.OpId}");
  704. return;
  705. }
  706. DisCardRequest(val, startFightRoomComponentUI).Coroutine();
  707. });
  708. }
  709. else
  710. {
  711. string spiring = "";
  712. switch (i)
  713. {
  714. case 1:
  715. {
  716. //右
  717. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, "0");
  718. break;
  719. }
  720. case 2:
  721. {
  722. //shang
  723. spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, "0");
  724. break;
  725. }
  726. case 3:
  727. {
  728. //zuo
  729. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, "0");
  730. break;
  731. }
  732. }
  733. var sprite = await GameObjectPool.Instance.AcquireSprite(spiring);
  734. UnityEngine.UI.Image icon = uifightItem.GetComponentInChildren<UnityEngine.UI.Image>();
  735. icon.sprite = sprite;
  736. var btn = icon.gameObject.GetComponent<Button>();
  737. btn.onClick.RemoveAllListeners();
  738. //btn.onClick.AddListener(() =>
  739. //{
  740. // Log.Error("card Click...");
  741. //});
  742. }
  743. }
  744. else
  745. {
  746. if (roleInfo.roleId == playInfo.id)
  747. {
  748. var uifightItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(0));
  749. uifightItem.SetActive(true);
  750. uifightItem.transform.SetParent(fightCardParentNode.transform, false);
  751. var value = playInfo.cardInfo.RemainCards[p];
  752. StartFightCardItem startFightCardItem = uifightItem.GetComponent<StartFightCardItem>();
  753. if (startFightCardItem == null)
  754. startFightCardItem = uifightItem.AddComponent<StartFightCardItem>();
  755. startFightCardItem.Init(uifightItem.GetComponentInChildren<UnityEngine.UI.Image>(), value, (val) =>
  756. {
  757. if (playInfo.pos != startFightRoomInfo.roomInfo.OpPos || playInfo.id != startFightRoomInfo.roomInfo.OpId)
  758. {
  759. Log.Error($"@@@ 不是自己回合 state: {playInfo.state} ===>opPos: {startFightRoomInfo.roomInfo.OpPos} ===> ID:{playInfo.id} ===> opId: {startFightRoomInfo.roomInfo.OpId}");
  760. return;
  761. }
  762. DisCardRequest(val, startFightRoomComponentUI).Coroutine();
  763. });
  764. }
  765. else
  766. {
  767. string spiring = "";
  768. switch (i)
  769. {
  770. case 1:
  771. {
  772. //右
  773. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, "0");
  774. break;
  775. }
  776. case 2:
  777. {
  778. //shang
  779. spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, "0");
  780. break;
  781. }
  782. case 3:
  783. {
  784. //zuo
  785. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, "0");
  786. break;
  787. }
  788. }
  789. var uifightItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(1));
  790. uifightItem.SetActive(true);
  791. uifightItem.transform.SetParent(fightCardParentNode.transform, false);
  792. var sprite = await GameObjectPool.Instance.AcquireSprite(spiring);
  793. UnityEngine.UI.Image icon = uifightItem.GetComponentInChildren<UnityEngine.UI.Image>();
  794. icon.sprite = sprite;
  795. var btn = icon.gameObject.GetComponent<Button>();
  796. btn.onClick.RemoveAllListeners();
  797. //btn.onClick.AddListener(() =>
  798. //{
  799. // Log.Error("card Click...");
  800. //});
  801. }
  802. }
  803. startFightRoomComponentUI.uIStartFightRoomPlayerComs[i].playName.text = playInfo.name;
  804. }
  805. //已经出过的牌列表
  806. type = i;
  807. if (i == 0 || i == 2)
  808. {
  809. type = 0;
  810. }
  811. CleanCardItemList(disCardParentNode.transform, 1, type);
  812. if (playInfo.cardInfo.DisCards != null && playInfo.cardInfo.DisCards.Count > 0)
  813. {
  814. disCardParentNode.transform.parent.gameObject.SetActive(true);
  815. disCardParentNode.SetActive(true);
  816. for (int l = 0; l < playInfo.cardInfo.DisCards.Count; l++)
  817. {
  818. int value = playInfo.cardInfo.DisCards[l];
  819. if (GameObjectPool.Instance.disCardItemPools.Count > 0 && GameObjectPool.Instance.disCardItemPools.ContainsKey(type) && GameObjectPool.Instance.disCardItemPools[type].Count > 0)
  820. {
  821. GameObject uiDisItem = GameObjectPool.Instance.disCardItemPools[type][0];
  822. GameObjectPool.Instance.disCardItemPools[type].RemoveAt(0);
  823. uiDisItem.gameObject.SetActive(true);
  824. uiDisItem.transform.SetParent(disCardParentNode.transform, false);
  825. string spiring = "";
  826. Vector2 sizeDelta = Vector2.zero;
  827. if (roleInfo.roleId == playInfo.id)
  828. {
  829. spiring = string.Concat(GameSetting.Instance.selfPlayCardShowSpiteName, value);
  830. }
  831. else
  832. {
  833. switch (i)
  834. {
  835. case 1:
  836. {
  837. //右
  838. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, value);
  839. break;
  840. }
  841. case 2:
  842. {
  843. //shang
  844. spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, value);
  845. break;
  846. }
  847. case 3:
  848. {
  849. //zuo
  850. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, value);
  851. break;
  852. }
  853. }
  854. }
  855. var sprite = await GameObjectPool.Instance.AcquireSprite(spiring);
  856. UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>();
  857. icon.sprite = sprite;
  858. //this.icon.gameObject.GetComponent<RectTransform>().sizeDelta = GameUtil.Instance.myHandCardSize;
  859. }
  860. else
  861. {
  862. string spiring = "";
  863. if (roleInfo.roleId == playInfo.id)
  864. {
  865. spiring = string.Concat(GameSetting.Instance.selfPlayCardShowSpiteName, value);
  866. }
  867. else
  868. {
  869. switch (i)
  870. {
  871. case 1:
  872. {
  873. //右
  874. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, value);
  875. break;
  876. }
  877. case 2:
  878. {
  879. //shang
  880. spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, value);
  881. break;
  882. }
  883. case 3:
  884. {
  885. //zuo
  886. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, value);
  887. break;
  888. }
  889. }
  890. }
  891. var uiDisItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(roleInfo.roleId == playInfo.id?0:1));
  892. uiDisItem.SetActive(true);
  893. uiDisItem.transform.SetParent(disCardParentNode.transform, false);
  894. var sprite = await GameObjectPool.Instance.AcquireSprite(spiring);
  895. UnityEngine.UI.Image icon = uiDisItem.GetComponentInChildren<UnityEngine.UI.Image>();
  896. icon.sprite = sprite;
  897. }
  898. }
  899. }
  900. //已经操作过 如 碰 吃刚列表
  901. type = i;
  902. if (i == 0 || i == 2)
  903. {
  904. type = 0;
  905. }
  906. CleanCardItemList(haveBeenOutContentNode.transform,2, type);
  907. if (playInfo.cardInfo.UsedInfo != null && playInfo.cardInfo.UsedInfo.Count > 0)
  908. {
  909. haveBeenOutContentNode.transform.parent.gameObject.SetActive(true);
  910. haveBeenOutContentNode.SetActive(true);
  911. var len = playInfo.cardInfo.UsedInfo.Count;
  912. for (int l = 0;l < playInfo.cardInfo.UsedInfo.Count;l++)
  913. {
  914. //这里只存一张 根据类型 自己去补
  915. ActInfo actInfo = playInfo.cardInfo.UsedInfo[l];
  916. List<int> havCardVals = null;
  917. ActInfoType actInfoType = (ActInfoType)actInfo.Type;
  918. switch (actInfoType)
  919. {
  920. case ActInfoType.LightPole:
  921. case ActInfoType.BackPole:
  922. case ActInfoType.DarkPole:
  923. {
  924. havCardVals = new List<int>() { actInfo.Card, actInfo.Card, actInfo.Card, actInfo.Card};
  925. break;
  926. }
  927. case ActInfoType.Peng:
  928. {
  929. havCardVals = new List<int>() { actInfo.Card, actInfo.Card, actInfo.Card};
  930. break;
  931. }
  932. case ActInfoType.Chi:
  933. {
  934. havCardVals = new List<int>() { actInfo.Card, actInfo.Card + 1, actInfo.Card + 2};
  935. break;
  936. }
  937. }
  938. for (int k = 0;k < havCardVals.Count;k++)
  939. {
  940. Log.Error("##@###@@@@@");
  941. if (GameObjectPool.Instance.havCardItemPools.Count > 0 && GameObjectPool.Instance.havCardItemPools.ContainsKey(type) && GameObjectPool.Instance.havCardItemPools[type].Count > 0)
  942. {
  943. GameObject uiHavItem = GameObjectPool.Instance.havCardItemPools[type][0];
  944. GameObjectPool.Instance.havCardItemPools[type].RemoveAt(0);
  945. uiHavItem.gameObject.SetActive(true);
  946. uiHavItem.transform.SetParent(haveBeenOutContentNode.transform, false);
  947. string spiring = "";
  948. if (roleInfo.roleId == playInfo.id)
  949. {
  950. spiring = string.Concat(GameSetting.Instance.selfPlayCardShowSpiteName, havCardVals[k]);
  951. }
  952. else
  953. {
  954. switch (i)
  955. {
  956. case 1:
  957. {
  958. //右
  959. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, havCardVals[k]);
  960. break;
  961. }
  962. case 2:
  963. {
  964. //shang
  965. spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, havCardVals[k]);
  966. break;
  967. }
  968. case 3:
  969. {
  970. //zuo
  971. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, havCardVals[k]);
  972. break;
  973. }
  974. }
  975. }
  976. var sprite = await GameObjectPool.Instance.AcquireSprite(spiring);
  977. UnityEngine.UI.Image icon = uiHavItem.GetComponentInChildren<UnityEngine.UI.Image>();
  978. icon.sprite = sprite;
  979. }
  980. else
  981. {
  982. string spiring = "";
  983. if (roleInfo.roleId == playInfo.id)
  984. {
  985. spiring = string.Concat(GameSetting.Instance.selfPlayCardShowSpiteName, havCardVals[k]);
  986. }
  987. else
  988. {
  989. switch (i)
  990. {
  991. case 1:
  992. {
  993. //右
  994. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByRight, havCardVals[k]);
  995. break;
  996. }
  997. case 2:
  998. {
  999. //shang
  1000. spiring = string.Concat(GameSetting.Instance.selfPlayCardCenterSpiteName, havCardVals[k]);
  1001. break;
  1002. }
  1003. case 3:
  1004. {
  1005. //zuo
  1006. spiring = string.Concat(GameSetting.Instance.otherPlayCardSpiteNameByLeft, havCardVals[k]);
  1007. break;
  1008. }
  1009. }
  1010. }
  1011. var uiHavItem = GameUtil.Instance.InitializeObj(GameUtil.Instance.GetCardCloneItem(roleInfo.roleId == playInfo.id ? 0 : 1));
  1012. uiHavItem.SetActive(true);
  1013. uiHavItem.transform.SetParent(haveBeenOutContentNode.transform, false);
  1014. var sprite = await GameObjectPool.Instance.AcquireSprite(spiring);
  1015. UnityEngine.UI.Image icon = uiHavItem.GetComponentInChildren<UnityEngine.UI.Image>();
  1016. icon.sprite = sprite;
  1017. }
  1018. }
  1019. }
  1020. }
  1021. }
  1022. }
  1023. //处理每个回合倒计时
  1024. Log.Error("当前自己回合");
  1025. startFightRoomComponentUI.startTimeCount = startFightRoomInfo.roomInfo.Time;
  1026. if (startFightRoomComponentUI.startTimer > 0)
  1027. {
  1028. startFightRoomComponentUI.timeCountTxt.text = "";
  1029. TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer);
  1030. }
  1031. startFightRoomComponentUI.startTimer = TimerComponent.Instance.NewRepeatedTimer(ConstValue.fightTimeRefreshTime / 2 + 100, TimerInvokeType.startFightTimeCount, startFightRoomComponentUI);
  1032. //处理当前操作玩家的状态显示
  1033. RefreshCenterOperationState(startFightRoomInfo.roomInfo.OpPos, startFightRoomComponentUI);
  1034. }
  1035. //刷新中间表示当前操作玩家
  1036. public static async void RefreshCenterOperationState(int OpPos, UIStartFightRoomComponent uIStartFightRoomComponent)
  1037. {
  1038. await ResourcesComponentHelper.Instance.LoadSprite(GameUtil.Instance.GetSceneComponent(), "fightatlas");
  1039. string abName = string.Concat("TimePoint",OpPos);
  1040. Sprite sprite = ResourcesComponentHelper.Instance.GetSprite("fightatlas", abName);
  1041. uIStartFightRoomComponent.shakeDiceImage.sprite = sprite;
  1042. }
  1043. public static void RefreshOrientation(int myPos,UIStartFightRoomComponent uIStartFightRoomComponent)
  1044. {
  1045. switch (myPos)
  1046. {
  1047. case 0:
  1048. {
  1049. uIStartFightRoomComponent.dongTxt.text = uIStartFightRoomComponent.orientationList[0];
  1050. uIStartFightRoomComponent.nanTxt.text = uIStartFightRoomComponent.orientationList[1];
  1051. uIStartFightRoomComponent.xiTxt.text = uIStartFightRoomComponent.orientationList[2];
  1052. uIStartFightRoomComponent.beiTxt.text = uIStartFightRoomComponent.orientationList[3];
  1053. break;
  1054. }
  1055. case 1:
  1056. uIStartFightRoomComponent.dongTxt.text = uIStartFightRoomComponent.orientationList[1];
  1057. uIStartFightRoomComponent.nanTxt.text = uIStartFightRoomComponent.orientationList[2];
  1058. uIStartFightRoomComponent.xiTxt.text = uIStartFightRoomComponent.orientationList[3];
  1059. uIStartFightRoomComponent.beiTxt.text = uIStartFightRoomComponent.orientationList[0];
  1060. break;
  1061. case 2:
  1062. uIStartFightRoomComponent.dongTxt.text = uIStartFightRoomComponent.orientationList[2];
  1063. uIStartFightRoomComponent.nanTxt.text = uIStartFightRoomComponent.orientationList[3];
  1064. uIStartFightRoomComponent.xiTxt.text = uIStartFightRoomComponent.orientationList[0];
  1065. uIStartFightRoomComponent.beiTxt.text = uIStartFightRoomComponent.orientationList[1];
  1066. break;
  1067. case 3:
  1068. uIStartFightRoomComponent.dongTxt.text = uIStartFightRoomComponent.orientationList[3];
  1069. uIStartFightRoomComponent.nanTxt.text = uIStartFightRoomComponent.orientationList[0];
  1070. uIStartFightRoomComponent.xiTxt.text = uIStartFightRoomComponent.orientationList[1];
  1071. uIStartFightRoomComponent.beiTxt.text = uIStartFightRoomComponent.orientationList[2];
  1072. break;
  1073. }
  1074. }
  1075. #region 请求相关
  1076. //操作,chi p hu
  1077. public static async ETTask OperationCardRequest(int operationType,int firstCard)
  1078. {
  1079. try
  1080. {
  1081. var scene = GameUtil.Instance.GetSceneComponent();
  1082. var session = scene.GetComponent<SessionComponent>().Session;
  1083. if (session != null)
  1084. {
  1085. G2C_HGHHOperation g2Operation = (G2C_HGHHOperation)await session.Call(
  1086. new C2G_HGHHOperation() { OpType = operationType , Card = firstCard });
  1087. if (g2Operation.Error != ErrorCode.ERR_Success)
  1088. {
  1089. Log.Error($"操作 {operationType} 出错...errCode={g2Operation.Error}");
  1090. return;
  1091. }
  1092. //之后走推送
  1093. }
  1094. }
  1095. catch (Exception e)
  1096. {
  1097. Log.Error($"操作 {operationType} 出错...{e.Message}");
  1098. }
  1099. }
  1100. //出
  1101. public static async ETTask DisCardRequest(int disCard, UIStartFightRoomComponent startFightRoomComponentUI)
  1102. {
  1103. try
  1104. {
  1105. var scene = GameUtil.Instance.GetSceneComponent();
  1106. var session = scene.GetComponent<SessionComponent>().Session;
  1107. if (session != null)
  1108. {
  1109. G2C_HGHHDisCard g2DisCard = (G2C_HGHHDisCard)await session.Call(
  1110. new C2G_HGHHDisCard() { Card = disCard });
  1111. if (g2DisCard.Error != ErrorCode.ERR_Success)
  1112. {
  1113. await CommonUtil.Instance.OpenCommonServerMsgPanel($"出牌{disCard} 出错...errCode={g2DisCard.Error}");
  1114. return;
  1115. }
  1116. var startFightRoomInfo = GameUtil.Instance.GetSceneComponent().GetComponent<StartFightRoomComponment>().GetStartFightRoomInfo();
  1117. int sexType = startFightRoomInfo.roomInfo.MyInfo.sex;
  1118. string soundStrType = sexType == 0 ? GameSetting.Instance.disCardBoySoundName : GameSetting.Instance.disCardGirlSoundName;
  1119. await SoundManager.Instance.PlaySound(string.Concat(soundStrType, disCard));
  1120. //出牌之后 暂停回合倒计时
  1121. if (startFightRoomComponentUI.startTimer > 0)
  1122. {
  1123. startFightRoomComponentUI.timeCountTxt.text = "";
  1124. TimerComponent.Instance?.Remove(ref startFightRoomComponentUI.startTimer);
  1125. }
  1126. startFightRoomComponentUI.shakeDiceImage.sprite = null;
  1127. //之后走推送
  1128. }
  1129. }
  1130. catch (Exception e)
  1131. {
  1132. Log.Error($"操作 {disCard} 出错...{e.Message}");
  1133. }
  1134. }
  1135. #endregion
  1136. //type 上下0 右1 左2
  1137. public static void CleanCardItemList(Transform node,int index,int type)
  1138. {
  1139. Dictionary<int, List<GameObject>> tempList = null;
  1140. switch (index)
  1141. {
  1142. case 0:
  1143. {
  1144. tempList = GameObjectPool.Instance.fightCardItemPools;
  1145. break;
  1146. }
  1147. case 1:
  1148. {
  1149. tempList = GameObjectPool.Instance.disCardItemPools;
  1150. break;
  1151. }
  1152. case 2:
  1153. {
  1154. tempList = GameObjectPool.Instance.havCardItemPools;
  1155. break;
  1156. }
  1157. }
  1158. for (int i = 0;i < node.childCount;i++)
  1159. {
  1160. var child = node.GetChild(i);
  1161. if (tempList.ContainsKey(type))
  1162. {
  1163. tempList[type].Add(child.gameObject);
  1164. }
  1165. else
  1166. {
  1167. tempList.Add(type, new List<GameObject>() { child.gameObject });
  1168. }
  1169. StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>();
  1170. if(startFightCardItem != null)
  1171. startFightCardItem.GetDown();
  1172. child.gameObject.SetActive(false);
  1173. }
  1174. }
  1175. public static void DisCardPushWithOperator(Transform node, ActInfo actInfo)
  1176. {
  1177. Log.Error("@@@当前牌: " + actInfo.Card);
  1178. ActInfoType actInfoType = (ActInfoType)actInfo.Type;
  1179. switch (actInfoType)
  1180. {
  1181. case ActInfoType.LightPole:
  1182. case ActInfoType.BackPole:
  1183. case ActInfoType.DarkPole:
  1184. {
  1185. var cardVal = actInfo.Card;
  1186. int loopIndex = 1;
  1187. for (int i = 0; i < node.childCount; i++)
  1188. {
  1189. if (loopIndex >= 3)
  1190. {
  1191. break;
  1192. }
  1193. var child = node.GetChild(i);
  1194. StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>();
  1195. if (startFightCardItem.val == cardVal)
  1196. {
  1197. startFightCardItem.StandUp();
  1198. loopIndex++;
  1199. }
  1200. }
  1201. break;
  1202. }
  1203. case ActInfoType.Peng:
  1204. {
  1205. var cardVal = actInfo.Card;
  1206. int loopIndex = 0;
  1207. for (int i = 0; i < node.childCount; i++)
  1208. {
  1209. if (loopIndex >= 2)
  1210. {
  1211. break;
  1212. }
  1213. var child = node.GetChild(i);
  1214. StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>();
  1215. if (startFightCardItem.val == cardVal)
  1216. {
  1217. startFightCardItem.StandUp();
  1218. loopIndex++;
  1219. }
  1220. }
  1221. break;
  1222. }
  1223. case ActInfoType.Chi:
  1224. {
  1225. var cardVal = actInfo.Card;
  1226. bool IsExist(List<int> cardVals,int cardVal,out int outCardVal)
  1227. {
  1228. outCardVal = 0;
  1229. for (int i = 0;i < cardVals.Count;i++)
  1230. {
  1231. if (cardVals[i] == cardVal)
  1232. {
  1233. outCardVal = cardVal;
  1234. return true;
  1235. }
  1236. }
  1237. return false;
  1238. }
  1239. List<int> cardVals = new List<int>() { cardVal, cardVal + 1, cardVal + 2};
  1240. List<int> tempCards = new List<int>();
  1241. //发1
  1242. //出2 1233
  1243. for (int i = 0; i < node.childCount; i++)
  1244. {
  1245. var child = node.GetChild(i);
  1246. StartFightCardItem startFightCardItem = child.gameObject.GetComponent<StartFightCardItem>();
  1247. int outCardVal = 0;
  1248. if (IsExist(cardVals, startFightCardItem.val,out outCardVal))
  1249. {
  1250. Log.Error("##### startFightCardItem.val: " + startFightCardItem.val + " outCardVal: " + outCardVal);
  1251. if (outCardVal == GameUtil.Instance.curCardVal || tempCards.Contains(startFightCardItem.val))
  1252. {
  1253. continue;
  1254. }
  1255. startFightCardItem.StandUp();
  1256. tempCards.Add(startFightCardItem.val);
  1257. }
  1258. }
  1259. GameUtil.Instance.curRequestCardVal = cardVal;
  1260. break;
  1261. }
  1262. }
  1263. }
  1264. public static PlayerInfo GetOtherPlayInfoByPos(List<PlayerInfo> allPlayerInfos,int pos)
  1265. {
  1266. for (int i = 0;i < allPlayerInfos.Count;i++)
  1267. {
  1268. if (allPlayerInfos[i].pos == pos)
  1269. {
  1270. return allPlayerInfos[i];
  1271. }
  1272. }
  1273. return null;
  1274. }
  1275. //根据自己位置 确定其他座位
  1276. public static List<int> GetPosList(int myPos)
  1277. {
  1278. List<int> list = null;
  1279. switch (myPos)
  1280. {
  1281. case 0:
  1282. {
  1283. list = new List<int>() { 0,1,2,3};
  1284. break ;
  1285. }
  1286. case 1:
  1287. {
  1288. list = new List<int>() { 1,2,3,0};
  1289. break;
  1290. }
  1291. case 2:
  1292. {
  1293. list = new List<int>() { 2,3,0,1};
  1294. break;
  1295. }
  1296. case 3:
  1297. {
  1298. list = new List<int>() { 3,0,1,2};
  1299. break;
  1300. }
  1301. }
  1302. return list;
  1303. }
  1304. public static void SortList(List<int> list)
  1305. {
  1306. list.Sort();
  1307. }
  1308. [ObjectSystem]
  1309. public class UIStartFightRoomComponentDestroySystem : DestroySystem<UIStartFightRoomComponent>
  1310. {
  1311. protected override void Destroy(UIStartFightRoomComponent self)
  1312. {
  1313. TimerComponent.Instance?.Remove(ref self.RepeatedTimer);
  1314. CommonBridge.Instance.Clear();
  1315. }
  1316. }
  1317. }
  1318. }