RedPoint.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. import { _decorator, Component, Sprite, Enum } from "cc";
  2. import { DataSystem } from "../core/data/DataSystem";
  3. import { ConfigData } from "../data/ConfigData";
  4. import { platform } from "../data/jsb/platform";
  5. import { UserData } from "../data/UserData";
  6. import { UserHeroData } from "../hero/UserHeroData";
  7. import { TaskData } from "../task/TaskData";
  8. import { RedPointData } from "./RedPointData";
  9. const { ccclass, property } = _decorator;
  10. /**
  11. * 红点类型
  12. */
  13. export enum RedPointType {
  14. /**
  15. * 兵营是否可升级
  16. */
  17. Camp,
  18. /**
  19. * 是否有可升星、合成武将
  20. */
  21. Hero,
  22. /**
  23. * 是否有可领取奖励的任务
  24. */
  25. Task,
  26. /**
  27. * 是否有可领取的图鉴奖励
  28. */
  29. HeroReward,
  30. /**
  31. * 是否有抽奖次数
  32. */
  33. Draw,
  34. /**
  35. * 是否有征收粮食次数和奖励
  36. */
  37. GrainLevies,
  38. /**
  39. * 是否有贡献可领取
  40. */
  41. ContributionReward,
  42. /**
  43. *是否可领取切磋宝箱
  44. */
  45. ReceiveFightBox
  46. }
  47. /**
  48. * 红点组件
  49. * @author 袁浩
  50. * @description 给玩家提示
  51. */
  52. @ccclass("RedPoint")
  53. export class RedPoint extends Component {
  54. @property({ tooltip: "红点类型", type: Enum(RedPointType) })
  55. public type: RedPointType = RedPointType.HeroReward;
  56. /**
  57. * 某些红点是在列表项中的,则需要传递此值
  58. * 图鉴列表项:武将编号、任务列表:任务索引、征粮:索引
  59. */
  60. public param: number;
  61. private icon: Sprite;
  62. start() {
  63. this.icon = this.getComponent(Sprite);
  64. this.icon.enabled = false;
  65. //首次加载判断一次
  66. let data = DataSystem.getData(RedPointData);
  67. this.checkHerosReward(data);
  68. this.checkDraw(data);
  69. this.checkGrainLevies(data);
  70. this.checkTask();
  71. this.checkCamp();
  72. this.checkHeros();
  73. this.checkFission(data);
  74. this.checkFightBox(data);
  75. }
  76. update() {
  77. let data = DataSystem.getData(RedPointData);
  78. DataSystem.watch(RedPointData, "herosReward") && this.checkHerosReward(data);
  79. DataSystem.watch(RedPointData, "canDraw") && this.checkDraw(data);
  80. DataSystem.watch(RedPointData, "grainLevies") && this.checkGrainLevies(data);
  81. DataSystem.watch(TaskData, "hasReceived") && this.checkTask();
  82. DataSystem.watch(UserData, "prestige") && this.checkCamp();
  83. DataSystem.watch(RedPointData, "checkFission") && this.checkFission(data);
  84. DataSystem.watch(UserData, "contribution") && this.checkFission(data);
  85. DataSystem.watch(RedPointData, "canReceiveFightBox") && this.checkFightBox(data);
  86. this.checkHeros();
  87. }
  88. private checkCamp() {
  89. if (this.type == RedPointType.Camp) {
  90. let userData = DataSystem.getData(UserData);
  91. let barrackConfig = DataSystem.getData(ConfigData).get('barrack');
  92. if (barrackConfig[userData.campLv + 1]) {//如果没满级
  93. let needPrestige = barrackConfig[userData.campLv].cost;
  94. this.icon.enabled = userData.prestige >= needPrestige;
  95. }
  96. else {
  97. this.icon.enabled = false;
  98. }
  99. }
  100. }
  101. /**
  102. * 升星验证
  103. */
  104. private checkHeros() {
  105. if (this.type == RedPointType.Hero) {
  106. let userHero = DataSystem.getData(UserHeroData);
  107. let canUpstar = false;
  108. let canCompose = false;
  109. for (let i = 0; i < userHero.haveHeros.length; i++) {
  110. let hero = DataSystem.getData(UserHeroData).get(userHero.haveHeros[i]);
  111. let starConfig = DataSystem.getData(ConfigData).get("star")[hero.server.star];
  112. if (starConfig && hero.server.chip >= starConfig.nextReq) {
  113. canUpstar = true;
  114. break;
  115. }
  116. }
  117. for (let i = 0; i < userHero.notHavetHeros.length; i++) {
  118. let hero = DataSystem.getData(UserHeroData).get(userHero.notHavetHeros[i]);
  119. if (hero.server && !hero.server.active && hero.server.chip >= hero.client.needChip) {
  120. canCompose = true;
  121. }
  122. }
  123. this.icon.enabled = canUpstar || canCompose;
  124. }
  125. }
  126. /**
  127. * 图鉴奖励验证
  128. * @param data
  129. */
  130. private checkHerosReward(data: RedPointData) {
  131. if (this.type == RedPointType.HeroReward) {
  132. this.icon.enabled = data.herosReward.length > 0;
  133. }
  134. }
  135. /**
  136. * 抽奖验证
  137. * @param data
  138. */
  139. private checkDraw(data: RedPointData) {
  140. if (this.type == RedPointType.Draw) {
  141. this.icon.enabled = data.canDraw;
  142. }
  143. }
  144. /**
  145. * 征粮验证
  146. * @param data
  147. */
  148. private checkGrainLevies(data: RedPointData) {
  149. if (this.type == RedPointType.GrainLevies) {
  150. let hasLeviesReceive = data.grainLevies.times > 0;
  151. if (!hasLeviesReceive) {
  152. for (let i = 0; i < data.grainLevies.leviesDatas.length; i++) {
  153. if (!data.grainLevies.leviesDatas[i].isReceive) {
  154. hasLeviesReceive = true;
  155. break;
  156. }
  157. }
  158. }
  159. this.icon.enabled = hasLeviesReceive;
  160. }
  161. }
  162. /**
  163. * 检查任务
  164. * @param data
  165. */
  166. private checkTask() {
  167. let data = DataSystem.getData(TaskData);
  168. if (this.type == RedPointType.Task) {
  169. this.icon.enabled = data.hasReceived;
  170. }
  171. }
  172. /**
  173. * 神台红点检查
  174. * @param data
  175. */
  176. private checkFission(data: RedPointData) {
  177. if (this.type == RedPointType.ContributionReward) {
  178. this.icon.enabled = data.checkFission;
  179. !this.icon.enabled && (this.icon.enabled = DataSystem.getData(UserData).contribution >= 3000);
  180. }
  181. }
  182. /**
  183. * 检查切磋宝箱
  184. */
  185. private checkFightBox(data: RedPointData) {
  186. if (this.type == RedPointType.ReceiveFightBox) {
  187. this.icon.enabled = data.canReceiveFightBox;
  188. }
  189. }
  190. }