GameSkill.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. const GameModule = require('../utils/GameModule');
  2. const buildingLevel = require('../data/buildingLevel');
  3. const GameNotificationKey = require('../utils/GameEnum').GameNotificationKey;
  4. cc.Class({
  5. extends: cc.Component,
  6. properties: {
  7. //技能3的提升倍数
  8. multiple: {
  9. default: 1,
  10. visible: false,
  11. type: cc.Float
  12. },
  13. },
  14. // LIFE-CYCLE CALLBACKS:
  15. onLoad () {
  16. GameModule.skill = this;
  17. this.skills = Global.skills;
  18. this.getAllSkillInfo();
  19. //先获取技能3的加成倍数
  20. this.getSkill3Ability();
  21. this.updateAutoGetGold();
  22. this.updateClickGold();
  23. this.setupEventListener();
  24. },
  25. //添加相关接收通知
  26. setupEventListener() {
  27. GameEvent.on(GameNotificationKey.UpBuildingLevel, this, this.updateClickGold);
  28. GameEvent.on(GameNotificationKey.UpdateFixationSkill, this, (skillInfo) => {
  29. this.updateSkill(skillInfo);
  30. });
  31. //使用实时技能通知
  32. GameEvent.on(GameNotificationKey.UseTimeSkill, this, (skillInfo) => {
  33. this.useTimeSkill(skillInfo);
  34. });
  35. //重置技能CD时间通知
  36. GameEvent.on(GameNotificationKey.ResetSkill, this, () => {
  37. this.resetSkill();
  38. });
  39. },
  40. //技能列表解锁或升级技能
  41. updateSkill(skillInfo) {
  42. switch (skillInfo.skillId) {
  43. case 4:
  44. this.skill4Info.skillLevel = skillInfo.level;
  45. this.updateAutoGetGold();
  46. break;
  47. case 5:
  48. this.skill5Info.skillLevel = skillInfo.level;
  49. this.updateClickGold();
  50. break;
  51. default:
  52. break;
  53. }
  54. },
  55. //技能实时技能
  56. useTimeSkill(skillInfo) {
  57. switch (skillInfo.skillId) {
  58. case 1:
  59. this.skill1Info.skillLevel = skillInfo.level;
  60. this.skill1Info.skillStatus = 1;
  61. this.skill1Info.cdStarTime = skillInfo.td * 1000;
  62. this.updateAutoGetGold();
  63. break;
  64. case 2:
  65. this.skill2Info = skillInfo;
  66. GameModule.userInfo.gold += (GameModule.userInfo.gold * this.skill2Info.mt);
  67. break;
  68. case 3:
  69. this.skill3Info.skillLevel = skillInfo.level;
  70. this.skill3Info.skillStatus = 1;
  71. this.skill3Info.cdStarTime = skillInfo.td * 1000;
  72. this.getSkill3Ability();
  73. break;
  74. default:
  75. break;
  76. }
  77. },
  78. //重置技能CD时间
  79. resetSkill() {
  80. this.skill1Info.cdStarTime = 0;
  81. this.skill1Info.skillStatus = 0;
  82. this.updateAutoGetGold();
  83. this.skill3Info.cdStarTime = 0;
  84. this.skill3Info.skillStatus = 0;
  85. this.multiple = 1;
  86. this.updateClickGold();
  87. GameModule.userInfo.refreshSecondText();
  88. GameEvent.fire(GameNotificationKey.SkillThreeHasDone);
  89. },
  90. //获取所有技能的信息
  91. getAllSkillInfo() {
  92. this.skill1Info = this.skills.find(n => {
  93. return n.skillId == 1;
  94. });
  95. this.skill2Info = this.skills.find(n => {
  96. return n.skillId == 2;
  97. });
  98. this.skill3Info = this.skills.find(n => {
  99. return n.skillId == 3;
  100. });
  101. this.skill4Info = this.skills.find(n => {
  102. return n.skillId == 4;
  103. });
  104. this.skill5Info = this.skills.find(n => {
  105. return n.skillId == 5;
  106. });
  107. },
  108. // start () {
  109. //
  110. // },
  111. update (dt) {
  112. if (this.skill1Info && this.skill1Info.skillStatus == 1) {
  113. if (this.skill1Info.cdStarTime > 0) {
  114. this.skill1Info.cdStarTime -= (dt * 1000);
  115. }
  116. if (this.skill1Info.cdStarTime < 0) {
  117. this.skill1Info.cdStarTime = 0;
  118. this.skill1Info.skillStatus = 2;
  119. this.updateAutoGetGold();
  120. }
  121. }
  122. if (this.skill3Info && this.skill3Info.skillStatus == 1) {
  123. if (this.skill3Info.cdStarTime > 0) {
  124. this.skill3Info.cdStarTime -= (dt * 1000);
  125. }
  126. if (this.skill3Info.cdStarTime < 0) {
  127. this.skill3Info.cdStarTime = 0;
  128. this.skill3Info.skillStatus = 2;
  129. this.multiple = 1;
  130. this.updateClickGold();
  131. GameModule.userInfo.refreshSecondText();
  132. GameEvent.fire(GameNotificationKey.SkillThreeHasDone);
  133. }
  134. }
  135. },
  136. //更新每秒自动点击生成金币的速率
  137. updateAutoGetGold() {
  138. var second = 1;
  139. var click = 0;
  140. var skill1 = this.getSkill1Ability();
  141. if (skill1 != null) {
  142. click += skill1.cc / skill1.iv;
  143. }
  144. var skill4 = this.getSkill4Ability();
  145. if (skill4 != null) {
  146. click += skill4.cc / skill4.iv;
  147. }
  148. if (click > 0) {
  149. GameModule.userInfo.secondClick = second / click;
  150. } else {
  151. GameModule.userInfo.secondClick = 0;
  152. }
  153. },
  154. //更新每次点击生成金币的数量
  155. updateClickGold() {
  156. var clickGold = this.getBuildingGold();
  157. clickGold = clickGold * this.getSkill5Ability();
  158. GameModule.userInfo.coinTap = clickGold * this.multiple * GameModule.userInfo.perpetualClickMt * GameModule.userInfo.starMt;
  159. },
  160. //总部大楼等级技能
  161. getBuildingGold() {
  162. this.userBuildingLevel = Global.userData.buildingLevel;
  163. // let buildingObj = buildingLevel.find(n => {
  164. // return n.level == this.userBuildingLevel;
  165. // });
  166. // let clickGold = buildingObj.gold;
  167. let clickGold = 25 + this.userBuildingLevel * 5;
  168. return clickGold;
  169. },
  170. //主动释放技能1,多少分钟内每秒自动点击多少次
  171. getSkill1Ability() {
  172. if (this.skill1Info == undefined || this.skill1Info.skillLevel <= 0 ) {
  173. return null;
  174. }
  175. if (this.skill1Info.skillStatus != 1 || this.skill1Info.cdStarTime == 0) {
  176. return null;
  177. }
  178. let skillInfo = Global.BuildingManager.getSkillLevelInfo(this.skill1Info.skillId, this.skill1Info.skillLevel);
  179. return skillInfo;
  180. },
  181. //主动释放技能3,增加加成倍数
  182. getSkill3Ability() {
  183. if (this.skill3Info == undefined || this.skill3Info.skillLevel <= 0 ) {
  184. return null;
  185. }
  186. if (this.skill3Info.skillStatus != 1 || this.skill3Info.cdStarTime == 0) {
  187. return null;
  188. }
  189. let skillInfo = Global.BuildingManager.getSkillLevelInfo(this.skill3Info.skillId, this.skill3Info.skillLevel);
  190. this.multiple = skillInfo.mt;
  191. GameModule.userInfo.multiple = this.multiple;
  192. },
  193. //永久技能1,指定时间内自动点击次数
  194. getSkill4Ability() {
  195. if (this.skill4Info == undefined || this.skill4Info.skillLevel <= 0 ) {
  196. return null;
  197. }
  198. let skillInfo = Global.BuildingManager.getSkillLevelInfo(this.skill4Info.skillId, this.skill4Info.skillLevel);
  199. return skillInfo;
  200. },
  201. //永久技能2,每次点击产出的金币提升
  202. getSkill5Ability() {
  203. if (this.skill5Info == undefined || this.skill5Info.skillLevel <= 0 ) {
  204. return 1;
  205. }
  206. let skillInfo = Global.BuildingManager.getSkillLevelInfo(this.skill5Info.skillId, this.skill5Info.skillLevel);
  207. let mt = skillInfo.mt;
  208. return mt;
  209. },
  210. //永久技能3,减少CD时间
  211. getSkill6Ability() {
  212. let skillInfo = this.skills.find(n => {
  213. return n.skillId == 6;
  214. });
  215. skillInfo = Global.BuildingManager.getSkillLevelInfo(skillInfo.skillId, skillInfo.skillLevel);
  216. let rcd = (1 - skillInfo.rcd);
  217. return rcd;
  218. },
  219. });