UIStartFightRoomComponentSystem.cs 68 KB

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