import { _decorator, Component, Node, Animation, Label, ProgressBar, Sprite, Vec3, tween, lerp } from 'cc'; import { BuffData } from '../battle/BuffData'; import { DataSystem } from '../core/data/DataSystem'; import { Http, HttpResponseCode } from '../core/net/Http'; import List from '../core/ui/virtualList/List'; import { ConfigData } from '../data/ConfigData'; import { ActivityInfoData } from './ActivityInfoData'; import { ActivityItem, ActivityState } from './ActivityItem'; import { TaskData } from './TaskData'; import { TaskInfoData } from './TaskInfoData'; import { TaskItem } from './TaskItem'; const { ccclass, property, requireComponent } = _decorator; /** * 任务系统 * @author 孙雄 */ @ccclass('Task') @requireComponent(Http) export class Task extends Component { @property({ tooltip: "任务列表", type: List }) list: List; @property({ type: Animation, tooltip: "活跃度文本特效" }) animation: Animation; @property({ type: Label, tooltip: "活跃度文本" }) activityLabel: Label; @property({ type: Animation, tooltip: "补领取特效" }) repairNode: Animation; @property({ type: ProgressBar, tooltip: "活跃进度条" }) progress: ProgressBar; @property({ tooltip: "宝箱红包", type: [ActivityItem] }) activityList: ActivityItem[] = []; @property({ tooltip: "特效显示节点", type: Node }) effectNode: Node; @property({ tooltip: "特效目标节点", type: Node }) targetNode: Node; // private listData = []; private taskActivityConfig: any; private taskConfig: any; private _activityNum: number = -1; private maxActiveValue: number = 0; private taskData: TaskData; private listData = []; start() { this.taskData = DataSystem.getData(TaskData); this.taskConfig = DataSystem.getData(ConfigData).get('task'); this.taskActivityConfig = DataSystem.getData(ConfigData).get('taskActive'); this.maxActiveValue = this.taskActivityConfig[4].activevalue; this.initTaskDaTa(); } update(dt: number) { DataSystem.watch(TaskData, 'getTaskGiftNum') && this.setList(); DataSystem.watch(TaskData, 'activityNum') && this.setActivity(); DataSystem.watch(TaskData, 'replacementNum') && (this.repairNode.node.active = false); if (this._activityNum != -1) { this.progress.progress = lerp( this.progress.progress, Math.min(1, this._activityNum / this.maxActiveValue), dt * 10 ) }; } private async initTaskDaTa() { let result = await this.getComponent(Http).send('/api/task/GetTask'); if (result && result.code == HttpResponseCode.Success) { this.taskData.tasks = []; this.taskData.activitys = []; this.activityNum = result.data.active; this.taskData.activityNum = result.data.active; this.taskData.minNum = result.data.minNum; this.taskData.maxNum = result.data.maxNum; this.taskData.yesterdayIsReceive = result.data.yesterdayIsReceive; if (!result.data.yesterdayIsReceive && result.data.yesterdayRewardNum > 0) { this.repairNode.node.active = true; this.repairNode.play(); } this.taskData.yesterdayRewardNum = result.data.yesterdayRewardNum; for (const key in this.taskConfig) { let serverData = null; for (let i = 0; i < result.data.taskDatas.length; i++) { if (result.data.taskDatas[i].id == Number(key)) { serverData = result.data.taskDatas[i]; break; } } let data = new TaskInfoData(); data.id = this.taskConfig[key].id; data.des = this.taskConfig[key].description; data.count1 = this.taskConfig[key].count1; data.count2 = this.taskConfig[key].count2; data.activeValue1 = this.taskConfig[key].activevalue1; data.activeValue2 = this.taskConfig[key].activevalue2; data.openId = this.taskConfig[key].gotoui; if (serverData) { data.serverCount = serverData.count; data.isReceive1 = serverData.isReceive1; data.isReceive2 = serverData.isReceive2; } else { data.serverCount = 0; data.isReceive1 = false; data.isReceive2 = false; } this.taskData.tasks.push(data); } for (const key in this.taskActivityConfig) { let serverData = null; for (let i = 0; i < result.data.activeDatas.length; i++) { if (result.data.activeDatas[i].id == Number(key)) { serverData = result.data.activeDatas[i]; break; } } let data = new ActivityInfoData(); data.id = this.taskConfig[key].id; data.icon = this.taskConfig[key].icon; data.activeValue = this.taskConfig[key].activevalue; data.isDouble = this.taskConfig[key].isdouble; data.videoTimes = this.taskConfig[key].videotimes; if (serverData) { data.giftType = serverData.type; data.num = serverData.num; data.isReceiveSingle = serverData.isReceiveSingle; data.isReceiveDouble = serverData.isReceiveDouble; } else { data.giftType = 'money'; data.num = 0; data.isReceiveSingle = false; data.isReceiveDouble = false; } this.taskData.activitys.push(data); } } this.setList(); // this.test(); } private test() { this.activityNum = 80; this.taskData.yesterdayIsReceive = true; if (this.taskData.yesterdayIsReceive) { this.repairNode.node.active = true; this.repairNode.play(); } } /**任务列表 */ private setList() { this.listData = []; let tempArr = this.taskData.tasks.concat(); let tempHasArr = []; let tempUnFinished = []; for (let i = 0; i < tempArr.length; i++) { if (tempArr[i].serverCount >= tempArr[i].count1 && !tempArr[i].isReceive1 || tempArr[i].serverCount >= tempArr[i].count2 && !tempArr[i].isReceive2) { this.listData.push(tempArr[i]); } else if (tempArr[i].isReceive2 && tempArr[i].isReceive1) { tempHasArr.push(tempArr[i]); } else { tempUnFinished.push(tempArr[i]); } } // !this.listData.length && (this.taskData.hasReceived = false); this.listData = this.listData.concat(tempUnFinished).concat(tempHasArr); this.list.numItems = this.taskData.tasks.length; } private myTween; private setActivity() { this._activityNum = DataSystem.getData(TaskData).activityNum; this.activityLabel.string = this._activityNum + ''; this.animation.play(); } private set activityNum(value: number) { if (DataSystem.getData(TaskData).activityNum != value) { DataSystem.getData(TaskData).activityNum = value; } if (this._activityNum != value) { this._activityNum = value; this.activityLabel.string = this._activityNum + ''; this.progress.progress = this._activityNum / this.maxActiveValue; } } /** * 当列表项渲染 */ public onListRender(item: Node, index: number) { item.getComponent(TaskItem).onDataChange(this.listData[index], this.targetNode, this.effectNode); } }