import { _decorator, Component, instantiate, Node, NodePool, Pool, Prefab } from 'cc';
import { resMgr } from '../../../Frames/ResourcesMgr';
const { ccclass, property } = _decorator;

@ccclass('BulletPool')
export class BulletPool extends Component{
    private _bulletPrefab: Prefab = null;
    private _enemyBulletPrefab: Prefab = null;

    private _bulletPool: NodePool = new NodePool();
    private _enemyBulletPool: NodePool = new NodePool();

    init() {
        this._bulletPrefab = resMgr.getPrefab("Bullet");
        this._enemyBulletPrefab = resMgr.getPrefab("BulletEnemy");
        this._initPool(this._bulletPool, this._bulletPrefab, 10);
        this._initPool(this._enemyBulletPool, this._enemyBulletPrefab, 10);
    }

    private _initPool(pool: NodePool, prefab: Prefab, count: number) {
        for (let i = 0; i < count; i++) {
            const node = instantiate(prefab);
            pool.put(node);
        }
    }
    getBullet(isEnemy: boolean): Node {
        const pool = isEnemy ? this._enemyBulletPool : this._bulletPool;
        if(pool.size()>0){
            return pool.get()!;
        }else{
            //动态扩容
            const prefab = isEnemy ? this._enemyBulletPrefab: this._bulletPrefab;
            return instantiate(prefab);
        }
    }

    recycle(bullet: Node, isEnemy: boolean) {
        const pool = isEnemy ? this._enemyBulletPool : this._bulletPool;
        if(!pool) return;
        pool.put(bullet);
    }
}


