import { ConstItem, UserSex } from "../../data/const/TypeConst"; import AssetsBundleMgr from "../../utils/AssetsBundleMgr"; import { I18n } from "../../utils/I18nUtil"; import ResGComponent from "../compment/ResGComponent"; /** * 动态加载资源 */ export default class FguiLoadMgr { //动态加载package包里的图片资源 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) { this.loadPackage(bundleName, pkgName, (error) => { if (error || !obj?.node || !obj.node.isValid) { if (callback) callback(false); return; } if (obj instanceof fgui.GLoader) { obj.url = url; } else { obj.icon = url; } if (scale) { obj.setScale(scale, scale); } if (xFlip || yFlip) { obj.setScale(obj.scaleX * (xFlip ? -1 : 1), obj.scaleY * (yFlip ? -1 : 1)); } if (callback) { callback(true); } }); } private static loadFguiPkg(bundle, pkgName, callback?: Function) { let p = fgui.UIPackage.getByName(pkgName); if (p) { if (callback) callback(null, p); } else { fgui.UIPackage.loadPackage(bundle, pkgName, (error, pkg) => { if (error) { if (callback) callback(error, null); return; } if (callback) { callback(null, pkg); } }); } } /** 同步加载package */ static async loadPackageAsync(bundleName: string, pkgName: string): Promise { return new Promise((resolve, reject) => { AssetsBundleMgr.loadBundle(bundleName, (error, bundle: cc.AssetManager.Bundle) => { if (error) { reject(error); return; } FguiLoadMgr.loadFguiPkg(bundle, pkgName, (error, pkg) => { if (error) { reject(error); return; } resolve(); }); }); }); } static loadPackage(bundleName: string, pkgName: string, onComplete: (error: any, pkg: fgui.UIPackage) => void): void { AssetsBundleMgr.loadBundle(bundleName, (error, bundle: cc.AssetManager.Bundle) => { if (error) { onComplete(error, null); return; } FguiLoadMgr.loadFguiPkg(bundle, pkgName, (error, pkg) => { onComplete(error, pkg); }); }); } /** 加载fgui里的图片 */ static loadPackageFrameAsset(node: cc.Node, packageName: string, iconUrl: string) { this.loadPackage(packageName, packageName, (error, pkg) => { if (error) { return; } let asset = pkg.getItemAssetByName(iconUrl); if (asset) { let frame = asset as cc.SpriteFrame; node.getComponent(cc.Sprite).spriteFrame = frame; } }); } /** 设置多语言文本 */ static setI18nTextLabel(gLabel: fgui.GTextField | fgui.GRichTextField | fgui.GLabel | fgui.GButton, key: string, ...args: any[]) { let str = I18n.getI18nText(key, ...args); this.setLabel(gLabel, str); } static setLabel(gLabel: fgui.GTextField | fgui.GRichTextField | fgui.GLabel | fgui.GButton, str: string) { // gLabel.node.getComponent(cc.Label).cacheMode = cc.Label.CacheMode.CHAR; if (gLabel instanceof fgui.GTextField || gLabel instanceof fgui.GRichTextField) { gLabel.text = str; } else if (gLabel instanceof fgui.GLabel || gLabel instanceof fgui.GButton) { gLabel.title = str; } } /** 动态加载组件 */ static LoadComp(parent: fairygui.GComponent, bundleName: string, pkgName: string, resName: string, userClass: new () => fgui.GObject, onComplete: (comp: fairygui.GObject) => void) { let resGComp = parent.node.getComponent(ResGComponent); if (!resGComp) resGComp = parent.node.addComponent(ResGComponent); resGComp.LoadComp(bundleName, pkgName, resName, userClass, (comp: fairygui.GObject) => { onComplete(comp); }); } }