Skip to content

Commit 07c284d

Browse files
authored
Merge pull request #3 from ertanturan/Bugfix-1
Bugfix 1
2 parents 9abea58 + 9ea3269 commit 07c284d

File tree

8 files changed

+101
-104
lines changed

8 files changed

+101
-104
lines changed

.idea/.idea.Unity-Object-Pooling/.idea/contentModel.xml

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/.idea.Unity-Object-Pooling/.idea/indexLayout.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/.idea.Unity-Object-Pooling/.idea/workspace.xml

Lines changed: 19 additions & 33 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,42 @@
1-
using System.Collections;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using CustomTools.ObjectPooling.Scripts.ObjectPool;
43
using UnityEngine;
54
using Zenject;
65

7-
public class PoolSpawner : MonoBehaviour
6+
namespace CustomTools.ObjectPooling.DEMO
87
{
8+
public class PoolSpawner : MonoBehaviour
9+
{
910

10-
private List<IPooledObject> _cubes = new List<IPooledObject>();
11-
private ObjectPooler _pooler;
11+
private List<IPooledObject> _cubes = new List<IPooledObject>();
12+
private ObjectPooler _pooler;
1213

13-
[SerializeField] private Transform _spawnPosition;
14+
[SerializeField] private Transform _spawnPosition;
1415

15-
[Inject]
16-
private void Construct(ObjectPooler pooler)
17-
{
18-
_pooler = pooler;
19-
}
16+
[Inject]
17+
private void Construct(ObjectPooler pooler)
18+
{
19+
_pooler = pooler;
20+
}
2021

2122

22-
public void SpawnCube()
23-
{
24-
GameObject obj = _pooler.SpawnFromPool(PooledObjectType.Cube,
25-
_spawnPosition.position, Quaternion.identity);
23+
public void SpawnCube()
24+
{
25+
GameObject obj = _pooler.SpawnFromPool(PooledObjectType.Cube,
26+
_spawnPosition.position, Quaternion.identity);
2627

27-
_cubes.Add(obj.GetComponent<IPooledObject>());
28-
}
28+
_cubes.Add(obj.GetComponent<IPooledObject>());
29+
}
2930

30-
public void DespawnAnyCube()
31-
{
32-
if (_cubes.Count>0)
31+
public void DespawnAnyCube()
3332
{
33+
if (_cubes.Count>0)
34+
{
3435

35-
_cubes[0].Despawn();
36-
_cubes.RemoveAt(0);
36+
_cubes[0].Despawn();
37+
_cubes.RemoveAt(0);
38+
}
3739
}
38-
}
3940

41+
}
4042
}
Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
using CustomTools.ObjectPooling.Scripts.ObjectPool;
2-
using UnityEngine;
3-
using Zenject;
1+
using Zenject;
42

5-
public interface IPooledObject
3+
namespace CustomTools.ObjectPooling.Scripts.ObjectPool
64
{
7-
PooledObjectType PoolType { get; set; }
5+
public interface IPooledObject
6+
{
7+
PooledObjectType PoolType { get; set; }
88

9-
ObjectPooler Pooler { get; }
9+
ObjectPooler Pooler { get; }
1010

11-
[Inject]
12-
void Construct(ObjectPooler pooler);
13-
void OnObjectSpawn();
14-
void OnObjectDespawn();
15-
void Despawn();
11+
[Inject]
12+
void Construct(ObjectPooler pooler);
13+
void OnObjectSpawn();
14+
void OnObjectDespawn();
15+
void Despawn();
16+
}
1617
}

Assets/CustomTools/ObjectPooling/Scripts/ObjectPool/ObjectPooler.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ private void Start()
3636
PooledObject temp = obj.AddComponent<PooledObject>();
3737
iPool = temp;
3838
}
39+
3940
iPool.PoolType = _pool[j].Tag;
4041

4142

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

4647
_poolDictionary.Add(_pool[j].Tag, objectPool);
4748
}
48-
4949
}
5050

51-
public GameObject SpawnFromPool(PooledObjectType pooledObjectType, Vector3 pos, Quaternion rot, GameObject parent = null)
51+
public GameObject SpawnFromPool(PooledObjectType pooledObjectType, Vector3 pos, Quaternion rot,
52+
GameObject parent = null)
5253
{
53-
5454
if (!_poolDictionary.ContainsKey(pooledObjectType))
5555
{
5656
Debug.LogWarning("PoolObjects with Tag " + pooledObjectType + " doesn't exist ..");
@@ -93,28 +93,28 @@ public void Despawn(GameObject obj)
9393
{
9494
PooledObjectType pooledObjectType = obj.GetComponent<IPooledObject>().PoolType;
9595

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

100100

101+
if (isThereAnyQueuedObjectByTheTag && !isObjectAlreadyDespawned)
102+
{
101103
_poolDictionary[pooledObjectType].Enqueue(obj);
102104

103105
IPooledObject iPooledObj = obj.GetComponent<IPooledObject>();
104106
if (iPooledObj != null)
105107
{
106108
iPooledObj.OnObjectDespawn();
107109
}
110+
108111
obj.transform.SetParent(_poolMasters[pooledObjectType]);
109112
obj.SetActive(false);
110-
111-
112113
}
113114
else
114115
{
115116
Debug.LogError("Trying to despawn object which is not pooled or object is already despawned !");
116117
}
117-
118118
}
119119

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

141141
iInitializable?.Init();
142-
142+
143143
iPooledObj.OnObjectSpawn();
144144

145145

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

151151
return objToAdd;
152152
}
153-
154153
}
155154
}
Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,35 @@
1-
using CustomTools.ObjectPooling.Scripts.ObjectPool;
2-
using UnityEngine;
1+
using UnityEngine;
32
using Zenject;
43

5-
public class PooledObject : MonoBehaviour, IPooledObject
4+
namespace CustomTools.ObjectPooling.Scripts.ObjectPool
65
{
6+
public class PooledObject : MonoBehaviour, IPooledObject
7+
{
78

8-
public PooledObjectType PoolType { get; set; }
9-
public ObjectPooler Pooler { get; private set; }
9+
public PooledObjectType PoolType { get; set; }
10+
public ObjectPooler Pooler { get; private set; }
1011

11-
[Inject]
12-
public virtual void Construct(ObjectPooler pooler)
13-
{
14-
Debug.Log("construct");
15-
16-
Debug.Log(pooler);
17-
Pooler = pooler;
18-
}
12+
[Inject]
13+
public virtual void Construct(ObjectPooler pooler)
14+
{
15+
Pooler = pooler;
16+
}
1917

20-
public virtual void OnObjectSpawn()
21-
{
18+
public virtual void OnObjectSpawn()
19+
{
2220

23-
}
21+
}
2422

25-
public virtual void OnObjectDespawn()
26-
{
23+
public virtual void OnObjectDespawn()
24+
{
2725

28-
}
26+
}
2927

30-
public void Despawn()
31-
{
32-
Pooler.Despawn(gameObject);
33-
}
28+
public void Despawn()
29+
{
30+
Pooler.Despawn(gameObject);
31+
}
3432

3533

34+
}
3635
}

Assets/Resources.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)