You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
376 lines
14 KiB
376 lines
14 KiB
|
|
//*********************
|
|
// 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<ITaskData>(TableNames.Task);
|
|
this.taskRewardTab = gg.data.table.getTableList<ITaskRewardData>(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()
|
|
//刷新界面
|
|
}
|
|
}
|
|
}
|
|
|