using ET; using FairyGUI; using UI.Arena; using UnityEngine; namespace GFGGame { public class ArenaRankView : BaseWindow { private UI_ArenaRankUI _ui; private int _rankType = 0; public override void Dispose() { if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void OnInit() { base.OnInit(); packageName = UI_ArenaUI.PACKAGE_NAME; _ui = UI_ArenaRankUI.Create(); this.viewCom = _ui.target; this.viewCom.Center(); this.modal = true; viewAnimationType = EnumViewAnimationType.ZOOM_CENTER; _ui.m_listRank.SetVirtual(); _ui.m_listRank.itemProvider = GetListItemResource; _ui.m_listRank.itemRenderer = RenderListItem; _ui.m_listRank.scrollPane.onScroll.Add(OnListScroll); _ui.m_c1.onChanged.Add(OnTabChange); _ui.m_c1.onChanged.Add(OnTabChange); } protected override void AddEventListener() { base.AddEventListener(); } protected override void OnShown() { base.OnShown(); _rankType = 0; _ui.m_listRank.numItems = 100; ArenaDataManager.Instance.RankDatasDic.Clear(); ReqRankList(0); } protected override void OnHide() { base.OnHide(); } protected override void RemoveEventListener() { base.RemoveEventListener(); } private void OnTabChange() { if (_ui.m_c1.previsousIndex == 0 && _ui.m_c1.selectedIndex == 1 || _ui.m_c1.previsousIndex == 1 && _ui.m_c1.selectedIndex == 1) { _rankType = ArenaRankType.FRIEND; } else if (_ui.m_c1.previsousIndex == 0 && _ui.m_c1.selectedIndex == 0)//二级页签切换 { if (_ui.m_c2.selectedIndex == 1) { _rankType = ArenaRankType.LAST_SEASON; } else { _rankType = ArenaRankType.NOW_SEASON; } } else if (_ui.m_c1.previsousIndex == 1 && _ui.m_c1.selectedIndex == 0) { _ui.m_c2.selectedIndex = 0; _rankType = ArenaRankType.NOW_SEASON; } } private void OnListScroll() { int itemIndex = _ui.m_listRank.ChildIndexToItemIndex(0); if (itemIndex % 20 == 0) { if (ArenaDataManager.Instance.RankDatasDic.ContainsKey(_rankType)) { if (ArenaDataManager.Instance.RankDatasDic[_rankType].Count < itemIndex) { ReqRankList(itemIndex); } } } } private async void ReqRankList(int index) { bool result = await ArenaSproxy.ReqArenaRank(_rankType, index, index + 19); if (result) { _ui.m_listRank.RefreshVirtualList(); UpdateOtherItem(ArenaDataManager.Instance.SelfData, _ui.m_comMyRank.target, true); } } private string GetListItemResource(int index) { if (index == 0) return "ui://Arena/ListRankItem0"; else if (index == 1) return "ui://Arena/ListRankItem1"; else if (index == 2) return "ui://Arena/ListRankItem2"; else return "ui://Arena/ListRankItem3"; } private void RenderListItem(int index, GObject obj) { ArenaTargetData arenaData = null; if (ArenaDataManager.Instance.RankDatasDic.ContainsKey(_rankType)) { if (ArenaDataManager.Instance.RankDatasDic[_rankType].Count > index) { arenaData = ArenaDataManager.Instance.RankDatasDic[_rankType][index]; } } if (index < 3) { UpdateTopItem(index, arenaData, obj); } else { UpdateOtherItem(arenaData, obj); } } private void UpdateTopItem(int index, ArenaTargetData arenaData, GObject obj) { UI_ListRankItem item = UI_ListRankItem.Proxy(obj.asCom.GetChildAt(0)); item.m_c1.selectedIndex = index; if (arenaData == null) { item.m_txtName.text = "--"; item.m_txtFightScore.text = "竞技场战力:--"; item.m_txtDanRank.text = "段位排行:--"; item.m_loaDanIcon.url = ""; RoleInfoManager.Instance.UpdateLv(item.m_comLv, 0); RoleInfoManager.Instance.UpdateNpcHead(item.m_comHead, ""); } else { item.m_txtName.text = arenaData.RoleInfo.roleName; long fightScore = ArenaDataManager.Instance.GetAllFightScore(arenaData.Type, arenaData.RoleDressupList, arenaData.RobotDressupList); item.m_txtFightScore.text = string.Format("竞技场战力:{0}", fightScore); item.m_txtDanRank.text = string.Format("段位排行:{0}", arenaData.Grade); ArenaViewManager.Instance.UpdateDanIcon(item.m_loaDanIcon, arenaData.Grade); RoleInfoManager.Instance.UpdateLv(item.m_comLv, arenaData.RoleInfo.roleLv); if (arenaData.Type == ArenaFightTargetType.PLAYER) { RoleInfoManager.Instance.UpdateHead(item.m_comHead, arenaData.RoleInfo.headId, 0); } else { RoleInfoManager.Instance.UpdateNpcHead(item.m_comHead, arenaData.RoleInfo.headRes); } } UI_ListRankItem.ProxyEnd(); } private void UpdateOtherItem(ArenaTargetData arenaData, GObject obj, bool isSelf = false) { UI_ListRankItem3 item = UI_ListRankItem3.Proxy(obj); if (arenaData == null) { item.m_txtRank.text = "--"; item.m_txtName.text = "--"; item.m_txtFightScore.text = "竞技场战力:--"; item.m_txtDanRank.text = "段位排行:--"; item.m_loaDanIcon.url = ""; RoleInfoManager.Instance.UpdateLv(item.m_comLv, 0); RoleInfoManager.Instance.UpdateNpcHead(item.m_comHead, ""); } else { item.m_txtRank.text = arenaData.RankInGrade.ToString(); item.m_txtName.text = arenaData.RoleInfo.roleName; long fightScore = ArenaDataManager.Instance.GetAllFightScore(arenaData.Type, arenaData.RoleDressupList, arenaData.RobotDressupList); item.m_txtFightScore.text = string.Format("竞技场战力:{0}", fightScore); item.m_txtDanRank.text = string.Format("段位排行:{0}", arenaData.Grade); ArenaViewManager.Instance.UpdateDanIcon(item.m_loaDanIcon, arenaData.Grade); RoleInfoManager.Instance.UpdateLv(item.m_comLv, arenaData.RoleInfo.roleLv); if (arenaData.Type == ArenaFightTargetType.PLAYER) { RoleInfoManager.Instance.UpdateHead(item.m_comHead, arenaData.RoleInfo.headId, 0); } else { RoleInfoManager.Instance.UpdateNpcHead(item.m_comHead, arenaData.RoleInfo.headRes); } } UI_ListRankItem3.ProxyEnd(); } } }