Barracks.ts 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import { _decorator, Component, Node, TERRAIN_SOUTH_INDEX, Button, Label, RichText, TERRAIN_HEIGHT_BASE, UITransform } from 'cc';
  2. import { BattleData } from '../battle/BattleData';
  3. import { Data } from '../core/data/Data';
  4. import { DataSystem } from '../core/data/DataSystem';
  5. import { Http, HttpResponseCode } from '../core/net/Http';
  6. import { OpenWindow } from '../core/ui/window/OpenWindow';
  7. import { WindowSystem } from '../core/ui/window/WindowSystem';
  8. import { ConfigData } from '../data/ConfigData';
  9. import { UserData } from '../data/UserData';
  10. import { UserHeroData } from '../hero/UserHeroData';
  11. import { Config } from '../launch/Config';
  12. import { MarshalData } from '../marshal/MarshalData';
  13. import { ReportThinking } from '../ReportThinking';
  14. const { ccclass, property, requireComponent } = _decorator;
  15. /**兵营UI */
  16. @ccclass('Barracks')
  17. @requireComponent(Http)
  18. export class Barracks extends Component {
  19. @property({ type: Label, tooltip: "当前兵营等级文本" }) nowLvLabel: Label;
  20. @property({ type: Label, tooltip: "下一次解锁新武将等级" }) nextUnLockGeneralLv: Label;
  21. @property({ type: Label, tooltip: "解锁新武将数量" }) numLabel: Label;
  22. @property({ type: Label, tooltip: "当前等级文本" }) lvLabel: Label;
  23. @property({ type: Label, tooltip: "下一级文本" }) nextLvLabel: Label;
  24. @property({ type: RichText, tooltip: "当前威望" }) prestigeLabel: RichText;
  25. @property({ type: Node, tooltip: "升级按钮节点" }) upCampLvNode: Node;
  26. @property({ type: Node, tooltip: "获取威望节点" }) getPrestigeNode: Node;
  27. @property({ type: Node, tooltip: "最大等级节点" }) MaxLvNode: Node;
  28. @property({ type: Node, tooltip: "等级信息" }) LvInfoNode: Node;
  29. @property({ type: Node, tooltip: "最大等级信息" }) MaxLvLabelNode: Node;
  30. @property({ type: Node, tooltip: "解锁武将信息节点" }) unlockGeneralNode: Node;
  31. @property({ type: Node, tooltip: "当前等级节点" }) nowLvNode: Node;
  32. @property({ type: OpenWindow, tooltip: "兵营升级窗口" }) barracksGradeUpWin: OpenWindow;
  33. @property({ type: OpenWindow, tooltip: "武将解锁窗口" }) unLockHeroWin: OpenWindow;
  34. private barrackConfig: any;
  35. private unLockGeneralLv: number = 0;
  36. private heroDatas = [];
  37. private showUnlock = false;
  38. private newUnLockHeros = [];
  39. onLoad() {
  40. this.barrackConfig = DataSystem.getData(ConfigData).get('barrack');
  41. this.setLvInfo();
  42. this.setPrestige();
  43. }
  44. update() {
  45. DataSystem.watch(UserData, 'campLv') && this.setLvInfo();
  46. DataSystem.watch(UserData, 'prestige') && this.setPrestige();
  47. }
  48. private setLvInfo() {
  49. let userData = DataSystem.getData(UserData);
  50. this.nowLvLabel.string = 'Lv.' + userData.campLv;
  51. this.lvLabel.string = 'Lv.' + userData.campLv;
  52. this.nextLvLabel.string = `Lv.${userData.campLv + 1}`;
  53. if (!this.barrackConfig[userData.campLv + 1]) {//已经最大等级
  54. this.LvInfoNode.active = this.upCampLvNode.active = this.getPrestigeNode.active = false;
  55. this.MaxLvLabelNode.active = this.MaxLvNode.active = true;
  56. } else {
  57. this.MaxLvLabelNode.active = this.MaxLvNode.active = false;
  58. }
  59. if (this.unLockGeneralLv <= userData.campLv) {
  60. let generalsStr = this.getUnLockGeneralLv();
  61. if (generalsStr) {
  62. this.heroDatas = generalsStr.split(",");
  63. this.nextUnLockGeneralLv.string = 'Lv.' + this.unLockGeneralLv;
  64. this.numLabel.string = this.heroDatas.length + '名';
  65. } else if (this.unlockGeneralNode.active) {
  66. this.unlockGeneralNode.active = false;
  67. this.nowLvNode.setPosition(160, 330, 0);
  68. }
  69. }
  70. }
  71. /**设置威望 */
  72. private setPrestige() {
  73. let userData = DataSystem.getData(UserData);
  74. if (this.MaxLvLabelNode.active) {
  75. this.prestigeLabel.string = `<b><color=#4D2C14><color=#0EC101>${userData.prestige}</c> /-</c></b>`;
  76. } else {
  77. let needPrestige = this.barrackConfig[userData.campLv].cost;
  78. if (userData.prestige >= needPrestige) {
  79. if (!this.upCampLvNode.active) {
  80. this.upCampLvNode.active = true;
  81. this.getPrestigeNode.active = false;
  82. }
  83. this.prestigeLabel.string = `<b><color=#4D2C14><color=#0EC101>${userData.prestige}</c> /${needPrestige} </c></b>`;
  84. } else {
  85. if (!this.getPrestigeNode.active) {
  86. this.upCampLvNode.active = false;
  87. this.getPrestigeNode.active = true;
  88. }
  89. this.prestigeLabel.string = `<b><color=#4D2C14><color=#D72800>${userData.prestige}</c> /${needPrestige} </c></b>`;
  90. }
  91. }
  92. }
  93. /*获取下次解锁神将数据 */
  94. private getUnLockGeneralLv() {
  95. let lv = DataSystem.getData(UserData).campLv;
  96. for (const key in this.barrackConfig) {
  97. if (Number(key) > lv && this.barrackConfig[key].unlockHero) {
  98. this.unLockGeneralLv = Number(key);
  99. return this.barrackConfig[key].unlockHero;
  100. }
  101. }
  102. return '';
  103. }
  104. /**升级 */
  105. private async upCampLv() {
  106. let result = await this.getComponent(Http).send("/api/user/upCamp");
  107. if (result && result.code == HttpResponseCode.Success) {
  108. let userData = DataSystem.getData(UserData);
  109. if (result.data.campLv == this.unLockGeneralLv) {
  110. this.newUnLockHeros = this.heroDatas.concat();
  111. this.showUnlock = true;
  112. }
  113. userData.campLv = result.data.campLv;
  114. ReportThinking.currency_decrease('prestige', userData.prestige, userData.prestige - result.data.prestige, result.data.prestige, 'upCamp');
  115. ReportThinking.base_levelup(userData.prestige - result.data.prestige);
  116. userData.prestige = result.data.prestige;
  117. this.barracksGradeUpWin.open({ nextLv: this.unLockGeneralLv });
  118. this.setHaveHerosData();
  119. this.setBattleHerosData();
  120. } else if (result && result.code == 111) {
  121. WindowSystem.showTips('威望不足');
  122. }
  123. }
  124. /**更新已获得武将等级*/
  125. private setHaveHerosData() {
  126. let userData = DataSystem.getData(UserData);
  127. let userHeroData = DataSystem.getData(UserHeroData);
  128. for (let i = 0; i < userHeroData.haveHeros.length; i++) {
  129. let hero = userHeroData.get(userHeroData.haveHeros[i])
  130. if (hero.server.lv < userData.campLv) {
  131. hero.server.lv = userData.campLv;
  132. userHeroData.set(userHeroData.haveHeros[i], hero);
  133. }
  134. }
  135. }
  136. /**更新战斗武将等级*/
  137. private setBattleHerosData() {
  138. let userData = DataSystem.getData(UserData);
  139. for (let i = 1; i < 6; i++) {
  140. let battleHeroData = DataSystem.getData(BattleData).heros.get(i);
  141. if (battleHeroData && battleHeroData.id) {
  142. if (battleHeroData.lv < userData.campLv) {
  143. battleHeroData.lv = userData.campLv;
  144. battleHeroData.lvProgress = 0;
  145. }
  146. }
  147. }
  148. }
  149. private onClose(closeCallback: () => void) {
  150. if (this.showUnlock) {
  151. this.unLockHeroWin.open({ heroDatas: this.newUnLockHeros });
  152. }
  153. closeCallback();
  154. }
  155. }