Files
fc/dev/project/library/imports/1f/1fc2efae-f392-492d-9cfe-19ddb6b13948.js
T
2026-05-24 10:21:26 +08:00

246 lines
5.8 KiB
JavaScript

"use strict";
cc._RF.push(module, '1fc2e+u85JJLZz+Gd22sTlI', 'nx.assets');
// Scripts/nx/kernel/nx.assets.js
"use strict";
/*******************************************************************************
*
* Nx 资源缓存
*
*
*
* 2021.12.10
******************************************************************************/
var NxObject = require("nx.object");
// 常驻目录:基础
var ResidentBase = ["coms"];
// 常驻目录:图片
var ResidentImages = ["resDB/icons"];
// 常驻目录:动画
var ResidentSpines = [];
// 常驻目录:预制体
var ResidentPrefabs = ["prefab/bag", "prefab/battle", "prefab/chat", "prefab/home", "prefab/mainui", "prefab/partner", "prefab/popup", "prefab/push", "prefab/shop", "prefab/summon", "prefab/task"];
var NxAssets = cc.Class({
"extends": NxObject,
name: "NxAssets",
// 初始化
initialize: function initialize(_args) {
// USPER
if (!this._super(_args)) {
return false;
}
// 全局服务开启
nx.assets = this;
// 资产缓存表
this.caches = {};
// 常驻资产表
this.residents = {};
return true;
},
// 销毁
uninitialize: function uninitialize() {
// 全局服务关闭
nx.assets = null;
// USPER
return this._super();
},
/**************************************************************
* 资产管理
/*************************************************************/
// 资产查询
queryAsset: function queryAsset(_uid) {
return this.caches[_uid];
},
// 资产缓存
cacheAsset: function cacheAsset(_asset, _skey) {
// 无效资产
if (!(_asset instanceof cc.Asset)) {
return;
}
// 资产ID无效
var uid = _skey || _asset._uuid;
if (nx.dt.strEmpty(uid)) {
nx.error("[资产]缓存失败,资产ID无效!");
return;
}
// 缓存+1
_asset.addRef();
this.caches[uid] = _asset;
//nx.debug( "[资产]缓存资产[REF:%d]:{%s}", _asset.refCount, uid );
// 压入常驻
this.pushResident(_skey, _asset);
},
// 资产释放
uncacheAsset: function uncacheAsset(_assetOrUid) {
// UUID
if (nx.dt.strNEmpty(_assetOrUid)) {
var key = _assetOrUid;
var asset = this.caches[key];
if (!asset) {
for (var k in this.caches) {
if (this.caches[k]._uuid == key) {
asset = this.caches[k];
key = k;
break;
}
}
return;
}
// 释放-1
asset.decRef();
//nx.debug( "[资产]资产释放[REF:%d]:{%s}", asset.refCount, key );
if (asset.refCount == 0) {
delete this.caches[key];
delete this.residents[key];
}
return;
}
// 资产
if (_assetOrUid instanceof cc.Asset) {
// 资产ID无效
var _key = _assetOrUid._uuid;
for (var _k in this.caches) {
if (this.caches[_k]._uuid == _key) {
_key = _k;
break;
}
}
if (nx.dt.strEmpty(_key)) {
nx.error("[资产]释放失败,资产ID无效!");
return;
}
// 释放-1
_assetOrUid.decRef();
if (_assetOrUid.refCount == 0) {
delete this.caches[_key];
delete this.residents[_key];
}
//nx.debug( "[资产]释放资产[REF:%d]:{%s}", _assetOrUid.refCount, key );
}
},
// 资源全释放
uncacheAssets: function uncacheAssets(_resident) {
if (_resident === void 0) {
_resident = false;
}
// 常驻清理
if (_resident) {
this.clearResidents();
}
// 其余清理
for (var key in this.caches) {
var asset = this.caches[key];
if (!asset) {
continue;
}
asset.decRef();
if (asset.refCount > 0) {
nx.warn("[资产]释放未完全[REF:%d]:{%s}", asset.refCount, key);
}
}
this.caches = {};
},
/**************************************************************
* 常驻资产管理
/*************************************************************/
// 获取常驻
queryResident: function queryResident(_skey) {
var res = this.residents[_skey];
return res;
},
// 是否可常驻
canResident: function canResident(_skey, _asset) {
// 通用目录
for (var i in ResidentBase) {
if (_skey.indexOf(ResidentBase[i]) >= 0) {
return true;
}
}
// 类型目录
var list = null;
if (_asset instanceof cc.SpriteFrame) {
list = ResidentImages;
} else if (_asset instanceof sp.SkeletonData) {
list = ResidentSpines;
} else if (_asset instanceof cc.Prefab) {
list = ResidentPrefabs;
}
for (var _i in list) {
if (_skey.indexOf(list[_i]) >= 0) {
return true;
}
}
return false;
},
// 压入常驻
pushResident: function pushResident(_skey, _asset) {
// 已经存在
var old = this.queryResident(_skey);
if (old) {
return true;
}
// 无效
if (nx.dt.strEmpty(_skey) || !_asset) {
return false;
}
// 加入常驻表
var good = this.canResident(_skey, _asset);
if (good) {
_asset.addRef();
this.residents[_skey] = _asset;
}
return good;
},
// 常驻清理
clearResidents: function clearResidents() {
for (var key in this.residents) {
var res = this.residents[key];
if (res) {
res.decRef();
}
}
this.residents = {};
},
/**************************************************************
* 资产调试
/*************************************************************/
// 缓存打印
dumpAssets: function dumpAssets() {
//nx.debug( "[资产]当前缓存资产:" )
for (var uuid in this.caches) {
var asset = this.caches[uuid];
if (asset) {
//nx.debug( "\t\t[REF:%d]:%s", asset.refCount, uuid );
}
}
}
});
// 模块导出
module.exports = NxAssets;
cc._RF.pop();