LoadingModel.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import Config from "../../Config";
  2. import FguiMgr from "../../frameWork/fgui/FguiMgr";
  3. import EventMng from "../../manager/EventMng";
  4. import AssetsBundleMgr from "../../utils/AssetsBundleMgr";
  5. import { LoadEvent } from "../const/EventConst";
  6. import { InGame } from "../const/TypeConst";
  7. import IDataModel from "../../frameWork/model/IDataModel";
  8. import ResSprite from "../../frameWork/compment/ResSprite";
  9. import FguiLoadMgr from "../../frameWork/fgui/FguiLoadMgr";
  10. import { RedUtil } from "../../frameWork/fgui/RedUtil";
  11. export default class LoadingModel extends IDataModel {
  12. constructor() {
  13. super('loading');
  14. }
  15. // 两个变量加载完成后,即可进入主游戏场景
  16. loginSucc: boolean = false // 登录成功
  17. jsonLoadSucc: boolean = false // 配置表加载成功
  18. mainAssetsLoadSucc: boolean = false // 主要资源加载成功
  19. isLoadEnter: boolean = false //进游戏加载资源
  20. // 预加载列表
  21. preLoadList: { bundle: string, packageName: string, spriteList?: string[], resPath?: string }[] = [
  22. // { bundle: "Home", packageName: "Home", spriteList: ["Home_atlas0"] },
  23. ]
  24. // 加载主场景
  25. loadMainAssets(callback?: Function) {
  26. if (Config.inGame == InGame.home) {
  27. return
  28. }
  29. EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.1, "res")
  30. //fgui优先加载common的组件
  31. FguiLoadMgr.loadPackage("Common", "Common", (error, pkg) => {
  32. if (error) {
  33. console.error(error)
  34. }
  35. if (callback) {
  36. callback()
  37. }
  38. // //拓展基础类
  39. // fgui.UIObjectFactory.setExtension("ui://Common/ItemBase", ItemBase);
  40. // fgui.UIObjectFactory.setExtension("ui://Common/UserHead", UserHead);
  41. // fgui.UIObjectFactory.setExtension("ui://Common/JingJieCom", JingJieCom);
  42. // fgui.UIObjectFactory.setExtension("ui://Common/TopItemCount", TopItemCount);
  43. // fgui.UIObjectFactory.setExtension("ui://Common/RedDot", RedDot);
  44. // fgui.UIObjectFactory.setExtension("ui://Common/ItemIcon", ItemIcon);
  45. // fgui.UIObjectFactory.setExtension("ui://Common/HdTimeBenBtn", HdTimeBenBtn);
  46. // fgui.UIObjectFactory.setExtension("ui://Common/ChengHaoCom", ChengHaoCom);
  47. // fgui.UIObjectFactory.setExtension("ui://Common/GrowthGiftEntrBtn", GrowthGiftEntrBtn);
  48. // fgui.UIObjectFactory.setExtension("ui://GameHome/HdItemBtn", HdItem);
  49. this.preLoadBundle(0)
  50. })
  51. }
  52. private preLoadBundle(index: number) {
  53. if (index >= this.preLoadList.length) {
  54. EventMng.emit(LoadEvent.LOAD_PROGRESS, 1, "res")
  55. this.mainAssetsLoadSucc = true
  56. this.checkEnterGame()
  57. return
  58. }
  59. let bundle = this.preLoadList[index].bundle
  60. let packageName = this.preLoadList[index].packageName
  61. let spriteList = this.preLoadList[index].spriteList
  62. let resPath = this.preLoadList[index].resPath
  63. AssetsBundleMgr.loadBundle(bundle, (err, bundle) => {
  64. if (err) {
  65. console.error(err)
  66. return
  67. }
  68. if (packageName) {
  69. fgui.UIPackage.loadPackage(bundle, packageName, (error, pkg) => {
  70. if (error) {
  71. console.error(error)
  72. }
  73. //加载下一个
  74. this.preLoadBundle(index + 1)
  75. });
  76. for (let i = 0; i < spriteList.length; i++) {
  77. bundle.preload(spriteList[i], cc.SpriteFrame, (err, assert) => {
  78. if (err) {
  79. console.error(err)
  80. }
  81. })
  82. }
  83. } else {
  84. bundle.preload(resPath, cc.Asset, (err, assert) => {
  85. if (err) {
  86. console.error(err)
  87. }
  88. //加载下一个
  89. this.preLoadBundle(index + 1)
  90. })
  91. }
  92. EventMng.emit(LoadEvent.LOAD_PROGRESS, (index + 1) / this.preLoadList.length, "res")
  93. })
  94. }
  95. // 资源或登录成功,检测是否能够进入游戏
  96. checkEnterGame() {
  97. if (this.mainAssetsLoadSucc && this.loginSucc && this.jsonLoadSucc) {
  98. //初始化红点模块
  99. RedUtil.initRedUtil()
  100. FguiMgr.Instance.CloseAllUI()
  101. cc.director.loadScene("game")
  102. }
  103. }
  104. //动态添加图标精灵
  105. loadSpriteFormBundle(target: cc.Node, bundleName: string, spriteName: string, cb?: (asset: cc.SpriteFrame) => void, scale?: number) {
  106. let targetSprite = target.getComponent(ResSprite)
  107. if (!targetSprite) {
  108. targetSprite = target.addComponent(ResSprite)
  109. }
  110. if (scale) {
  111. target.setScale(scale, scale);
  112. }
  113. targetSprite.setSpriteFrame(bundleName, spriteName, cb);
  114. }
  115. }