57 lines
1.4 KiB
C#
57 lines
1.4 KiB
C#
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace AI
|
||
|
{
|
||
|
public class ProjectilePool : MonoBehaviour
|
||
|
{
|
||
|
private static ProjectilePool _instance = null;
|
||
|
public static ProjectilePool Instance
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if (_instance == null)
|
||
|
{
|
||
|
GameObject go = new GameObject(typeof(ProjectilePool).Name);
|
||
|
_instance = go.AddComponent<ProjectilePool>();
|
||
|
}
|
||
|
return _instance;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Stack<Projectile> pool = null;
|
||
|
private GameObject prefab;
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
if (_instance != this && _instance != null)
|
||
|
{
|
||
|
Destroy(this);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
pool = new Stack<Projectile>(64);
|
||
|
prefab = Resources.Load<GameObject>("Projectiles/Basic Projectile");
|
||
|
}
|
||
|
|
||
|
public Projectile Get()
|
||
|
{
|
||
|
Projectile projectile = null;
|
||
|
pool.TryPop(out projectile);
|
||
|
|
||
|
if (projectile == null)
|
||
|
projectile = Instantiate(prefab).GetComponent<Projectile>();
|
||
|
|
||
|
projectile.gameObject.SetActive(true);
|
||
|
|
||
|
return projectile;
|
||
|
}
|
||
|
|
||
|
public void Return(Projectile projectile)
|
||
|
{
|
||
|
projectile.gameObject.SetActive(false);
|
||
|
pool.Push(projectile);
|
||
|
}
|
||
|
}
|
||
|
}
|