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<RankModel>(); } }
|
FairySiegeActModel model { get { return ModelCenter.Instance.GetModel<FairySiegeActModel>(); } }
|
|
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<FairySiegeRankAwardActPersonalCell>();
|
_cell?.Display(cell.index);
|
}
|
else
|
{
|
var _cell = cell.GetComponent<FairySiegeRankAwardActPersonalNoTitleCell>();
|
_cell?.Display(cell.index);
|
}
|
}
|
|
private void OnRefreshFamilyCell(ScrollerDataType type, CellView cell)
|
{
|
if (type == ScrollerDataType.Header)
|
{
|
var _cell = cell.GetComponent<FairySiegeRankAwardActFairyCell>();
|
_cell?.Display(cell.index);
|
}
|
else
|
{
|
var _cell = cell.GetComponent<FairySiegeRankAwardActFairyNoTitleCell>();
|
_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();
|
}
|
}
|
}
|
}
|