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 _scenePrefab; private GameObject _sceneObject; private DressUpObj _copyDressUpObj; private DressUpObj _targetDressUpObj; private ValueBarController _valueBarController; private ArenaDataManager _dataManager; private ArenaTargetData _targetData; private ArenaOpenCfg _arenaCfg; public override void Dispose() { if (_sceneObject != null) { GameObject.Destroy(_scenePrefab); _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; _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.SetMineFightAttr(); 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.myFightScore.Clear(); _dataManager.targetFightScore.Clear(); UpdateTargetList(); } else { _ui.m_c1.selectedIndex = 1; } if (_sceneObject == null) { _sceneObject = GameObject.Instantiate(_scenePrefab); } GameObject sceneCopyObject = _sceneObject.transform.Find("CopyRole").gameObject; if (_copyDressUpObj == null) { _copyDressUpObj = new DressUpObj(); _copyDressUpObj.setSceneObj(sceneCopyObject, false, false); } sceneCopyObject.SetActive(true); for (int i = 0; i < _dataManager.ThemeList.Count; i++) { Timers.inst.StartCoroutine(ScreenShotTex(i)); } sceneCopyObject.SetActive(false); // UpdateRole(); UpdateNormal(); UpdateValue(); UpdateRole(); } protected override void OnHide() { base.OnHide(); if (_sceneObject != null) { GameObject.Destroy(_sceneObject); _sceneObject = null; } _targetDressUpObj.TakeOffAll(); _copyDressUpObj.TakeOffAll(); _copyDressUpObj.Dispose(); _copyDressUpObj = null; _valueBarController.OnHide(); } protected override void RemoveEventListener() { base.RemoveEventListener(); EventAgent.RemoveEventListener(ConstMessage.ARENA_FIGHT_RESULT, UpdateView); EventAgent.RemoveEventListener(ConstMessage.NUMERIC_CHANGE, UpdateValue); } 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 (_dataManager.IsArenaClearing) { PromptController.Instance.ShowFloatTextPrompt("本周结算中......"); return; } 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) => { if (ItemDataManager.GetItemNum(GlobalCfgArray.globalCfg.costIdBuyFightTimes) < GlobalCfgArray.globalCfg.costNumBuyFightTimes) { PromptController.Instance.ShowFloatTextPrompt("消耗不足"); return; } ArenaSproxy.ReqBuyArenaFightTimes().Coroutine(); }); } private async void OnBtnRefreshClick() { if (_dataManager.IsArenaClearing) { PromptController.Instance.ShowFloatTextPrompt("本周结算中......"); return; } if (RoleDataManager.ArenaFreshTimes <= 0) { if (ItemDataManager.GetItemNum(GlobalCfgArray.globalCfg.costIdBuyFreshTimes) < GlobalCfgArray.globalCfg.costNumBuyFreshTimes) { PromptController.Instance.ShowFloatTextPrompt("消耗不足"); 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, "" }, new object[] { typeof(ArenaView).FullName, this.viewData }, true); } private void OnBtnQuickFightClick() { _dataManager.QuickFight = _ui.m_btnQuickFight.selected; } private void OnBtnReSelectClick() { _targetData = 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.myFightScore.Clear(); _dataManager.targetFightScore.Clear(); int winCount = 0; if (_targetData.Type == FightTargetType.PLAYER) { await ArenaSproxy.ReqArenaFightAttr(_targetData.RoleInfo.roleId, _targetData.FightDatas); } for (int i = 0; i < _dataManager.ThemeList.Count; i++) { long score = 0; long targetScore = 0; FightDataManager.Instance.GetQuickFightResult(i, _dataManager.DressupList[i], _targetData.FightDatas[i], out score, out targetScore); _dataManager.myScore.Add(score); _dataManager.targetScore.Add(targetScore); if (score > targetScore) winCount++; } _dataManager.myFightScore = _dataManager.GetFightScoreList(_dataManager.DressupList); _dataManager.targetFightScore = _dataManager.GetFightScoreList(_targetData.FightDatas); return await ArenaSproxy.ReqArenaFight(winCount >= 2, _targetData, _dataManager.myFightScore, _dataManager.targetFightScore, _dataManager.myScore, _dataManager.targetScore); } private void UpdateView() { UpdateNormal(); UpdateValue(); UpdateTargetList(); UpdateRole(); } private void UpdateNormal() { ItemUtil.UpdateTag(_ui.m_comTag, _dataManager.Tag); _ui.m_loaScore0.url = ResPathUtil.GetScorePath(_dataManager.ThemeList[0]); _ui.m_loaScore1.url = ResPathUtil.GetScorePath(_dataManager.ThemeList[1]); _ui.m_loaScore2.url = ResPathUtil.GetScorePath(_dataManager.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}", _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.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, 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.SetItemNeedNum1(_ui.m_comCostCurrent.target, GlobalCfgArray.globalCfg.costIdBuyFreshTimes, GlobalCfgArray.globalCfg.costNumBuyFreshTimes); } } 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); Vector3 pos = myRole.transform.localPosition; myRole.transform.localPosition = new Vector3(0, pos.y, pos.z); 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, 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 = _dataManager.GetAllFightScore(targetData.FightDatas); 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_comHead.onClick.Add(OnBtnLookClick); } item.m_btnLook.data = targetData; item.m_comHead.data = targetData; UI_ListTargetItem.Proxy(); } 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 IEnumerator ScreenShotTex(int index) { _copyDressUpObj.TakeOffAll(); _copyDressUpObj.PutOnItemList(_dataManager.DressupList[index].itemList); GameObject gameObject = _sceneObject.transform.Find("FightCamera").gameObject; Camera camera = gameObject.GetComponent(); _dataManager.TextureDic[index] = FightDataManager.Instance.GetPrintscreenNTexture(camera); yield return new WaitForEndOfFrame(); } } }