using System.Linq; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class FairySiegeRankAwardActWin : Window { [SerializeField] Toggle crossPersonalRank; [SerializeField] Toggle crossFamilyRank; [SerializeField] Transform personalRankObj; [SerializeField] Transform familyRankObj; [SerializeField] ScrollerController personalRankScroller; // 个人排行榜含跨服 [SerializeField] ScrollerController familyRankScroller; [SerializeField] Text txtMyRank; [SerializeField] Text txtMyScore; [SerializeField] ButtonEx btnHave; [SerializeField] Image imgHaveRed; [SerializeField] RedpointBehaviour rpRankAwardPlayer; [SerializeField] RedpointBehaviour rpRankAwardFamily; RankModel rankModel { get { return ModelCenter.Instance.GetModel(); } } FairySiegeActModel model { get { return ModelCenter.Instance.GetModel(); } } protected override void BindController() { } protected override void AddListeners() { crossPersonalRank.SetListener(SelectCrossPersonalRank); crossFamilyRank.SetListener(SelectCrossFamilyRank); btnHave.SetListener(() => { if (model.SelectAwardRank == 1) { model.SendAward(1); } else if (model.SelectAwardRank == 2) { model.SendAward(2); } }); } protected override void OnPreOpen() { rpRankAwardPlayer.redpointId = model.GetRedpointId(FairySiegeRedPointType.RankAwardPlayer); rpRankAwardFamily.redpointId = model.GetRedpointId(FairySiegeRedPointType.RankAwardFamily); model.SelectAwardRank = 1; crossPersonalRank.isOn = true; crossFamilyRank.isOn = false; ShowRankPanel(); personalRankScroller.OnRefreshCell += OnRefreshCell; familyRankScroller.OnRefreshCell += OnRefreshFamilyCell; rankModel.onMyRankRefresh += RankModel_onMyRankRefresh; model.UpdateFamilyGCZPlayerInfoEvent += OnUpdateFamilyGCZPlayerInfoEvent; } protected override void OnAfterOpen() { OnCreateRankScroller(); } protected override void OnPreClose() { personalRankScroller.OnRefreshCell -= OnRefreshCell; familyRankScroller.OnRefreshCell -= OnRefreshFamilyCell; rankModel.onMyRankRefresh -= RankModel_onMyRankRefresh; model.UpdateFamilyGCZPlayerInfoEvent += OnUpdateFamilyGCZPlayerInfoEvent; } private void OnUpdateFamilyGCZPlayerInfoEvent() { if (model.SelectAwardRank == 1) { ShowMyRank(); ShowMyRankHave(rankModel.GetMyRank(FairySiegeActModel.crossRankType)); } else if (model.SelectAwardRank == 2) { ShowMyFamilyRank(); ShowMyFamilyRankHave(rankModel.GetMyRank(FairySiegeActModel.crossFamilyRankType)); } } protected override void OnAfterClose() { } private void RankModel_onMyRankRefresh(int type) { if (type == FairySiegeActModel.crossRankType && model.SelectAwardRank == 1) { ShowMyRank(); ShowMyRankHave(rankModel.GetMyRank(FairySiegeActModel.crossRankType)); } else if (type == FairySiegeActModel.crossFamilyRankType && model.SelectAwardRank == 2) { ShowMyFamilyRank(); ShowMyFamilyRankHave(rankModel.GetMyRank(FairySiegeActModel.crossFamilyRankType)); } } private void ShowMyRank(bool isQuery = false) { var myRank = rankModel.GetMyRank(FairySiegeActModel.crossRankType); if (myRank == null) { if (isQuery) { rankModel.QueryCrossRank(FairySiegeActModel.crossRankType, model.operationCrossAct.zoneID, watchID: (int)PlayerDatas.Instance.baseData.PlayerID, forceQuery: true); } txtMyRank.text = Language.Get("L2013", Language.Get("CrossBattleField45"), Language.Get("CrossServer123")); txtMyScore.text = Language.Get("FairySiege142", 0); } else { txtMyRank.text = Language.Get("L2013", Language.Get("CrossBattleField45"), (myRank.index + 1).ToString()); txtMyScore.text = Language.Get("FairySiege142", UIHelper.ReplaceLargeNum(myRank.cmpValue * model.oneHundredMillion + myRank.cmpValue2)); } ShowMyRankHave(myRank); } private void ShowMyRankHave(RankData rankData) { btnHave.SetActive(false); int stateValue; if (!model.TryGetCurrentStateValue(out stateValue)) return; int state = model.GetStateByStateValue(stateValue); if (state != 4) return; bool isHaveAward = model.IsHaveAward(1); btnHave.SetActive(!isHaveAward && rankData != null); } private void ShowMyFamilyRank(bool isQuery = false) { ////跨服我的家族排名 if (PlayerDatas.Instance.baseData.FamilyId == 0) { txtMyRank.text = Language.Get("L2013", Language.Get("L2024"), Language.Get("CrossServer123")); } else { var data = rankModel.GetMyRankByID(FairySiegeActModel.crossFamilyRankType, (int)PlayerDatas.Instance.baseData.FamilyId); if (data == null) { if (isQuery) { rankModel.QueryCrossRank(FairySiegeActModel.crossFamilyRankType, model.operationCrossAct.zoneID, watchID: (int)PlayerDatas.Instance.baseData.FamilyId, forceQuery: true); } txtMyRank.text = Language.Get("FairySiege106", Language.Get("CrossServer123")); txtMyScore.text = Language.Get("FairySiege107", 0); } else { txtMyRank.text = Language.Get("FairySiege106", data.index + 1); txtMyScore.text = Language.Get("FairySiege107", UIHelper.ReplaceLargeNum(data.cmpValue)); } ShowMyFamilyRankHave(data); } } private void ShowMyFamilyRankHave(RankData rankData) { btnHave.SetActive(false); int stateValue; if (!model.TryGetCurrentStateValue(out stateValue)) return; int state = model.GetStateByStateValue(stateValue); if (state != 4) return; bool isHaveAward = model.IsHaveAward(2); btnHave.SetActive(!isHaveAward && rankData != null); } private void OnCreateRankScroller() { personalRankScroller.Refresh(); if (model.operationCrossAct != null) { int personalTemplateID = model.operationCrossAct.PersonalTemplateID; var rankDict = BillboardAwardTempConfig.GetRankDict(personalTemplateID); if (rankDict != null) { var list = rankDict.Keys.ToList(); list.Sort(); for (int i = 0; i < list.Count; i++) { int id = rankDict[list[i]]; if (!BillboardAwardTempConfig.Has(id)) continue; BillboardAwardTempConfig config = BillboardAwardTempConfig.Get(id); bool hasTitle = model.TryGetTitleId(config.AwardItemList, out int titleId); if (hasTitle) { personalRankScroller.AddCell(ScrollerDataType.Header, i); } else { personalRankScroller.AddCell(ScrollerDataType.Normal, i); } } } } personalRankScroller.Restart(); ShowMyRank(true); } private void OnCreateFamilyRankScroller() { familyRankScroller.Refresh(); if (model.operationCrossAct != null) { int familyTemplateID = model.operationCrossAct.FamilyTemplateID; var rankDict = BillboardAwardTempConfig.GetRankDict(familyTemplateID); if (rankDict != null) { var list = rankDict.Keys.ToList(); list.Sort(); for (int i = 0; i < list.Count; i++) { int id = rankDict[list[i]]; if (!BillboardAwardTempConfig.Has(id)) continue; BillboardAwardTempConfig config = BillboardAwardTempConfig.Get(id); int titleId; bool hasTitle = model.TryGetTitleId(config.LeaderAwardItemList, out titleId) || model.TryGetTitleId(config.EliteAwardItemList, out titleId); if (hasTitle) { familyRankScroller.AddCell(ScrollerDataType.Header, i); } else { familyRankScroller.AddCell(ScrollerDataType.Normal, i); } } } } familyRankScroller.Restart(); familyRankScroller.m_Scorller.RefreshActiveCellViews(); ShowMyFamilyRank(true); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { if (type == ScrollerDataType.Header) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } else { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } } private void OnRefreshFamilyCell(ScrollerDataType type, CellView cell) { if (type == ScrollerDataType.Header) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } else { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } } private void ShowRankPanel() { if (model.SelectAwardRank == 1) { personalRankObj.SetActive(true); familyRankObj.SetActive(false); } else { personalRankObj.SetActive(false); familyRankObj.SetActive(true); } } private void SelectCrossPersonalRank(bool value) { if (value) { model.SelectAwardRank = 1; OnCreateRankScroller(); ShowRankPanel(); } } private void SelectCrossFamilyRank(bool value) { if (value) { model.SelectAwardRank = 2; OnCreateFamilyRankScroller(); ShowRankPanel(); } } } }