LeagueMemberView.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. using System.Collections.Generic;
  2. using cfg.GfgCfg;
  3. using ET;
  4. using FairyGUI;
  5. using UI.League;
  6. using UnityEngine;
  7. namespace GFGGame
  8. {
  9. //联盟成员
  10. public class LeagueMemberView : BaseWindow
  11. {
  12. private UI_LeagueMemberUI _ui;
  13. private LeagueData _leagueData;
  14. private List<long> _memberIds;
  15. public override void Dispose()
  16. {
  17. if (_ui != null)
  18. {
  19. _ui.Dispose();
  20. _ui = null;
  21. }
  22. base.Dispose();
  23. }
  24. protected override void OnInit()
  25. {
  26. base.OnInit();
  27. packageName = UI_LeagueMemberUI.PACKAGE_NAME;
  28. _ui = UI_LeagueMemberUI.Create();
  29. this.viewCom = _ui.target;
  30. isfullScreen = true;
  31. isReturnView = true;
  32. _ui.m_btnBack.onClick.Add(OnBtnBackClick);
  33. _ui.m_btnRecruit.target.onClick.Add(OnBtnRecruitClick);
  34. _ui.m_btnApplyList.onClick.Add(OnBtnApplyListClick);
  35. _ui.m_btnMemberLog.onClick.Add(OnBtnMemberLogClick);
  36. _ui.m_btnExit.onClick.Add(OnBtnExitClick);
  37. _ui.m_btnExit1.onClick.Add(OnBtnExitClick);
  38. _ui.m_comChairman.m_comHead.target.onClick.Add(OnShowOhterInfo);
  39. _ui.m_comCoChairman.m_comHead.target.onClick.Add(OnShowOhterInfo);
  40. _ui.m_list.itemRenderer = RenderListItem;
  41. _ui.m_list.SetVirtual();
  42. _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("lm_beijing");
  43. }
  44. protected override void AddEventListener()
  45. {
  46. base.AddEventListener();
  47. EventAgent.AddEventListener(ConstMessage.LEAGUE_MEMBER_CHANGE, UpdateMember);
  48. EventAgent.AddEventListener(ConstMessage.RED_CHANGE, UpdateRedDot);
  49. }
  50. protected override void OnShown()
  51. {
  52. base.OnShown();
  53. UpdateMember();
  54. UpdateBtnRecruit();
  55. UpdateRedDot();
  56. }
  57. protected override void OnHide()
  58. {
  59. base.OnHide();
  60. if (_ui.m_list.numItems > 0) _ui.m_list.ScrollToView(0);
  61. Timers.inst.Remove(OnUpdateTimer);
  62. }
  63. protected override void RemoveEventListener()
  64. {
  65. base.RemoveEventListener();
  66. EventAgent.RemoveEventListener(ConstMessage.LEAGUE_MEMBER_CHANGE, UpdateMember);
  67. EventAgent.RemoveEventListener(ConstMessage.RED_CHANGE, UpdateRedDot);
  68. }
  69. private void OnBtnBackClick()
  70. {
  71. ViewManager.GoBackFrom(typeof(LeagueMemberView).FullName);
  72. }
  73. //招募
  74. private void OnBtnRecruitClick()
  75. {
  76. ItemCfg itemCfg = CommonDataManager.Tables.TblItemCfg.GetOrDefault( CommonDataManager.Tables.TblGlobalCfg.ConsumeWanted[0].ItemId);
  77. long needCount = CommonDataManager.Tables.TblGlobalCfg.ConsumeWanted[0].Count;
  78. long hasCount = ItemDataManager.GetItemNum( CommonDataManager.Tables.TblGlobalCfg.ConsumeWanted[0].ItemId);
  79. if (needCount > hasCount)
  80. {
  81. PromptController.Instance.ShowFloatTextPrompt("消耗不足");
  82. return;
  83. }
  84. string tips = string.Format("是否花费{0}*{1}发布24小时招募成员信息,并临时增加新加入成员上限?", itemCfg.Name, needCount);
  85. AlertUI.Show(tips).
  86. SetLeftButton(true, "取消").
  87. SetRightButton(true, "确认", async (object param) =>
  88. {
  89. bool result = await LeagueSproxy.ReqSendLeagueAD();
  90. if (result)
  91. {
  92. UpdateBtnRecruit();
  93. }
  94. });
  95. }
  96. //申请列表
  97. private void OnBtnApplyListClick()
  98. {
  99. ViewManager.Show<LeagueApplyView>();
  100. }
  101. //联盟日志
  102. private void OnBtnMemberLogClick()
  103. {
  104. ViewManager.Show<LeagueMemberLogView>();
  105. }
  106. //退出联盟
  107. private void OnBtnExitClick()
  108. {
  109. long joinLeagueTime = LeagueDataManager.Instance.LeagueData.LeagueMemberDatas[RoleDataManager.roleId].JoinLeagueTime;
  110. long curTime = TimeHelper.ServerNow();
  111. long ms = (curTime - joinLeagueTime);
  112. if (LeagueDataManager.Instance.LeagueData.OwnerId == RoleDataManager.roleId)
  113. {
  114. AlertUI.Show("一家之主不可无呀,先把会长职位给别人吧~").SetRightButton(true, "确认");
  115. }
  116. else if (ms < TimeUtil.SECOND_PER_DAY * 1000)
  117. {
  118. AlertUI.Show("您加入的时间不足一天").SetRightButton(true, "确认");
  119. }
  120. else if (LeagueDataManager.Instance.CheckTeaPartyRewardCanGet())
  121. {
  122. AlertUI.Show("当前茶话会奖励未领取无法退出雅集,是否前往领取!")
  123. .SetLeftButton(true, "取消")
  124. .SetRightButton(true, "确认", (object param) =>
  125. {
  126. ViewManager.Show<LeagueTeaPartyView>();
  127. });
  128. }
  129. else
  130. {
  131. AlertUI.Show("您忍心退出雅集,离开小伙伴们吗?")
  132. .SetLeftButton(true, "取消")
  133. .SetRightButton(true, "确认", async (object param) =>
  134. {
  135. bool result = await LeagueSproxy.ReqQuitLeague();
  136. if (result)
  137. {
  138. ViewManager.Show<MainUIView>(null, true);
  139. }
  140. });
  141. }
  142. }
  143. private void UpdateMember()
  144. {
  145. int myPos = LeagueDataManager.Instance.GetMyPos();
  146. _ui.m_c1.selectedIndex = myPos == LeaguePos.Owner || myPos == LeaguePos.SubOwner ? 1 : 0;
  147. _leagueData = LeagueDataManager.Instance.LeagueData;
  148. _memberIds = new List<long>(_leagueData.LeagueMemberDatas.Keys);
  149. int ownerIndex = _memberIds.IndexOf(_leagueData.OwnerId);
  150. if (ownerIndex >= 0) _memberIds.RemoveAt(ownerIndex);
  151. int subOwnerIndex = _memberIds.IndexOf(_leagueData.SubOwnerId);
  152. if (subOwnerIndex >= 0) _memberIds.RemoveAt(subOwnerIndex);
  153. _memberIds = SortMemberIds(_memberIds);
  154. _ui.m_list.numItems = _memberIds.Count;
  155. UpdateLeader(_ui.m_comChairman.target, LeagueDataManager.Instance.LeagueData.OwnerId);
  156. UpdateLeader(_ui.m_comCoChairman.target, LeagueDataManager.Instance.LeagueData.SubOwnerId);
  157. }
  158. private void UpdateBtnRecruit()
  159. {
  160. ItemUtil.UpdateItemNeedNum(_ui.m_btnRecruit.m_comcost, CommonDataManager.Tables.TblGlobalCfg.ConsumeWanted[0].ItemId, CommonDataManager.Tables.TblGlobalCfg.ConsumeWanted[0].Count);
  161. int myPos = _leagueData.LeagueMemberDatas[RoleDataManager.roleId].Pos;
  162. bool isLeader = myPos == LeaguePos.Owner || myPos == LeaguePos.SubOwner;
  163. long timeCount = (LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.AdEndTime) - TimeHelper.ServerNow()) / 1000;
  164. _ui.m_btnRecruit.target.touchable = timeCount <= 0;
  165. _ui.m_btnRecruit.m_touchable.selectedIndex = timeCount <= 0 ? 1 : 0;
  166. // _ui.m_btnRecruit.m_comcost.visible = timeCount > 0 ? false : true;
  167. // _ui.m_btnRecruit.m_txtTime.text = "";
  168. if (isLeader && timeCount > 0)
  169. {
  170. _ui.m_btnRecruit.m_txtTime.visible = timeCount > 0 ? true : false;
  171. Timers.inst.Add(1, (int)timeCount, OnUpdateTimer);
  172. }
  173. }
  174. private void OnUpdateTimer(object param)
  175. {
  176. long timeCount = LeagueDataManager.Instance.GetNumeriValue(LeagueNumericType.AdEndTime) - TimeHelper.ServerNow();
  177. if (timeCount <= 0)
  178. {
  179. _ui.m_btnRecruit.target.touchable = true;
  180. _ui.m_btnRecruit.m_touchable.selectedIndex = 1;
  181. // _ui.m_btnRecruit.m_txtTime.text = "";
  182. Timers.inst.Remove(OnUpdateTimer);
  183. }
  184. string time = TimeUtil.FormattingTimeTo_HHmmss(timeCount);
  185. _ui.m_btnRecruit.m_txtTime.text = string.Format("剩余时间: {0}", time);
  186. }
  187. private void UpdateLeader(GObject obj, long roleId)
  188. {
  189. LeagueMemberData memberData = _leagueData.LeagueMemberDatas.ContainsKey(roleId) ? _leagueData.LeagueMemberDatas[roleId] : null;
  190. UI_ComLeader com = UI_ComLeader.Proxy(obj);
  191. if (memberData == null)
  192. {
  193. com.m_txtName.text = "虚位以待";
  194. com.m_txtLvl.text = "--";
  195. com.m_comHead.m_loaIcon.url = "";
  196. com.m_loaHeadBorder.url = "";
  197. com.m_btnAppoint.visible = false;
  198. com.m_loaTitle.url = "";
  199. com.m_comHead.target.data = null;
  200. }
  201. else
  202. {
  203. ItemCfg headCfg = CommonDataManager.Tables.TblItemCfg.GetOrDefault(memberData.RoleInfo.headId == 0 ? ConstItemID.HEADID : memberData.RoleInfo.headId);
  204. ItemCfg headBorderCfg = CommonDataManager.Tables.TblItemCfg.GetOrDefault(memberData.RoleInfo.headBorderId == 0 ? ConstItemID.HEADBORDERID : memberData.RoleInfo.headBorderId);
  205. com.m_comHead.m_loaIcon.url = ResPathUtil.GetHeadPath(headCfg.Res);
  206. com.m_loaHeadBorder.url = "";// ResPathUtil.GetHeadBorderPath(headBorderCfg.res);
  207. com.m_txtLvl.text = memberData.RoleInfo.roleLv.ToString();
  208. com.m_txtName.text = memberData.RoleInfo.roleName;
  209. com.m_loaTitle.url = string.Format("ui://League/lm_chenghao_{0}", memberData.Pos);
  210. com.m_btnAppoint.visible = memberData.Pos == LeaguePos.SubOwner && _leagueData.LeagueMemberDatas[RoleDataManager.roleId].Pos == LeaguePos.Owner;
  211. if (com.m_btnAppoint.data == null)
  212. {
  213. com.m_btnAppoint.onClick.Add(OnBtnAppointClick);
  214. }
  215. com.m_btnAppoint.data = memberData;
  216. com.m_comHead.target.data = roleId;
  217. }
  218. UI_ComLeader.Proxy();
  219. }
  220. private async void OnShowOhterInfo(EventContext context)
  221. {
  222. GObject gObject = context.sender as GObject;
  223. if (gObject.data == null)
  224. {
  225. return;
  226. }
  227. long roleId = (long)gObject.data;
  228. OtherRoleInfoData roleInfoData = LeagueDataManager.Instance.GetMemberRoleInfo(roleId);
  229. OtherRoleInfoDetailData detailData = await RoleInfoSProxy.ReqOtherRoleDetailInfo(roleId);
  230. ViewManager.Show<OtherRoleInfoView>(new object[] { roleInfoData, detailData });
  231. }
  232. private void RenderListItem(int index, GObject obj)
  233. {
  234. LeagueMemberData memberData = _leagueData.LeagueMemberDatas[_memberIds[index]];
  235. UI_ListMemberItem item = UI_ListMemberItem.Proxy(obj);
  236. RoleInfoManager.Instance.UpdateHeadWithLv(item.m_comHead, memberData.RoleInfo.headId, memberData.RoleInfo.headBorderId, memberData.RoleInfo.roleLv);
  237. item.m_txtName.text = memberData.RoleInfo.roleName;
  238. item.m_txtAllContribuation.text = memberData.AllContribution.ToString();
  239. item.m_txtWeekContribuation.text = memberData.AllCoin.ToString();
  240. // item.m_loaTitle.visible = memberData.Pos != LeaguePos.Member;
  241. item.m_loaTitle.url = memberData.Pos == LeaguePos.Member ? "" : string.Format("ui://League/lm_chenghao_{0}", memberData.Pos);
  242. if (memberData.RoleInfo.offlineTimeSec == 0)
  243. {
  244. item.m_txtState.text = "在线";
  245. }
  246. else
  247. {
  248. TimeUtil.FormattingTime(memberData.RoleInfo.offlineTimeSec, TimeHelper.ServerNow(), out int num, out string strState);
  249. strState = strState == "秒" ? "刚刚" : num + strState + "前";
  250. item.m_txtState.text = strState;
  251. }
  252. int myPos = _leagueData.LeagueMemberDatas[RoleDataManager.roleId].Pos;
  253. item.m_btnAppoint.visible = myPos == LeaguePos.Owner || myPos == LeaguePos.SubOwner;
  254. if (item.m_btnAppoint.data == null)
  255. {
  256. item.m_btnAppoint.onClick.Add(OnBtnAppointClick);
  257. }
  258. item.m_btnAppoint.data = memberData;
  259. if (item.m_comHead.data == null)
  260. {
  261. item.m_comHead.onClick.Add(OnShowOhterInfo);
  262. }
  263. item.m_comHead.data = memberData.RoleInfo.roleId;
  264. UI_ListMemberItem.ProxyEnd();
  265. }
  266. private void OnBtnAppointClick(EventContext context)
  267. {
  268. GObject obj = context.sender as GObject;
  269. LeagueMemberData memberData = obj.data as LeagueMemberData;
  270. if (!_leagueData.LeagueMemberDatas.ContainsKey(memberData.RoleInfo.roleId))
  271. {
  272. PromptController.Instance.ShowFloatTextPrompt("该玩家已离开雅集");
  273. return;
  274. }
  275. ViewManager.Show<LeagueMemberAppointView>(memberData);
  276. }
  277. private List<long> SortMemberIds(List<long> memberIds)
  278. {
  279. memberIds.Sort((long a, long b) =>
  280. {
  281. LeagueMemberData memberDataA = _leagueData.LeagueMemberDatas[a];
  282. LeagueMemberData memberDataB = _leagueData.LeagueMemberDatas[b];
  283. if (memberDataA.Pos == LeaguePos.Flower && memberDataB.Pos != LeaguePos.Flower) return -1;
  284. if (memberDataA.Pos != LeaguePos.Flower && memberDataB.Pos == LeaguePos.Flower) return 1;
  285. if (memberDataA.RoleInfo.offlineTimeSec == 0 && memberDataB.RoleInfo.offlineTimeSec != 0) return -1;
  286. if (memberDataA.RoleInfo.offlineTimeSec != 0 && memberDataB.RoleInfo.offlineTimeSec == 0) return 1;
  287. if (memberDataA.AllCoin > memberDataB.AllCoin) return -1;
  288. if (memberDataA.AllCoin < memberDataB.AllCoin) return 1;
  289. if (memberDataA.AllContribution > memberDataB.AllContribution) return -1;
  290. if (memberDataA.AllContribution < memberDataB.AllContribution) return 1;
  291. if (memberDataA.RoleInfo.roleLv > memberDataB.RoleInfo.roleLv) return -1;
  292. if (memberDataA.RoleInfo.roleLv < memberDataB.RoleInfo.roleLv) return 1;
  293. if (memberDataA.RoleInfo.offlineTimeSec > memberDataB.RoleInfo.offlineTimeSec) return -1;
  294. if (memberDataA.RoleInfo.offlineTimeSec < memberDataB.RoleInfo.offlineTimeSec) return 1;
  295. return 0;
  296. });
  297. return memberIds;
  298. }
  299. private void UpdateRedDot()
  300. {
  301. RedDotController.Instance.SetComRedDot(_ui.m_btnApplyList, RedDotDataManager.Instance.GetLeagueMemberJoinRed());
  302. }
  303. }
  304. }