74 lines
2.0 KiB
C#
74 lines
2.0 KiB
C#
using UnityEngine;
|
|
|
|
namespace OctoberStudio.Pool
|
|
{
|
|
public class PoolComponent<T> : Pool<T> where T : Component
|
|
{
|
|
private GameObject prefab;
|
|
private Transform parent;
|
|
private bool dontDestroyOnLoad;
|
|
|
|
public PoolComponent(string name, GameObject prefab, int startingSize, Transform parent = null, bool dontDestroyOnLoad = false) : base(name, startingSize)
|
|
{
|
|
this.prefab = prefab;
|
|
this.parent = parent;
|
|
this.dontDestroyOnLoad = dontDestroyOnLoad;
|
|
|
|
for (int i = 0; i <= startingSize; i++)
|
|
{
|
|
AddNewEntity();
|
|
}
|
|
}
|
|
|
|
public PoolComponent(GameObject prefab, int startingSize, Transform parent = null, bool dontDestroyOnLoad = false) : base(prefab.name, startingSize)
|
|
{
|
|
this.prefab = prefab;
|
|
this.parent = parent;
|
|
this.dontDestroyOnLoad = dontDestroyOnLoad;
|
|
|
|
for (int i = 0; i <= startingSize; i++)
|
|
{
|
|
AddNewEntity();
|
|
}
|
|
}
|
|
|
|
protected override T CreateEntity()
|
|
{
|
|
var entity = Object.Instantiate(prefab, parent).GetComponent<T>();
|
|
if(dontDestroyOnLoad && parent == null)
|
|
{
|
|
Object.DontDestroyOnLoad(entity.gameObject);
|
|
}
|
|
return entity;
|
|
}
|
|
|
|
protected override void InitEntity(T entity)
|
|
{
|
|
entity.gameObject.SetActive(false);
|
|
}
|
|
|
|
protected override bool ValidateEntity(T entity)
|
|
{
|
|
return !entity.gameObject.activeSelf;
|
|
}
|
|
|
|
public override T GetEntity()
|
|
{
|
|
var entity = base.GetEntity();
|
|
|
|
entity.gameObject.SetActive(true);
|
|
|
|
return entity;
|
|
}
|
|
|
|
protected override void DisableEntity(T entity)
|
|
{
|
|
entity.gameObject.SetActive(false);
|
|
}
|
|
|
|
protected override void DestroyEntity(T entity)
|
|
{
|
|
if(entity != null) Object.Destroy(entity.gameObject);
|
|
}
|
|
}
|
|
} |