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 _effectUIs = new List(); private List _effectTaskUIs = new List(); 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("qrhd_banner_yxzy"); _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)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)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 components = new List(); //设置积分列表 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() { 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); } } }