ResRecycle.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. var t = require;
  2. var e = module;
  3. var i = exports;
  4. Object.defineProperty(i, "__esModule", {value: !0}), (i.ResRecycle = void 0);
  5. const o = t("App"),
  6. a = "_global_tag_";
  7. class s {
  8. constructor() {
  9. (this.texturesToClean = {}),
  10. (this.assets = {}),
  11. (this.urlRef = {}),
  12. (this.urlsToClean = {}),
  13. (this._isAutoRelease = !1);
  14. }
  15. addUrl(t, e = a) {
  16. this.urlRef[t] ? this.urlRef[t]++ : (this.urlRef[t] = 1),
  17. this.urlsToClean[e]
  18. ? this.urlsToClean[e].includes(t) || this.urlsToClean[e].push(t)
  19. : (this.urlsToClean[e] = [t]);
  20. }
  21. decRefByUrl(t, e) {
  22. var i;
  23. !this.urlsToClean[e] ||
  24. (-1 < (i = this.urlsToClean[e].indexOf(t)) &&
  25. (this.urlsToClean[e].splice(i, 1),
  26. this.urlRef[t]--,
  27. this.urlRef[t] <= 0 && (delete this.urlRef[t], o.default.ResManager.releaseAsset(t, cc.SpriteFrame))));
  28. }
  29. clearUrlByTag(t = a) {
  30. var e = this.urlsToClean[t];
  31. if (e) {
  32. delete this.urlsToClean[t];
  33. var i = e.length;
  34. for (let t = 0; t < i; t++) {
  35. var s = e[t];
  36. this.urlRef[s]--, this.urlRef[s] <= 0 && o.default.ResManager.releaseAsset(s, cc.SpriteFrame);
  37. }
  38. }
  39. }
  40. addRef(t) {
  41. this.assets[t._uuid]
  42. ? this.assets[t._uuid].refCount++
  43. : (t.addRef(), (this.assets[t._uuid] = {asset: t, refCount: 1}));
  44. }
  45. clearAssets() {
  46. for (const t in this.assets)
  47. this.assets[t].refCount <= 0 && (this.assets[t].asset.decRef(), delete this.assets[t]);
  48. }
  49. decRef(t) {
  50. this.assets[t._uuid] && this.assets[t._uuid].refCount--;
  51. }
  52. startAutoRelease() {
  53. this.clearAssets(), this._isAutoRelease || o.default.TimerManager.doTimer(3e4, 0, this.clearAssets, this);
  54. }
  55. static getInstance() {
  56. let t = s.__instance;
  57. return (t = t || (s.__instance = new s())), t;
  58. }
  59. destroy() {
  60. this.cleanupAll(), (s.__instance = null);
  61. }
  62. addTexture(t, e = a) {
  63. if (t) {
  64. const i = (this.texturesToClean[e] = this.texturesToClean[e] || {}),
  65. s = String(t._uuid);
  66. (i[s] = t), cc.log(1, "add", e, t.loaded, s.substring(0, 8));
  67. }
  68. }
  69. addSpriteFrame(t, e) {
  70. t && t.isValid && (t = t.getTexture()) && this.addTexture(t, e);
  71. }
  72. addSprite(t, e) {
  73. t.spriteFrame && this.addSpriteFrame(t.spriteFrame, e);
  74. }
  75. addNode(t, e) {
  76. if (t) {
  77. const i = t.getComponent(cc.Sprite);
  78. if (i && i.isValid) {
  79. const t = i.spriteFrame;
  80. t && t.isValid && ((i.spriteFrame = null), (i.spriteFrame = t), this.addSpriteFrame(t, e));
  81. }
  82. }
  83. }
  84. removeTexture(t, e = a) {
  85. if (t && this.texturesToClean) {
  86. const i = this.texturesToClean[e];
  87. i && delete i[t._uuid];
  88. }
  89. }
  90. removeSpriteFrame(t, e) {
  91. t && t.isValid && (t = t.getTexture()) && this.removeTexture(t, e);
  92. }
  93. removeSprite(t, e) {
  94. t.spriteFrame && this.removeSpriteFrame(t.spriteFrame, e);
  95. }
  96. removeNode(t, e) {
  97. if (t) {
  98. t = t.getComponent(cc.Sprite);
  99. if (t && t.isValid) {
  100. const i = t.spriteFrame;
  101. i && i.isValid && this.removeSpriteFrame(i, e);
  102. }
  103. }
  104. }
  105. cleanup(t = a) {
  106. if (this.texturesToClean) {
  107. var e = this.texturesToClean[t];
  108. if (e) {
  109. for (const s in e) {
  110. var i = e[s];
  111. i.loaded
  112. ? (cc.log(2, "clean", t, i.loaded, s.substring(0, 8)), this.cleanupImageCache(i))
  113. : console.warn(3, "cleanup", t, i.loaded, s.substring(0, 8));
  114. }
  115. delete this.texturesToClean[t];
  116. }
  117. }
  118. }
  119. cleanupImageCache(t) {
  120. (t.loaded = !1),
  121. t._image && (t._cleanupImageCache(), (t._image = null)),
  122. t._texture && (t._texture.destroy(), (t._texture = null));
  123. }
  124. cleanupAll() {
  125. if (this.texturesToClean) {
  126. for (const t in this.texturesToClean) this.cleanup(t);
  127. this.texturesToClean = null;
  128. }
  129. }
  130. }
  131. i.ResRecycle = s;