MarshalDataTool.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import { Component, _decorator } from "cc";
  2. import { DataSystem } from "../core/data/DataSystem";
  3. import { Http } from "../core/net/Http";
  4. import { Hero_Client, UserHeroData } from "../hero/UserHeroData";
  5. import { MarshalData, Skill } from "./MarshalData";
  6. const { ccclass } = _decorator;
  7. /**
  8. * 统帅台界面
  9. * @author 郑聂华
  10. * @deprecated 弃用 请使用MarshalSkillSystem
  11. */
  12. @ccclass('MarshalDataTool')
  13. export class MarshalDataTool extends Component {
  14. private marshalData: MarshalData;
  15. private get MarshalData(): MarshalData {
  16. if (!this.marshalData) this.marshalData = DataSystem.getData(MarshalData);
  17. return this.marshalData;
  18. }
  19. private set MarshalData(value: MarshalData) {
  20. this.marshalData = value;
  21. }
  22. /**更新统帅技能和通知队列数据*/
  23. public updateNoticeQueue() {
  24. let starNum = 0;
  25. let userHeroData = DataSystem.getData(UserHeroData);
  26. for (let id of userHeroData.haveHeros) {
  27. let tempHero = userHeroData.get(id);
  28. starNum += tempHero.server.star;
  29. }
  30. let tempKeys = this.MarshalData.marshalSkillData.lvNeedStarsMap.keys();
  31. for (let id of tempKeys) {
  32. let tempStarAry = this.MarshalData.marshalSkillData.lvNeedStarsMap.get(id);
  33. for (let i = 0; i < tempStarAry.length; i++) {
  34. if (tempStarAry[i] <= starNum) {
  35. let curLv = this.MarshalData.marshalSkillData.lvMarshalSkill.get(id);
  36. if (curLv < i + 1) {
  37. let param = { type: curLv <= 0 ? 1 : 2, id: id, lv: i + 1, lastLv: curLv };
  38. this.MarshalData.skillNoticeQueue.push(param);
  39. this.MarshalData.skillUnlockLvUpQueue.push(param);
  40. this.MarshalData.marshalSkillData.lvMarshalSkill.set(id, i + 1);
  41. }
  42. }
  43. }
  44. }
  45. //打开技能解锁页面 通过检测skillNoticeQueue长度 自行调用最后一个数据展示弹窗
  46. //newParam && WindowSystem.open("prefabs/ui/marshalStage/marshalSkillNotice", WindowOpenMode.NotCloseAndCover, newParam);
  47. }
  48. /**
  49. * 更新统帅技能等级数据
  50. */
  51. public async updateSkillLvData(http: Http) {
  52. let numStar = 0;
  53. let userHeroData = DataSystem.getData(UserHeroData);
  54. await userHeroData.pull(http);
  55. for (let id of userHeroData.haveHeros) {
  56. let tempHero = userHeroData.get(id);
  57. numStar += tempHero.server.star;
  58. }
  59. let tempKeys = this.MarshalData.marshalSkillData.lvNeedStarsMap.keys();
  60. for (let id of tempKeys) {
  61. let tempStarAry = this.MarshalData.marshalSkillData.lvNeedStarsMap.get(id);
  62. for (let i = 0; i < tempStarAry.length; i++) {
  63. if (numStar >= tempStarAry[i])
  64. this.MarshalData.marshalSkillData.lvMarshalSkill.set(id, i + 1);
  65. }
  66. }
  67. }
  68. /**获取技能效果值
  69. * @param skill 技能对象
  70. * @param lv 技能等级
  71. */
  72. public getSkillValue(skill: Skill, lv: number) {
  73. switch (skill.attType) {
  74. case 1:
  75. return;
  76. case 2:
  77. return;
  78. case 3:
  79. return (skill.skillValue[lv - 1]) / 10000;
  80. case 4:
  81. return;
  82. case 5:
  83. return skill.skillValue[lv - 1];
  84. }
  85. }
  86. /**获取技能效果值字符串
  87. * @param skill 技能对象
  88. * @param lv 技能等级
  89. */
  90. public getSkillValueStr(skill: Skill, lv: number) {
  91. switch (skill.attType) {
  92. case 1:
  93. return;
  94. case 2:
  95. return;
  96. case 3:
  97. return ((skill.skillValue[lv - 1]) / 10000 * 100).toFixed(1) + "%";
  98. case 4:
  99. return;
  100. case 5:
  101. return skill.skillValue[lv - 1] + "秒";
  102. }
  103. }
  104. /**
  105. * 获取技能统帅加成值
  106. * @param hero 统帅
  107. */
  108. getSkillAddValue(hero: Hero_Client) {
  109. return Math.pow(hero.commander / 100, 1.9);
  110. }
  111. /**
  112. * 获取技能统帅加成值字符串
  113. * @param skill 技能
  114. * @param lv 技能等级
  115. * @param hero 武将
  116. */
  117. getSkillAddValueStr(skill: Skill, lv: number, hero: Hero_Client) {
  118. let addcommander = Math.pow(hero.commander / 100, 1.9);
  119. switch (skill.attType) {
  120. case 1:
  121. return;
  122. case 2:
  123. return;
  124. case 3:
  125. return (addcommander * skill.skillValue[lv - 1] / 10000 * 100).toFixed(1) + "%";
  126. case 4:
  127. return;
  128. case 5:
  129. return (addcommander * skill.skillValue[lv - 1]).toFixed(1) + "秒";
  130. }
  131. }
  132. }