| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 | 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<BattlePassCfg> _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);        }        protected override void RemoveEventListener()        {            base.RemoveEventListener();            EventAgent.RemoveEventListener(ConstMessage.BATTLEPASS_LEVEL_CHANGE, SetBattlePassLevel);        }        //开启通行证        private void OnBtnOpenClick(EventContext context)        {            ViewManager.Show<OpenBattlePassView>(null, new object[] { typeof(BattlePassTaskView).FullName, null });        }        private void OnBtnBuyLevel(EventContext context)        {            ViewManager.Show<BuyBattlePassLevelView>(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 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_HHmmss((int)(seasonEndTime - TimeHelper.ServerNow()));        }        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<BattlePassCfg>(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;        }    }}
 |