Task.ts 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import { _decorator, Component, Node, Animation, Label, ProgressBar, Sprite, Vec3, tween, lerp } from 'cc';
  2. import { BuffData } from '../battle/BuffData';
  3. import { DataSystem } from '../core/data/DataSystem';
  4. import { Http, HttpResponseCode } from '../core/net/Http';
  5. import List from '../core/ui/virtualList/List';
  6. import { ConfigData } from '../data/ConfigData';
  7. import { ActivityInfoData } from './ActivityInfoData';
  8. import { ActivityItem, ActivityState } from './ActivityItem';
  9. import { TaskData } from './TaskData';
  10. import { TaskInfoData } from './TaskInfoData';
  11. import { TaskItem } from './TaskItem';
  12. const { ccclass, property, requireComponent } = _decorator;
  13. /**
  14. * 任务系统
  15. * @author 孙雄
  16. */
  17. @ccclass('Task')
  18. @requireComponent(Http)
  19. export class Task extends Component {
  20. @property({ tooltip: "任务列表", type: List }) list: List;
  21. @property({ type: Animation, tooltip: "活跃度文本特效" }) animation: Animation;
  22. @property({ type: Label, tooltip: "活跃度文本" }) activityLabel: Label;
  23. @property({ type: Animation, tooltip: "补领取特效" }) repairNode: Animation;
  24. @property({ type: ProgressBar, tooltip: "活跃进度条" }) progress: ProgressBar;
  25. @property({ tooltip: "宝箱红包", type: [ActivityItem] }) activityList: ActivityItem[] = [];
  26. @property({ tooltip: "特效显示节点", type: Node }) effectNode: Node;
  27. @property({ tooltip: "特效目标节点", type: Node }) targetNode: Node;
  28. // private listData = [];
  29. private taskActivityConfig: any;
  30. private taskConfig: any;
  31. private _activityNum: number = -1;
  32. private maxActiveValue: number = 0;
  33. private taskData: TaskData;
  34. private listData = [];
  35. start() {
  36. this.taskData = DataSystem.getData(TaskData);
  37. this.taskConfig = DataSystem.getData(ConfigData).get('task');
  38. this.taskActivityConfig = DataSystem.getData(ConfigData).get('taskActive');
  39. this.maxActiveValue = this.taskActivityConfig[4].activevalue;
  40. this.initTaskDaTa();
  41. }
  42. update(dt: number) {
  43. DataSystem.watch(TaskData, 'getTaskGiftNum') && this.setList();
  44. DataSystem.watch(TaskData, 'activityNum') && this.setActivity();
  45. DataSystem.watch(TaskData, 'replacementNum') && (this.repairNode.node.active = false);
  46. if (this._activityNum != -1) {
  47. this.progress.progress = lerp(
  48. this.progress.progress,
  49. Math.min(1, this._activityNum / this.maxActiveValue),
  50. dt * 10
  51. )
  52. };
  53. }
  54. private async initTaskDaTa() {
  55. let result = await this.getComponent(Http).send('/api/task/GetTask');
  56. if (result && result.code == HttpResponseCode.Success) {
  57. this.taskData.tasks = [];
  58. this.taskData.activitys = [];
  59. this.activityNum = result.data.active;
  60. this.taskData.activityNum = result.data.active;
  61. this.taskData.minNum = result.data.minNum;
  62. this.taskData.maxNum = result.data.maxNum;
  63. this.taskData.yesterdayIsReceive = result.data.yesterdayIsReceive;
  64. if (!result.data.yesterdayIsReceive && result.data.yesterdayRewardNum > 0) {
  65. this.repairNode.node.active = true;
  66. this.repairNode.play();
  67. }
  68. this.taskData.yesterdayRewardNum = result.data.yesterdayRewardNum;
  69. for (const key in this.taskConfig) {
  70. let serverData = null;
  71. for (let i = 0; i < result.data.taskDatas.length; i++) {
  72. if (result.data.taskDatas[i].id == Number(key)) {
  73. serverData = result.data.taskDatas[i];
  74. break;
  75. }
  76. }
  77. let data = new TaskInfoData();
  78. data.id = this.taskConfig[key].id;
  79. data.des = this.taskConfig[key].description;
  80. data.count1 = this.taskConfig[key].count1;
  81. data.count2 = this.taskConfig[key].count2;
  82. data.activeValue1 = this.taskConfig[key].activevalue1;
  83. data.activeValue2 = this.taskConfig[key].activevalue2;
  84. data.openId = this.taskConfig[key].gotoui;
  85. if (serverData) {
  86. data.serverCount = serverData.count;
  87. data.isReceive1 = serverData.isReceive1;
  88. data.isReceive2 = serverData.isReceive2;
  89. } else {
  90. data.serverCount = 0;
  91. data.isReceive1 = false;
  92. data.isReceive2 = false;
  93. }
  94. this.taskData.tasks.push(data);
  95. }
  96. for (const key in this.taskActivityConfig) {
  97. let serverData = null;
  98. for (let i = 0; i < result.data.activeDatas.length; i++) {
  99. if (result.data.activeDatas[i].id == Number(key)) {
  100. serverData = result.data.activeDatas[i];
  101. break;
  102. }
  103. }
  104. let data = new ActivityInfoData();
  105. data.id = this.taskConfig[key].id;
  106. data.icon = this.taskConfig[key].icon;
  107. data.activeValue = this.taskConfig[key].activevalue;
  108. data.isDouble = this.taskConfig[key].isdouble;
  109. data.videoTimes = this.taskConfig[key].videotimes;
  110. if (serverData) {
  111. data.giftType = serverData.type;
  112. data.num = serverData.num;
  113. data.isReceiveSingle = serverData.isReceiveSingle;
  114. data.isReceiveDouble = serverData.isReceiveDouble;
  115. } else {
  116. data.giftType = 'money';
  117. data.num = 0;
  118. data.isReceiveSingle = false;
  119. data.isReceiveDouble = false;
  120. }
  121. this.taskData.activitys.push(data);
  122. }
  123. }
  124. this.setList();
  125. // this.test();
  126. }
  127. private test() {
  128. this.activityNum = 80;
  129. this.taskData.yesterdayIsReceive = true;
  130. if (this.taskData.yesterdayIsReceive) {
  131. this.repairNode.node.active = true;
  132. this.repairNode.play();
  133. }
  134. }
  135. /**任务列表 */
  136. private setList() {
  137. this.listData = [];
  138. let tempArr = this.taskData.tasks.concat();
  139. let tempHasArr = [];
  140. let tempUnFinished = [];
  141. for (let i = 0; i < tempArr.length; i++) {
  142. if (tempArr[i].serverCount >= tempArr[i].count1 && !tempArr[i].isReceive1 || tempArr[i].serverCount >= tempArr[i].count2 && !tempArr[i].isReceive2) {
  143. this.listData.push(tempArr[i]);
  144. } else if (tempArr[i].isReceive2 && tempArr[i].isReceive1) {
  145. tempHasArr.push(tempArr[i]);
  146. } else {
  147. tempUnFinished.push(tempArr[i]);
  148. }
  149. }
  150. // !this.listData.length && (this.taskData.hasReceived = false);
  151. this.listData = this.listData.concat(tempUnFinished).concat(tempHasArr);
  152. this.list.numItems = this.taskData.tasks.length;
  153. }
  154. private myTween;
  155. private setActivity() {
  156. this._activityNum = DataSystem.getData(TaskData).activityNum;
  157. this.activityLabel.string = this._activityNum + '';
  158. this.animation.play();
  159. }
  160. private set activityNum(value: number) {
  161. if (DataSystem.getData(TaskData).activityNum != value) {
  162. DataSystem.getData(TaskData).activityNum = value;
  163. }
  164. if (this._activityNum != value) {
  165. this._activityNum = value;
  166. this.activityLabel.string = this._activityNum + '';
  167. this.progress.progress = this._activityNum / this.maxActiveValue;
  168. }
  169. }
  170. /**
  171. * 当列表项渲染
  172. */
  173. public onListRender(item: Node, index: number) {
  174. item.getComponent(TaskItem).onDataChange(this.listData[index], this.targetNode, this.effectNode);
  175. }
  176. }