GuideToWx.ts 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /** 引导到微信 */
  2. import JsbSystem from "../../../mk/system/JsbSystem";
  3. import { DataEventId } from "../../data/GameData";
  4. import { GuideState } from "../../data/module/GuideToWxData";
  5. const { ccclass, property } = cc._decorator;
  6. @ccclass
  7. export default class GuideToWx extends cc.Component {
  8. @property(cc.Sprite)
  9. sp_money: cc.Sprite = null;
  10. @property(cc.Sprite)
  11. sp_getMoney: cc.Sprite = null;
  12. @property(cc.Sprite)
  13. sp_fill: cc.Sprite = null;
  14. @property(cc.Node)
  15. node_target: cc.Node = null;
  16. @property(cc.Node)
  17. hand: cc.Node = null;
  18. @property(cc.VideoPlayer)
  19. videoPlayer: cc.VideoPlayer = null;
  20. @property(cc.Node)
  21. nodeStateArr: cc.Node[] = [];
  22. /** 进度条进度 */
  23. private fillPer = 0;
  24. /** 根据金额获取index */
  25. private moneyIndex = 0;
  26. private checkCloseGuide = false;
  27. private lastTimeSpan = -1;
  28. async start() {
  29. this.node_target.opacity = 0;
  30. this.hand.active = false;
  31. this.moneyIndex = this.getIndexByMoney();
  32. let path = 'module/guideToWx/texture/money_' + this.moneyIndex;
  33. this.sp_money.spriteFrame = await mk.loader.load(path, cc.SpriteFrame);
  34. let response = await mk.http.sendData('getAddServiceState', {});
  35. mk.console.logSingle('GuideToWx getAddServiceState ', response);
  36. if (response.errcode != 0) {
  37. return
  38. }
  39. console.log("state >> ", response.data.state)
  40. switch (response.data.state) {
  41. case 0:
  42. let state = mk.storage.getStorage('GuideState');
  43. if (!state) {
  44. state = '0';
  45. }
  46. gData.guideToWxData.guideState = parseInt(state);
  47. break;
  48. case 1:
  49. gData.guideToWxData.guideState = GuideState.canGetMoney;
  50. let stateN = mk.storage.getStorage('canGetMoney');
  51. if (!stateN) {
  52. mk.storage.setStorage('canGetMoney', 1);
  53. mk.data.sendDataEvent(DataEventId.guideToWx, "二维码");
  54. }
  55. break;
  56. case 2:
  57. gData.guideToWxData.guideState = GuideState.gotMoney;
  58. break;
  59. }
  60. await mk.time.WaitForSeconds(0.3);
  61. this.setState();
  62. this.videoPlayer.node.on("completed", this.onCompleted, this);
  63. if (!mk.guide.isGuiding()) {
  64. this.playVideo();
  65. }
  66. else {
  67. this.checkCloseGuide = true;
  68. }
  69. }
  70. playVideo() {
  71. this.videoPlayer.node.active = true;
  72. mk.audio.setPauseMusic();
  73. this.videoPlayer.play();
  74. }
  75. update() {
  76. if (this.checkCloseGuide) {
  77. if (!mk.guide.isGuiding()) {
  78. this.checkCloseGuide = false;
  79. this.playVideo();
  80. }
  81. }
  82. if (this.lastTimeSpan != -1) {
  83. let pass = Date.now() - this.lastTimeSpan;
  84. mk.console.logSingle('GuideToWx pass ', pass);
  85. if (pass >= 10000) {
  86. gData.guideToWxData.guideState = 3;
  87. mk.storage.setStorage('GuideState', gData.guideToWxData.guideState);
  88. this.setState();
  89. }
  90. this.lastTimeSpan = -1;
  91. }
  92. }
  93. async setState() {
  94. this.nodeStateArr.forEach(element => {
  95. element.active = true;
  96. });
  97. this.node_target.opacity = 0;
  98. this.node_target.active = true;
  99. let nodeState: cc.Node = null;
  100. let path = '';
  101. switch (gData.guideToWxData.guideState) {
  102. case GuideState.none:
  103. this.fillPer = 0;
  104. path = 'module/guideToWx/texture/addService';
  105. nodeState = this.nodeStateArr[0];
  106. break;
  107. case GuideState.sendApply:
  108. this.fillPer = 0.33;
  109. path = 'module/guideToWx/texture/addService';
  110. nodeState = this.nodeStateArr[1];
  111. break;
  112. case GuideState.waitForPass:
  113. this.fillPer = 0.66;
  114. path = 'module/guideToWx/texture/addService';
  115. nodeState = this.nodeStateArr[2];
  116. break;
  117. case GuideState.canGetMoney:
  118. this.fillPer = 1;
  119. path = 'module/guideToWx/texture/get_' + this.moneyIndex;
  120. nodeState = this.nodeStateArr[3];
  121. break;
  122. case GuideState.gotMoney:
  123. this.fillPer = 1;
  124. path = 'module/guideToWx/texture/getSuccess';
  125. this.node_target.active = false;
  126. this.nodeStateArr[3].active = true;
  127. break;
  128. }
  129. this.sp_getMoney.spriteFrame = await mk.loader.load(path, cc.SpriteFrame);
  130. cc.tween(this.sp_fill)
  131. .to(0.5, { fillRange: this.fillPer })
  132. .start();
  133. if (nodeState) {
  134. this.node_target.x = nodeState.x;
  135. cc.tween(nodeState).delay(0.5)
  136. .to(0.25, { scale: 1.2 })
  137. .to(0.25, { scale: 1 })
  138. .call(() => {
  139. nodeState.active = false;
  140. this.hand.active = true;
  141. })
  142. .start();
  143. }
  144. cc.tween(this.node_target)
  145. .delay(1.5)
  146. .to(0.5, { opacity: 255 })
  147. .start();
  148. }
  149. getIndexByMoney() {
  150. let index = 0;
  151. switch (parseFloat(gData.guideToWxData.money)) {
  152. case 0.3:
  153. index = 0;
  154. break;
  155. case 0.5:
  156. index = 1;
  157. break;
  158. case 0.8:
  159. index = 2;
  160. break;
  161. case 1:
  162. index = 3;
  163. break;
  164. }
  165. return index;
  166. }
  167. async clickService() {
  168. mk.audio.playEffect('button');
  169. if (gData.guideToWxData.guideState == GuideState.none || gData.guideToWxData.guideState == GuideState.sendApply
  170. || gData.guideToWxData.guideState == GuideState.waitForPass) {
  171. this.lastTimeSpan = Date.now();
  172. mk.console.logSingle('GuideToWx lastTimeSpan ', this.lastTimeSpan);
  173. JsbSystem.WXLaunchMiniProgram(gData.guideToWxData.ghId, gData.guideToWxData.ghIdPath);
  174. let value = mk.storage.getStorage('addServer')
  175. if (!value) {
  176. mk.storage.setStorage('addServer', 1);
  177. mk.data.sendDataEvent(DataEventId.guideToWx, `添加客服`);
  178. mk.data.sendXYEvent('addService', '添加客服');
  179. }
  180. }
  181. else if (gData.guideToWxData.guideState == GuideState.canGetMoney) {
  182. let response = await mk.http.sendData('customerServiceCash', {});
  183. mk.console.logSingle('GuideToWx customerServiceCash ', response);
  184. if (response.errcode != 0) {
  185. if (response.data.count) {
  186. gData.tipPanelData.openCashFailTip(response.data.count);
  187. }
  188. else {
  189. mk.tip.pop('提现排队中,多看视频优先提现');
  190. }
  191. return;
  192. }
  193. mk.data.sendDataEvent(DataEventId.guideToWx, `领取${gData.guideToWxData.money}元`);
  194. gData.receiptNotice.receip_rmb = parseFloat(gData.guideToWxData.money);
  195. mk.ui.openPanel('module/receiptNotice/receiptNotice');
  196. gData.guideToWxData.guideState = GuideState.gotMoney;
  197. this.setState();
  198. }
  199. else if (gData.guideToWxData.guideState == GuideState.gotMoney) {
  200. mk.tip.pop('您已经领取成功!', 1);
  201. }
  202. }
  203. clickClose() {
  204. mk.audio.playEffect('button');
  205. mk.ui.closePanel(this.node.name);
  206. }
  207. onDisable() {
  208. mk.audio.setResumeMusic();
  209. this.videoPlayer.node.off("completed", this.onCompleted, this);
  210. }
  211. onCompleted() {
  212. this.videoPlayer.play();
  213. }
  214. }