UIStartFightRoomComponentSystem.cs 75 KB

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