gameScene.ts 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. import { App } from "./Manager/App";
  2. import player from "./player";
  3. import FailPanelMediator from "./view/failPanel/FailPanelMediator";
  4. import FailPanel from "./view/failPanel/FailPanel";
  5. import SuccessPanelMediator from "./view/successPanel/SuccessPanelMediator";
  6. import SuccessPanel from "./view/successPanel/SuccessPanel";
  7. import InsufficientPanelMediator from "./view/insufficientPanel/InsufficientPanelMediator";
  8. import InsufficientPanel from "./view/insufficientPanel/InsufficientPanel";
  9. import TimeControl from "./TimeControl";
  10. import TipPanelMediator from "./view/tipPanel/TipPanelMediator";
  11. import TipPanel from "./view/tipPanel/TipPanel";
  12. import { SoundManager } from "./Manager/SoundManager";
  13. import SDK from "./sdk/SDK";
  14. import ChooseSkinPanel from "./view/chooseSkin/ChooseSkinPanel";
  15. import ChooseSkinPanelMediator from "./view/chooseSkin/ChooseSkinPanelMediator";
  16. import Enemy from "./Enemy";
  17. import ShopPanel from "./view/shopView/ShopPanel";
  18. import ShopPanelMediator from "./view/shopView/ShopPanelMediator";
  19. import SetNormalPanel from "./view/setNormal/SetNormalPanel";
  20. import SetNormalPanelMediator from "./view/setNormal/SetNormalPanelMediator";
  21. import { InterstitialType } from "./sdk/vivo/Interstitial";
  22. import AESUtil from "./AESUtil"
  23. import ATSDK from "./AnyThinkAds/ATJSSDK";
  24. import ATRewardedVideoSDK from "./AnyThinkAds/ATRewardedVideoJSSDK";
  25. import AAJS2 from "./ATAndroidJS2";
  26. import GlobalManager from './GlobalManager';
  27. import ATInterstitialSDK from "./AnyThinkAds/ATInterstitialJSSDK";
  28. import ATBannerSDK from "./AnyThinkAds/ATBannerJSSDK";
  29. import { AdType } from './ATAndroidJS2';
  30. const { ccclass, property } = cc._decorator;
  31. @ccclass
  32. export default class gameScene extends cc.Component {
  33. public static _instance;
  34. @property(cc.Node)
  35. public bg: cc.Node = null;
  36. @property([cc.SpriteFrame])
  37. private bgSpriteFrame: cc.SpriteFrame[] = [];
  38. @property(cc.Node)
  39. public levelParent: cc.Node = null;
  40. @property(cc.Node)
  41. public mainCamera: cc.Node = null;
  42. @property(cc.Node)
  43. public btnPause: cc.Node = null;
  44. @property(cc.Label)
  45. public labelPersonNum: cc.Label = null;
  46. @property(cc.Label)
  47. public labelWinCoin: cc.Label = null;
  48. public curLevelWinCoin = 0;
  49. private GameStutas: boolean = false;
  50. private mainSceneName: string = "hallScene";
  51. private currentSceneName: string = "gameScene";
  52. public static get instance() {
  53. return gameScene._instance;
  54. }
  55. public static set instance(value) {
  56. gameScene._instance = value
  57. }
  58. onLoad() {
  59. gameScene.instance = this;
  60. this.GameStutas = false;
  61. //开启触发功能
  62. // var manager = cc.director.getCollisionManager();
  63. // manager.enabled = true;
  64. // manager.enabledDebugDraw = true;
  65. // let phyManager = cc.director.getPhysicsManager();
  66. // phyManager.enabled = true;
  67. // var Bits = cc.PhysicsManager.DrawBits;
  68. // phyManager.debugDrawFlags = Bits.e_aabbBit | Bits.e_shapeBit;
  69. this.btnPause.on(cc.Node.EventType.TOUCH_END, this.ClickPause.bind(this), this);
  70. SDK.Instance.showInterstitial(InterstitialType.INTERSTITIAL_GAME_STARE);
  71. //GlobalManager.getInstance().registerMethod('initAdForPageInter', this.initAdForPageInter.bind(this));
  72. this.initAdForPageInter();
  73. }
  74. //add判断插屏 开屏等,需要多次准备
  75. //add判断插屏 开屏等,需要多次准备
  76. initAdForPageInter() {
  77. if (cc.sys.os === cc.sys.OS_ANDROID) {
  78. console.log('zh:skillBox.ts 开始准备AD .....');
  79. let deviceId = AAJS2.getDeviceUserId();
  80. var setting = {};
  81. setting[ATRewardedVideoSDK.userIdKey] = deviceId;
  82. //add判断插屏 开屏等
  83. let pid_inter = AAJS2.getPlacementId2(AdType.Inter);
  84. console.log("zh: pid_inter checkstatus:", ATInterstitialSDK.checkAdStatus(pid_inter));
  85. ATInterstitialSDK.loadInterstitial(pid_inter, setting);
  86. }
  87. }
  88. /**
  89. * 显示插屏广告
  90. *
  91. * @param adMarkForClose 插屏广告关闭后调用那个方法的具体指示标识
  92. * @param checkClose 是否需要判断关闭事件,有的不需要,如果AD占用游戏时间则为true
  93. * @param callback 插屏广告关闭(加载失败\非ANDROID平台)的回调
  94. */
  95. private showInterAd(adMarkForClose: string, checkClose: boolean, callback: () => void) {
  96. if (cc.sys.os === cc.sys.OS_ANDROID) {
  97. cc.sys.localStorage.setItem("adMarkForClose", adMarkForClose);//关闭后,调用哪个方法的标识
  98. //add判断插屏 开屏等
  99. let pid_inter = AAJS2.getPlacementId2(AdType.Inter);
  100. let boo = ATInterstitialSDK.hasAdReady(pid_inter);
  101. if (boo) {
  102. // 暂停游戏
  103. cc.director.pause();
  104. console.log('zh:showInterAd AD OK');
  105. ATInterstitialSDK.showAd(pid_inter);
  106. //因为跨脚本,所以使用全局注册函数调用,后来发现切换APP,导致ad close事件失效
  107. if (!checkClose) {//如果不占用游戏时间
  108. callback();
  109. }
  110. } else {
  111. console.log('zh:showInterAd AD 没有准备好');
  112. //GlobalManager.getInstance().callMethod('initAdForPageInter');
  113. this.initAdForPageInter();
  114. callback();
  115. }
  116. } else {
  117. callback();
  118. }
  119. }
  120. start() {
  121. let smallLevel = App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel];
  122. this.updateLeftPeople(App.DataManager.personCount[App.DataManager.CurrentIntoLevel - 1][smallLevel - 1]);
  123. this.updateWinCoin();
  124. // this.levelLabel.string = App.DataManager.CurrentIntoLevel.toString();
  125. this.bg.getComponent(cc.Sprite).spriteFrame = this.bgSpriteFrame[0];
  126. // this.InstantLevel();
  127. App.DataManager.resetFlag = false;
  128. this.StartGame();
  129. }
  130. private SaveLevelData(nodes: any) {
  131. let saves: any = [];
  132. nodes.children.forEach(child => {
  133. let childData = {
  134. 'name': child.name,
  135. 'x': child.x.toFixed(1),
  136. 'y': child.y.toFixed(1)
  137. };
  138. saves.push(childData);
  139. });
  140. let readLevel = '9';
  141. App.LocalStorageUtil.setJsonObj('Stupid_' + readLevel, saves);
  142. console.log('关卡号:', readLevel);
  143. console.log('关卡数据:', saves);
  144. }
  145. /** 生成关卡数据 */
  146. private InstantLevel(): void {
  147. // if (App.DataManager.Configs.length < App.DataManager.CurrentIntoLevel) {
  148. // if (App.DataManager.InfiniteLevelDate[App.DataManager.CurrentIntoLevel]) {
  149. // this.InitLevel(App.DataManager.InfiniteLevelDate[App.DataManager.CurrentIntoLevel]);
  150. // return;
  151. // }
  152. // let value = App.DataManager.CurrentIntoLevel - App.DataManager.Configs.length;
  153. // let randomListLen = App.DataManager.RandomLevelList.length;
  154. // let yushu = value % randomListLen;
  155. // let randomArea = (yushu == 0) ? App.DataManager.RandomLevelList[randomListLen - 1] : App.DataManager.RandomLevelList[yushu - 1];
  156. // let levelValue = Math.round(Math.random() * (randomArea.endLevel - randomArea.startLevel)) + randomArea.startLevel;
  157. // this.InitLevel(levelValue);
  158. // App.DataManager.InfiniteLevelDate[App.DataManager.CurrentIntoLevel] = levelValue;
  159. // App.LocalStorageUtil.setJsonObj(App.LocalStorageUtil.lst_InfiniteLevelDate, App.DataManager.InfiniteLevelDate);
  160. // } else {
  161. this.InitLevel(App.DataManager.CurrentIntoLevel);
  162. // }
  163. }
  164. // 初始化关卡
  165. private InitLevel(index: number): void {
  166. // let datas = App.DataManager.Configs[index].json;
  167. // datas.forEach(element => {
  168. // var nodes = cc.instantiate(App.DataManager.PropPrefabs[element.name]);
  169. // this.levelParent.addChild(nodes);
  170. // nodes.x = Number(element.x);
  171. // nodes.y = Number(element.y);
  172. // });
  173. var level = cc.instantiate(App.DataManager.PropPrefabs["level" + index]);
  174. this.levelParent.addChild(level);
  175. }
  176. /** 开始游戏 */
  177. public StartGame(): void {
  178. this.GameStutas = true;
  179. App.SoundManager.playEffect(SoundManager.start);
  180. App.SoundManager.playBGM(SoundManager.hallBgm[2]);
  181. }
  182. public updateLeftPeople(peopleNum: number) {
  183. this.labelPersonNum.string = peopleNum + "";
  184. }
  185. public updateWinCoin() {
  186. this.labelWinCoin.string = this.curLevelWinCoin + "";
  187. }
  188. private ClickPause(): void {
  189. App.Facade.popView(SetNormalPanelMediator, SetNormalPanel, "设置", false);
  190. cc.director.pause();
  191. }
  192. private ClickGoOn(): void {
  193. }
  194. public ClickRestart(): void {
  195. console.log('zh:ClickRestart')
  196. App.DataManager.resetFlag = true;
  197. this.LoadLevel();
  198. }
  199. /**
  200. * 点击返回主页
  201. */
  202. private ClickBackMain(): void {
  203. console.log('zh:ClickBackMain');
  204. cc.director.loadScene(this.mainSceneName);
  205. // this.showInterAd("callBackFor_ClickBackMain",false, () => this.callBackFor_ClickBackMain());
  206. }
  207. private callBackFor_ClickBackMain(): void {
  208. cc.director.loadScene(this.mainSceneName);
  209. }
  210. /**
  211. * 跳关
  212. */
  213. private JumpLevel(): void {
  214. console.log('观看视频后跳关~');
  215. this.JumpNextLevel();
  216. }
  217. //
  218. private replay(): void {
  219. console.log('zh:replay');
  220. cc.director.loadScene(this.currentSceneName);
  221. }
  222. /**
  223. * 加载关卡
  224. */
  225. private LoadLevel(): void {
  226. App.DataManager.UpdateTili(TimeControl.instance.consumeTili, (success) => {
  227. if (success) cc.director.loadScene(this.currentSceneName);
  228. else App.Facade.popView(InsufficientPanelMediator, InsufficientPanel, "2体力不足", false);
  229. });
  230. }
  231. /**
  232. * 下一关
  233. */
  234. private JumpNextLevel(): void {
  235. this.NextLevelDateUpdate();
  236. this.LoadLevel();
  237. }
  238. /**
  239. * 点击下一关后数据更新
  240. */
  241. private NextLevelDateUpdate(): void {
  242. if (App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel] > 3) {
  243. App.DataManager.CurrentIntoLevel++;
  244. App.DataManager.PlayLevel = App.DataManager.CurrentIntoLevel;
  245. App.LocalStorageUtil.setNumber(App.LocalStorageUtil.lst_playLevel, App.DataManager.PlayLevel);
  246. }
  247. while (App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel] > 3) {
  248. App.DataManager.CurrentIntoLevel++;
  249. App.DataManager.PlayLevel = App.DataManager.CurrentIntoLevel;
  250. App.LocalStorageUtil.setNumber(App.LocalStorageUtil.lst_playLevel, App.DataManager.PlayLevel);
  251. }
  252. }
  253. /**
  254. * 更新通关数
  255. */
  256. private UpdateLocalLevel() {
  257. var current = Number(App.DataManager.CurrentIntoLevel);
  258. console.log('UpdateLocalLevel', current, App.DataManager.PassProgress[current])
  259. if (App.DataManager.PassProgress[current]) {
  260. App.DataManager.PassProgress[current]++;
  261. }
  262. if (!App.DataManager.PassProgress[current + 1]) {
  263. App.DataManager.PassProgress[current + 1] = 1;
  264. }
  265. App.LocalStorageUtil.setJsonObj(App.LocalStorageUtil.lst_passProgress, App.DataManager.PassProgress);
  266. // this.UpdateGetSkin();
  267. }
  268. private OpenChooseSkin() {
  269. App.Facade.popView(ChooseSkinPanelMediator, ChooseSkinPanel, '皮肤界面', false);
  270. }
  271. private UpdateGetSkin() {
  272. let passLevelCount = Object.keys(App.DataManager.PassProgress).length - 1;
  273. App.DataManager.MissionDataList.forEach(element => {
  274. let pass = element.passLevel;
  275. let hasGetSkin = (passLevelCount >= pass) ? true : false;
  276. if (hasGetSkin) {
  277. let hasSave = App.DataManager.GetSkins.indexOf(element.getSkin);
  278. if (hasSave == -1) {
  279. App.DataManager.GetSkins.push(element.getSkin);
  280. App.LocalStorageUtil.setJsonObj(App.LocalStorageUtil.lst_getSkin, App.DataManager.GetSkins);
  281. console.log('通关获得新皮肤')
  282. // this.newSkinTips.active = true;
  283. App.DataManager.NewSkinName = element.getSkin;
  284. App.DataManager.GetNewSkinFlag = true;
  285. this.scheduleOnce(() => { App.Facade.popView(TipPanelMediator, TipPanel, "通关获得新皮肤~", false); }, 0);
  286. }
  287. }
  288. });
  289. }
  290. /**
  291. * 游戏成功
  292. */
  293. private GameSuccess(): void {
  294. console.log('游戏成功***********');
  295. this.GameComplete();
  296. App.SoundManager.playEffect(SoundManager.success[Math.floor(Math.random() * 2)]);
  297. this.UpdateLocalLevel();
  298. this.scheduleOnce(() => {
  299. App.Facade.popView(SuccessPanelMediator, SuccessPanel, "游戏成功弹窗", false);
  300. }, 1);
  301. }
  302. /**
  303. * 游戏失败
  304. */
  305. private GameFail(huoFlag: boolean = false): void {
  306. if (!this.GameStutas)
  307. return;
  308. this.GameComplete();
  309. App.SoundManager.playEffect(SoundManager.fail);
  310. this.scheduleOnce(() => {
  311. App.Facade.popView(FailPanelMediator, FailPanel, "游戏失败弹窗", false);
  312. }, 2);
  313. }
  314. /**
  315. * 游戏结束
  316. */
  317. private GameComplete(): void {
  318. this.GameStutas = false;
  319. }
  320. onDisable() {
  321. this.btnPause.off(cc.Node.EventType.TOUCH_END, this.ClickPause.bind(this), this);
  322. }
  323. onDestroy() {
  324. gameScene.instance = null;
  325. }
  326. }