Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .idea/.idea.Unity-Object-Pooling/.idea/contentModel.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions .idea/.idea.Unity-Object-Pooling/.idea/indexLayout.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

52 changes: 19 additions & 33 deletions .idea/.idea.Unity-Object-Pooling/.idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 25 additions & 23 deletions Assets/CustomTools/ObjectPooling/DEMO/PoolSpawner.cs
Original file line number Diff line number Diff line change
@@ -1,40 +1,42 @@
using System.Collections;
using System.Collections.Generic;
using System.Collections.Generic;
using CustomTools.ObjectPooling.Scripts.ObjectPool;
using UnityEngine;
using Zenject;

public class PoolSpawner : MonoBehaviour
namespace CustomTools.ObjectPooling.DEMO
{
public class PoolSpawner : MonoBehaviour
{

private List<IPooledObject> _cubes = new List<IPooledObject>();
private ObjectPooler _pooler;
private List<IPooledObject> _cubes = new List<IPooledObject>();
private ObjectPooler _pooler;

[SerializeField] private Transform _spawnPosition;
[SerializeField] private Transform _spawnPosition;

[Inject]
private void Construct(ObjectPooler pooler)
{
_pooler = pooler;
}
[Inject]
private void Construct(ObjectPooler pooler)
{
_pooler = pooler;
}


public void SpawnCube()
{
GameObject obj = _pooler.SpawnFromPool(PooledObjectType.Cube,
_spawnPosition.position, Quaternion.identity);
public void SpawnCube()
{
GameObject obj = _pooler.SpawnFromPool(PooledObjectType.Cube,
_spawnPosition.position, Quaternion.identity);

_cubes.Add(obj.GetComponent<IPooledObject>());
}
_cubes.Add(obj.GetComponent<IPooledObject>());
}

public void DespawnAnyCube()
{
if (_cubes.Count>0)
public void DespawnAnyCube()
{
if (_cubes.Count>0)
{

_cubes[0].Despawn();
_cubes.RemoveAt(0);
_cubes[0].Despawn();
_cubes.RemoveAt(0);
}
}
}

}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
using CustomTools.ObjectPooling.Scripts.ObjectPool;
using UnityEngine;
using Zenject;
using Zenject;

public interface IPooledObject
namespace CustomTools.ObjectPooling.Scripts.ObjectPool
{
PooledObjectType PoolType { get; set; }
public interface IPooledObject
{
PooledObjectType PoolType { get; set; }

ObjectPooler Pooler { get; }
ObjectPooler Pooler { get; }

[Inject]
void Construct(ObjectPooler pooler);
void OnObjectSpawn();
void OnObjectDespawn();
void Despawn();
[Inject]
void Construct(ObjectPooler pooler);
void OnObjectSpawn();
void OnObjectDespawn();
void Despawn();
}
}
21 changes: 10 additions & 11 deletions Assets/CustomTools/ObjectPooling/Scripts/ObjectPool/ObjectPooler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ private void Start()
PooledObject temp = obj.AddComponent<PooledObject>();
iPool = temp;
}

iPool.PoolType = _pool[j].Tag;


Expand All @@ -45,12 +46,11 @@ private void Start()

_poolDictionary.Add(_pool[j].Tag, objectPool);
}

}

public GameObject SpawnFromPool(PooledObjectType pooledObjectType, Vector3 pos, Quaternion rot, GameObject parent = null)
public GameObject SpawnFromPool(PooledObjectType pooledObjectType, Vector3 pos, Quaternion rot,
GameObject parent = null)
{

if (!_poolDictionary.ContainsKey(pooledObjectType))
{
Debug.LogWarning("PoolObjects with Tag " + pooledObjectType + " doesn't exist ..");
Expand Down Expand Up @@ -93,28 +93,28 @@ public void Despawn(GameObject obj)
{
PooledObjectType pooledObjectType = obj.GetComponent<IPooledObject>().PoolType;

if (_poolDictionary.ContainsKey(pooledObjectType) && // check if there's a queued objects by that tag.
_poolDictionary[pooledObjectType].Contains(gameObject)) // check if `obj` is already despawned
{
bool isThereAnyQueuedObjectByTheTag = _poolDictionary.ContainsKey(pooledObjectType);

bool isObjectAlreadyDespawned = _poolDictionary[pooledObjectType].Contains(gameObject);


if (isThereAnyQueuedObjectByTheTag && !isObjectAlreadyDespawned)
{
_poolDictionary[pooledObjectType].Enqueue(obj);

IPooledObject iPooledObj = obj.GetComponent<IPooledObject>();
if (iPooledObj != null)
{
iPooledObj.OnObjectDespawn();
}

obj.transform.SetParent(_poolMasters[pooledObjectType]);
obj.SetActive(false);


}
else
{
Debug.LogError("Trying to despawn object which is not pooled or object is already despawned !");
}

}

private GameObject ExpandPool(PooledObjectType pooledObjectType, Vector3 pos, Quaternion rot)
Expand All @@ -139,7 +139,7 @@ private GameObject ExpandPool(PooledObjectType pooledObjectType, Vector3 pos, Qu
IObjectPoolInitializable iInitializable = objToAdd.GetComponent<IObjectPoolInitializable>();

iInitializable?.Init();

iPooledObj.OnObjectSpawn();


Expand All @@ -150,6 +150,5 @@ private GameObject ExpandPool(PooledObjectType pooledObjectType, Vector3 pos, Qu

return objToAdd;
}

}
}
45 changes: 22 additions & 23 deletions Assets/CustomTools/ObjectPooling/Scripts/ObjectPool/PooledObject.cs
Original file line number Diff line number Diff line change
@@ -1,36 +1,35 @@
using CustomTools.ObjectPooling.Scripts.ObjectPool;
using UnityEngine;
using UnityEngine;
using Zenject;

public class PooledObject : MonoBehaviour, IPooledObject
namespace CustomTools.ObjectPooling.Scripts.ObjectPool
{
public class PooledObject : MonoBehaviour, IPooledObject
{

public PooledObjectType PoolType { get; set; }
public ObjectPooler Pooler { get; private set; }
public PooledObjectType PoolType { get; set; }
public ObjectPooler Pooler { get; private set; }

[Inject]
public virtual void Construct(ObjectPooler pooler)
{
Debug.Log("construct");

Debug.Log(pooler);
Pooler = pooler;
}
[Inject]
public virtual void Construct(ObjectPooler pooler)
{
Pooler = pooler;
}

public virtual void OnObjectSpawn()
{
public virtual void OnObjectSpawn()
{

}
}

public virtual void OnObjectDespawn()
{
public virtual void OnObjectDespawn()
{

}
}

public void Despawn()
{
Pooler.Despawn(gameObject);
}
public void Despawn()
{
Pooler.Despawn(gameObject);
}


}
}
8 changes: 8 additions & 0 deletions Assets/Resources.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.