/* * @Author: mojunshou 1637302775@qq.com * @Date: 2025-04-11 10:14:44 * @LastEditors: mojunshou 1637302775@qq.com * @LastEditTime: 2025-04-23 20:53:36 * @Description: */ // ADHandler.ts import { CocosHandlerType, CocosHandler } from './CocosHandler'; import { AD_TYPE } from '../config/GameDefine'; import { oops } from 'db://oops-framework/core/Oops'; import { UIID } from '../config/GameUIConfig'; import { smc } from '../SingletonModuleComp'; import { ServerHandler } from './ServerHandler'; import { LoginHandler } from './LoginHandler'; import { GameEvent } from '../config/GameEvent'; export class ADHandler { private static _inst: ADHandler; public static get inst(): ADHandler { if (!this._inst) { this._inst = new ADHandler(); } return this._inst; } showAd = async (id: string) => { oops.gui.waitOpen(); smc.game.GameModel.isShowAd = true; const { method, param } = this.buildAdParam(id); const data: CocosHandlerType = { method, param: JSON.stringify(param) }; return await CocosHandler.inst.sendMessageToAndroid(data, `广告 ${id}`); }; private buildAdParam(id: string): { method: string, param: any } { const param: any = { funcId: id, callback: { onLoaded: '', onShow: '', onLoadFailed: '', onShowFailed: '', onClose: '' } }; let method = ''; switch (id) { case AD_TYPE.Start: method = 'ad.splash'; param.callback.onLoadFailed = 'ADHandler.inst.adSplashLoadFailed'; param.callback.onClose = 'ADHandler.inst.adSplashClose'; break; case AD_TYPE.Jion_Main: case AD_TYPE.Double_Close: case AD_TYPE.Rebates: case AD_TYPE.Double_Speed_Close: method = 'ad.interstitial'; param.callback.onLoadFailed = 'ADHandler.inst.adInterstitialLoadFailed'; param.callback.onClose = 'ADHandler.inst.adInterstitialClose'; break; default: method = 'ad.reward'; param.callback.onShow = 'ADHandler.inst.adRewardShow'; param.callback.onClose = 'ADHandler.inst.adRewardClose'; param.callback.onLoadFailed = 'ADHandler.inst.adRewardLoadFailed'; } return { method, param }; } //启屏广告关闭 adSplashClose = async () => { console.log("启屏广告关闭") smc.game.GameModel.isShowAd = false; if (oops.gui.has(UIID.KindTips)) oops.gui.remove(UIID.KindTips); if (oops.gui.has(UIID.Retention)) oops.gui.remove(UIID.Retention); const result = await LoginHandler.inst.savePrivacyStatus(true); if (result?.code === 0) { ServerHandler.inst.getAccountInfo(); } oops.gui.waitClose(); }; adSplashLoadFailed = () => { smc.game.GameModel.isShowAd = false; console.log('[广告] 启屏广告加载失败'); ServerHandler.inst.getAccountInfo(); oops.gui.waitClose(); }; adInterstitialLoadFailed = () => { console.log('[广告] 插屏广告加载失败'); oops.message.dispatchEvent(GameEvent.updateGameState, "playing"); oops.gui.waitClose(); }; adInterstitialClose = (type: boolean) => { smc.game.GameModel.isShowAd = false; console.log('[广告] 插屏广告关闭', type); //如果有弹窗,则不发送事件, oops.message.dispatchEvent(GameEvent.updateGameState, "playing"); oops.gui.waitClose(); }; adRewardShow = (str: string) => { const data = JSON.parse(str); ServerHandler.inst.getSign(data.price); oops.gui.waitClose(); }; adRewardLoadFailed = (str: string) => { smc.game.GameModel.isShowAd = false; oops.message.dispatchEvent(GameEvent.updateGameState, "playing"); //展示失败 if (smc.game.GameModel.viewType === "revive_reward") { const score = smc.game.GameModel.curScore; smc.game.GameModel.viewType = ""; smc.game.GameModel.curScore = Math.floor(score / 2); oops.message.dispatchEvent(GameEvent.RestartGame); } oops.gui.waitClose(); }; adRewardClose = (state: boolean) => { smc.game.GameModel.isShowAd = false; console.log("[广告] 激励视频关闭", state) smc.game.GameModel.isDone = state; oops.message.dispatchEvent(GameEvent.updateGameState, "playing"); if (state) { if (smc.game.GameModel.viewType === "speed_reward") { //直接成功-增加时长 oops.message.dispatchEvent(GameEvent.DoubleSpeedOpenSuccess); smc.game.GameModel.viewType = ""; return; } //如果是复活,分数减半 if (smc.game.GameModel.viewType === "revive_reward") { oops.message.dispatchEvent(GameEvent.RestartGame); } ServerHandler.inst.getVideorReward(); } oops.gui.waitClose(); }; } window["ADHandler"] = ADHandler;