AchievementWindow.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import { _decorator, Component, Node, tween, Widget, UITransform, Prefab, instantiate, JsonAsset, ProgressBar } from 'cc';
  2. import { Http } from '../core/net/Http';
  3. import { ConfigData } from '../Data/ConfigData';
  4. import { g } from '../Data/g';
  5. import { AchievementItem } from './AchievementItem';
  6. const { ccclass, property } = _decorator;
  7. @ccclass('AchievementWindow')
  8. export class AchievementWindow extends Component {
  9. @property({ type: Node })
  10. public displayNode: Node = null;
  11. @property({ type: ProgressBar })
  12. public progressBar: ProgressBar = null;
  13. /**
  14. * 需要添加item的节点
  15. */
  16. @property({ type: Node })
  17. public contentNode: Node = null;
  18. /**
  19. * item预制体
  20. */
  21. @property({ type: Prefab })
  22. public lvPrefab: Prefab = null;
  23. private widget: Widget;
  24. private http: Http;
  25. /**
  26. * 解析出的配置数据
  27. */
  28. private jsonArray: Array<any>;
  29. /**
  30. * 等级进度Map
  31. */
  32. private progressArr: Array<number>;
  33. async start() {
  34. this.progressArr = new Array();
  35. this.progressArr.push(0.1);
  36. this.progressArr.push(0.33);
  37. this.progressArr.push(0.55);
  38. this.progressArr.push(0.77);
  39. this.progressArr.push(1);
  40. this.http = this.node.getComponent(Http);
  41. let getedArr: Array<any> = await this.queryGetedData();
  42. //读取配置文件
  43. this.jsonArray = ConfigData.configMap.get("lvlreward");
  44. //设置进度
  45. this.progressBar.progress = this.getProgress()
  46. //深度复制
  47. let reJsonArr = this.jsonArray.slice(0);
  48. reJsonArr.reverse().forEach(element => {
  49. let lvNode = instantiate(this.lvPrefab);
  50. let item: AchievementItem = lvNode.getComponent(AchievementItem);
  51. item.redNum.string = element.value + "";
  52. item.title.string = element.id + "";
  53. item.gradeRight.string = element.lvl;
  54. item.id = element.id;
  55. if (element.lvl <= g.userData.getLevel()) {
  56. item.canGet.node.active = true;
  57. item.geted.node.active = false;
  58. item.unGet.node.active = false;
  59. } else {
  60. item.unGet.node.active = true;
  61. item.canGet.node.active = false;
  62. item.geted.node.active = false;
  63. }
  64. if (getedArr.indexOf(element.id + "") != -1) {
  65. item.geted.node.active = true;
  66. item.unGet.node.active = false;
  67. item.canGet.node.active = false;
  68. }
  69. this.contentNode.addChild(lvNode);
  70. });
  71. this.widget = this.displayNode.getComponent(Widget);
  72. tween(this.widget).to(0.5, { editorBottom: -30 }, { easing: "sineOut" }).start();
  73. }
  74. /**
  75. * 关闭动画
  76. */
  77. onClose() {
  78. tween(this.widget).to(0.3, { editorBottom: this.displayNode.getComponent(UITransform).height * -1 }, { easing: "sineIn" }).call(() => {
  79. this.node.parent.destroy();
  80. }).start();
  81. }
  82. /**
  83. * 获取已领取奖励
  84. */
  85. async queryGetedData() {
  86. let data = await this.http.send("/api/levelReward/levelRewardList");
  87. return data.data;
  88. }
  89. getProgress() {
  90. //获取当前等级
  91. let level = g.userData.getLevel();
  92. //获取当前高一级等级下标
  93. let levelNext = null;
  94. for (let i = 0; i < this.jsonArray.length; i++) {
  95. if (this.jsonArray[i]["lvl"] >= level) {
  96. levelNext = i;
  97. break;
  98. }
  99. }
  100. //不高于配置最高等
  101. if (levelNext != null) {
  102. let result: number = 0;
  103. if ((levelNext - 1) >= 0) {
  104. result = (this.progressArr[levelNext] - this.progressArr[levelNext - 1]) * (level - this.jsonArray[levelNext - 1]["lvl"]) / (this.jsonArray[levelNext]["lvl"] - this.jsonArray[levelNext - 1]["lvl"])
  105. return result + this.progressArr[levelNext - 1];
  106. }
  107. result = this.progressArr[levelNext] * level / this.jsonArray[levelNext]["lvl"]
  108. return result;
  109. }
  110. return 1;
  111. }
  112. }