import { App } from "./Manager/App"; import player from "./player"; import FailPanelMediator from "./view/failPanel/FailPanelMediator"; import FailPanel from "./view/failPanel/FailPanel"; import SuccessPanelMediator from "./view/successPanel/SuccessPanelMediator"; import SuccessPanel from "./view/successPanel/SuccessPanel"; import InsufficientPanelMediator from "./view/insufficientPanel/InsufficientPanelMediator"; import InsufficientPanel from "./view/insufficientPanel/InsufficientPanel"; import TimeControl from "./TimeControl"; import TipPanelMediator from "./view/tipPanel/TipPanelMediator"; import TipPanel from "./view/tipPanel/TipPanel"; import { SoundManager } from "./Manager/SoundManager"; import SDK from "./sdk/SDK"; import ChooseSkinPanel from "./view/chooseSkin/ChooseSkinPanel"; import ChooseSkinPanelMediator from "./view/chooseSkin/ChooseSkinPanelMediator"; import Enemy from "./Enemy"; import ShopPanel from "./view/shopView/ShopPanel"; import ShopPanelMediator from "./view/shopView/ShopPanelMediator"; import SetNormalPanel from "./view/setNormal/SetNormalPanel"; import SetNormalPanelMediator from "./view/setNormal/SetNormalPanelMediator"; import { InterstitialType } from "./sdk/vivo/Interstitial"; import AESUtil from "./AESUtil" import ATSDK from "./AnyThinkAds/ATJSSDK"; import ATRewardedVideoSDK from "./AnyThinkAds/ATRewardedVideoJSSDK"; import AAJS2 from "./ATAndroidJS2"; import GlobalManager from './GlobalManager'; import ATInterstitialSDK from "./AnyThinkAds/ATInterstitialJSSDK"; import ATBannerSDK from "./AnyThinkAds/ATBannerJSSDK"; import { AdType } from './ATAndroidJS2'; const { ccclass, property } = cc._decorator; @ccclass export default class gameScene extends cc.Component { public static _instance; @property(cc.Node) public bg: cc.Node = null; @property([cc.SpriteFrame]) private bgSpriteFrame: cc.SpriteFrame[] = []; @property(cc.Node) public levelParent: cc.Node = null; @property(cc.Node) public mainCamera: cc.Node = null; @property(cc.Node) public btnPause: cc.Node = null; @property(cc.Label) public labelPersonNum: cc.Label = null; @property(cc.Label) public labelWinCoin: cc.Label = null; public curLevelWinCoin = 0; private GameStutas: boolean = false; private mainSceneName: string = "hallScene"; private currentSceneName: string = "gameScene"; public static get instance() { return gameScene._instance; } public static set instance(value) { gameScene._instance = value } onLoad() { gameScene.instance = this; this.GameStutas = false; //开启触发功能 // var manager = cc.director.getCollisionManager(); // manager.enabled = true; // manager.enabledDebugDraw = true; // let phyManager = cc.director.getPhysicsManager(); // phyManager.enabled = true; // var Bits = cc.PhysicsManager.DrawBits; // phyManager.debugDrawFlags = Bits.e_aabbBit | Bits.e_shapeBit; this.btnPause.on(cc.Node.EventType.TOUCH_END, this.ClickPause.bind(this), this); SDK.Instance.showInterstitial(InterstitialType.INTERSTITIAL_GAME_STARE); //GlobalManager.getInstance().registerMethod('initAdForPageInter', this.initAdForPageInter.bind(this)); this.initAdForPageInter(); } //add判断插屏 开屏等,需要多次准备 //add判断插屏 开屏等,需要多次准备 initAdForPageInter() { if (cc.sys.os === cc.sys.OS_ANDROID) { console.log('zh:skillBox.ts 开始准备AD .....'); let deviceId = AAJS2.getDeviceUserId(); var setting = {}; setting[ATRewardedVideoSDK.userIdKey] = deviceId; //add判断插屏 开屏等 let pid_inter = AAJS2.getPlacementId2(AdType.Inter); console.log("zh: pid_inter checkstatus:", ATInterstitialSDK.checkAdStatus(pid_inter)); ATInterstitialSDK.loadInterstitial(pid_inter, setting); } } /** * 显示插屏广告 * * @param adMarkForClose 插屏广告关闭后调用那个方法的具体指示标识 * @param checkClose 是否需要判断关闭事件,有的不需要,如果AD占用游戏时间则为true * @param callback 插屏广告关闭(加载失败\非ANDROID平台)的回调 */ private showInterAd(adMarkForClose: string, checkClose: boolean, callback: () => void) { if (cc.sys.os === cc.sys.OS_ANDROID) { cc.sys.localStorage.setItem("adMarkForClose", adMarkForClose);//关闭后,调用哪个方法的标识 //add判断插屏 开屏等 let pid_inter = AAJS2.getPlacementId2(AdType.Inter); let boo = ATInterstitialSDK.hasAdReady(pid_inter); if (boo) { // 暂停游戏 cc.director.pause(); console.log('zh:showInterAd AD OK'); ATInterstitialSDK.showAd(pid_inter); //因为跨脚本,所以使用全局注册函数调用,后来发现切换APP,导致ad close事件失效 if (!checkClose) {//如果不占用游戏时间 callback(); } } else { console.log('zh:showInterAd AD 没有准备好'); //GlobalManager.getInstance().callMethod('initAdForPageInter'); this.initAdForPageInter(); callback(); } } else { callback(); } } start() { let smallLevel = App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel]; this.updateLeftPeople(App.DataManager.personCount[App.DataManager.CurrentIntoLevel - 1][smallLevel - 1]); this.updateWinCoin(); // this.levelLabel.string = App.DataManager.CurrentIntoLevel.toString(); this.bg.getComponent(cc.Sprite).spriteFrame = this.bgSpriteFrame[0]; // this.InstantLevel(); App.DataManager.resetFlag = false; this.StartGame(); } private SaveLevelData(nodes: any) { let saves: any = []; nodes.children.forEach(child => { let childData = { 'name': child.name, 'x': child.x.toFixed(1), 'y': child.y.toFixed(1) }; saves.push(childData); }); let readLevel = '9'; App.LocalStorageUtil.setJsonObj('Stupid_' + readLevel, saves); console.log('关卡号:', readLevel); console.log('关卡数据:', saves); } /** 生成关卡数据 */ private InstantLevel(): void { // if (App.DataManager.Configs.length < App.DataManager.CurrentIntoLevel) { // if (App.DataManager.InfiniteLevelDate[App.DataManager.CurrentIntoLevel]) { // this.InitLevel(App.DataManager.InfiniteLevelDate[App.DataManager.CurrentIntoLevel]); // return; // } // let value = App.DataManager.CurrentIntoLevel - App.DataManager.Configs.length; // let randomListLen = App.DataManager.RandomLevelList.length; // let yushu = value % randomListLen; // let randomArea = (yushu == 0) ? App.DataManager.RandomLevelList[randomListLen - 1] : App.DataManager.RandomLevelList[yushu - 1]; // let levelValue = Math.round(Math.random() * (randomArea.endLevel - randomArea.startLevel)) + randomArea.startLevel; // this.InitLevel(levelValue); // App.DataManager.InfiniteLevelDate[App.DataManager.CurrentIntoLevel] = levelValue; // App.LocalStorageUtil.setJsonObj(App.LocalStorageUtil.lst_InfiniteLevelDate, App.DataManager.InfiniteLevelDate); // } else { this.InitLevel(App.DataManager.CurrentIntoLevel); // } } // 初始化关卡 private InitLevel(index: number): void { // let datas = App.DataManager.Configs[index].json; // datas.forEach(element => { // var nodes = cc.instantiate(App.DataManager.PropPrefabs[element.name]); // this.levelParent.addChild(nodes); // nodes.x = Number(element.x); // nodes.y = Number(element.y); // }); var level = cc.instantiate(App.DataManager.PropPrefabs["level" + index]); this.levelParent.addChild(level); } /** 开始游戏 */ public StartGame(): void { this.GameStutas = true; App.SoundManager.playEffect(SoundManager.start); App.SoundManager.playBGM(SoundManager.hallBgm[2]); } public updateLeftPeople(peopleNum: number) { this.labelPersonNum.string = peopleNum + ""; } public updateWinCoin() { this.labelWinCoin.string = this.curLevelWinCoin + ""; } private ClickPause(): void { App.Facade.popView(SetNormalPanelMediator, SetNormalPanel, "设置", false); cc.director.pause(); } private ClickGoOn(): void { } public ClickRestart(): void { console.log('zh:ClickRestart') App.DataManager.resetFlag = true; this.LoadLevel(); } /** * 点击返回主页 */ private ClickBackMain(): void { console.log('zh:ClickBackMain'); cc.director.loadScene(this.mainSceneName); // this.showInterAd("callBackFor_ClickBackMain",false, () => this.callBackFor_ClickBackMain()); } private callBackFor_ClickBackMain(): void { cc.director.loadScene(this.mainSceneName); } /** * 跳关 */ private JumpLevel(): void { console.log('观看视频后跳关~'); this.JumpNextLevel(); } // private replay(): void { console.log('zh:replay'); cc.director.loadScene(this.currentSceneName); } /** * 加载关卡 */ private LoadLevel(): void { App.DataManager.UpdateTili(TimeControl.instance.consumeTili, (success) => { if (success) cc.director.loadScene(this.currentSceneName); else App.Facade.popView(InsufficientPanelMediator, InsufficientPanel, "2体力不足", false); }); } /** * 下一关 */ private JumpNextLevel(): void { this.NextLevelDateUpdate(); this.LoadLevel(); } /** * 点击下一关后数据更新 */ private NextLevelDateUpdate(): void { if (App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel] > 3) { App.DataManager.CurrentIntoLevel++; App.DataManager.PlayLevel = App.DataManager.CurrentIntoLevel; App.LocalStorageUtil.setNumber(App.LocalStorageUtil.lst_playLevel, App.DataManager.PlayLevel); } while (App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel] > 3) { App.DataManager.CurrentIntoLevel++; App.DataManager.PlayLevel = App.DataManager.CurrentIntoLevel; App.LocalStorageUtil.setNumber(App.LocalStorageUtil.lst_playLevel, App.DataManager.PlayLevel); } } /** * 更新通关数 */ private UpdateLocalLevel() { var current = Number(App.DataManager.CurrentIntoLevel); console.log('UpdateLocalLevel', current, App.DataManager.PassProgress[current]) if (App.DataManager.PassProgress[current]) { App.DataManager.PassProgress[current]++; } if (!App.DataManager.PassProgress[current + 1]) { App.DataManager.PassProgress[current + 1] = 1; } App.LocalStorageUtil.setJsonObj(App.LocalStorageUtil.lst_passProgress, App.DataManager.PassProgress); // this.UpdateGetSkin(); } private OpenChooseSkin() { App.Facade.popView(ChooseSkinPanelMediator, ChooseSkinPanel, '皮肤界面', false); } private UpdateGetSkin() { let passLevelCount = Object.keys(App.DataManager.PassProgress).length - 1; App.DataManager.MissionDataList.forEach(element => { let pass = element.passLevel; let hasGetSkin = (passLevelCount >= pass) ? true : false; if (hasGetSkin) { let hasSave = App.DataManager.GetSkins.indexOf(element.getSkin); if (hasSave == -1) { App.DataManager.GetSkins.push(element.getSkin); App.LocalStorageUtil.setJsonObj(App.LocalStorageUtil.lst_getSkin, App.DataManager.GetSkins); console.log('通关获得新皮肤') // this.newSkinTips.active = true; App.DataManager.NewSkinName = element.getSkin; App.DataManager.GetNewSkinFlag = true; this.scheduleOnce(() => { App.Facade.popView(TipPanelMediator, TipPanel, "通关获得新皮肤~", false); }, 0); } } }); } /** * 游戏成功 */ private GameSuccess(): void { console.log('游戏成功***********'); this.GameComplete(); App.SoundManager.playEffect(SoundManager.success[Math.floor(Math.random() * 2)]); this.UpdateLocalLevel(); this.scheduleOnce(() => { App.Facade.popView(SuccessPanelMediator, SuccessPanel, "游戏成功弹窗", false); }, 1); } /** * 游戏失败 */ private GameFail(huoFlag: boolean = false): void { if (!this.GameStutas) return; this.GameComplete(); App.SoundManager.playEffect(SoundManager.fail); this.scheduleOnce(() => { App.Facade.popView(FailPanelMediator, FailPanel, "游戏失败弹窗", false); }, 2); } /** * 游戏结束 */ private GameComplete(): void { this.GameStutas = false; } onDisable() { this.btnPause.off(cc.Node.EventType.TOUCH_END, this.ClickPause.bind(this), this); } onDestroy() { gameScene.instance = null; } }