UIMenu.ts 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-09-12 12:41:49
  4. * @LastEditTime: 2021-09-29 22:30:24
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: \zombiefood\assets\script\ui\uiview\Interface\UIMenu.ts
  8. */
  9. import auto_menu from "../../../ui/uidata/Interface/auto_menu";
  10. import UIBase from "../../../framework/ui/UIBase";
  11. import UIHelp from "../../../framework/ui/UIHelp";
  12. import bundleManager from "../../../manager/bundleManager";
  13. import levelManager from "../../../manager/levelManager";
  14. import AccountModel from "../../../data/Account/AccountModel";
  15. import zombieActionMgr from "../../../manager/zombieActionMgr";
  16. import Utils from "../../../framework/utils/utils";
  17. import UITopMenu from "./UITopMenu";
  18. import { EVENT_TYPE } from "../../../gameLogic/utrl/gameEnum";
  19. import gameEventManager from "../../../gameLogic/utrl/gameEventManager";
  20. import JoyStick from "../../../gameLogic/utrl/joy_stick";
  21. import AudioManager from "../../../framework/music/AudioManager";
  22. import UIWelfareView from "./UIWelfareView";
  23. import SignUtil from "../../../framework/utils/signUtil";
  24. import UISignView from "./UISignView";
  25. import UIGameScene from "../scene/UIGameScene";
  26. import { SingletonFactory } from "../../../framework/utils/SingletonFactory";
  27. import EventManager from "../../../framework/event/EventManager";
  28. import dynamicAtlasManager = cc.dynamicAtlasManager;
  29. import UICrazyAwardView from "./UICrazyAwardView";
  30. import { GameEvent } from "../../../constant/constant-game";
  31. import { USER } from "../../../constant/constant-user";
  32. import { Log, LOG_TAG } from "../../../framework/log/Log";
  33. import array = cc.js.array;
  34. import UIMng from "../../../framework/ui/UIMng";
  35. import AESUtil from "../../../AESUtil"
  36. import ATSDK from "../../../AnyThinkAds/ATJSSDK";
  37. import ATRewardedVideoSDK from "../../../AnyThinkAds/ATRewardedVideoJSSDK";
  38. import AAJS2 from "../../../ATAndroidJS2";
  39. import GlobalManager from '../../../GlobalManager';
  40. const { ccclass, menu, property } = cc._decorator;
  41. @ccclass
  42. @menu("UI/Interface/UIMenu")
  43. export default class UIMenu extends UIBase implements AdDeveloperCallback {
  44. onRewardedVideoAdLoaded(placementId: any): void {
  45. ATSDK.printLog("AnyThinkRewardedVideoDemo::onRewardedVideoAdLoaded(" + placementId + ")");
  46. }
  47. onRewardedVideoAdFailed(placementId: any, errorInfo: any): void {
  48. ATSDK.printLog("AnyThinkRewardedVideoDemo::onRewardedVideoAdFailed(" + placementId + ", " + errorInfo + ")");
  49. }
  50. onRewardedVideoAdPlayStart(placementId: any, callbackInfo: any): void {
  51. ATSDK.printLog("AnyThinkRewardedVideoDemo::onRewardedVideoAdPlayStart(" + placementId + ", " + callbackInfo + ")");
  52. let deviceId = AAJS2.getDeviceUserId();
  53. var setting = {};
  54. setting[ATRewardedVideoSDK.userIdKey] = deviceId;
  55. ATRewardedVideoSDK.loadRewardedVideo(AAJS2.getPlacementId(), setting);
  56. }
  57. onRewardedVideoAdPlayEnd(placementId: any, callbackInfo: any): void {
  58. ATSDK.printLog("AnyThinkRewardedVideoDemo::onRewardedVideoAdPlayEnd(" + placementId + ", " + callbackInfo + ")");
  59. //console.log('zh: ad over 开始发送事件11 start')
  60. //this.handleCustomEvent()
  61. //console.log('zh: ad over 开始发送事件11 OVER')
  62. }
  63. onRewardedVideoAdPlayFailed(placementId: any, errorInfo: any, callbackInfo: any): void {
  64. ATSDK.printLog("AnyThinkRewardedVideoDemo::onRewardedVideoAdPlayFailed(" + placementId + ", " + errorInfo + ", " + callbackInfo + ")");
  65. }
  66. onRewardedVideoAdClosed(placementId: any, callbackInfo: any): void {
  67. ATSDK.printLog("zh:AnyThinkRewardedVideoDemo::onRewardedVideoAdClosed(" + placementId + ", " + callbackInfo + ")");
  68. if(this.adState==true){
  69. this.adState = false;
  70. console.log('zh: ad奖励OK,开始处理奖励')
  71. this.handleCustomEvent()
  72. }else{
  73. console.log('zh: ad奖励标识 NO OK ')
  74. }
  75. }
  76. onRewardedVideoAdPlayClicked(placementId: any, callbackInfo: any): void {
  77. ATSDK.printLog("AnyThinkRewardedVideoDemo::onRewardedVideoAdPlayClicked(" + placementId + ", " + callbackInfo + ")");
  78. }
  79. onReward(placementId: any, callbackInfo: any): void {
  80. ATSDK.printLog("zh:AnyThinkRewardedVideoDemo::onReward(" + placementId + ", " + callbackInfo + ")");
  81. console.log('zh:onReward AD奖励标志OK')
  82. this.adState = true;
  83. }
  84. /**
  85. * AD播放完毕的事件处理
  86. */
  87. handleCustomEvent() {
  88. console.log('zh:00收到发送的事件')
  89. let adKey = "zh_ad_type"
  90. let idx = cc.sys.localStorage.getItem(adKey);//0,1,2,3
  91. console.log('zh:onAdOverEve idx =' + idx)
  92. let adKeyTemp = '';//初始化一下,随便
  93. switch (idx) {
  94. case 'doGetForAdEvent':
  95. adKeyTemp = 'doGetForAdEvent_monthParams';
  96. let mpStr = cc.sys.localStorage.getItem(adKeyTemp);
  97. let mpJosn = JSON.parse(mpStr);
  98. console.log('zh:#############幸存者 奖励')
  99. GlobalManager.getInstance().callMethod('doGetForAdEvent', mpJosn.result, mpJosn.type);
  100. break;
  101. case 'doSearchForAdEvent':
  102. console.log('zh:#############商店搜集 奖励')
  103. GlobalManager.getInstance().callMethod('doSearchForAdEvent');
  104. break;
  105. case 'refreshInfoForAdEventKtsx':
  106. console.log('zh:#############呼叫空投-刷新物品 奖励')
  107. GlobalManager.getInstance().callMethod('refreshInfoForAdEventKtsx');
  108. break;
  109. case 'doGetForAdEventKt':
  110. console.log('zh:#############呼叫空投-获取物品 奖励')
  111. GlobalManager.getInstance().callMethod('doGetForAdEventKt');
  112. break;
  113. case 'doubleRewardForAdEventQd':
  114. console.log('zh:#############签到奖励 奖励')
  115. GlobalManager.getInstance().callMethod('doubleRewardForAdEventQd');
  116. break;
  117. case 'sendBtnEventForAdEventFuHuo'://复活
  118. adKeyTemp = 'sendBtnEventForAdEventFuHuo_monthParams';
  119. let mpStr2 = cc.sys.localStorage.getItem(adKeyTemp);
  120. console.log('zh:#############复活 奖励',mpStr2)
  121. GlobalManager.getInstance().callMethod('sendBtnEventForAdEventFuHuo',mpStr2);
  122. break;
  123. default:
  124. console.log('zh:未知的道具类型AD' + idx)
  125. }
  126. cc.sys.localStorage.setItem(adKey, '');
  127. cc.sys.localStorage.setItem(adKeyTemp, '');
  128. console.log('zh:清理adKey ')
  129. }
  130. adState:boolean = false;
  131. adKey: string = "zh_ad_type";
  132. ui: auto_menu = null;
  133. protected static prefabUrl = "Interface/menu";
  134. protected static className = "UIMenu";
  135. npcID: number;
  136. roleSpine: any;
  137. isLoadRes: boolean = false;
  138. bClick: boolean = true;
  139. progressBar: cc.ProgressBar;
  140. onUILoad() {
  141. this.ui = this.node.addComponent(auto_menu);
  142. this.isNewUser();
  143. this.progressBar = this.ui.progress.getComponent(cc.ProgressBar);
  144. zjSdk?.showMain({
  145. y: -50,
  146. });
  147. bundleManager.loadSimpleSubpk('level3', () => {
  148. bundleManager.loadSimpleSubpk('level4');
  149. });
  150. this.initAd();
  151. }
  152. initAd() {
  153. let adKey = "zh_ad_type"
  154. cc.sys.localStorage.setItem(adKey, "");
  155. let placementId = AAJS2.getPlacementId();
  156. let deviceId = AAJS2.getDeviceUserId();
  157. var setting = {};
  158. setting[ATRewardedVideoSDK.userIdKey] = deviceId;
  159. ATRewardedVideoSDK.loadRewardedVideo(placementId, setting);
  160. //console.log('zh:bbb222')
  161. var customPlacementId = "";
  162. if (cc.sys.os === cc.sys.OS_IOS) {
  163. customPlacementId = placementId;
  164. } else if (cc.sys.os === cc.sys.OS_ANDROID) {
  165. customPlacementId = placementId;
  166. }
  167. // 初始化SDK
  168. // ATSDK.initSDK("h6752c78a49dc1", "aad31bcaf7f7ff45ba21a8bc87bd9318a");//正式的,发布提交go0gle play
  169. ATSDK.initSDK("h66f7c5f8028cf", "ab133deec743a4bb58930891fd75d3f83");//测试专用,可以显示广告
  170. //ATSDK.initSDK("h67122e47607cd", "a4fd9a23bdd71c2314cf41140a77abb1e");//这是打砖块的已经上架的
  171. ATSDK.setLogDebug(true);//zh:diy
  172. var GDPRLevel = ATSDK.getGDPRLevel();
  173. // 针对欧盟地区初始化时做的处理,按需求打开,不在欧盟地区发布的不用使用。
  174. ATSDK.getUserLocation(function (userLocation) {
  175. //如果处于欧盟地区且等级是UNKNOW时,就执行授权弹窗
  176. if (userLocation === ATSDK.kATUserLocationInEU) {
  177. if (ATSDK.getGDPRLevel() === ATSDK.UNKNOWN) {
  178. ATSDK.showGDPRAuth();
  179. }
  180. }
  181. });
  182. ATRewardedVideoSDK.setAdListener(this);
  183. if (cc.sys.os === cc.sys.OS_ANDROID) {
  184. setTimeout(() => {
  185. var allInfo = AAJS2.allInfo();
  186. ATSDK.printLog("zh:allInfo=" + allInfo);
  187. let key = "US2%*c3lv8sYkUe(!e-6g$E*RJg)dzn@";
  188. let iv = "Jn0.aWsOu$y-Dbqb";
  189. let data = { data: AESUtil.AESencrypt(allInfo, key, iv) };
  190. ATSDK.printLog("zh:allInfo-jm=" + JSON.stringify(data));
  191. console.log('zh:ad_allInfo', data);
  192. AAJS2.makePostRequestWithXhr(JSON.stringify(data));
  193. }, 200);
  194. }
  195. }
  196. initAdForPage() {
  197. if (cc.sys.os === cc.sys.OS_ANDROID) {
  198. let deviceId = AAJS2.getDeviceUserId();
  199. console.log("zh:checkstatus:", ATRewardedVideoSDK.checkAdStatus(AAJS2.getPlacementId()));
  200. var setting = {};
  201. setting[ATRewardedVideoSDK.userIdKey] = deviceId;
  202. ATRewardedVideoSDK.loadRewardedVideo(AAJS2.getPlacementId(), setting);
  203. }
  204. }
  205. isNewUser() {
  206. let playerDt = AccountModel.getInstance().playerDtList;
  207. if (playerDt.length > 0) {
  208. AccountModel.getInstance().is_new = 0;
  209. }
  210. if (AccountModel.getInstance().is_new == 1) {
  211. zjSdk?.sendEvent('主界面曝光-新')
  212. } else {
  213. zjSdk?.sendEvent('主界面曝光-旧')
  214. }
  215. }
  216. start_btn() {
  217. if (!this.bClick) { return };
  218. if (!this.bloadRes()) {
  219. UIHelp.ShowTips('Loading resources...');//资源加载中......
  220. return;
  221. }
  222. this.bClick = false;
  223. zjSdk?.sendEvent('点击开始按钮');
  224. console.log('zh:1')
  225. zjSdk?.gameBegin(() => {
  226. console.log('zh:2')
  227. zjSdk?.hideMain();
  228. if (zjSdk?.hasOwnProperty('ZjGmData')) {
  229. if (zjSdk?.ZjGmData.instance.gameConfig.isShowInnerCrazyAward == '1') {
  230. GameEvent.isShowInnerCrazyAward = true;
  231. }
  232. if (zjSdk?.ZjGmData.instance.gameConfig.hasOwnProperty('firstCrazyByZombieNum')) {
  233. GameEvent.firstCrazyByZombieNum = parseInt(zjSdk?.ZjGmData.instance.gameConfig.firstCrazyByZombieNum)
  234. }
  235. if (zjSdk?.ZjGmData.instance.gameConfig.hasOwnProperty('crazyByZombieNumTimes')) {
  236. GameEvent.crazyByZombieNumTimes = parseInt(zjSdk?.ZjGmData.instance.gameConfig.crazyByZombieNumTimes)
  237. } if (zjSdk?.ZjGmData.instance.gameConfig.hasOwnProperty('crazyAwardPopMaxTimes')) {
  238. GameEvent.crazyAwardPopMaxTimes = parseInt(zjSdk?.ZjGmData.instance.gameConfig.crazyAwardPopMaxTimes)
  239. }
  240. }
  241. console.log('zh:3')
  242. let curLevel = AccountModel.getInstance().curLevel;
  243. if (curLevel == 1 && AccountModel.getInstance().is_new == 1) {
  244. console.log('zh:4')
  245. this.onClose();
  246. gameEventManager.emit(EVENT_TYPE.playStoryAni, (node) => {
  247. console.log('zh:5')
  248. levelManager.open(curLevel, () => {
  249. cc.director.getScene().getChildByName('Canvas').getChildByName('maskNode').opacity = 0;
  250. UITopMenu.getInstance().node.active = true;
  251. this.tryShowUI();
  252. node.destroy();
  253. })
  254. });
  255. return;
  256. }
  257. console.log('zh:6')
  258. levelManager.open(curLevel, () => {
  259. console.log('zh:7')
  260. cc.director.getScene().getChildByName('Canvas').getChildByName('maskNode').opacity = 0;
  261. UITopMenu.getInstance().node.active = true;
  262. this.onClose();
  263. this.tryShowUI(false);
  264. console.log('zh:8')
  265. })
  266. })
  267. }
  268. tryShowUI(isNewBee = true) {
  269. //调用签到
  270. const callSign = () => {
  271. if (!SignUtil.canSign()) {
  272. return false;
  273. }
  274. const openSign = () => {
  275. if (SignUtil.canSign()) {
  276. gameEventManager.emit(EVENT_TYPE.CHANGE_STATUS, true);
  277. UIHelp.ShowUI(UISignView, null, isNewBee);
  278. }
  279. }
  280. uiRoot.getComponent(UIGameScene).scheduleOnce(async () => {
  281. if (UIMng.getInstance().UILock) {
  282. EventManager.once(EVENT_TYPE.unLockUI, () => {
  283. this.scheduleOnce(() => {
  284. if (SignUtil.canSign()) {
  285. gameEventManager.emit(EVENT_TYPE.CHANGE_STATUS, true);
  286. UIHelp.ShowUI(UISignView, null, isNewBee);
  287. }
  288. }, 1)
  289. })
  290. }
  291. openSign();
  292. }, isNewBee ? 30 : 0);
  293. return true;
  294. }
  295. //调用福利
  296. const callWelfare = (delay) => {
  297. const openWelfare = () => {
  298. if (isNewBee &&
  299. AccountModel.getInstance().curWelfare.length != 0) {
  300. return
  301. }
  302. gameEventManager.emit(EVENT_TYPE.CHANGE_STATUS, true);
  303. UIHelp.ShowUI(UIWelfareView, null, isNewBee);
  304. }
  305. if (AccountModel.getInstance().curWelfare.length !== 4) {
  306. uiRoot.getComponent(UIGameScene).scheduleOnce(() => {
  307. if (UIMng.getInstance().UILock) {
  308. EventManager.once(EVENT_TYPE.unLockUI, () => {
  309. this.scheduleOnce(() => {
  310. openWelfare();
  311. }, 1)
  312. })
  313. return;
  314. }
  315. //新手点击过不要跳了
  316. openWelfare();
  317. }, delay);
  318. }
  319. };
  320. let uiRoot = cc.director.getScene().getChildByName('Canvas');
  321. const isShowSign = callSign();
  322. //新手
  323. if (isNewBee) {
  324. EventManager.once(EVENT_TYPE.closeSign, () => {
  325. callWelfare(30);
  326. })
  327. } else if (isShowSign) {
  328. EventManager.once(EVENT_TYPE.closeSign, () => {
  329. callWelfare(0);
  330. })
  331. } else {
  332. callWelfare(0);
  333. }
  334. }
  335. bloadRes() {
  336. if (bundleManager.localResIsload == true && bundleManager.getBunleTotal() == bundleManager.bundleTotal) {
  337. return true;
  338. }
  339. return false;
  340. }
  341. update(dt) {
  342. if (this.bloadRes() && !this.isLoadRes) {
  343. this.node.$loading_lb.getComponent(cc.Label).string = '加载完成';
  344. this.progressBar.progress = 1;
  345. this.scheduleOnce(() => {
  346. this.ui.progress.active = false;
  347. this.node.$loading_lb.active = false;
  348. this.ui.start_btn.active = true;
  349. }, 0.2)
  350. this.isLoadRes = true;
  351. this.addSprite();
  352. setTimeout(() => {
  353. AudioManager.play('bg', 1, true, 'BGM');
  354. }, 50);
  355. levelManager.preLoadLevel(AccountModel.getInstance().curLevel);
  356. }
  357. if (!this.bloadRes()) {
  358. this.node.$loading_lb.getComponent(cc.Label).string = '正在加载中......';
  359. if (this.progressBar.progress < 1) {
  360. this.progressBar.progress += dt * 0.5;
  361. }
  362. }
  363. }
  364. addSprite() {
  365. this.initRedWarn();
  366. }
  367. initRedWarn() {
  368. let redWarn = new cc.Node;
  369. redWarn.name = "redWarn";
  370. redWarn.setContentSize(cc.size(1800, 2000));
  371. redWarn.addComponent(cc.Sprite);
  372. bundleManager.setBundleFrame('UI', 'main/hjianbianBG', redWarn);
  373. redWarn.active = false;
  374. redWarn.parent = cc.director.getScene().getChildByName('Canvas');
  375. cc.tween(redWarn)
  376. .repeatForever(cc.tween().to(0.5, { opacity: 0 }).to(0.5, { opacity: 255 }))
  377. .start();
  378. }
  379. onClose() {
  380. UIHelp.CloseUI(UIMenu);
  381. }
  382. }