FguiLoadMgr.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import { gameMethod } from "../../common/gameMethod";
  2. import { KindItem } from "../../common/Xys";
  3. import { ConstItem, ItemKind, UserSex } from "../../data/const/TypeConst";
  4. import GameDataCenter from "../../data/GameDataCenter";
  5. import AssetsBundleMgr from "../../utils/AssetsBundleMgr";
  6. import { I18n } from "../../utils/I18nUtil";
  7. import ResGComponent from "../compment/ResGComponent";
  8. import ResSprite from "../compment/ResSprite";
  9. /**
  10. * 动态加载资源
  11. */
  12. export default class FguiLoadMgr {
  13. //动态加载道具图标
  14. static loadItemIcon(obj: fgui.GLoader | fgui.GButton | fgui.GLabel, kindItem: KindItem | ConstItem, callback: Function = (success: boolean) => { }, scale?: number) {
  15. if (!kindItem) {
  16. let node = obj.node;
  17. let itemResSprite = node.getComponent(ResSprite);
  18. itemResSprite?.unsetSpriteFrame();
  19. callback && callback(false);
  20. return;
  21. }
  22. let iconUrl = GameDataCenter.item.getItemCfgBase(kindItem)?.iconUrl;
  23. if (gameMethod.isEmpty(iconUrl)) {
  24. if (CC_PREVIEW) console.error("道具Url未配置===>>>", kindItem);
  25. return;
  26. }
  27. let kind = kindItem?.[0];
  28. if (kind == ItemKind.money) {
  29. let node = obj.node;
  30. let itemBase = GameDataCenter.item.getItemCfgBase(kindItem);
  31. let itemResSprite = node.getComponent(ResSprite) ?? node.addComponent(ResSprite);
  32. itemResSprite.setSpriteFrame("ItemIcon", itemBase.icon, () => {
  33. if (callback) {
  34. callback(true);
  35. }
  36. });
  37. let nodeScaleX = scale ?? obj.scaleX;
  38. let nodeScaleY = scale ?? obj.scaleY;
  39. node.setScale(nodeScaleX, nodeScaleY);
  40. return;
  41. }
  42. // 因有些图标不在common包里 所以需要加载
  43. let newUrls = iconUrl.split("/");
  44. this.loadPackage(newUrls[2], newUrls[2], (error) => {
  45. if (error) {
  46. if (callback) callback(false);
  47. return;
  48. }
  49. let url = iconUrl;
  50. if (obj instanceof fgui.GLoader) {
  51. obj.url = url;
  52. } else {
  53. obj.icon = url;
  54. }
  55. if (scale) obj.asCom.setScale(scale, scale);
  56. if (callback) {
  57. callback(true);
  58. }
  59. });
  60. }
  61. //动态加载package包里的图片资源
  62. static loadSpriteFormPackage(obj: fgui.GLoader | fairygui.GLabel | fairygui.GButton, bundleName: string, pkgName: string, url: string, callback: Function = (success: boolean) => { }, scale?: number, xFlip: boolean = false, yFlip: boolean = false) {
  63. this.loadPackage(bundleName, pkgName, (error) => {
  64. if (error || !obj?.node || !obj.node.isValid) {
  65. if (callback) callback(false);
  66. return;
  67. }
  68. if (obj instanceof fgui.GLoader) {
  69. obj.url = url;
  70. } else {
  71. obj.icon = url;
  72. }
  73. if (scale) {
  74. obj.setScale(scale, scale);
  75. }
  76. if (xFlip || yFlip) {
  77. obj.setScale(obj.scaleX * (xFlip ? -1 : 1), obj.scaleY * (yFlip ? -1 : 1));
  78. }
  79. if (callback) {
  80. callback(true);
  81. }
  82. });
  83. }
  84. private static loadFguiPkg(bundle, pkgName, callback?: Function) {
  85. let p = fgui.UIPackage.getByName(pkgName);
  86. if (p) {
  87. if (callback) callback(null, p);
  88. } else {
  89. fgui.UIPackage.loadPackage(bundle, pkgName, (error, pkg) => {
  90. if (error) {
  91. if (callback) callback(error, null);
  92. return;
  93. }
  94. if (callback) {
  95. callback(null, pkg);
  96. }
  97. });
  98. }
  99. }
  100. /** 同步加载package */
  101. static async loadPackageAsync(bundleName: string, pkgName: string): Promise<void> {
  102. return new Promise<void>((resolve, reject) => {
  103. AssetsBundleMgr.loadBundle(bundleName, (error, bundle: cc.AssetManager.Bundle) => {
  104. if (error) {
  105. reject(error);
  106. return;
  107. }
  108. FguiLoadMgr.loadFguiPkg(bundle, pkgName, (error, pkg) => {
  109. if (error) {
  110. reject(error);
  111. return;
  112. }
  113. resolve();
  114. });
  115. });
  116. });
  117. }
  118. static loadPackage(bundleName: string, pkgName: string, onComplete: (error: any, pkg: fgui.UIPackage) => void): void {
  119. AssetsBundleMgr.loadBundle(bundleName, (error, bundle: cc.AssetManager.Bundle) => {
  120. if (error) {
  121. onComplete(error, null);
  122. return;
  123. }
  124. FguiLoadMgr.loadFguiPkg(bundle, pkgName, (error, pkg) => {
  125. onComplete(error, pkg);
  126. });
  127. });
  128. }
  129. /** 加载fgui里的图片 */
  130. static loadPackageFrameAsset(node: cc.Node, packageName: string, iconUrl: string) {
  131. this.loadPackage(packageName, packageName, (error, pkg) => {
  132. if (error) {
  133. return;
  134. }
  135. let asset = pkg.getItemAssetByName(iconUrl);
  136. if (asset) {
  137. let frame = asset as cc.SpriteFrame;
  138. node.getComponent(cc.Sprite).spriteFrame = frame;
  139. }
  140. });
  141. }
  142. /** 设置多语言文本 */
  143. static setI18nTextLabel(gLabel: fgui.GTextField | fgui.GRichTextField | fgui.GLabel | fgui.GButton, key: string, ...args: any[]) {
  144. let str = I18n.getI18nText(key, ...args);
  145. this.setLabel(gLabel, str);
  146. }
  147. static setLabel(gLabel: fgui.GTextField | fgui.GRichTextField | fgui.GLabel | fgui.GButton, str: string) {
  148. // gLabel.node.getComponent(cc.Label).cacheMode = cc.Label.CacheMode.CHAR;
  149. if (gLabel instanceof fgui.GTextField || gLabel instanceof fgui.GRichTextField) {
  150. gLabel.text = str;
  151. } else if (gLabel instanceof fgui.GLabel || gLabel instanceof fgui.GButton) {
  152. gLabel.title = str;
  153. }
  154. }
  155. /** 动态加载组件 */
  156. static LoadComp(parent: fairygui.GComponent, bundleName: string, pkgName: string, resName: string, userClass: new () => fgui.GObject, onComplete: (comp: fairygui.GObject) => void) {
  157. let resGComp = parent.node.getComponent(ResGComponent);
  158. if (!resGComp) resGComp = parent.node.addComponent(ResGComponent);
  159. resGComp.LoadComp(bundleName, pkgName, resName, userClass, (comp: fairygui.GObject) => {
  160. onComplete(comp);
  161. });
  162. }
  163. }