LoadingModel.ts 5.0 KB

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