1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { _decorator, Component, instantiate, Node, NodePool, Prefab, resources } from 'cc';
- import { PropBase } from './Base/PropBase';
- import { FloorType } from '../AutoBuild';
- const { ccclass, property } = _decorator;
- @ccclass('ObjectPoolManager')
- export class ObjectPoolManager extends Component {
- private static _instance: ObjectPoolManager;
- @property({ type: Prefab })
- private prefabs: Prefab[] = [];
- private pools: { [key: string]: NodePool } = {};
- public static getInstance(): ObjectPoolManager {
- if (!ObjectPoolManager._instance) {
- const node = new Node('ObjectPoolManager');
- ObjectPoolManager._instance = node.addComponent(ObjectPoolManager);
- }
- return ObjectPoolManager._instance;
- }
- private prefabPath = [
- 'Prefabs/diban',
- 'Prefabs/dici',
- ]
- private initPoolNodeCount = [
- 3,//prefabPath 每个分别创建多少个
- 1,//prefabPath 每个分别创建多少个
- ]
- public async initializePools(): Promise<boolean> {
- return new Promise((resolve, reject) => {
- resources.load(this.prefabPath, (err, prefabs: Prefab[]) => {
- if (err) {
- console.error(err);
- reject(err);
- return;
- }
- prefabs.forEach(prefab => {
- this.prefabs.indexOf(prefab) == -1 && this.prefabs.push(prefab);
- })
- this.prefabs.forEach(prefab => {
- const prefabName = prefab.name;
- this.pools[prefabName] = new NodePool(PropBase);
- this.initPoolNodeCount.forEach((count) => {
- for (let index = 0; index < count; index++) {
- let temp = instantiate(prefab)
- temp.name = prefabName;
- this.pools[prefabName].put(temp);
- }
- })
- resolve(true);
- })
- });
- });
- }
- getNodeFromPool(prefabName: FloorType, ParentNode: Node): Node {
- let prefab = this.prefabs.filter(prefab => prefab.name == prefabName);
- if (!prefab) {
- debugger
- }
- console.error(this.pools[prefabName].size());
- if (this.pools[prefabName].size() == 0) {
- let temp = instantiate(prefab[0])
- temp.name = prefabName;
- this.putNodeToPool(temp)
- }
- return this.pools[prefabName].get(ParentNode);
- }
- putNodeToPool(node: Node) {
- this.pools[node.name].put(node);
- }
- }
|