| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 | using System;using System.Collections.Generic;using System.Linq;using ET;using FairyGUI;using UI.ActivityDay7;using UI.CommonGame;using UI.Task;namespace GFGGame{    public class ActivityDay7View : BaseWindow    {        private UI_ActivityDay7UI _ui;        //7日活动配置        private Activity7DaysTaskCfg[] cfgDataArray;        //7日活动积分配置        private Activity7DaysCfg[] activity7DaysCfgs;        //选中的天数index 天数=index+1        private int onClickDayIndex;        private List<EffectUI> _effectUIs = new List<EffectUI>();        private List<EffectUI> _effectTaskUIs = new List<EffectUI>();                public override void Dispose()        {            if (_ui != null)            {                _ui.Dispose();                _ui = null;            }            base.Dispose();        }        protected override void OnInit()        {            base.OnInit();            packageName = UI_ActivityDay7UI.PACKAGE_NAME;            _ui = UI_ActivityDay7UI.Create();            viewCom = _ui.target;            isfullScreen = true;            isReturnView = true;            bringToFontOnClick = false;            _ui.m_btnBack.onClick.Add(OnBtnBackClick);            _ui.m_loabg.url = ResPathUtil.GetBgImgPath("cp_beijing");            _ui.m_DayList.itemRenderer = DayListRenderer;            _ui.m_comTaskList.m_TaskList.itemRenderer = TaskListRenderer;            _ui.m_tip.onClick.Add(RuleController.ShowRuleView);            _ui.m_tip.data = 300014;        }        private void OnBtnBackClick()        {            ViewManager.GoBackFrom(typeof(ActivityDay7View).FullName);        }        protected override void OnShown()        {            base.OnShown();            var maxDay = ActivityDay7DataManager.Instance.GetActivityDay7MaxPassDay();            onClickDayIndex = Math.Max(0, maxDay - 1);            SetScoreList();            SetScore();            SetDayList();            SetTasks();            SetTime();        }        public override void Hide()        {            Timers.inst.Remove(UpdateTime);            ClearScoreItemEff();            ClearTaskItemEff();            base.Hide();        }        protected override void AddEventListener()        {            EventAgent.AddEventListener(ConstMessage.ITEM_CHANGED, OnItemChange);            // ConstMessage.NOTICE_TASK_STATE_CHANGE            EventAgent.AddEventListener(ConstMessage.NOTICE_BATCH_TASK_STATE_CHANGE, OnTasksChange);        }        private void OnTasksChange(EventContext context)        {            var taskIds = (List<int>)context.data;            foreach (var _ in taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId))                         .Where(taskCfg => taskCfg is { funcType: TaskFuncType.Day7 }))            {                TaskChange();            }        }        private void OnTaskChange(EventContext context)        {            var taskId = (int)context.data;            var taskCfg = TaskCfgArray.Instance.GetCfg(taskId);            if (!(taskCfg is { funcType: TaskFuncType.Day7 })) return;            TaskChange();        }        private void TaskChange()        {            SetDayList();            SetTasks();        }        protected override void RemoveEventListener()        {            //ConstMessage.ITEM_CHANGED            EventAgent.RemoveEventListener(ConstMessage.ITEM_CHANGED, OnItemChange);            //NOTICE_BATCH_TASK_STATE_CHANGE            EventAgent.RemoveEventListener(ConstMessage.NOTICE_BATCH_TASK_STATE_CHANGE, OnTasksChange);        }        private void OnItemChange(EventContext context)        {            var itemId = (int)context.data;            if (itemId != ConstItemID.ACTIVITY_DAY_7_SCORE) return;            SetScoreList();            SetScore();        }        private void SetScore()        {            var score = ActivityDay7DataManager.Instance.GetScore();            _ui.m_Score.text = score.ToString();            _ui.m_ExpProcess.value = score;        }        //DayListRenderer        private void DayListRenderer(int index, GObject obj)        {            var item = UI_ButtonDay.Proxy(obj);            var cfg = cfgDataArray[index];            if (item.target.data == null)            {                item.m_text.text = $"第{cfg.days}天";                item.target.data = index;                item.target.onClick.Add(OnClickDay);            }            //设置按钮状态            item.m_c1.selectedIndex = index == onClickDayIndex ? 0 : 1;            RedDotController.Instance.SetComRedDot(item.target,                ActivityDay7DataManager.Instance.CheckActivityDay7TaskRewrdCanGetByDay(cfg.days));            UI_ButtonDay.ProxyEnd();        }        //选中天数        private void OnClickDay(EventContext context)        {            if (!(context.sender is GObject typeItem)) return;            //检查天数            var day = ActivityDay7DataManager.Instance.GetActivityDay7MaxPassDay();            if (day < (int)typeItem.data + 1)            {                PromptController.Instance.ShowFloatTextPrompt("未到开启时间");                return;            }            onClickDayIndex = (int)typeItem.data;            SetTasks();            //设置其他按钮选中状态            SetDayList();            FreshGetStatus();        }        private void SetTasks()        {            ClearTaskItemEff();            var activity7DaysTaskCfg = Activity7DaysTaskCfgArray.Instance.GetCfg(onClickDayIndex + 1);            var taskIdArr = new int[activity7DaysTaskCfg.taskIdArr.Length];            Array.Copy(activity7DaysTaskCfg.taskIdArr, taskIdArr, activity7DaysTaskCfg.taskIdArr.Length);            //田野调查和新增任务特殊处理            long time = GameGlobal.zoneScene.GetComponent<RoleInfosComponent>().GetCurrentRole().CreateTime;            long setTime = 1721768400000;            for (int i= 0;i<taskIdArr.Length; i++)            {                if(taskIdArr[i] == 2039)                {                    TaskCfg taskCfg = TaskCfgArray.Instance.GetCfg(taskIdArr[i]);                    if (taskCfg.jumpId == "FieldView")                    {                        if (time > setTime)                        {                            for (int j = i; j < taskIdArr.Length - 1; j++)                            {                                taskIdArr[j] = taskIdArr[j + 1];                            }                            Array.Resize(ref taskIdArr, taskIdArr.Length - 1);                            continue;                        }                    }                }                else if(taskIdArr[i] == 2057)                {                    if (time < setTime)                    {                        for (int j = i; j < taskIdArr.Length - 1; j++)                        {                            taskIdArr[j] = taskIdArr[j + 1];                        }                        Array.Resize(ref taskIdArr, taskIdArr.Length - 1);                        continue;                    }                }            }            //排序根据领取状态            var taskCfgs = TaskDataManager.Instance.GetTaskCfgs(taskIdArr);            _ui.m_comTaskList.m_TaskList.data = taskCfgs;            _ui.m_comTaskList.m_TaskList.numItems = taskIdArr.Length;            if (_ui.m_comTaskList.m_TaskList.numItems > 0)            {                _ui.m_comTaskList.m_TaskList.ScrollToView(0);            }        }        //TaskListRenderer        private void TaskListRenderer(int index, GObject obj)        {            var item = UI_TaskListItem.Proxy(obj);            var tasks = (List<TaskCfg>)obj.parent.data;            var taskCfg = tasks[index];            item.m_c1.selectedIndex = TaskDataManager.Instance.GetTaskStateById(taskCfg.id);            item.m_c2.selectedIndex = taskCfg.jumpId == "" ? 1 : 0;            item.m_txtDesc.text = TaskDataManager.Instance.GetTaskDesc(taskCfg.id);            item.m_txtCount.text =                $"{TaskDataManager.Instance.GetTaskProgressById(taskCfg.id)}/{taskCfg.GetTargetCount()}";            if (item.m_GetRewardBt.target.data == null)            {                item.m_GetRewardBt.target.onClick.Add(OnBtnGetClick);            }            item.m_GetRewardBt.target.data = taskCfg.id;            if (item.m_ComeBt.target.data == null)            {                item.m_ComeBt.target.onClick.Add(OnBtnGoClick);            }            item.m_ComeBt.target.data = taskCfg;            if (item.m_listTaskReward.data == null)            {                item.m_listTaskReward.itemRenderer = ListTaskRewardItemRender;            }            if (item.m_c1.selectedIndex == 1){                EffectUI _effectUI = EffectUIPool.CreateEffectUI(item.m_holderfTaskEff, "ui_Small_parts", "store_button_public");                _effectTaskUIs.Add(_effectUI);            }            item.m_listTaskReward.data = TaskDataManager.Instance.GetReward(taskCfg);            item.m_listTaskReward.numItems = TaskDataManager.Instance.GetReward(taskCfg).Length;            RedDotController.Instance.SetComRedDot(item.m_GetRewardBt.target, item.m_c1.selectedIndex == 1);            UI_TaskListItem.ProxyEnd();        }        private static void ListTaskRewardItemRender(int index, GObject obj)        {            var rewards = (int[][])obj.parent.data;            ItemUtil.CreateItemView(rewards[index], obj as GComponent);        }        private void OnBtnGoClick(EventContext context)        {            if (!(context.sender is GObject btnGo)) return;            var taskCfg = (TaskCfg)btnGo.data;            if (!FunctionOpenDataManager.Instance.CheckIsFunOpenById(taskCfg.jumpId)) return;            var param = new object[taskCfg.jumpParamArr.Length];            for (var i = 0; i < taskCfg.jumpParamArr.Length; i++)            {                param[i] = taskCfg.jumpParamArr[i];            }            ViewManager.JumpToView(taskCfg.jumpId, param);        }        private List<GComponent> components = new List<GComponent>();        //设置积分列表        private void SetScoreList()        {            ClearScoreItemEff();            //7日活动配置            activity7DaysCfgs = Activity7DaysCfgArray.Instance.dataArray;            var maxCfg = activity7DaysCfgs[activity7DaysCfgs.Length - 1];            var maxCfgID = maxCfg.id;            var maxScore = maxCfg.score;            var pos = _ui.m_StartIndex.position;            var endX = _ui.m_EndIndex.position.x;            _ui.m_ExpProcess.max = maxScore;            var score = ActivityDay7DataManager.Instance.GetScore();            //循环设置UI            foreach (var cfg in activity7DaysCfgs)            {                var cfgScore = cfg.score;                var item = UI_ExpProcessItem.Create();                var target = item.target;                components.Add(target);                _ui.target.AddChild(target);                // 根据 maxScore  cfgScore pos.y endY 设置target 位置 x,z不变,y根据比例设置                 var x = pos.x + (endX - pos.x) * cfgScore / maxScore;                target.SetPosition(x, pos.y, pos.z);                item.m_Score.text = cfgScore.ToString();                var cfgBonusArr = cfg.bonusArr;                var itemCfg = ItemCfgArray.Instance.GetCfg(cfgBonusArr[0][0]);                item.m_loaIcon.url = string.IsNullOrEmpty(itemCfg.res) ? "" : ResPathUtil.GetIconPath(itemCfg);                item.m_Num.text = cfgBonusArr[0][1].ToString();                item.m_c1.selectedIndex = cfg.id == maxCfgID ? 1 : 0;                //if (item.m_c2.selectedIndex == 0 && score >= cfgScore) {                 //    var _effectUI = EffectUIPool.CreateEffectUI(item.m_holderfEff, "ui_Small_parts", "store_NotClaimed_circle");                //    _effectUIs.Add(_effectUI);                //}                item.target.data = cfg;                item.target.onClick.Add(OnClickReward);                UI_ExpProcess.ProxyEnd();            }            FreshGetStatus();        }        public void ClearScoreItemEff()        {            for (int i = 0; i < _effectUIs.Count; i++)            {                EffectUIPool.Recycle(_effectUIs[i]);                _effectUIs[i] = null;            }            _effectUIs.Clear();        }        public void ClearTaskItemEff()        {            for (int i = 0; i < _effectTaskUIs.Count; i++)            {                EffectUIPool.Recycle(_effectTaskUIs[i]);                _effectTaskUIs[i] = null;            }            _effectTaskUIs.Clear();        }                //设置天数列表        private void SetDayList()        {            //7日活动配置            cfgDataArray = Activity7DaysTaskCfgArray.Instance.dataArray;            _ui.m_DayList.numItems = cfgDataArray.Length;            _ui.m_DayList.ScrollToView(onClickDayIndex);        }        private void FreshGetStatus()        {            components.ForEach(com =>            {                var item = UI_ExpProcessItem.Proxy(com);                var cfg = (Activity7DaysCfg)item.target.data;                var cfgID = cfg.id;                var state = ActivityDay7DataManager.Instance.GetActivityDay7RewardState(cfgID);                item.m_c2.selectedIndex = state ? 1 : 0;                RedDotController.Instance.SetComRedDot(item.target,                    ActivityDay7DataManager.Instance.CheckActivityDay7RewardCanGet(cfgID),"",-90);                UI_ExpProcessItem.ProxyEnd();            });        }        private async void OnBtnGetClick(EventContext context)        {            if (!(context.sender is GObject btnGet)) return;            var result = await TaskSProxy.GetTaskBonus((int)btnGet.data);            if (!result) return;            SetTasks();        }        private async void OnClickReward(EventContext context)        {            if (!(context.sender is GObject btnGet)) return;            var activity7DaysCfg = (Activity7DaysCfg)btnGet.data;            var id = activity7DaysCfg.id;            if (!ActivityDay7DataManager.Instance.CheckActivityDay7RewardCanGet(id))            {                GoodsItemTipsController.ShowItemTips(activity7DaysCfg.bonusArr[0][0]);                return;            }            var result = await ActivityDay7SProxy.ReqGetActivityDay7Reward(activity7DaysCfg);            if (!result) return;            FreshGetStatus();        }        private void SetTime()        {            UpdateTime(null);            Timers.inst.Add(1, 0, UpdateTime);        }        //UpdateTime        private void UpdateTime(object param)        {            var endTime = ActivityDay7DataManager.Instance.GetEndTime();            var leftTime = endTime - TimeHelper.ServerNow();            if (leftTime <= 0)            {                Timers.inst.Remove(UpdateTime);                return;            }            _ui.m_TimeStr.text = TimeUtil.FormattingTimeTo_DDHHmm((int)leftTime);        }    }}
 |