//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, November 01, 2017 //-------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class BossTrialRankWin : Window { [SerializeField] Toggle personalRank; [SerializeField] Toggle crossPersonalRank; [SerializeField] Toggle crossFamilyRank; [SerializeField] Transform personalRankObj; [SerializeField] Transform familyRankObj; [SerializeField] ScrollerController personalRankScroller; // 个人排行榜含跨服 [SerializeField] ScrollerController familyRankScroller; [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] Transform headIconObj; [SerializeField] AvatarCell avatarCell; [SerializeField] Text playerName_1; //排行榜ID2 为 玩家ID [SerializeField] Text score_1; [SerializeField] Text serverName_1; [SerializeField] RawImage player3DModel_1; [SerializeField] Text familyName_1; [SerializeField] Transform familyMark; [SerializeField] EmblemCell emblemCell; RankModel rankModel { get { return ModelCenter.Instance.GetModel(); } } BossTrialModel model { get { return ModelCenter.Instance.GetModel(); } } FairyModel fairyModel { 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); crossFamilyRank.SetListener(SelectCrossFamilyRank); showMoreServerBtn.SetListener(() => { FuncRules.OpenFuncTip(Language.Get("L2015"), model.operationBossTrialCross.m_ServerListStr); }); rankAward.SetListener(() => { WindowCenter.Instance.Open(); }); } protected override void OnPreOpen() { model.SelectRank = 0; personalRank.isOn = true; crossPersonalRank.isOn = false; crossFamilyRank.isOn = false; rankModel.ResetQueryParam(); rankModel.QueryRankByPage(BossTrialModel.rankType, forceQuery: true); ShowRankPanel(); rankModel.onRankRefresh += OnRefreshRankList; GlobalTimeEvent.Instance.secondEvent += secondEvent; personalRankScroller.OnRefreshCell += OnRefreshCell; familyRankScroller.OnRefreshCell += OnRefreshFamilyCell; fairyModel.FamilyActionInfoEvent += UpdateFamilyActionInfoEvent; 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; familyRankScroller.OnRefreshCell -= OnRefreshFamilyCell; fairyModel.FamilyActionInfoEvent -= UpdateFamilyActionInfoEvent; rankModel.onMyRankRefresh -= RankModel_onMyRankRefresh; RoleParticularModel.OnRevPackage -= OnPlayerCacheResultEvent; } protected override void OnAfterClose() { } void OnPlayerCacheResultEvent(int viewType, int playerID, RoleParticularModel.ViewPlayerData data) { if (playerID != model.no1PlayerID && playerID != model.no1PlayerIDCross && playerID != model.no1PlayerIDCrossFamily) return; ShowNo1Model(); } private void RankModel_onMyRankRefresh(int type) { if ((type == BossTrialModel.rankType || type == BossTrialModel.crossRankType) && model.SelectRank < 2) { ShowMyRank(); } else if (type == BossTrialModel.crossFamilyRankType && model.SelectRank == 2) { ShowMyFamilyRank(); } } void ShowMyRank(bool isQuery = false) { var myRank = rankModel.GetMyRank(BossTrialModel.rankList[model.SelectRank]); Dictionary rankAwardInfo = model.operationBossTrialCross.rankInfo; int maxRank = 0; if (model.SelectRank == 0) { maxRank = model.operationBossTrial.maxRank; rankAwardInfo = model.operationBossTrial.rankInfo; } else if (model.SelectRank == 1) { maxRank = model.operationBossTrialCross.maxPersonalRank; rankAwardInfo = model.operationBossTrialCross.rankInfo; } if (myRank == null) { if (isQuery) { if (model.SelectRank == 0) { rankModel.QueryRankByPage(BossTrialModel.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID, forceQuery: true); } else { rankModel.QueryCrossRank(BossTrialModel.crossRankType, model.operationBossTrialCross.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()); if (model.SelectRank == 1) { //显示额外奖励解锁状态 int needScoreEx = 0; var dataIndex = model.GetRankDataIndex(myRank.index, rankAwardInfo); if (rankAwardInfo.ContainsKey(dataIndex)) needScoreEx = rankAwardInfo[dataIndex].needScoreEx; if (needScoreEx == 0) { awardExState.text = string.Empty; } else if (model.submitAllCount >= needScoreEx) { awardExState.text = Language.Get("RankInfo1", dataIndex); } else { awardExState.text = Language.Get("RankInfo3", needScoreEx - model.submitAllCount, dataIndex); } } else { awardExState.text = string.Empty; } } //显示下一个目标积分 int queryRankIndex = 0; //排名从0开始 string queryName = Language.Get("L1046"); int queryScore = 0; var rankInfo = rankModel.GetRankPageDatas(BossTrialModel.rankList[model.SelectRank]); if (model.SelectRank == 0) { if (myRank == null) { if (rankInfo != null && rankInfo.Count != 0) { rankInfo.Keys.ToList().Sort(); queryRankIndex = rankInfo[rankInfo.Count - 1].index; } } else { queryRankIndex = Math.Max(0, myRank.index - 1); } } else { queryRankIndex = myRank == null ? maxRank - 1 : Math.Max(0, myRank.index - 1); } if (rankInfo != null) { if (rankInfo.ContainsKey(queryRankIndex)) { queryName = rankInfo[queryRankIndex].name1; queryScore = (int)rankInfo[queryRankIndex].cmpValue; } } if (model.SelectRank == 1 && queryScore == 0 && rankAwardInfo.ContainsKey(queryRankIndex + 1)) { queryScore = rankAwardInfo[queryRankIndex + 1].needScore; } nextRankTxt.text = Language.Get("L2013", Language.Get("AllianceBossRank", queryRankIndex + 1), queryName); nextScore.text = Language.Get("BossTrial7") + queryScore; } void ShowMyFamilyRank(bool isQuery = false) { //显示下一个目标积分 int queryRankIndex = 0; //排名从0开始 string queryName = Language.Get("L1046"); int queryScore = 0; var rankInfo = rankModel.GetRankPageDatas(BossTrialModel.rankList[model.SelectRank]); //跨服我的家族排名 if (PlayerDatas.Instance.baseData.FamilyId == 0) { myRankTxt.text = Language.Get("L2013", Language.Get("L2024"), Language.Get("CrossServer123")); if (rankInfo != null && rankInfo.Count != 0) { rankInfo.Keys.ToList().Sort(); queryRankIndex = rankInfo[rankInfo.Count - 1].index; } } else { var data = rankModel.GetMyRankByID(BossTrialModel.crossFamilyRankType, (int)PlayerDatas.Instance.baseData.FamilyId); if (data == null) { if (isQuery) rankModel.QueryCrossRank(BossTrialModel.crossFamilyRankType, model.operationBossTrialCross.m_GroupValue1, watchID: (int)PlayerDatas.Instance.baseData.FamilyId, forceQuery: true); myRankTxt.text = Language.Get("L2013", Language.Get("L2024"), Language.Get("CrossServer123")); if (rankInfo != null && rankInfo.Count != 0) { rankInfo.Keys.ToList().Sort(); queryRankIndex = rankInfo[rankInfo.Count - 1].index; } } else { myRankTxt.text = Language.Get("L2013", Language.Get("L2024"), (data.index + 1).ToString()); queryRankIndex = Math.Max(0, data.index - 1); } } if (rankInfo != null) { if (rankInfo.ContainsKey(queryRankIndex)) { queryName = rankInfo[queryRankIndex].name1; queryScore = (int)rankInfo[queryRankIndex].cmpValue; } } nextRankTxt.text = Language.Get("L2013", Language.Get("AllianceBossRank", queryRankIndex + 1), queryName); nextScore.text = Language.Get("BossTrial7") + queryScore; awardExState.text = string.Empty; } void OnRefreshRankList(int type) { if ((type == BossTrialModel.rankType || type == BossTrialModel.crossRankType) && model.SelectRank < 2) { personalRankScroller.m_Scorller.RefreshActiveCellViews(); ShowMyRank(true); ShowNo1Info(); } else if (type == BossTrialModel.crossFamilyRankType && model.SelectRank == 2) { //OnCreateFamilyRankScroller(); familyRankScroller.m_Scorller.RefreshActiveCellViews(); ShowMyFamilyRank(true); ShowNo1Info(); } } void OnCreateRankScroller() { personalRankScroller.Refresh(); int maxCount = model.SelectRank == 0 ? model.operationBossTrial.maxRank : model.operationBossTrialCross.maxPersonalRank; for (int i = 1; i < maxCount; i++) { personalRankScroller.AddCell(ScrollerDataType.Header, i); } personalRankScroller.Restart(); ShowMyRank(); ShowNo1Info(); } void OnCreateFamilyRankScroller() { familyRankScroller.Refresh(); int maxCount = model.operationBossTrialCross.maxFamilyRank; for (int i = 1; i < maxCount; i++) { familyRankScroller.AddCell(ScrollerDataType.Header, i); } familyRankScroller.Restart(); familyRankScroller.m_Scorller.RefreshActiveCellViews(); ShowMyFamilyRank(); ShowNo1Info(); } void QueryFamilySubmitCount() { if (PlayerDatas.Instance.baseData.FamilyId == 0) { SysNotifyMgr.Instance.ShowTip("jiazu_andyshao_0"); return; } var pack = new CA408_tagCGQueryFamilyAction(); pack.ActionType = 13; pack.FamilyID = PlayerDatas.Instance.baseData.FamilyId; GameNetSystem.Instance.SendInfo(pack); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); if (model.SelectRank == 0) rankModel.ListenRankPage(BossTrialModel.rankList[model.SelectRank], cell.index); else if (model.SelectRank == 1) rankModel.ListenCrossRankPage(BossTrialModel.crossRankType, model.operationBossTrialCross.m_GroupValue1, cell.index); } private void OnRefreshFamilyCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); rankModel.ListenCrossRankPage(BossTrialModel.crossFamilyRankType, model.operationBossTrialCross.m_GroupValue1, cell.index); } void Display() { subCount.text = Language.Get("BossTrial7") + model.submitAllCount; //分上榜时间 和 最后展示时间 if (model.IsResultShowTime) { actTime.text = StringUtility.Contact( Language.Get("L2013", Language.Get("L2014"), model.operationBossTrialCross.ShowResultTime()), " (", Language.Get("XMZZ110") + ")"); } else if (model.operationBossTrialCross != null) { actTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), UIHelper.AppendColor(TextColType.Green, model.operationBossTrialCross.ToDisplayJoinTime(), true)); } else { //未开启跨服活动 actTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), UIHelper.AppendColor(TextColType.Green, model.operationBossTrial.ToDisplayTime(), true)); } if (model.operationBossTrialCross != null) { serverList.text = Language.Get("L2013", Language.Get("L2015"), model.operationBossTrialCross.m_ServerListStr).Replace(" ", UIHelper.no_breaking_space); showMoreServerText.text = Language.Get("L2018", Language.Get("L2016")); } else { serverList.text = ""; showMoreServerText.text = ""; } } void ShowRankPanel() { if (model.SelectRank < 2) { personalRankObj.SetActive(true); familyRankObj.SetActive(false); } else { personalRankObj.SetActive(false); familyRankObj.SetActive(true); } } void secondEvent() { //分上榜时间 和 最后展示时间 //actTime.text = Language.Get("BossFHLanguage2", TimeUtility.SecondsToHMS(model.operationBossTrial.GetResetSurplusTime())); if (model.IsResultShowTime) { actTime.text = StringUtility.Contact(Language.Get("L2013", Language.Get("L2014"), model.operationBossTrialCross.ShowResultTime()), " (", Language.Get("XMZZ110") + ")"); } } void SelectPersonalRank(bool value) { if (value) { model.SelectRank = 0; rankModel.ResetQueryParam(); rankModel.QueryRankByPage(BossTrialModel.rankType); OnCreateRankScroller(); ShowRankPanel(); subCount.text = Language.Get("BossTrial7") + model.submitAllCount; } } void SelectCrossPersonalRank(bool value) { if (value) { model.SelectRank = 1; rankModel.ResetQueryParam(); rankModel.QueryCrossRank(BossTrialModel.crossRankType, model.operationBossTrialCross.m_GroupValue1); OnCreateRankScroller(); ShowRankPanel(); subCount.text = Language.Get("BossTrial7") + model.submitAllCount; } } void SelectCrossFamilyRank(bool value) { if (value) { model.SelectRank = 2; rankModel.ResetQueryParam(); rankModel.QueryCrossRank(BossTrialModel.crossFamilyRankType, model.operationBossTrialCross.m_GroupValue1); OnCreateFamilyRankScroller(); ShowRankPanel(); subCount.text = Language.Get("BossTrial7") + "0"; UpdateFamilyActionInfoEvent(0, 0); QueryFamilySubmitCount(); } } void UpdateFamilyActionInfoEvent(int familyID, int type) { if (model.SelectRank == 2 && fairyModel.familyActions.ContainsKey((int)PlayerDatas.Instance.baseData.FamilyId) && fairyModel.familyActions[(int)PlayerDatas.Instance.baseData.FamilyId].ContainsKey(13) && fairyModel.familyActions[(int)PlayerDatas.Instance.baseData.FamilyId][13].Length > 0) { subCount.text = Language.Get("BossTrial7") + fairyModel.familyActions[(int)PlayerDatas.Instance.baseData.FamilyId][13][0].Value1.ToString(); } } void ShowNo1Info() { RankData rankData = null; var rankInfo = rankModel.GetRankPageDatas(BossTrialModel.rankList[model.SelectRank]); if (rankInfo != null && rankInfo.ContainsKey(0)) { rankData = rankInfo[0]; } if (rankData != null) { if (model.SelectRank == 0) { model.no1PlayerID = (int)rankData.id; roleParticularModel.ViewPlayerCacheData(model.no1PlayerID); //查询返回显示模型 headIconObj.SetActive(true); familyName_1.SetActive(false); familyMark.SetActive(false); emblemCell.SetActive(false); playerName_1.text = rankData.name1; serverName_1.text = ""; } else if (model.SelectRank == 1) { model.no1PlayerIDCross = (int)rankData.id; roleParticularModel.ViewCrossPlayerCacheData(model.no1PlayerIDCross); //查询返回显示模型 int serverID = UIHelper.GetServerIDByAccount(rankData.name2); string serverName = ServerListCenter.Instance.GetServerName(serverID); headIconObj.SetActive(true); familyName_1.SetActive(false); familyMark.SetActive(false); emblemCell.SetActive(false); playerName_1.text = rankData.name1; serverName_1.text = Language.Get("Z2002", serverName); } else if (model.SelectRank == 2) { model.no1PlayerIDCrossFamily = (int)rankData.id2; roleParticularModel.ViewCrossPlayerCacheData(model.no1PlayerIDCrossFamily); //查询返回显示模型 string serverName = ServerListCenter.Instance.GetServerName((int)rankData.value5); playerName_1.text = rankData.name2; serverName_1.text = Language.Get("Z2002", serverName); headIconObj.SetActive(false); familyName_1.SetActive(true); familyMark.SetActive(true); emblemCell.SetActive(true); familyName_1.text = rankData.name1; emblemCell.InitUI(EmblemHelper.GetOtherEmblemModel((int)rankData.value3)); } 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 { if (model.SelectRank == 2) { headIconObj.SetActive(false); familyName_1.SetActive(true); familyMark.SetActive(true); emblemCell.SetActive(true); int defaultFamilyEmblemId = EmblemHelper.GetDefaultFamilyEmblemId(); emblemCell.InitUI(new EmblemModel(defaultFamilyEmblemId, EmblemHelper.GetEmblemEffectID(defaultFamilyEmblemId))); } else { headIconObj.SetActive(true); familyName_1.SetActive(false); familyMark.SetActive(false); emblemCell.SetActive(false); } playerName_1.text = Language.Get("L1046"); if (model.SelectRank == 1) { Dictionary rankAwardInfo = model.operationBossTrialCross.rankInfo; int needScoreEx = rankAwardInfo[1].needScore; score_1.text = Language.Get("RankInfo4") + needScoreEx; } else { score_1.text = Language.Get("L2013", Language.Get("BossTrial8"), 0); } serverName_1.text = ""; familyName_1.text = Language.Get("L1046"); avatarCell.InitUI(AvatarHelper.GetDefaultAvatarModel()); } ShowNo1Model(); } void ShowNo1Model() { player3DModel_1.SetActive(false); int playerID = 0; if (model.SelectRank == 0) { playerID = model.no1PlayerID; } else if (model.SelectRank == 1) { playerID = model.no1PlayerIDCross; } else if (model.SelectRank == 2) { playerID = model.no1PlayerIDCrossFamily; } if (playerID == 0) { 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 wing = viewPlayerData.GetItemId(RoleEquipType.Wing); 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 reikiRootEffectId = viewPlayerData.rolePropData.EquipShowSwitch / 1000 % 1000; var data = new UI3DPlayerExhibitionData { job = viewPlayerData.rolePropData.Job, fashionClothesId = fashionClothes, fashionWeaponId = fashionWeapon, fashionSecondaryId = fashionWeapon2, clothesId = clothes, suitLevel = _suitLevel, weaponId = weapon, wingsId = wing, secondaryId = weapon2, reikiRootEffectId = (int)reikiRootEffectId, isDialogue = false, equipLevel = (int)viewPlayerData.rolePropData.EquipShowSwitch / 10 % 100, titleID = viewPlayerData.rolePropData.TitleID, }; UI3DModelExhibition.InstanceClone1.ShowPlayer(player3DModel_1, data); player3DModel_1.raycastTarget = false; } } }