消消方块阵换皮表情
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

//*********************
// 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()
//刷新界面
}
}
}