ResHelper.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { AppKernel } from "@scripts/app/AppKernel";
  2. import { AssetSlot } from "@scripts/components/AssetSlot";
  3. import { BUNDLE_ID } from "@scripts/define/ResDefine";
  4. import { isValid, Sprite, SpriteFrame, UITransform } from "cc";
  5. import { ImgFitMode, setSpriteFitMode } from "./UIHelper";
  6. const GoodsIconRes = "common/goodsIcon/img_icon";
  7. interface ISetSpriteOptions {
  8. bundle?: string;
  9. fitMode?: ImgFitMode;
  10. onCheck?: () => boolean;
  11. }
  12. /**
  13. * 动态加载spriteFrame path和bundle都是空 则为sprite.spriteFrame = null;
  14. * @param sprite
  15. * @param path
  16. * @param bundle
  17. * @returns
  18. */
  19. export async function setSpriteFrame(sprite: Sprite, path?: string, optins?: ISetSpriteOptions) {
  20. const node = sprite.node;
  21. const bundle = optins?.bundle;
  22. const fitMode = optins?.fitMode;
  23. const onCheck = optins?.onCheck;
  24. const slot = node.getComponent(AssetSlot) || node.addComponent(AssetSlot);
  25. if (!path) {
  26. slot.changeAsset(null);
  27. sprite.spriteFrame = null;
  28. return;
  29. }
  30. let res: SpriteFrame = null;
  31. const resources = AppKernel.resources;
  32. if (path.startsWith("http")) {
  33. res = await resources.loadRemoteSp(path);
  34. } else {
  35. if (!path.endsWith("/spriteFrame")) path += "/spriteFrame";
  36. res = await resources.load(bundle || BUNDLE_ID.Lobby, path, SpriteFrame);
  37. }
  38. if (!res) return;
  39. if (!isValid(sprite)) {
  40. resources.releaseRes(res);
  41. return;
  42. }
  43. if (onCheck && !onCheck()) return;
  44. res.addRef();
  45. sprite.spriteFrame = res;
  46. setSpriteFitMode(sprite, fitMode);
  47. slot.changeAsset(res);
  48. return res;
  49. }
  50. export async function setOriginalSp(sprite: Sprite, path?: string) {
  51. if (!path) {
  52. return;
  53. }
  54. let res: SpriteFrame = null;
  55. const resources = AppKernel.resources;
  56. if (path.startsWith("http")) {
  57. res = await resources.loadRemoteSp(path);
  58. } else {
  59. if (!path.endsWith("/spriteFrame")) path += "/spriteFrame";
  60. res = await resources.load(BUNDLE_ID.Lobby, path, SpriteFrame);
  61. }
  62. // cb && cb(res);
  63. sprite.spriteFrame = res;
  64. sprite.getComponent(UITransform).width = res.originalSize.width;
  65. sprite.getComponent(UITransform).height = res.originalSize.height;
  66. }
  67. export async function setGoodsIcon(sprite: Sprite, type: number, isGCOnly = false) {
  68. const iconPath = isGCOnly ? `${GoodsIconRes}gc` : `${GoodsIconRes}${type}`;
  69. return setSpriteFrame(sprite, `${iconPath}`);
  70. }