BGJ-2022.1/Assets/Scripts/AI/ProjectilePool.cs

57 lines
1.4 KiB
C#
Raw Normal View History

2022-02-22 11:25:25 +03:00
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);
}
}
}