gameManager.ts 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. import { _decorator, assetManager, AudioClip, Component, instantiate, Node, Prefab, resources, SpriteFrame, sys } from 'cc';
  2. import { server_han_zi_zhao_bu_tong_data, server_mei_nv_zhao_xi_jie_data, server_play_info, server_play_list_data, server_shuang_tu_zhao_bu_tong_data, server_sys_info, server_user_info, unlock_levels, unlock_levels_item } from './data/server_play_list_data';
  3. import { config } from './config';
  4. import { ClientEvent } from './framework/clientEvent';
  5. import { http } from './http/http';
  6. import { StorageManager } from './framework/storageManager';
  7. import { tools } from './tools';
  8. import { AudioManager } from './framework/audioManager';
  9. const { ccclass, property } = _decorator;
  10. @ccclass('gameManager')
  11. export class gameManager extends Component {
  12. public static g_server_sys_info:server_sys_info = new server_sys_info();
  13. public static g_server_play_list_data:server_play_list_data = new server_play_list_data();
  14. // public static g_server_shuang_tu_zhao_bu_tong_data:server_shuang_tu_zhao_bu_tong_data = new server_shuang_tu_zhao_bu_tong_data();
  15. // public static g_server_han_zi_zhao_bu_tong_data:server_han_zi_zhao_bu_tong_data = new server_han_zi_zhao_bu_tong_data();
  16. // public static g_server_mei_nv_zhao_xi_jie_data:server_mei_nv_zhao_xi_jie_data = new server_mei_nv_zhao_xi_jie_data();
  17. private static uiLayer:Node = null;
  18. private static topLayer:Node = null;
  19. private static waitLayer:Node = null;
  20. public static userInfo:server_user_info = new server_user_info();
  21. public static uiViewList:Map<string,Node> = new Map();
  22. public static topViewList:Map<string,Node> = new Map();
  23. public static user_level_data:unlock_levels = new unlock_levels();
  24. public static PreloadingLevelImgNumber:number = 0;//执行预加载的数量
  25. public static cache:Map<string,SpriteFrame[]> = new Map();
  26. public static test_user_list:string[] = [];
  27. start() {
  28. }
  29. public static isTestUser(){
  30. for (let index = 0; index < gameManager.test_user_list.length; index++) {
  31. const element = gameManager.test_user_list[index];
  32. if(parseInt(element)==gameManager.userInfo.id){
  33. return true;
  34. }
  35. }
  36. return false;
  37. }
  38. public static init_test_user_list(list:string[]){
  39. gameManager.test_user_list = list;
  40. }
  41. public static init_unlock_levels(){
  42. for (let index = 0; index < gameManager.g_server_play_list_data.list.length; index++) {
  43. const element = gameManager.g_server_play_list_data.list[index];
  44. let item:unlock_levels_item = new unlock_levels_item;
  45. item.id = element.id;
  46. item.level = 1;
  47. if(item.id===config.PLAY_TYPE.YI_QI_ZHAO_CHA){
  48. item.is_lock_game_play = 1;
  49. }else{
  50. item.is_lock_game_play = 0;
  51. }
  52. gameManager.user_level_data.list[element.id] = item;
  53. }
  54. }
  55. public static isFinishAllLevel(categoryid:number):boolean{
  56. let item = gameManager.get_cur_level_by_categoryid(categoryid)
  57. if(item.level===gameManager.get_play_level_number(categoryid)){
  58. return true;
  59. }
  60. return false;
  61. }
  62. public static get_play_level_number(categoryid:number):number{
  63. let list = gameManager.g_server_play_list_data.list;
  64. let number = 0;
  65. for (let index = 0; index < list.length; index++) {
  66. if(categoryid===list[index].id){
  67. number = list[index].barrier_number;
  68. break;
  69. }
  70. }
  71. return number;
  72. }
  73. public static get_unlock_levels():string{
  74. if(gameManager.user_level_data.list.length>0){
  75. return JSON.stringify(gameManager.user_level_data.list);
  76. }
  77. return "";
  78. }
  79. public static set_unlock_levels(unlock_levels:string){
  80. gameManager.user_level_data.list = JSON.parse(unlock_levels);
  81. }
  82. public static set_unlock_levels_data(item:unlock_levels_item){
  83. gameManager.user_level_data.list[item.id] = item;
  84. }
  85. public static setWaitLayer(node:Node){
  86. gameManager.waitLayer = node;
  87. }
  88. public static sync_data(){
  89. let form_Data = null;
  90. if(sys.platform==sys.Platform.BYTEDANCE_MINI_GAME){
  91. form_Data = {"coin": gameManager.userInfo.coin+"","unlock_levels": gameManager.get_unlock_levels()}
  92. }else{
  93. form_Data = new FormData();
  94. form_Data.append("coin", gameManager.userInfo.coin+"");
  95. form_Data.append("unlock_levels", gameManager.get_unlock_levels());
  96. }
  97. http.post(config.api_url.sync_data,form_Data,(_err,c_data)=>{
  98. if(!_err){
  99. let c__data = JSON.parse(c_data);
  100. console.log("c__data",c__data)
  101. if(c__data.code==config.MSG_CODE.SUCCESS){
  102. ClientEvent.dispatchEvent(config.EVENT_MSG.ON_CHANGE_COIN_NUMBER);
  103. }
  104. }
  105. })
  106. }
  107. public static get_user_coin():number{
  108. return gameManager.userInfo.coin;
  109. }
  110. public static add_coin(coin:number){
  111. gameManager.userInfo.coin+=coin;
  112. }
  113. public static sub_coin(coin:number){
  114. gameManager.userInfo.coin-=coin;
  115. if( gameManager.userInfo.coin<0){
  116. gameManager.userInfo.coin = 0;
  117. }
  118. }
  119. public static showLoading(){
  120. gameManager.addTopView(config.PREFAB_PATH.view_loading,null);
  121. }
  122. public static hideLoading(){
  123. if(gameManager.topViewList.get(config.PREFAB_PATH.view_loading)){
  124. gameManager.topViewList.get(config.PREFAB_PATH.view_loading).removeFromParent();
  125. gameManager.topViewList.set(config.PREFAB_PATH.view_loading,null);
  126. }
  127. }
  128. public static get_cur_level_by_categoryid(categoryid:number):unlock_levels_item{
  129. if(gameManager.user_level_data.list.length<=0){
  130. return null;
  131. }
  132. switch (categoryid) {
  133. case config.PLAY_TYPE.YI_QI_ZHAO_CHA:
  134. return gameManager.user_level_data.list[config.PLAY_TYPE.YI_QI_ZHAO_CHA];
  135. case config.PLAY_TYPE.HAN_ZI_ZHAO_BU_TONG:
  136. return gameManager.user_level_data.list[config.PLAY_TYPE.HAN_ZI_ZHAO_BU_TONG];
  137. case config.PLAY_TYPE.MEI_NV_ZHAO_XI_JIE:
  138. return gameManager.user_level_data.list[config.PLAY_TYPE.MEI_NV_ZHAO_XI_JIE];
  139. }
  140. }
  141. public static next_level(categoryid:number):boolean{
  142. let item = gameManager.get_cur_level_by_categoryid(categoryid);
  143. let play_item = gameManager.get_play_list_item_by_categoryid(categoryid);
  144. if(item.level<play_item.barrier_number){
  145. item.level+=1;
  146. gameManager.set_unlock_levels_data(item);
  147. gameManager.sync_data()
  148. return true;
  149. }
  150. return false;
  151. }
  152. public static setUiLayer(node:Node){
  153. gameManager.uiLayer = node;
  154. }
  155. public static getTopLayer():Node{
  156. return gameManager.topLayer;
  157. }
  158. public static setTopLayer(node:Node){
  159. gameManager.topLayer = node;
  160. }
  161. public static addUiView(parent_path:string,call_back){
  162. if(gameManager.uiLayer==null){
  163. console.log("gameManager.uiLayer -- null!");
  164. return;
  165. }
  166. gameManager.showWaitView();
  167. resources.load(parent_path, Prefab, (err, prefab) => {
  168. if(err){
  169. console.log("addUiView -- err::",err);
  170. return;
  171. }
  172. let newNode:Node = instantiate(prefab);
  173. newNode.parent = gameManager.uiLayer;
  174. gameManager.uiViewList.set(parent_path,newNode);
  175. gameManager.hideWaitView();
  176. if(call_back!=null){
  177. call_back(newNode);
  178. }
  179. });
  180. }
  181. public static addTopView(parent_path:string,call_back){
  182. if(gameManager.topLayer==null){
  183. console.log("gameManager.topLayer -- null!");
  184. return;
  185. }
  186. gameManager.showWaitView();
  187. resources.load(parent_path, Prefab, (err, prefab) => {
  188. if(err){
  189. console.log("addTopView -- err::",err);
  190. return;
  191. }
  192. let newNode:Node = instantiate(prefab);
  193. gameManager.topViewList.set(parent_path,newNode);
  194. newNode.parent = gameManager.topLayer;
  195. gameManager.hideWaitView();
  196. if(call_back!=null){
  197. call_back(newNode);
  198. }
  199. });
  200. }
  201. public static showWaitView(){
  202. gameManager.waitLayer.active = true;
  203. }
  204. public static hideWaitView(){
  205. gameManager.waitLayer.active = false;
  206. }
  207. public static set_server_user_data(data){
  208. gameManager.userInfo = data;
  209. if(gameManager.userInfo.unlock_levels!=""){
  210. gameManager.set_unlock_levels(gameManager.userInfo.unlock_levels);
  211. }
  212. console.log("set_server_user_data::",data);
  213. }
  214. public static set_server_play_list_data(data:server_play_info){
  215. gameManager.g_server_play_list_data.list = data.wf_list;
  216. gameManager.g_server_sys_info = data.sys_info;
  217. ClientEvent.dispatchEvent(config.EVENT_MSG.ON_INIT_GAME_LIST);
  218. console.log("set_server_play_list_data::",data);
  219. }
  220. public static get_play_list_item_by_categoryid(categoryid:number){
  221. for (let index = 0; index < gameManager.g_server_play_list_data.list.length; index++) {
  222. const element = gameManager.g_server_play_list_data.list[index];
  223. if(element.id===categoryid){
  224. return element;
  225. }
  226. }
  227. return null;
  228. }
  229. public static PreloadingLevelImg(finish_call_back){
  230. if(gameManager.g_server_play_list_data.list.length<=0){
  231. return
  232. }
  233. if(gameManager.PreloadingLevelImgNumber<=0){
  234. let count = 0;
  235. let call_back = ()=>{
  236. count++;
  237. if(count>=gameManager.PreloadingLevelImgNumber){
  238. gameManager.PreloadingLevelImgNumber = 0;
  239. finish_call_back()
  240. }
  241. }
  242. for (let index = 0; index < gameManager.g_server_play_list_data.list.length; index++) {
  243. const element = gameManager.g_server_play_list_data.list[index];
  244. let item = gameManager.get_cur_level_by_categoryid(element.id);
  245. let key = `${element.id}_${item.level+1}`;
  246. let str = StorageManager.instance.getGlobalData(key);
  247. if(str===""||str===undefined||str===null){
  248. gameManager.PreloadingLevelImgNumber++;
  249. gameManager.loadLevelImg(element.id,item.level+1,call_back)
  250. }
  251. }
  252. }
  253. }
  254. public static loadLevelImg(category_id,level,call_back){
  255. let key = `${category_id}_${level}`;
  256. let list = []
  257. http.get(config.static_url.levels_info(category_id,level),(err,data)=>{
  258. if(!err){
  259. let _data = JSON.parse(data)
  260. if(_data.code===config.MSG_CODE.SUCCESS){
  261. let data = _data.content
  262. switch(category_id){
  263. case config.PLAY_TYPE.YI_QI_ZHAO_CHA:
  264. let img_count = 0;
  265. let img_call_back = ()=>{
  266. if(img_count>=2){
  267. console.log("key",key)
  268. StorageManager.instance.setGlobalData(key,"1")
  269. gameManager.cache.set(`${level}_${category_id}`,list)
  270. call_back();
  271. }
  272. }
  273. tools.loadRemoteImg(data.img1,(sf:SpriteFrame)=>{
  274. sf.addRef();
  275. list.push(sf);
  276. img_count++;
  277. img_call_back();
  278. })
  279. tools.loadRemoteImg(data.img2,(sf)=>{
  280. sf.addRef();
  281. list.push(sf);
  282. img_count++;
  283. img_call_back();
  284. })
  285. break;
  286. case config.PLAY_TYPE.HAN_ZI_ZHAO_BU_TONG:
  287. let img_count_font = 0;
  288. let img_call_back_font = ()=>{
  289. if(img_count_font>=3){
  290. console.log("key",key)
  291. gameManager.cache.set(`${level}_${category_id}`,list)
  292. StorageManager.instance.setGlobalData(key,"1")
  293. call_back();
  294. }
  295. }
  296. tools.loadRemoteImg(data.default_img,(sf)=>{
  297. sf.addRef();
  298. list.push(sf);
  299. img_count_font++;
  300. img_call_back_font();
  301. })
  302. tools.loadRemoteImg(data.find_img,(sf)=>{
  303. sf.addRef();
  304. list.push(sf);
  305. img_count_font++;
  306. img_call_back_font();
  307. })
  308. tools.loadRemoteImg(data.d_img,(sf)=>{
  309. sf.addRef();
  310. list.push(sf);
  311. img_count_font++;
  312. img_call_back_font();
  313. })
  314. break;
  315. case config.PLAY_TYPE.MEI_NV_ZHAO_XI_JIE:
  316. let img_count_component = 0;
  317. let img_call_back_component = ()=>{
  318. if(img_count_component>=data.component.length+1){
  319. console.log("key",key)
  320. gameManager.cache.set(`${level}_${category_id}`,list)
  321. StorageManager.instance.setGlobalData(key,"1")
  322. call_back();
  323. }
  324. }
  325. tools.loadRemoteImg(data.img,(sf)=>{
  326. sf.addRef();
  327. list.push(sf);
  328. img_count_component++;
  329. img_call_back_component();
  330. })
  331. for (let index = 0; index < data.component.length; index++) {
  332. const element = data.component[index];
  333. tools.loadRemoteImg(element.img,(sf,id)=>{
  334. sf.addRef();
  335. list.push(sf);
  336. img_count_component++;
  337. img_call_back_component();
  338. },element.id);
  339. }
  340. break;
  341. }
  342. }
  343. }
  344. })
  345. }
  346. //通用的关闭按钮点击音效
  347. public static playCloseBtnSound( loop:boolean = false){
  348. let path = gameManager.g_server_sys_info.sys_click_button_music;
  349. AudioManager.instance.playSound(path,loop)
  350. }
  351. //通用的按钮点击音效
  352. public static playBtnSound( loop:boolean = false){
  353. let path = gameManager.g_server_sys_info.sys_close_button_music;
  354. AudioManager.instance.playSound(path,loop)
  355. }
  356. //每个玩法的胜利音效
  357. public static playWinSoundByCategoryId(id:number, loop:boolean = false){
  358. let paht = gameManager.get_play_list_item_by_categoryid(id).wf_victory_music;
  359. AudioManager.instance.playSound(paht,loop)
  360. }
  361. //每个玩法的失败音效
  362. public static playFailSoundByCategoryId(id:number, loop:boolean = false){
  363. let paht = gameManager.get_play_list_item_by_categoryid(id).wf_fail_music;
  364. AudioManager.instance.playSound(paht,loop)
  365. }
  366. //每个玩法的正确音效
  367. public static playRightSoundByCategoryId(id:number, loop:boolean = false){
  368. let paht = gameManager.get_play_list_item_by_categoryid(id).wf_right_click_music;
  369. AudioManager.instance.playSound(paht,loop)
  370. }
  371. //每个玩法的错误音效
  372. public static playErrSoundByCategoryId(id:number, loop:boolean = false){
  373. let paht = gameManager.get_play_list_item_by_categoryid(id).wf_wrong_click_music;
  374. AudioManager.instance.playSound(paht,loop)
  375. }
  376. //每个玩法的背景音乐
  377. public static playGamePlayMusicByCategoryId(id:number, loop:boolean = false){
  378. let path = gameManager.get_play_list_item_by_categoryid(id).wf_piped_music;
  379. AudioManager.instance.playMusic(path,loop)
  380. }
  381. //主页的背景音乐
  382. public static playMainMusic(loop:boolean = false){
  383. let path = gameManager.g_server_sys_info.sys_piped_music;
  384. AudioManager.instance.playMusic(path,loop)
  385. }
  386. public static loadSysMusic(call_back){
  387. let count = 0;
  388. let call = ()=>{
  389. count++;
  390. if(count>=3){
  391. call_back()
  392. }
  393. }
  394. assetManager.loadRemote(gameManager.g_server_sys_info.sys_click_button_music, (err: any, clip: AudioClip)=> {
  395. clip.addRef()
  396. call()
  397. });
  398. assetManager.loadRemote(gameManager.g_server_sys_info.sys_close_button_music, (err: any, clip: AudioClip)=> {
  399. clip.addRef()
  400. call()
  401. });
  402. assetManager.loadRemote(gameManager.g_server_sys_info.sys_piped_music, (err: any, clip: AudioClip)=> {
  403. clip.addRef()
  404. call()
  405. });
  406. }
  407. public static loadPlayMusicByCategoryId(id,call_back){
  408. let count = 0;
  409. let call = ()=>{
  410. count++;
  411. if(count>=5){
  412. call_back()
  413. }
  414. }
  415. let paly_item = gameManager.get_play_list_item_by_categoryid(id);
  416. assetManager.loadRemote(paly_item.wf_fail_music, (err: any, clip: any)=> {
  417. clip.addRef()
  418. call()
  419. });
  420. assetManager.loadRemote(paly_item.wf_victory_music, (err: any, clip: any)=> {
  421. clip.addRef()
  422. call()
  423. });
  424. assetManager.loadRemote(paly_item.wf_right_click_music, (err: any, clip: any)=> {
  425. clip.addRef()
  426. call()
  427. });
  428. assetManager.loadRemote(paly_item.wf_wrong_click_music, (err: any, clip: any)=> {
  429. clip.addRef()
  430. call()
  431. });
  432. assetManager.loadRemote(paly_item.wf_piped_music, (err: any, clip: any)=> {
  433. clip.addRef()
  434. call()
  435. });
  436. }
  437. public static decRefSf(categoryid:number){
  438. let levels_item = gameManager.get_cur_level_by_categoryid(categoryid);
  439. gameManager.cache.forEach((v,k)=>{
  440. let l = k.split("_");
  441. let level = parseInt(l[0]);
  442. let _categoryid = parseInt(l[1]);
  443. if(_categoryid==categoryid){
  444. if(level<levels_item.level){
  445. for (let index = 0; index < v.length; index++) {
  446. const element = v[index];
  447. element.decRef()
  448. }
  449. gameManager.cache.set(`${level}_${_categoryid}`,[]);
  450. }
  451. }
  452. })
  453. }
  454. // public static set_server_han_zi_zhao_bu_tong_data(data){
  455. // gameManager.g_server_han_zi_zhao_bu_tong_data.list = data;
  456. // console.log("set_server_han_zi_zhao_bu_tong_data::",data);
  457. // }
  458. // public static set_server_mei_nv_zhao_xi_jie_data(data){
  459. // gameManager.g_server_mei_nv_zhao_xi_jie_data.list = data;
  460. // console.log("set_server_mei_nv_zhao_xi_jie_data::",data);
  461. // }
  462. }