using System.Collections.Generic; using ET; using FairyGUI; using UI.Arena; using UI.CommonGame; using UnityEngine; namespace GFGGame { public class ArenaView : BaseWindow { private UI_ArenaUI _ui; private GameObject _scenePrefab; private GameObject _sceneObject; private DressUpObj _targetDressUpObj; private ValueBarController _valueBarController; private ArenaTargetData _targetData; private ArenaOpenCfg _arenaCfg; public override void Dispose() { if (_sceneObject != null) { GameObject.Destroy(_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; _valueBarController = new ValueBarController(_ui.m_valueBar); _targetDressUpObj = new DressUpObj(); _scenePrefab = GFGAsset.Load(ResPathUtil.GetPrefabPath("SceneArena")); _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(OnBtnRuleClick); _ui.m_listTarget.itemRenderer = RenderListTargetItem; // _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("gzs_bjbj"); } protected override void AddEventListener() { base.AddEventListener(); EventAgent.AddEventListener(ConstMessage.ARENA_FIGHT_RESULT, UpdateView); } protected override async void OnShown() { base.OnShown(); _targetData = this.viewData == null ? null : (this.viewData as object[])[0] as ArenaTargetData; _arenaCfg = ArenaOpenCfgArray.Instance.GetCfg(ArenaDataManager.Instance.SeasonId); _valueBarController.OnShown(); for (int i = 0; i < ArenaDataManager.Instance.Targets.Count; i++) { ArenaTargetData targetData = ArenaDataManager.Instance.Targets[i]; if (targetData.Type == ArenaFightTargetType.PLAYER) { await ArenaSproxy.ReqArenaFightAttr(targetData.RoleInfo.roleId, targetData.RoleDressupList); } } InstanceZonesDataManager.FightScene = ConstInstanceZonesType.Arena; if (_targetData == null) { ArenaDataManager.Instance.SelectTargetIndex = -1; ArenaDataManager.Instance.CurFightIndex = 0; ArenaDataManager.Instance.myScore.Clear(); ArenaDataManager.Instance.targetScore.Clear(); ArenaDataManager.Instance.myFightScore.Clear(); ArenaDataManager.Instance.targetFightScore.Clear(); UpdateTargetList(); } else { _ui.m_c1.selectedIndex = 1; } UpdateNormal(); UpdateValue(); UpdateRole(); } protected override void OnHide() { base.OnHide(); _valueBarController.OnHide(); } protected override void RemoveEventListener() { base.RemoveEventListener(); EventAgent.RemoveEventListener(ConstMessage.ARENA_FIGHT_RESULT, UpdateView); } private void OnBtnRuleClick() { ViewManager.Show(300001); } private void OnBtnBackClick() { ViewManager.GoBackFrom(typeof(ArenaView).FullName); } private void OnBtnShopClick() { ViewManager.Show(); } private void OnBtnRewardClick() { ViewManager.Show(); } private void OnBtnRankClick() { ViewManager.Show(); } private void OnBtnRecordClick() { ViewManager.Show(); } private void OnBtnAddFightCountClick() { if (RoleDataManager.ArenaBuyFightTimes == 0) { PromptController.Instance.ShowFloatTextPrompt("今日次数购买已达上限"); return; } ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(GlobalCfgArray.globalCfg.costIdBuyFightTimes); AlertUI.Show(string.Format("是否使用{0}{1}增加1次竞技场挑战次数?", GlobalCfgArray.globalCfg.costNumBuyFightTimes, itemCfg.name), string.Format("(今天已购买{0}/{1}次)", GlobalCfgArray.globalCfg.limitDailyBuyFightTimes - RoleDataManager.ArenaBuyFightTimes, GlobalCfgArray.globalCfg.limitDailyBuyFightTimes)) .SetLeftButton(true, "取消").SetRightButton(true, "确定", (object data) => { ArenaSproxy.ReqBuyArenaFightTimes().Coroutine(); }); } private async void OnBtnRefreshClick() { bool result = await ArenaSproxy.ReqRefreshArenaTargets(); if (result) { UpdateTargetList(); } } private void OnBtnDressClick() { ViewManager.Show(new object[] { FightRoleType.MINE, 0, FightDataManager.Instance.roleData, null }, new object[] { typeof(ArenaView).FullName, _targetData }); } private void OnBtnQuickFightClick() { ArenaDataManager.Instance.QuickFight = _ui.m_btnQuickFight.selected; } private void OnBtnReSelectClick() { _targetData = null; _ui.m_c1.selectedIndex = 0; } private void OnBtnFightClick() { List selfFightPower = ArenaDataManager.Instance.GetFightScoreList(ArenaFightTargetType.PLAYER, ArenaDataManager.Instance.DressupList, null); List targetFightPower = ArenaDataManager.Instance.GetFightScoreList(_targetData.Type, _targetData.RoleDressupList, _targetData.RobotDressupList); if (_ui.m_btnQuickFight.selected) { // int winCount = 0; List myScores = new List(); List targetScores = new List(); for (int i = 0; i < ArenaDataManager.Instance.ThemeList.Count; i++) { int score = 0; int targetScore = 0; if (_targetData.Type == ArenaFightTargetType.PLAYER) { FightDataManager.Instance.GetQuickFightResult(FightDataManager.Instance.roleData, _targetData.Type, _targetData.RoleDressupList[i], null, out score, out targetScore); } else { FightDataManager.Instance.GetQuickFightResult(FightDataManager.Instance.roleData, _targetData.Type, null, _targetData.RobotDressupList[i], out score, out targetScore); } myScores.Add(score); targetScores.Add(targetScore); } // bool isWin = winCount >= 2; ViewManager.Show(); // await ArenaSproxy.ReqArenaFight(isWin, _targetData, selfFightPower, targetFightPower, myScores, targetScores); } else { ArenaDataManager.Instance.myFightScore = selfFightPower; ArenaDataManager.Instance.targetFightScore = targetFightPower; ViewManager.Show(); } } private void UpdateView() { UpdateNormal(); UpdateValue(); UpdateTargetList(); } private void UpdateNormal() { ItemUtil.UpdateTag(_ui.m_comTag, ArenaDataManager.Instance.Tag); _ui.m_loaScore0.url = ResPathUtil.GetScorePath(ArenaDataManager.Instance.ThemeList[0]); _ui.m_loaScore1.url = ResPathUtil.GetScorePath(ArenaDataManager.Instance.ThemeList[1]); _ui.m_loaScore2.url = ResPathUtil.GetScorePath(ArenaDataManager.Instance.ThemeList[2]); string openTime = TimeUtil.FormattingTime3(TimeUtil.DateTimeToTimestamp(_arenaCfg.openTime)); string endTime = TimeUtil.FormattingTime3(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}", ArenaDataManager.Instance.Rank); _ui.m_txtDanTitle.text = ArenaRankCfgArray.Instance.GetCfg(ArenaDataManager.Instance.Grade).gradeName; long fightScore = ArenaDataManager.Instance.GetAllFightScore(ArenaFightTargetType.PLAYER, ArenaDataManager.Instance.DressupList, null); _ui.m_txtFightScore.text = string.Format("竞技场战力:{0}", fightScore); _ui.m_btnQuickFight.selected = ArenaDataManager.Instance.QuickFight; } 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, GlobalCfgArray.globalCfg.fightTimesLimit); 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.SetItemNeedNum(_ui.m_comCostCurrent.target, GlobalCfgArray.globalCfg.costIdBuyFreshTimes, GlobalCfgArray.globalCfg.costNumBuyFreshTimes); } } private void UpdateRole() { if (_sceneObject == null) { _sceneObject = GameObject.Instantiate(_scenePrefab); GameObject mySceneObj = _sceneObject.transform.Find("MyRole").gameObject; MyDressUpHelper.dressUpObj.setSceneObj(mySceneObj, false, false); GameObject targetSceneObj = _sceneObject.transform.Find("TargetRole").gameObject; _targetDressUpObj.setSceneObj(targetSceneObj, false, false); } MyDressUpHelper.dressUpObj.PutOnItemList(ArenaDataManager.Instance.DressupList[0].itemList); if (_ui.m_c1.selectedIndex == 1) { if (_targetData.Type == ArenaFightTargetType.PLAYER) { _targetDressUpObj.PutOnItemList(_targetData.RoleDressupList[0].itemList); } else { _targetDressUpObj.PutOnSuitCfg(_targetData.RobotDressupList[0].showSuitId, false); } } } private void UpdateTargetList() { _ui.m_c1.selectedIndex = 0; _ui.m_listTarget.numItems = ArenaDataManager.Instance.Targets.Count; } private void RenderListTargetItem(int index, GObject obj) { ArenaTargetData targetData = ArenaDataManager.Instance.Targets[index]; ArenaRankCfg rankCfg = ArenaRankCfgArray.Instance.GetCfg(targetData.Grade); UI_ListTargetItem item = UI_ListTargetItem.Proxy(obj); if (targetData.Type == ArenaFightTargetType.PLAYER) { RoleInfoManager.Instance.UpdateHead(item.m_comHead, targetData.RoleInfo.headId, 0); } else { RoleInfoManager.Instance.UpdateNpcHead(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 = ArenaDataManager.Instance.GetAllFightScore(targetData.Type, targetData.RoleDressupList, targetData.RobotDressupList); item.m_txtFightScore.text = string.Format("竞技场战力:{0}", fightScore); item.m_txtRank.text = string.Format("段位排名:{0}", targetData.RankInGrade); 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_btnLook.data = targetData; UI_ListTargetItem.Proxy(); } private void OnSelectRoleClick(EventContext context) { int index = (int)(context.sender as GObject).data; _targetData = ArenaDataManager.Instance.Targets[index]; ArenaDataManager.Instance.SelectTargetIndex = index; _ui.m_c1.selectedIndex = 1; UpdateRole(); } private void OnBtnLookClick(EventContext context) { ArenaTargetData targetData = (context.sender as GObject).data as ArenaTargetData; ViewManager.Show(new object[] { targetData.Type, 0, targetData.RoleDressupList, targetData.RobotDressupList }, new object[] { typeof(ArenaView).FullName, _targetData }, true); } } }