ADHandler.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*
  2. * @Author: mojunshou 1637302775@qq.com
  3. * @Date: 2025-04-11 10:14:44
  4. * @LastEditors: mojunshou 1637302775@qq.com
  5. * @LastEditTime: 2025-04-25 19:12:53
  6. * @Description:
  7. */
  8. // ADHandler.ts
  9. import { CocosHandlerType, CocosHandler } from './CocosHandler';
  10. import { AD_TYPE } from '../config/GameDefine';
  11. import { oops } from 'db://oops-framework/core/Oops';
  12. import { UIID } from '../config/GameUIConfig';
  13. import { smc } from '../SingletonModuleComp';
  14. import { ServerHandler } from './ServerHandler';
  15. import { LoginHandler } from './LoginHandler';
  16. import { GameEvent } from '../config/GameEvent';
  17. export class ADHandler {
  18. private static _inst: ADHandler;
  19. public static get inst(): ADHandler {
  20. if (!this._inst) {
  21. this._inst = new ADHandler();
  22. }
  23. return this._inst;
  24. }
  25. showAd = async (id: string) => {
  26. smc.game.GameModel.isShowAd = true;
  27. const { method, param } = this.buildAdParam(id);
  28. const data: CocosHandlerType = {
  29. method,
  30. param: JSON.stringify(param)
  31. };
  32. return await CocosHandler.inst.sendMessageToAndroid(data, `广告 ${id}`);
  33. };
  34. private buildAdParam(id: string): { method: string, param: any } {
  35. console.log("播放的广告ID>>>>>>>>>>>>>", id)
  36. const param: any = {
  37. funcId: id,
  38. callback: {
  39. onLoaded: '',
  40. onShow: '',
  41. onLoadFailed: '',
  42. onShowFailed: '',
  43. onClose: ''
  44. }
  45. };
  46. let method = '';
  47. switch (id) {
  48. case AD_TYPE.Start:
  49. method = 'ad.splash';
  50. param.callback.onLoadFailed = 'ADHandler.inst.adSplashLoadFailed';
  51. param.callback.onClose = 'ADHandler.inst.adSplashClose';
  52. break;
  53. case AD_TYPE.Jion_Main:
  54. case AD_TYPE.Double_Close:
  55. case AD_TYPE.Rebates:
  56. case AD_TYPE.Double_Speed_Close:
  57. method = 'ad.interstitial';
  58. param.callback.onLoadFailed = 'ADHandler.inst.adInterstitialLoadFailed';
  59. param.callback.onClose = 'ADHandler.inst.adInterstitialClose';
  60. break;
  61. default:
  62. oops.gui.waitOpen();
  63. method = 'ad.reward';
  64. param.callback.onShow = 'ADHandler.inst.adRewardShow';
  65. param.callback.onClose = 'ADHandler.inst.adRewardClose';
  66. param.callback.onLoadFailed = 'ADHandler.inst.adRewardLoadFailed';
  67. }
  68. return { method, param };
  69. }
  70. //启屏广告关闭
  71. adSplashClose = async () => {
  72. console.log("启屏广告关闭")
  73. smc.game.GameModel.isShowAd = false;
  74. if (oops.gui.has(UIID.KindTips)) oops.gui.remove(UIID.KindTips);
  75. if (oops.gui.has(UIID.Retention)) oops.gui.remove(UIID.Retention);
  76. ServerHandler.inst.getAccountInfo();
  77. };
  78. adSplashLoadFailed = () => {
  79. oops.gui.waitClose();
  80. smc.game.GameModel.isShowAd = false;
  81. console.log('[广告] 启屏广告加载失败');
  82. ServerHandler.inst.getAccountInfo();
  83. };
  84. adInterstitialLoadFailed = () => {
  85. console.log('[广告] 插屏广告加载失败');
  86. oops.message.dispatchEvent(GameEvent.updateGameState, "playing");
  87. };
  88. adInterstitialClose = (type: boolean) => {
  89. smc.game.GameModel.isShowAd = false;
  90. console.log('[广告] 插屏广告关闭', type);
  91. //如果有弹窗,则不发送事件,
  92. oops.message.dispatchEvent(GameEvent.updateGameState, "playing");
  93. // 如果是插屏广告
  94. };
  95. adRewardShow = (str: string) => {
  96. const data = JSON.parse(str);
  97. ServerHandler.inst.getSign(data.price);
  98. oops.gui.waitClose();
  99. };
  100. adRewardLoadFailed = (str: string) => {
  101. oops.gui.waitClose();
  102. smc.game.GameModel.isShowAd = false;
  103. smc.game.GameModel.viewType = "";
  104. if (smc.game.GameModel.viewType != "" && smc.game.GameModel.viewType != "pass_reward") {
  105. oops.message.dispatchEvent(GameEvent.updateGameState, "playing");
  106. }
  107. //展示失败
  108. if (smc.game.GameModel.viewType === "revive_reward") {
  109. oops.message.dispatchEvent(GameEvent.RestartGame);
  110. }
  111. };
  112. adRewardClose = (state: boolean) => {
  113. oops.gui.waitClose();
  114. smc.game.GameModel.isShowAd = false;
  115. console.log("[广告] 激励视频关闭", state)
  116. oops.message.dispatchEvent(GameEvent.updateGameState, "playing");
  117. if (state) {
  118. //看完了可以领取奖励
  119. if (smc.game.GameModel.viewType === "speed_reward") {
  120. console.log("自动放置奖励发放成功")
  121. oops.message.dispatchEvent(GameEvent.DoubleSpeedOpenSuccess);
  122. smc.game.GameModel.viewType = "";
  123. } else {
  124. ServerHandler.inst.getVideorReward();
  125. }
  126. //如果是复活,分数不减
  127. if (smc.game.GameModel.viewType === "revive_reward") {
  128. smc.game.GameModel.viewType = "";
  129. oops.message.dispatchEvent(GameEvent.RestartGame);
  130. }
  131. } else {
  132. //通关奖励,没看完也能过下一关
  133. if (smc.game.GameModel.viewType == "pass_reward") {
  134. smc.game.GameModel.viewType = "";
  135. ServerHandler.inst.getNextLevel();
  136. } else if (smc.game.GameModel.viewType === "revive_reward") {
  137. smc.game.GameModel.viewType = "";
  138. ServerHandler.inst.RestartGame();
  139. }
  140. }
  141. };
  142. }
  143. window["ADHandler"] = ADHandler;