123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- 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 = activity7DaysTaskCfg.taskIdArr;
- //排序根据领取状态
- 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);
- }
- }
- }
|