using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using ET; using FairyGUI; using UI.Arena; using UI.CommonGame; using UnityEngine; namespace GFGGame { public class ArenaView : BaseWindow { private UI_ArenaUI _ui; private GameObject _sceneObject; private DressUpObj _copyDressUpObj; private DressUpObj _targetDressUpObj; private ValueBarController _valueBarController; private ArenaDataManager _dataManager; private ArenaTargetData _targetData; private ArenaOpenCfg _arenaCfg; private int _showOtherTargetGuide = -1; public override void Dispose() { if (_sceneObject != null) { PrefabManager.Instance.Restore(_sceneObject); _sceneObject = null; } if (_valueBarController != null) { _valueBarController.Dispose(); _valueBarController = null; } if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void OnInit() { base.OnInit(); packageName = UI_ArenaUI.PACKAGE_NAME; _ui = UI_ArenaUI.Create(); this.viewCom = _ui.target; isfullScreen = true; isReturnView = true; _valueBarController = new ValueBarController(_ui.m_valueBar); _targetDressUpObj = new DressUpObj(); _ui.m_btnBack.onClick.Add(OnBtnBackClick); _ui.m_btnShop.onClick.Add(OnBtnShopClick); _ui.m_btnReward.onClick.Add(OnBtnRewardClick); _ui.m_btnRank.onClick.Add(OnBtnRankClick); _ui.m_btnRecord.onClick.Add(OnBtnRecordClick); _ui.m_btnAddFightCount.onClick.Add(OnBtnAddFightCountClick); _ui.m_btnRefresh.onClick.Add(OnBtnRefreshClick); _ui.m_btnDress.onClick.Add(OnBtnDressClick); _ui.m_btnQuickFight.onClick.Add(OnBtnQuickFightClick); _ui.m_btnReSelect.onClick.Add(OnBtnReSelectClick); _ui.m_btnFight.onClick.Add(OnBtnFightClick); _ui.m_btnRule.onClick.Add(RuleController.ShowRuleView); _ui.m_btnRule.data = 300001; _ui.m_grhCloseComFightScore.onClick.Add(OnCloseComFightScore); _ui.m_listTarget.itemRenderer = RenderListTargetItem; _dataManager = ArenaDataManager.Instance; } protected override void AddEventListener() { base.AddEventListener(); EventAgent.AddEventListener(ConstMessage.ARENA_FIGHT_RESULT, UpdateView); EventAgent.AddEventListener(ConstMessage.NUMERIC_CHANGE, UpdateValue); } protected override void OnShown() { base.OnShown(); _targetData = this.viewData == null ? null : this.viewData as ArenaTargetData; _arenaCfg = ArenaOpenCfgArray.Instance.GetCfg(_dataManager.SeasonId); _valueBarController.OnShown(); _dataManager.SetMineFightAttrs(); if (_dataManager.DressupList.Count == 0) return; InstanceZonesDataManager.FightScene = ConstInstanceZonesType.Arena; if (_targetData == null) { _dataManager.SelectTargetIndex = -1; _dataManager.CurFightIndex = 0; _dataManager.myScore.Clear(); _dataManager.targetScore.Clear(); _dataManager.myFightPower.Clear(); _dataManager.targetFightPower.Clear(); UpdateTargetList(); } else { _ui.m_c1.selectedIndex = 1; } if (_sceneObject == null) { _sceneObject = PrefabManager.Instance.InstantiateSync(ResPathUtil.GetPrefabPath("SceneArena")); } UpdateNormal(); UpdateValue(); UpdateRole(); Timers.inst.AddUpdate(CheckGuide); } protected override void OnHide() { base.OnHide(); if (_sceneObject != null) { PrefabManager.Instance.Restore(_sceneObject); _sceneObject = null; } _targetDressUpObj.TakeOffAll(); _valueBarController.OnHide(); Timers.inst.Remove(CheckGuide); } protected override void RemoveEventListener() { base.RemoveEventListener(); EventAgent.RemoveEventListener(ConstMessage.ARENA_FIGHT_RESULT, UpdateView); EventAgent.RemoveEventListener(ConstMessage.NUMERIC_CHANGE, UpdateValue); } private void OnCloseComFightScore() { _ui.m_c2.selectedIndex = 0; } private void OnBtnBackClick() { this.Hide(); GuideController.TryCompleteGuideIndex(ConstGuideId.ARENA_OPEN, 12); GuideController.TryCompleteGuide(ConstGuideId.ARENA_OPEN, 12); //ViewManager.GoBackFrom(typeof(ArenaView).FullName); //ViewManager.Show(); } private void OnBtnShopClick() { ViewManager.Show(new object[] { ConstStoreTabId.STORE_ARENA, ConstStoreSubId.STORE_ARENA_ITEM }, new object[] { typeof(ArenaView).FullName, this.viewData }); } private void OnBtnRewardClick() { ViewManager.Show(); } private void OnBtnRankClick() { ViewManager.Show(); } private void OnBtnRecordClick() { ViewManager.Show(); } private void OnBtnAddFightCountClick() { if (_dataManager.IsArenaClearing) { PromptController.Instance.ShowFloatTextPrompt("本周结算中......"); return; } if (RoleDataManager.ArenaBuyFightTimes == 0) { PromptController.Instance.ShowFloatTextPrompt("今日次数购买已达上限"); return; } ViewManager.Show(); } private async void OnBtnRefreshClick() { if (_dataManager.IsArenaClearing) { PromptController.Instance.ShowFloatTextPrompt("本周结算中......"); return; } if (RoleDataManager.ArenaFreshTimes <= 0) { int costId = GlobalCfgArray.globalCfg.costIdBuyFreshTimes; long needNum = GlobalCfgArray.globalCfg.costNumBuyFreshTimes; if (!ItemUtil.CheckItemEnough(costId, needNum)) { long has = ItemDataManager.GetItemNum(costId); ItemUtil.BuyCurrency(costId, needNum - has); return; } } bool result = await ArenaSproxy.ReqRefreshArenaTargets(); if (result) { UpdateTargetList(); UpdateRole(); } } private void OnBtnDressClick() { if (_dataManager.IsArenaClearing) { PromptController.Instance.ShowFloatTextPrompt("本周结算中......"); return; } ViewManager.Show(new object[] { FightRoleType.MINE, 0, _dataManager.DressupList, "" }); } private void OnBtnQuickFightClick() { _dataManager.QuickFight = _ui.m_btnQuickFight.selected; } private void OnBtnReSelectClick() { _targetData = null; viewData = null; _ui.m_c1.selectedIndex = 0; UpdateRole(); } private async void OnBtnFightClick() { if (_dataManager.IsArenaClearing) { PromptController.Instance.ShowFloatTextPrompt("本周结算中......"); return; } if (RoleDataManager.ArenaFightTimes <= 0) { PromptController.Instance.ShowFloatTextPrompt("挑战次数不足"); return; } // for (int i = 0; i < _dataManager.DressupList.Count; i++) // { // if (!MyDressUpHelper.CheckPutOnFinish(_dataManager.DressupList[i].itemList)) // { // AlertUI.Show("全部主题穿戴完整才能开始战斗哦!"). // SetLeftButton(true, "取消"). // SetRightButton(true, "去换装", (object param) => // { // OnBtnDressClick(); // }); // return; // } // } bool result = await GetFightResult(); if (!result) return; if (_ui.m_btnQuickFight.selected) { ViewManager.Show(); } else { ViewManager.Show(null, null, true); } } private async ETTask GetFightResult() { _dataManager.myScore.Clear(); _dataManager.targetScore.Clear(); _dataManager.myFightPower.Clear(); _dataManager.targetFightPower.Clear(); if (_targetData.Type == FightTargetType.PLAYER) { await ArenaSproxy.ReqArenaFightAttr(_targetData.RoleInfo.roleId, _targetData.FightDatas); } long allScore = 0; long targetAllScore = 0; for (int i = 0; i < _dataManager.ThemeList.Count; i++) { FightDataManager.Instance.GetQuickFightResult(i, _dataManager.DressupList[i], _targetData.FightDatas[i], out long score, out long targetScore); allScore += score; targetAllScore += targetScore; _dataManager.myScore.Add(score); _dataManager.targetScore.Add(targetScore); } _dataManager.myFightPower = _dataManager.GetFightScoreList(_dataManager.DressupList); _dataManager.targetFightPower = _dataManager.GetFightScoreList(_targetData.FightDatas); bool result = await ArenaSproxy.ReqArenaFight(allScore > targetAllScore, _targetData, _dataManager.myFightPower, _dataManager.targetFightPower, _dataManager.myScore, _dataManager.targetScore); if (GuideDataManager.IsGuideFinish(ConstGuideId.ARENA_OPEN) <= 0 && _showOtherTargetGuide < 0) { _showOtherTargetGuide = result ? 1 : 0; } return result; } private void UpdateView() { UpdateNormal(); UpdateValue(); UpdateTargetList(); UpdateRole(); } private void UpdateNormal() { ItemUtil.UpdateTag(_ui.m_comTheme.m_comTag, _dataManager.Tag); ItemUtil.UpdateItemNeedNum(_ui.m_comCostCurrent.target, GlobalCfgArray.globalCfg.costIdBuyFreshTimes, GlobalCfgArray.globalCfg.costNumBuyFreshTimes, true, "#FBF6ED"); _ui.m_comTheme.m_loaScore0.url = ResPathUtil.GetScorePath(_dataManager.ThemeList[0]); _ui.m_comTheme.m_loaScore1.url = ResPathUtil.GetScorePath(_dataManager.ThemeList[1]); _ui.m_comTheme.m_loaScore2.url = ResPathUtil.GetScorePath(_dataManager.ThemeList[2]); string openTime = TimeUtil.FormattingTimeTo_MMdd(TimeUtil.DateTimeToTimestamp(_arenaCfg.openTime)); string endTime = TimeUtil.FormattingTimeTo_MMdd(TimeUtil.DateTimeToTimestamp(_arenaCfg.endTime)); _ui.m_txtTime.text = string.Format("赛季时间:{0}-{1}", openTime, endTime); _ui.m_txtName.text = RoleDataManager.roleName; _ui.m_txtRank.text = string.Format("段位排名:{0}", _dataManager.Rank); _ui.m_txtDanTitle.text = ArenaRankCfgArray.Instance.GetCfg(_dataManager.Grade).gradeName; long fightScore = _dataManager.GetAllFightScore(_dataManager.DressupList); _ui.m_txtFightScore.text = string.Format("飞花令战力:{0}", fightScore); _ui.m_btnQuickFight.selected = _dataManager.QuickFight; ArenaViewManager.Instance.UpdateDanIcon(_ui.m_loaDanIcon, _dataManager.Grade); ArenaViewManager.Instance.UpdateFightScore(_ui.m_comFightScore.target, _dataManager.DressupList); } private void UpdateValue() { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(GlobalCfgArray.globalCfg.bonusSpecialWinArr[0][0]); _ui.m_txtMoneyCount.text = string.Format("今日还可获得{0}次{1}", RoleDataManager.ArenaTimesBonusSpecial, itemCfg.name); _ui.m_txtFightCount.text = string.Format("剩余次数:{0}/{1}", RoleDataManager.ArenaFightTimes, RoleDataManager.ArenaMaxStorageNum); if (RoleDataManager.ArenaFreshTimes > 0) { _ui.m_comCostCurrent.target.visible = false; _ui.m_txtRefreshCount.visible = true; _ui.m_txtRefreshCount.text = string.Format("免费刷新:{0}/{1}", RoleDataManager.ArenaFreshTimes, GlobalCfgArray.globalCfg.freshTimesDaily); } else { _ui.m_txtRefreshCount.visible = false; _ui.m_comCostCurrent.target.visible = true; ItemUtil.UpdateItemNeedNum(_ui.m_comCostCurrent.target, GlobalCfgArray.globalCfg.costIdBuyFreshTimes, GlobalCfgArray.globalCfg.costNumBuyFreshTimes, true, "#FBF6ED"); } } private void UpdateRole() { GameObject myRole = _sceneObject.transform.Find("MyRole").Find("Role").gameObject; MyDressUpHelper.dressUpObj.setSceneObj(_sceneObject, false, false, myRole, false); MyDressUpHelper.dressUpObj.PutOnItemList(_dataManager.DressupList[0].itemList); myRole.transform.localPosition = Vector3.zero; GameObject targetRole = _sceneObject.transform.Find("TargetRole").Find("Role").gameObject; targetRole.SetActive(false); _targetDressUpObj.setSceneObj(_sceneObject, false, false, targetRole, false); if (_ui.m_c1.selectedIndex == 1) { targetRole.SetActive(true); if (_targetData.Type == FightTargetType.PLAYER) { _targetDressUpObj.PutOnItemList(_targetData.FightDatas[0].itemList); } else { _targetDressUpObj.PutOnSuitCfg(_targetData.FightDatas[0].showSuitId, false, null, true, false); } } } private void UpdateTargetList() { _ui.m_c1.selectedIndex = 0; _ui.m_listTarget.numItems = _dataManager.Targets.Count; } private void RenderListTargetItem(int index, GObject obj) { ArenaTargetData targetData = _dataManager.Targets[index]; ArenaRankCfg rankCfg = ArenaRankCfgArray.Instance.GetCfg(targetData.Grade); UI_ListTargetItem item = UI_ListTargetItem.Proxy(obj); if (targetData.Type == FightTargetType.PLAYER) { RoleInfoManager.Instance.UpdateHead(item.m_comHead, targetData.RoleInfo.headId, targetData.RoleInfo.headBorderId); } else { RoleInfoManager.Instance.UpdateArenaNpcHead(item.m_comHead, targetData.RoleInfo.headRes); } item.m_txtName.text = targetData.RoleInfo.roleName; item.m_txtDanTitle.text = rankCfg.gradeName; item.m_comLv.GetChild("txtLvl").asTextField.text = targetData.RoleInfo.roleLv.ToString(); long fightScore = _dataManager.GetAllFightScore(targetData.FightDatas); item.m_txtFightScore.text = string.Format("飞花令战力:{0}", fightScore); item.m_txtRank.text = string.Format("段位排名:{0}", targetData.RankInGrade); item.m_imgUpDan.visible = targetData.Grade > ArenaDataManager.Instance.Grade; if (item.m_challengeBtn.data == null) { item.m_challengeBtn.onClick.Add(OnSelectRoleClick); } item.m_challengeBtn.data = index; if (item.m_loaBg.data == null) { item.m_loaBg.onClick.Add(OnSelectRoleClick); } item.m_loaBg.data = index; if (item.m_btnLook.data == null) { item.m_btnLook.onClick.Add(OnBtnLookClick); item.m_comHead.onClick.Add(OnBtnLookClick); } item.m_btnLook.data = targetData; item.m_comHead.data = targetData; UI_ListTargetItem.ProxyEnd(); } private void OnSelectRoleClick(EventContext context) { int index = (int)(context.sender as GObject).data; _targetData = _dataManager.Targets[index]; this.viewData = _targetData; _dataManager.SelectTargetIndex = index; _ui.m_c1.selectedIndex = 1; UpdateRole(); } private void OnBtnLookClick(EventContext context) { ArenaTargetData targetData = (context.sender as GObject).data as ArenaTargetData; if (targetData.Type == FightTargetType.ROBOT) { PromptController.Instance.ShowFloatTextPrompt("玩家不在线"); return; } ViewManager.Show(new object[] { FightRoleType.TAEGET, 0, targetData.FightDatas, "" }, new object[] { typeof(ArenaView).FullName, this.viewData }, true); } private void CheckGuide(object param) { if (GuideDataManager.IsGuideFinish(ConstGuideId.ARENA_OPEN) <= 0 && !_dataManager.IsArenaClearing) { UpdateToCheckGuide(null); } else { Timers.inst.Remove(CheckGuide); } } protected override void UpdateToCheckGuide(object param) { if (!ViewManager.CheckIsTopView(this.viewCom)) return; GuideController.TryGuide(_ui.m_comTheme.target, ConstGuideId.ARENA_OPEN, 4, "搭配这些标签和属性的衣服会获得更强的战力哦~"); GuideController.TryGuide(_ui.m_btnDress, ConstGuideId.ARENA_OPEN, 5, "点这里可以自由搭配~"); GuideController.TryGuide(_ui.m_listTarget, ConstGuideId.ARENA_OPEN, 8, "", 0); GuideController.TryGuide(_ui.m_btnFight, ConstGuideId.ARENA_OPEN, 9, ""); if (GuideDataManager.currentGuideId == GuideCfgArray.Instance.GetCfg(ConstGuideId.ARENA_OPEN).id && GuideDataManager.currentGuideIdIndex >= 9) { if (_showOtherTargetGuide == 0) { GuideController.TryGuide(_ui.m_listTarget, ConstGuideId.ARENA_OPEN, 10, "对手排名发生变化,重新选个对手吧", 0, false); GuideController.TryGuide(_ui.m_btnFight, ConstGuideId.ARENA_OPEN, 11, ""); } else { GuideCfg cfg = GuideCfgArray.Instance.GetCfg(ConstGuideId.ARENA_OPEN); if (GuideDataManager.IsGuideIndexFinish(cfg.id, 9) && !GuideDataManager.IsGuideIndexFinish(cfg.id, 10)) { GuideDataManager.currentGuideIdIndex = 10; GuideController.TryCompleteGuideIndex(ConstGuideId.ARENA_OPEN, 10); } else if (GuideDataManager.IsGuideIndexFinish(cfg.id, 10) && !GuideDataManager.IsGuideIndexFinish(cfg.id, 11)) { GuideDataManager.currentGuideIdIndex = 11; GuideController.TryCompleteGuideIndex(ConstGuideId.ARENA_OPEN, 11); } } GuideController.TryGuide(_ui.m_btnBack, ConstGuideId.ARENA_OPEN, 12, "厉害啦,你赢啦,我们继续新故事吧!"); GuideController.TryCompleteGuide(ConstGuideId.ARENA_OPEN, 12); } } } }