//********************* // create by 流云 // time: Mon Nov 10 2025 // desc: //********************* import { _decorator, Component, Node, find, instantiate, Label, Sprite } from 'cc'; import { Auto_taskView } from './Auto_taskView'; import { OtherDataType, StatisticsType, TaskType } from '../../game/GameData'; import { ITaskData, ITaskRewardData, ICdkData, TableNames } from '../../game/ConfigTableData'; import { taskItemNode } from './taskItemNode'; import { itemPic } from '../../com/itemPic'; import MTools from 'db://assets/mx/tools/MTools'; import { UIID } from '../../game/ConfigRes'; import { ItemData } from '../../game/ConfigProjectData'; import { GEvent } from 'db://assets/mx/module/event/GEvent'; import { TargetTaskType } from '../../manager/TargetTaskManager'; const { ccclass, property } = _decorator; @ccclass('UItaskView') export class UItaskView extends Auto_taskView { taskTab: ITaskData[] = [] taskRewardTab: ITaskRewardData[] = [] weekRewardTab: ITaskRewardData[] = [] dayRewardTab: ITaskRewardData[] = [] onLoad(): void { super.onLoad(); } onEnable(): void { super.onEnable(); GEvent.Ins.on(GEvent.RefreshTaskView, this.refreshTaskInfo, this) } onDisable(): void { super.onDisable(); GEvent.Ins.off(GEvent.RefreshTaskView, this.refreshTaskInfo, this) } click_bgMask() { this.close(2) } onInit(): void { //初始化 //RefreshTaskView this.taskTab = gg.data.table.getTableList(TableNames.Task); this.taskRewardTab = gg.data.table.getTableList(TableNames.TaskReward); //type == 1 周 for (let i = 0; i < this.taskRewardTab.length; i++) { if (this.taskRewardTab[i].type == 1) { this.weekRewardTab.push(this.taskRewardTab[i]) } else { this.dayRewardTab.push(this.taskRewardTab[i]) } } if (gg.data.getStringData(OtherDataType.TaskRewardGetData) == '') { gg.data.setStringData(OtherDataType.TaskRewardGetData, '0&0&0&0&0') } if (gg.data.getStringData(OtherDataType.DayTaskRewardGetData) == '') { gg.data.setStringData(OtherDataType.DayTaskRewardGetData, '0&0&0&0&0') } if (gg.data.getStringData(OtherDataType.DayTaskProgressData) == '' || gg.data.getStringData(OtherDataType.DayTaskProgressData).split('&').length != this.taskTab.length) { //gg.data.getStringData(OtherDataType.DayTaskProgressData)去掉'' let str = gg.data.getStringData(OtherDataType.DayTaskProgressData).replace('', '') let addLength = str.split('&').length //补齐0 for (let i = addLength; i < this.taskTab.length; i++) { if (i == this.taskTab.length - 1) { str += '0' } else { str += '0&' } } gg.data.setStringData(OtherDataType.DayTaskProgressData, str) } //DayActiveGetRewardData if (gg.data.getStringData(OtherDataType.DayActiveGetRewardData) == '' || gg.data.getStringData(OtherDataType.DayActiveGetRewardData).split('&').length != this.taskTab.length) { //gg.data.getStringData(OtherDataType.DayActiveGetRewardData)去掉'' let dayActiveGetRewardData = gg.data.getStringData(OtherDataType.DayActiveGetRewardData).replace('', '') let addLength = dayActiveGetRewardData.split('&').length //补齐0 for (let i = addLength; i < this.taskTab.length; i++) { if (i == this.taskTab.length - 1) { dayActiveGetRewardData += '0' } else { dayActiveGetRewardData += '0&' } } gg.data.setStringData(OtherDataType.DayActiveGetRewardData, dayActiveGetRewardData) } gg.data.addDayTaskProgressData(TaskType.dailyLogin, 1) this.showOpenCenterEff() this.showOpenMaskEff(2); this.showTopView() this.showTaskItem() } refreshTaskInfo() { //刷新任务项 this.showTopView() } showTopView() { //周活跃,日活跃 //this.center_zhou_ui_rewardList this.huoyueShow(this.center_zhou, this.weekRewardTab, StatisticsType.WeekActiveCount, OtherDataType.TaskRewardGetData) //this.center_day_ui_rewardList this.huoyueShow(this.center_day, this.dayRewardTab, StatisticsType.DayActiveCount, OtherDataType.DayTaskRewardGetData) } huoyueShow(center_Node, rewardTab: ITaskRewardData[], type: StatisticsType, rewardGetData: OtherDataType) { let rewardListNode = center_Node let ui_rewardList = rewardListNode.getChildByName('ui_rewardList') let jifenNodeArray = rewardListNode.getChildByName('jifenNodeArray') let huoyueLab = rewardListNode.getChildByName('huoyueLab').getComponent(Label) //WeekActiveCount let activeCount = gg.data.getStatistics(type) if(type == StatisticsType.DayActiveCount && activeCount >= 80){ gg.targetTaskManager.statisticalData(TargetTaskType.dailyTaskBox, activeCount); } huoyueLab.string = activeCount + '' let rewardGetDataList = gg.data.getStringData(rewardGetData).split('&') //领取状态 0不可领取,1可以领取,2已经领取 let allHuoyue = rewardTab[rewardTab.length - 1].points let proBar = rewardListNode.getChildByName('Bar').getComponent(Sprite) //范围计算 // for (let i = 0; i < ui_rewardList.children.length; i++) { //activeCount let item = ui_rewardList.children[i] item.getComponent(itemPic).setGoodId(rewardTab[i].Item_id) let numLab = find('numLab', item).getComponent(Label) numLab.string = MTools.formatChineseUnit({ num: rewardTab[i].quantity }) + '' let gougou = item.getChildByName('勾勾') let redPoint = item.getChildByName('感叹号') let jifenLab = jifenNodeArray.children[i].getComponent(Label) jifenLab.string = rewardTab[i].points + '' let rewardGet = rewardGetDataList[i] redPoint.active = false gougou.active = false if (rewardGet == '0') { } else if (rewardGet == '1') { redPoint.active = true } else if (rewardGet == '2') { gougou.active = true } } //rangbbianhua // 收集所有节点的积分值 let pointArray: number[] = []; for (let i = 0; i < jifenNodeArray.children.length; i++) { let jifenLab = jifenNodeArray.children[i].getComponent(Label); pointArray.push(parseInt(jifenLab.string)); } // 确保pointArray按积分值从小到大排序 pointArray.sort((a, b) => a - b); // 定义节点对应的百分比位置(固定为10%, 30%, 50%, 70%, 100%) const nodePercentages = [0.1, 0.3, 0.5, 0.7, 1.0]; // 计算进度条fillRange if (activeCount >= allHuoyue) { proBar.fillRange = 1; } else if (activeCount <= 0) { proBar.fillRange = 0; } else { // 找到当前活跃值所在的节点区间 let currentInterval = 0; for (let i = 0; i < pointArray.length; i++) { if (activeCount < pointArray[i]) { currentInterval = i; break; } else if (activeCount === pointArray[i]) { currentInterval = i; break; } } if (currentInterval === 0) { // 活跃值小于第一个节点,使用第一个节点的百分比位置计算 let startPercentage = 0; let endPercentage = nodePercentages[0]; let startPoint = 0; let endPoint = pointArray[0]; // 计算进度 let intervalProportion = activeCount / endPoint; proBar.fillRange = startPercentage + (intervalProportion * (endPercentage - startPercentage)); //console.log('fillRange_first', proBar.fillRange, activeCount, endPoint, startPercentage, endPercentage) } else { // 计算当前区间的百分比范围 let startPercentage = nodePercentages[currentInterval - 1]; let endPercentage = nodePercentages[currentInterval]; // 计算当前区间的积分范围 let startPoint = pointArray[currentInterval - 1]; let endPoint = pointArray[currentInterval]; // 计算活跃值在当前区间内的比例 let currentInInterval = activeCount - startPoint; let intervalPoints = endPoint - startPoint; let intervalProportion = currentInInterval / intervalPoints; // 计算最终进度 proBar.fillRange = startPercentage + (intervalProportion * (endPercentage - startPercentage)); //console.log('fillRange_interval', proBar.fillRange, activeCount, startPoint, endPoint, startPercentage, endPercentage, intervalProportion) } } } showTaskItem() { //间隔帧创建item let dayTaskData = gg.data.getStringData(OtherDataType.DayTaskProgressData).split('&') let dayTaskDataGet = gg.data.getStringData(OtherDataType.DayActiveGetRewardData).split('&') let dayTaskDataObj = [] for (let i = 0; i < dayTaskData.length; i++) { let data = { taskId: i, rewardPro: parseInt(dayTaskData[i]), rewardGet: parseInt(dayTaskDataGet[i]) } dayTaskDataObj.push(data) } //dayTaskDataObj排个序号,rewardGet==1的往前面面排序,rewardGet==0排1后面,2已经领取拍最后 dayTaskDataObj.sort((a, b) => { //rewardGet==1的往前面面排序,rewardGet==2已经领取拍最后 // 首先按照rewardGet的值排序:1 < 0 < 2 if (a.rewardGet !== b.rewardGet) { if (a.rewardGet === 1) return -1; // 1排在最前面 if (b.rewardGet === 1) return 1; if (a.rewardGet === 0) return -1; // 0排在1后面 if (b.rewardGet === 0) return 1; //前面的条件可以剩下的看rewardPro进度值大的排前面 return 0; // 剩下的都是2,保持原有顺序 } // 对于相同rewardGet值的任务,按照rewardPro进度值排序 if (a.rewardPro !== b.rewardPro) { return b.rewardPro - a.rewardPro; // 进度值大的排在前面 } // 对于相同rewardGet值的任务,按照taskId排序 return a.taskId - b.taskId; }) this.ui_content.removeAllChildren let endPosiNode = this.center_zhou.getChildByName('活跃值') let endPosiNode2 = this.center_day.getChildByName('活跃值') for (let i = 0; i < dayTaskDataObj.length; i++) { this.scheduleOnce(() => { let dayData = dayTaskDataObj[i] if (this.taskTab[dayData.taskId]) { let item = instantiate(this.ui_itemNode) item.active = true item.parent = this.ui_content item.setPosition(0, 0) let taskItem = item.getComponent(taskItemNode) taskItem.setTaskData(dayData.taskId, dayData.rewardGet, dayData.rewardPro, this.taskTab[dayData.taskId], endPosiNode, endPosiNode2, this.center) } }, 0.1 + i * 0.05) } } click_weekItem1() { this.weekGetRewardItemClick(0) } click_weekItem2() { this.weekGetRewardItemClick(1) } click_weekItem3() { this.weekGetRewardItemClick(2) } click_weekItem4() { this.weekGetRewardItemClick(3) } click_weekItem5() { this.weekGetRewardItemClick(4) } click_dayItem1() { this.dayGetRewardItemClick(0) } click_dayItem2() { this.dayGetRewardItemClick(1) } click_dayItem3() { this.dayGetRewardItemClick(2) } click_dayItem4() { this.dayGetRewardItemClick(3) } click_dayItem5() { this.dayGetRewardItemClick(4) } dayGetRewardItemClick(index) { // let rewardGetDataList = gg.data.getStringData(OtherDataType.DayTaskRewardGetData).split('&') let rewardGet = rewardGetDataList[index] let r_data = this.dayRewardTab[index] if (rewardGet == '0' || rewardGet == '2') { //不可以领取或者已经领取 let _data = new ItemData(r_data.Item_id, r_data.quantity) gg.ui.openPanel(UIID.ItemDetailBox, { data: _data }) } else if (rewardGet == '1') { //领取奖励,改变状态 let _data = new ItemData(r_data.Item_id, r_data.quantity) gg.ui.openPanel(UIID.GetReward, { data: [_data], onClose: () => { gg.data.setDayTaskRewardGetData(index, '2') this.showTopView() //刷新界面 } }); } } weekGetRewardItemClick(index) { let rewardGetDataList = gg.data.getStringData(OtherDataType.TaskRewardGetData).split('&') let rewardGet = rewardGetDataList[index] let r_data = this.weekRewardTab[index] if (rewardGet == '0' || rewardGet == '2') { let _data = new ItemData(r_data.Item_id, r_data.quantity) gg.ui.openPanel(UIID.ItemDetailBox, { data: _data }) } else if (rewardGet == '1') { //领取奖励,改变状态 let _data = new ItemData(r_data.Item_id, r_data.quantity) gg.ui.openPanel(UIID.GetReward, { data: [_data], onClose: () => { gg.data.setWeekTaskRewardGetData(index, '2') this.showTopView() //刷新界面 } }); this.showTopView() //刷新界面 } } }