using System.Collections.Generic; using System.Linq; using ET; using FairyGUI; using UI.CommonGame; using UI.Task; using UnityEngine; namespace GFGGame { public class CombTaskController { private UI_CombTaskUI _ui; private List _cfgs; private int funcType; public void Dispose() { if (_ui != null) { _ui = null; } } public CombTaskController(UI_CombTaskUI ui) { _ui = ui; _ui.m_c1.onChanged.Add(OnCtrlChange); _ui.m_TaskList.itemRenderer = TaskItemRender; _ui.m_LivenessProcess.m_Reward20.target.onClick.Add(OnClickReward); _ui.m_LivenessProcess.m_Reward40.target.onClick.Add(OnClickReward); _ui.m_LivenessProcess.m_Reward60.target.onClick.Add(OnClickReward); _ui.m_LivenessProcess.m_Reward80.target.onClick.Add(OnClickReward); _ui.m_LivenessProcess.m_Reward100.target.onClick.Add(OnClickReward); _ui.m_GetAll.onClick.Add(OnBtnGetAllClick); } public void OnShown(int taskViewTabIndex) { _ui.m_c1.selectedIndex = taskViewTabIndex; OnCtrlChange(); UpdateLivenessProcess(); UpdateTask(); if (_ui.m_TaskList.numItems > 0) { _ui.m_TaskList.ScrollToView(0); } AddEventListener(); } public void OnHide() { RemoveEventListener(); } private void AddEventListener() { EventAgent.AddEventListener(ConstMessage.LIVENESS_CHANGE, UpdateLivenessProcess); // EventAgent.AddEventListener(ConstMessage.NOTICE_TASK_STATE_CHANGE, OnTaskChange); EventAgent.AddEventListener(ConstMessage.NOTICE_BATCH_TASK_STATE_CHANGE, OnTaskChanges); } private void RemoveEventListener() { EventAgent.RemoveEventListener(ConstMessage.LIVENESS_CHANGE, UpdateLivenessProcess); // EventAgent.RemoveEventListener(ConstMessage.NOTICE_TASK_STATE_CHANGE, OnTaskChange); //NOTICE_BATCH_TASK_STATE_CHANGE EventAgent.RemoveEventListener(ConstMessage.NOTICE_BATCH_TASK_STATE_CHANGE, OnTaskChanges); } //OnTaskChanges private void OnTaskChanges(EventContext eventContext) { var taskIds = (List)eventContext.data; if (taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId)).Where(taskCfg => taskCfg != null) .Any(taskCfg => taskCfg.funcType == funcType)) { UpdateTask(); } } private void OnTaskChange(EventContext eventContext) { var taskId = (int)eventContext.data; var taskCfg = TaskCfgArray.Instance.GetCfg(taskId); if (taskCfg == null) return; if (taskCfg.funcType != funcType) return; UpdateTask(); } //切换任务类型 private void OnCtrlChange() { funcType = _ui.m_c1.selectedIndex switch { 0 => //每日任务 TaskFuncType.Daily, 1 => //每周任务 TaskFuncType.Weekly, _ => funcType }; //更新任务列表 UpdateTask(); } //更新活跃度进度条 private void UpdateLivenessProcess() { var liveness = funcType switch{ TaskFuncType.Daily => RoleDataManager.DailyLiveness, TaskFuncType.Weekly => RoleDataManager.WeeklyLiveness, _ => 0 }; DailyTaskDataManager.Instance.GetShowLivenessBoxNum(funcType); _ui.m_LivenessProcess.target.max = 100; _ui.m_LivenessProcess.target.value = liveness; var cfgs = TaskActiveRewardCfgArray.Instance.GetCfgsByfuncType(funcType); for (var i = 0; i < cfgs.Count; i++) { var boxId = cfgs[i].id; var state = DailyTaskDataManager.Instance.GetBoxStateById(boxId); UI_LinessRewardProcessItemBt rewardBox = null; switch (i) { case 0: rewardBox = _ui.m_LivenessProcess.m_Reward20; break; case 1: rewardBox = _ui.m_LivenessProcess.m_Reward40; break; case 2: rewardBox = _ui.m_LivenessProcess.m_Reward60; break; case 3: rewardBox = _ui.m_LivenessProcess.m_Reward80; break; case 4: rewardBox = _ui.m_LivenessProcess.m_Reward100; break; } if (rewardBox != null) { rewardBox.target.data = boxId; rewardBox.m_c1.selectedIndex = state; RedDotController.Instance.SetComRedDot(rewardBox.target, state == 1); } } } //更新任务列表 private void UpdateTask() { _cfgs = TaskDataManager.Instance.GetTaskCfgs(funcType); _ui.m_TaskList.numItems = _cfgs.Count; //RedDotController.Instance.SetComRedDot(_ui.m_btnDailyTask, // TaskDataManager.Instance.CheckTaskRewardCanGet(TaskType.Daily)); //RedDotController.Instance.SetComRedDot(_ui.m_btnBattlePassTask, // TaskDataManager.Instance.CheckTaskRewardCanGet(TaskType.BattlePass)); } private void TaskItemRender(int index, GObject obj) { var item = UI_TaskListItem.Proxy(obj); //领取状态 item.m_c1.selectedIndex = TaskDataManager.Instance.GetTaskStateById(_cfgs[index].id); item.m_c2.selectedIndex = _cfgs[index].jumpId == "" ? 1 : 0; item.m_txtDesc.text = TaskDataManager.Instance.GetTaskDesc(_cfgs[index].id); item.m_txtCount.text = $"{TaskDataManager.Instance.GetTaskProgressById(_cfgs[index].id)}/{_cfgs[index].GetTargetCount()}"; if (item.m_GetRewardBt.data == null) { item.m_GetRewardBt.onClick.Add(OnBtnGetClick); } item.m_GetRewardBt.data = _cfgs[index].id; if (item.m_ComeBt.data == null) { item.m_ComeBt.onClick.Add(OnBtnGoClick); } item.m_ComeBt.data = _cfgs[index]; if (item.m_listTaskReward.data == null) { item.m_listTaskReward.itemRenderer = ListTaskRewardItemRender; } var reward = TaskDataManager.Instance.GetReward(_cfgs[index]); item.m_listTaskReward.data = reward; item.m_listTaskReward.numItems = reward.Length; var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy(); bool canGet = item.m_c1.selectedIndex == 1; RedDotController.Instance.SetComRedDot(item.m_GetRewardBt, canGet); UI_TaskListItem.ProxyEnd(); } private static void ListTaskRewardItemRender(int index, GObject obj) { var rewards = (int[][])obj.parent.data; var itemData = ItemUtil.createItemData(rewards[index]); var item = new ItemView(obj as GComponent); obj.data = item; item.SetData(itemData); item.ChangeTxtCountStyle(); item.SetTxtCountScale = 1.3f; UI_RewardIconYellow.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; UpdateLivenessProcess(); UpdateTask(); LogServerHelper.SendPlayParticipationLog((int)PlayParticipationEnum.MEI_RI_REN_WU, 2); } private void OnBtnGoClick(EventContext context) { if (!(context.sender is GObject { data: TaskCfg taskCfg })) return; //功能未开放 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, new object[] { typeof(TaskView).FullName, new[] { _ui.m_c1.selectedIndex } }); } private async void OnBtnGetAllClick() { var result = await TaskSProxy.GetAllTaskBonus(funcType); if (!result) return; UpdateLivenessProcess(); UpdateTask(); LogServerHelper.SendPlayParticipationLog((int)PlayParticipationEnum.MEI_RI_REN_WU, 2); } private void OnClickReward(EventContext context) { int id = (int)((GObject)context.sender).data; var cfg = TaskActiveRewardCfgArray.Instance.GetCfg(id); var state = DailyTaskDataManager.Instance.GetBoxStateById(cfg.id); switch (state) { case ConstBonusStatus.CAN_NOT_GET: { var rewards = ItemUtil.CreateItemDataList(cfg.rewardsArr); ViewManager.Show(new object[] { rewards, "活跃度奖励", $"满足{cfg.count}活跃度可领取" }); break; } case ConstBonusStatus.CAN_GET: { DailyTaskSProxy.ReqLivenessBox(cfg.id).Coroutine(); break; } case ConstBonusStatus.GOT: PromptController.Instance.ShowFloatTextPrompt("不能重复领取!"); break; } } } }