using System.Collections.Generic; using System.Linq; using ET; using FairyGUI; using UI.Task; namespace GFGGame { public class BattlePassTaskView : BaseWindow { private UI_BattlePassRewardUI _ui; private List _rewardCfgs; public override void Dispose() { if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void OnInit() { base.OnInit(); packageName = UI_BattlePassRewardUI.PACKAGE_NAME; _ui = UI_BattlePassRewardUI.Create(); viewCom = _ui.target; isfullScreen = true; clickBlankToClose = false; _ui.m_btnOpen.onClick.Add(OnBtnOpenClick); _ui.m_btnBuyLevel.onClick.Add(OnBtnBuyLevel); _ui.m_btnGetAll.onClick.Add(OnBtnGetAllClick); _ui.m_RewardList.itemRenderer = ListBoxRewardItemRender; _ui.m_RewardList.SetVirtual(); _ui.m_SpecialReward.m_RewardList.itemRenderer = SpecialRewardRender; _ui.m_tip.onClick.Add(RuleController.ShowRuleView); _ui.m_tip.data = 300012; } protected override void OnHide() { base.OnHide(); Timers.inst.Remove(UpdateTime); } protected override void OnShown() { base.OnShown(); oldLevel = 0; SetSeasonLeftTime(); SetBattlePassLevel(); SetOpenBattlePassBtnStatus(); FreshSpecialReward(oldLevel); var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByid(BattlePassTaskDataManager.Instance.GetSeasonId()); var minLevel = (from battlePassCfg in battlePassCfgs let state = BattlePassTaskDataManager.Instance.GetRewardState(battlePassCfg.level) where battlePassCfg.level != 0 && state != 2 select battlePassCfg.level).FirstOrDefault(); // var index = _ui.m_RewardList.ItemIndexToChildIndex(minLevel - 1); _ui.m_RewardList.ScrollToView(minLevel - 1); } protected override void AddEventListener() { base.AddEventListener(); //监听通行证等级变化 EventAgent.AddEventListener(ConstMessage.BATTLEPASS_LEVEL_CHANGE, SetBattlePassLevel); EventAgent.AddEventListener(ConstMessage.NOTICE_PASSPORT_OPEN, SetOpenBattlePassBtnStatus); } protected override void RemoveEventListener() { base.RemoveEventListener(); EventAgent.RemoveEventListener(ConstMessage.BATTLEPASS_LEVEL_CHANGE, SetBattlePassLevel); } //开启通行证 private void OnBtnOpenClick(EventContext context) { ViewManager.Show(null, new object[] { typeof(BattlePassTaskView).FullName, null }); } private void OnBtnBuyLevel(EventContext context) { ViewManager.Show(null, new object[] { typeof(BattlePassTaskView).FullName, null }); } //领取奖励 private async void OnBtnGetClick(EventContext context) { if (!(context.sender is GObject obj)) return; var id = (int)obj.data; var get = await BattlePassTaskSProxy.GetBattlePassReward(id); if (!get) return; SetBattlePassLevel(); } //继续领取 private async void OnBtnContinueClick(EventContext context) { if (!(context.sender is GObject obj)) return; var id = (int)obj.data; var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy(); if (!isBuy) { ViewManager.Show(null, new object[] { typeof(BattlePassTaskView).FullName, null }); return; } var get = await BattlePassTaskSProxy.GetBattlePassReward(id); if (!get) return; SetBattlePassLevel(); } //领取全部奖励 private async void OnBtnGetAllClick(EventContext context) { var get = await BattlePassTaskSProxy.GetAllBattlePassReward(); if (!get) return; SetBattlePassLevel(); } //前往 private void OnBtnGoClick(EventContext context) { Hide(); var btnGo = context.sender as GObject; if (btnGo == null) return; ViewManager.Show($"GFGGame.{btnGo.data}", null, new[] { typeof(TaskView).FullName, viewData }, true); } private void ListBoxRewardItemRender(int index, GObject obj) { var item = UI_BattlePassRewardItem.Proxy(obj); var level = index + 1; //这里跳过为0的第一个配置 var battlePassCfg = _rewardCfgs[level]; //设置等级 item.m_Level.text = battlePassCfg.level.ToString(); //设置奖励 var bonusNormalArr = battlePassCfg.bonusNormalArr; if (bonusNormalArr != null && bonusNormalArr.Length > 0) { var itemData = ItemUtil.createItemData(bonusNormalArr[0]); item.m_NormalReward.data ??= new ItemView(item.m_NormalReward); (item.m_NormalReward.data as ItemView)?.SetData(itemData); (item.m_NormalReward.data as ItemView)?.ChangeTxtCountStyle(); } if (item.m_RewardList.data == null) { item.m_RewardList.itemRenderer = SpecialRewardRender; } item.m_RewardList.data = battlePassCfg.bonusSpecialArr; item.m_RewardList.numItems = battlePassCfg.bonusSpecialArr.Length; //获取玩家当前的通行证等级 var state = BattlePassTaskDataManager.Instance.GetRewardState(level); //设置按钮状态 SetBtnState(item, battlePassCfg.level, state); item.target.data = battlePassCfg; UI_BattlePassRewardItem.ProxyEnd(); FreshSpecialReward(level); } //SpecialRewardRender private static void SpecialRewardRender(int index, GObject obj) { var parentData = (int[][])obj.parent.data; var itemInfo = parentData[index]; var itemData = ItemUtil.createItemData(itemInfo); obj.data ??= new ItemView(obj as GComponent); (obj.data as ItemView)?.SetData(itemData); (obj.data as ItemView)?.ChangeTxtCountStyle(); } //根据状态设置按钮 private void SetBtnState(UI_BattlePassRewardItem item, int id, int state) { item.m_c1.selectedIndex = state; if (item.m_GetRewardBt.data == null) { item.m_GetRewardBt.onClick.Add(OnBtnGetClick); } item.m_GetRewardBt.data = id; //继续领取 if (item.m_ContinueBt.data == null) { item.m_ContinueBt.onClick.Add(OnBtnContinueClick); } item.m_ContinueBt.data = id; //前往 if (item.m_ComeBt.data == null) { item.m_ComeBt.onClick.Add(OnBtnGoClick); } item.m_ComeBt.data = id; } //设置赛季剩余时间 private void SetSeasonLeftTime() { //获取赛季结束时间 Timers.inst.Add(1, 0, UpdateTime); } //UpdateTime private void UpdateTime(object param) { var seasonEndTime = BattlePassTaskDataManager.Instance.GetSeasonEndTime(); var leftTime = seasonEndTime - TimeHelper.ServerNow(); if (leftTime <= 0) { Timers.inst.Remove(UpdateTime); return; } _ui.m_LeftTime.text = TimeUtil.FormattingTimeTo_DDHHmm((int)leftTime); } private void SetBattlePassLevel() { //获取玩家当前的通行证等级 var dataManager = BattlePassTaskDataManager.Instance; var battlePassLevel = dataManager.GetBattlePassLevel(); var seasonId = dataManager.GetSeasonId(); var uiExpProcess = _ui.m_LevelProcess; uiExpProcess.m_Level.text = battlePassLevel.ToString(); //获取当前等级的经验 var battlePassCfg = BattlePassCfgArray.Instance.GetCfgByidAndlevel(seasonId, dataManager.GetBattlePassLevel()); uiExpProcess.target.max = battlePassCfg.value; uiExpProcess.target.value = dataManager.GetBattlePassExp(); uiExpProcess.m_NumProcess.SetVar("value", dataManager.GetBattlePassExp().ToString()) .SetVar("maxValue", battlePassCfg.value.ToString()).FlushVars(); //刷新奖励列表 _rewardCfgs = new List(BattlePassCfgArray.Instance.GetCfgsByid(seasonId)); //去掉第一个为0的配置 _ui.m_RewardList.numItems = _rewardCfgs.Count - 1; } private void SetOpenBattlePassBtnStatus() { //通行证是否购买 var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy(); _ui.m_c1.selectedIndex = isBuy ? 1 : 0; } private int oldLevel; //刷新特别大奖展示 private void FreshSpecialReward(int level) { var battlePassCfg = BattlePassTaskDataManager.Instance.GetSpecialCfg(level); var uiBattlePassReward = _ui.m_SpecialReward; if (battlePassCfg == null) { uiBattlePassReward.target.visible = false; return; } var newLeve = battlePassCfg.level; if (newLeve == oldLevel) return; oldLevel = newLeve; uiBattlePassReward.target.visible = true; uiBattlePassReward.m_Level.text = newLeve.ToString(); //设置奖励 var bonusNormalArr = battlePassCfg.bonusNormalArr; if (bonusNormalArr != null && bonusNormalArr.Length > 0) { var itemData = ItemUtil.createItemData(bonusNormalArr[0]); var item = new ItemView(uiBattlePassReward.m_NormalReward); item.SetData(itemData); item.ChangeTxtCountStyle(); } uiBattlePassReward.m_RewardList.data = battlePassCfg.bonusSpecialArr; uiBattlePassReward.m_RewardList.numItems = battlePassCfg.bonusSpecialArr.Length; } } }