﻿using UnityEngine;
using System.Collections.Generic;

namespace Comm.Shoot
{
    public class ObjectPool : Singleton<ObjectPool>
    {
        public ObjectPool()
        {
            pool = new Dictionary<string, List<GameObject>>();
        }

        public void Reset()
        {
            foreach (var item in pool)
            {
                foreach (var value in item.Value)
                {
                    GameObject.Destroy(value);
                }
            }
            pool.Clear();
        }

        private Dictionary<string, List<GameObject>> pool;

        public GameObject SpawnObject(GameObject prefab, Transform traParent)
        {
            GameObject needObj;

            if (pool.ContainsKey(prefab.name) && pool[prefab.name].Count > 0)
            {
                needObj = pool[prefab.name][0];
                pool[prefab.name].RemoveAt(0);
            }
            else
            {
                needObj = GameObject.Instantiate(prefab, traParent);
                needObj.name = prefab.name;
            }
            needObj.transform.localPosition = Vector3.zero;
            needObj.transform.rotation = Quaternion.identity;
            needObj.SetActive(true);
            return needObj;
        }

        public void RecycleObj(GameObject Objname)
        {
            Objname.SetActive(false);
            if (pool.ContainsKey(Objname.name))
            {
                pool[Objname.name].Add(Objname);
            }
            else
            {
                pool.Add(Objname.name, new List<GameObject> { Objname });
            }
        }
    }
}
