99 lines
2.1 KiB
JavaScript
99 lines
2.1 KiB
JavaScript
"use strict";
|
|
cc._RF.push(module, '41117+0iv5BC5lK5gIb/eJZ', 'bridge.pool.manager');
|
|
// Scripts/zbridge/cmps/bridge.pool.manager.js
|
|
|
|
"use strict";
|
|
|
|
/******************************************************************
|
|
*
|
|
* 桥接对象池管理器
|
|
*
|
|
******************************************************************/
|
|
|
|
cc.Class({
|
|
"extends": cc.Component,
|
|
ctor: function ctor() {
|
|
this.pools = {};
|
|
},
|
|
onLoad: function onLoad() {
|
|
nx.pools = this;
|
|
this.clean();
|
|
},
|
|
onDestroy: function onDestroy() {
|
|
if (window.nx) {
|
|
nx.pools = null;
|
|
this.clean();
|
|
}
|
|
},
|
|
// 获取单池(通过Node节点)
|
|
getPool: function getPool(_key, _node, _initCount) {
|
|
if (_initCount === void 0) {
|
|
_initCount = 10;
|
|
}
|
|
// 存在返回
|
|
var pool = this.pools[_key];
|
|
if (pool) {
|
|
return pool;
|
|
}
|
|
|
|
// 新建无模板
|
|
if (!_node) {
|
|
nx.error("[\u5BF9\u8C61\u6C60]\u4E0D\u5B58\u5728" + _key + ",\u83B7\u53D6\u5931\u8D25!");
|
|
return null;
|
|
}
|
|
|
|
// Prefab实例化
|
|
if (_node instanceof cc.Prefab) {
|
|
_node = cc.instantiate(_node);
|
|
}
|
|
|
|
// 新建
|
|
pool = nx.factory.create("bridge.pool", {
|
|
key: _key,
|
|
prefab: _node,
|
|
count: _initCount
|
|
});
|
|
this.pools[_key] = pool;
|
|
return pool;
|
|
},
|
|
// 对象回收
|
|
put: function put(_node) {
|
|
if (!_node) {
|
|
return;
|
|
}
|
|
if (nx.dt.strEmpty(_node.poolKey)) {
|
|
nx.error("回收失败,没有关联池信息!");
|
|
_node.removeFromParent(true);
|
|
return;
|
|
}
|
|
|
|
// 池子不存在
|
|
var pool = this.pools[_node.poolKey];
|
|
if (!pool) {
|
|
nx.warn("[回收失败,没有关联池:", _node.poolKey);
|
|
_node.removeFromParent(true);
|
|
return;
|
|
}
|
|
|
|
// 回收
|
|
_node.position = cc.Vec2.ZERO;
|
|
pool.put(_node);
|
|
},
|
|
// 全子节点回收
|
|
putChildren: function putChildren(_node) {
|
|
var chds = _node.children;
|
|
while (chds.length > 0) {
|
|
this.put(chds[0]);
|
|
}
|
|
_node.removeAllChildren(false);
|
|
},
|
|
// 清理
|
|
clean: function clean() {
|
|
for (var k in this.pools) {
|
|
nx.factory.remove(this.pools[k]);
|
|
}
|
|
this.pools = {};
|
|
}
|
|
});
|
|
|
|
cc._RF.pop(); |