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 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. import UserHead from "../../logic/fgui/Common/UserHead";
  12. import ItemIcon from "../../logic/fgui/Common/ItemIcon";
  13. export default class LoadingModel extends IDataModel {
  14. constructor() {
  15. super('loading');
  16. }
  17. // 两个变量加载完成后,即可进入主游戏场景
  18. loginSucc: boolean = false // 登录成功
  19. jsonLoadSucc: boolean = false // 配置表加载成功
  20. mainAssetsLoadSucc: boolean = false // 主要资源加载成功
  21. isLoadEnter: boolean = false //进游戏加载资源
  22. // 预加载列表
  23. preLoadList: { bundle: string, packageName: string, spriteList?: string[], resPath?: string }[] = [
  24. // { bundle: "Home", packageName: "Home", spriteList: ["Home_atlas0"] },
  25. ]
  26. // 加载主场景
  27. loadMainAssets(callback?: Function) {
  28. if (Config.inGame == InGame.home) {
  29. return
  30. }
  31. EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.1, "res")
  32. //fgui优先加载common的组件
  33. FguiLoadMgr.loadPackage("Common", "Common", (error, pkg) => {
  34. if (error) {
  35. console.error(error)
  36. }
  37. if (callback) {
  38. callback()
  39. }
  40. // //拓展基础类
  41. // fgui.UIObjectFactory.setExtension("ui://Common/ItemBase", ItemBase);
  42. fgui.UIObjectFactory.setExtension("ui://Common/UserHead", UserHead);
  43. // fgui.UIObjectFactory.setExtension("ui://Common/JingJieCom", JingJieCom);
  44. // fgui.UIObjectFactory.setExtension("ui://Common/TopItemCount", TopItemCount);
  45. // fgui.UIObjectFactory.setExtension("ui://Common/RedDot", RedDot);
  46. fgui.UIObjectFactory.setExtension("ui://Common/ItemIcon", ItemIcon);
  47. // fgui.UIObjectFactory.setExtension("ui://Common/HdTimeBenBtn", HdTimeBenBtn);
  48. // fgui.UIObjectFactory.setExtension("ui://Common/ChengHaoCom", ChengHaoCom);
  49. // fgui.UIObjectFactory.setExtension("ui://Common/GrowthGiftEntrBtn", GrowthGiftEntrBtn);
  50. // fgui.UIObjectFactory.setExtension("ui://GameHome/HdItemBtn", HdItem);
  51. this.preLoadBundle(0)
  52. })
  53. }
  54. private preLoadBundle(index: number) {
  55. if (index >= this.preLoadList.length) {
  56. EventMng.emit(LoadEvent.LOAD_PROGRESS, 1, "res")
  57. this.mainAssetsLoadSucc = true
  58. this.checkEnterGame()
  59. return
  60. }
  61. let bundle = this.preLoadList[index].bundle
  62. let packageName = this.preLoadList[index].packageName
  63. let spriteList = this.preLoadList[index].spriteList
  64. let resPath = this.preLoadList[index].resPath
  65. AssetsBundleMgr.loadBundle(bundle, (err, bundle) => {
  66. if (err) {
  67. console.error(err)
  68. return
  69. }
  70. if (packageName) {
  71. fgui.UIPackage.loadPackage(bundle, packageName, (error, pkg) => {
  72. if (error) {
  73. console.error(error)
  74. }
  75. //加载下一个
  76. this.preLoadBundle(index + 1)
  77. });
  78. for (let i = 0; i < spriteList.length; i++) {
  79. bundle.preload(spriteList[i], cc.SpriteFrame, (err, assert) => {
  80. if (err) {
  81. console.error(err)
  82. }
  83. })
  84. }
  85. } else {
  86. bundle.preload(resPath, cc.Asset, (err, assert) => {
  87. if (err) {
  88. console.error(err)
  89. }
  90. //加载下一个
  91. this.preLoadBundle(index + 1)
  92. })
  93. }
  94. EventMng.emit(LoadEvent.LOAD_PROGRESS, (index + 1) / this.preLoadList.length, "res")
  95. })
  96. }
  97. // 资源或登录成功,检测是否能够进入游戏
  98. checkEnterGame() {
  99. if (this.mainAssetsLoadSucc && this.loginSucc && this.jsonLoadSucc) {
  100. //初始化红点模块
  101. RedUtil.initRedUtil()
  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. }