//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, November 01, 2017 //-------------------------------------------------------- using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class SecretPlaceRankWin : Window { [SerializeField] Toggle personalRank; [SerializeField] Toggle crossPersonalRank; [SerializeField] ScrollerController personalRankScroller; // 个人排行榜含跨服 [SerializeField] Text myRankTxt; [SerializeField] Text subCount; [SerializeField] Text nextRankTxt; [SerializeField] Text nextScore; [SerializeField] Text awardExState; //额外奖励解锁的状态 [SerializeField] Text actTime; [SerializeField] Text serverList; [SerializeField] RichText showMoreServerText; [SerializeField] Button showMoreServerBtn; [SerializeField] Button rankAward; //第一名玩家 [SerializeField] AvatarCell avatarCell; [SerializeField] Text playerName_1; [SerializeField] Text score_1; [SerializeField] Text serverName_1; [SerializeField] RawImage player3DModel_1; RankModel rankModel { get { return ModelCenter.Instance.GetModel(); } } SecretPlaceXBModel model { get { return ModelCenter.Instance.GetModel(); } } RoleParticularModel roleParticularModel { get { return ModelCenter.Instance.GetModel(); } } protected override void BindController() { } protected override void AddListeners() { personalRank.SetListener(SelectPersonalRank); crossPersonalRank.SetListener(SelectCrossPersonalRank); showMoreServerBtn.SetListener(() => { FuncRules.OpenFuncTip(Language.Get("L2015"), model.operationCrossAct.m_ServerListStr); }); rankAward.SetListener(() => { WindowCenter.Instance.Open(); }); } protected override void OnPreOpen() { model.SelectRank = 0; personalRank.isOn = true; crossPersonalRank.isOn = false; rankModel.ResetQueryParam(); rankModel.QueryRankByPage(SecretPlaceXBModel.rankType, forceQuery: true); rankModel.onRankRefresh += OnRefreshRankList; GlobalTimeEvent.Instance.secondEvent += secondEvent; personalRankScroller.OnRefreshCell += OnRefreshCell; rankModel.onMyRankRefresh += RankModel_onMyRankRefresh; RoleParticularModel.OnRevPackage += OnPlayerCacheResultEvent; Display(); } protected override void OnAfterOpen() { OnCreateRankScroller(); } protected override void OnPreClose() { GlobalTimeEvent.Instance.secondEvent -= secondEvent; rankModel.onRankRefresh -= OnRefreshRankList; personalRankScroller.OnRefreshCell -= OnRefreshCell; rankModel.onMyRankRefresh -= RankModel_onMyRankRefresh; RoleParticularModel.OnRevPackage -= OnPlayerCacheResultEvent; } protected override void OnAfterClose() { } private void RankModel_onMyRankRefresh(int type) { if (type == SecretPlaceXBModel.rankType || type == SecretPlaceXBModel.crossRankType) ShowMyRank(); } void OnPlayerCacheResultEvent(int viewType, int playerID, RoleParticularModel.ViewPlayerData data) { if (playerID != no1PlayerID && playerID != no1PlayerIDCross) return; ShowNo1Model(); } int no1PlayerID = 0; int no1PlayerIDCross = 0; void ShowNo1Info() { RankData rankData = null; var rankInfo = rankModel.GetRankPageDatas(SecretPlaceXBModel.rankList[model.SelectRank]); if (rankInfo != null && rankInfo.ContainsKey(0)) { rankData = rankInfo[0]; } if (rankData != null) { if (model.SelectRank == 0) { no1PlayerID = (int)rankData.id; ShowNo1Model(); roleParticularModel.ViewPlayerCacheData(no1PlayerID); //查询返回显示模型 playerName_1.text = rankData.name1; serverName_1.text = ""; } else if (model.SelectRank == 1) { no1PlayerIDCross = (int)rankData.id; ShowNo1Model(); roleParticularModel.ViewCrossPlayerCacheData(no1PlayerIDCross); //查询返回显示模型 int serverID = UIHelper.GetServerIDByAccount(rankData.name2); string serverName = ServerListCenter.Instance.GetServerName(serverID); playerName_1.text = rankData.name1; serverName_1.text = Language.Get("Z2002", serverName); } score_1.text = Language.Get("L2013", Language.Get("CrossBattleField79"), rankData.cmpValue); int playerID = model.GetPlayerId(rankData); avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)playerID, (int)rankData.value3, (int)rankData.value4, rankData.subType)); } else { playerName_1.text = Language.Get("L1046"); if (model.SelectRank == 1) { Dictionary rankAwardInfo = model.operationCrossAct.rankInfo; int needScoreEx = rankAwardInfo[1].needScore; score_1.text = Language.Get("RankInfo2") + needScoreEx; } else { score_1.text = Language.Get("L2013", Language.Get("CrossBattleField79"), 0); } serverName_1.text = ""; avatarCell.InitUI(AvatarHelper.GetDefaultAvatarModel()); } } void ShowNo1Model() { int playerID = 0; if (model.SelectRank == 0) { playerID = no1PlayerID; } else if (model.SelectRank == 1) { playerID = no1PlayerIDCross; } if (playerID == 0) { player3DModel_1.SetActive(false); avatarCell.InitUI(AvatarHelper.GetDefaultAvatarModel()); return; } var viewPlayerData = roleParticularModel.GetViewPlayerData(playerID); if (viewPlayerData == null) return; player3DModel_1.SetActive(true); int _suitLevel = (int)(viewPlayerData.rolePropData.EquipShowSwitch % 10); int clothes = viewPlayerData.GetItemId(RoleEquipType.Clothes); int weapon = viewPlayerData.GetItemId(RoleEquipType.Weapon); int weapon2 = viewPlayerData.GetItemId(RoleEquipType.Weapon2); int fashionClothes = viewPlayerData.GetItemId(RoleEquipType.FashionClothes); int fashionWeapon = viewPlayerData.GetItemId(RoleEquipType.FashionWeapon); int fashionWeapon2 = viewPlayerData.GetItemId(RoleEquipType.FashionWeapon2); var data = new UI3DPlayerExhibitionData { job = viewPlayerData.rolePropData.Job, fashionClothesId = fashionClothes, fashionWeaponId = fashionWeapon, fashionSecondaryId = fashionWeapon2, clothesId = clothes, suitLevel = _suitLevel, weaponId = weapon, wingsId = 0, secondaryId = weapon2, reikiRootEffectId = 0, isDialogue = false, equipLevel = (int)viewPlayerData.rolePropData.EquipShowSwitch / 10 % 100, titleID = viewPlayerData.rolePropData.TitleID, }; UI3DModelExhibition.InstanceClone1.ShowPlayer(player3DModel_1, data); player3DModel_1.raycastTarget = false; } void ShowMyRank(bool isQuery = false) { var myRank = rankModel.GetMyRank(SecretPlaceXBModel.rankList[model.SelectRank]); Dictionary rankAwardInfo = new Dictionary(); if (myRank == null) { if (isQuery) { if (model.SelectRank == 0) { rankModel.QueryRankByPage(SecretPlaceXBModel.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID, forceQuery: true); } else { rankModel.QueryCrossRank(SecretPlaceXBModel.crossRankType, model.operationCrossAct.m_GroupValue1, watchID: (int)PlayerDatas.Instance.baseData.PlayerID, forceQuery: true); } } myRankTxt.text = Language.Get("L2013", Language.Get("CrossBattleField45"), Language.Get("CrossServer123")); awardExState.text = string.Empty; } else { myRankTxt.text = Language.Get("L2013", Language.Get("CrossBattleField45"), (myRank.index + 1).ToString()); //显示额外奖励解锁状态 int needScoreEx = 0; var dataIndex = model.GetRankDataIndex(myRank.index, rankAwardInfo); if (model.operationAct.rankInfo.ContainsKey(dataIndex)) needScoreEx = rankAwardInfo[dataIndex].needScore; if (needScoreEx == 0) { awardExState.text = string.Empty; } else if (model.lotteryScore >= needScoreEx) { awardExState.text = Language.Get("RankInfo1", dataIndex); } else { awardExState.text = Language.Get("RankInfo3", needScoreEx - model.lotteryScore, dataIndex); } } ShowMyScore(); //显示下一个目标积分 int queryRankIndex = 0; //排名从0开始 string queryName = Language.Get("L1046"); int queryScore = 0; int maxRank = 0; if (model.SelectRank == 0) { maxRank = model.operationAct.maxRank; rankAwardInfo = model.operationAct.rankInfo; } else if (model.SelectRank == 1) { maxRank = model.operationCrossAct.maxPersonalRank; rankAwardInfo = model.operationCrossAct.rankInfo; } queryRankIndex = myRank == null ? maxRank - 1 : Math.Max(0, myRank.index - 1); var rankInfo = rankModel.GetRankPageDatas(SecretPlaceXBModel.rankList[model.SelectRank]); if (rankInfo != null) { if (rankInfo.ContainsKey(queryRankIndex)) { queryName = rankInfo[queryRankIndex].name1; queryScore = (int)rankInfo[queryRankIndex].cmpValue; } } if (queryScore == 0 && rankAwardInfo.ContainsKey(queryRankIndex)) { queryScore = rankAwardInfo[queryRankIndex].needScore; } nextRankTxt.text = Language.Get("L2013", Language.Get("AllianceBossRank", queryRankIndex + 1), queryName); nextScore.text = Language.Get("CrossServerOneVsOneWin__4") + queryScore; } void OnRefreshRankList(int type) { if (type == SecretPlaceXBModel.rankType || type == SecretPlaceXBModel.crossRankType) { personalRankScroller.m_Scorller.RefreshActiveCellViews(); ShowMyRank(true); ShowNo1Info(); } } void OnCreateRankScroller() { personalRankScroller.Refresh(); int maxCount = model.SelectRank == 0 ? model.operationAct.maxRank : model.operationCrossAct.maxPersonalRank; for (int i = 1; i < maxCount; i++) { personalRankScroller.AddCell(ScrollerDataType.Header, i); } personalRankScroller.Restart(); ShowMyRank(); ShowNo1Info(); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); if (model.SelectRank == 0) rankModel.ListenRankPage(SecretPlaceXBModel.rankList[model.SelectRank], cell.index); else if (model.SelectRank == 1) rankModel.ListenCrossRankPage(SecretPlaceXBModel.crossRankType, model.operationCrossAct.m_GroupValue1, cell.index); } void Display() { ShowMyScore(); //分上榜时间 和 最后展示时间 if (model.IsResultShowTime) { actTime.text = StringUtility.Contact( Language.Get("L2013", Language.Get("L2014"), model.operationCrossAct.ShowResultTime()), " (", Language.Get("XMZZ110") + ")"); } else if (model.operationCrossAct != null) { actTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), UIHelper.AppendColor(TextColType.Green, model.operationCrossAct.ToDisplayJoinTime(), true)); } else { //未开启跨服活动 actTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), UIHelper.AppendColor(TextColType.Green, model.operationAct.ToDisplayTime(), true)); } if (model.operationCrossAct != null) { serverList.text = Language.Get("L2013", Language.Get("L2015"), model.operationCrossAct.m_ServerListStr).Replace(" ", UIHelper.no_breaking_space); showMoreServerText.text = Language.Get("L2018", Language.Get("L2016")); } else { serverList.text = ""; showMoreServerText.text = ""; } } void ShowMyScore() { subCount.text = Language.Get("CrossServerOneVsOneWin__4") + model.lotteryScore.ToString(); } void secondEvent() { if (model.IsResultShowTime) { actTime.text = StringUtility.Contact(Language.Get("L2013", Language.Get("L2014"), model.operationCrossAct.ShowResultTime()), " (", Language.Get("XMZZ110") + ")"); } } void SelectPersonalRank(bool value) { if (value) { model.SelectRank = 0; rankModel.ResetQueryParam(); rankModel.QueryRankByPage(SecretPlaceXBModel.rankType); OnCreateRankScroller(); } } void SelectCrossPersonalRank(bool value) { if (value) { model.SelectRank = 1; rankModel.ResetQueryParam(); rankModel.QueryCrossRank(SecretPlaceXBModel.crossRankType, model.operationCrossAct.m_GroupValue1); OnCreateRankScroller(); } } } }