-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathObjectPool.cs
More file actions
82 lines (73 loc) · 2.3 KB
/
ObjectPool.cs
File metadata and controls
82 lines (73 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
namespace ObjectPoolExample
{
internal class ObjectPool<T> where T : GameObject
{
T prefab;
bool autoExpand = false;
List<T> pool;
GameObject container = null;
public ObjectPool(T _prefab, int _count, bool _autoExpand = false)
{
prefab = _prefab;
autoExpand = _autoExpand;
CreatePool(_count);
}
public ObjectPool(T _prefab, int _count, GameObject _container, bool _autoExpand = false)
{
prefab = _prefab;
autoExpand = _autoExpand;
container = _container;
CreatePool(_count);
}
public void CreatePool(int _count)
{
pool = new List<T>();
for (int i = 0; i < _count; i++)
{
CreateObject(false);
}
}
private T CreateObject(bool _activeSelf)
{
var obj = (T)new GameObject(prefab);
obj.SetActive(_activeSelf);
obj.SetParent(container);
pool.Add(obj);
return obj;
}
public T GetFreeElement()
{
var gameObject = pool.Find(x => x.activeSelf == false);
if(gameObject != null)
{
gameObject.SetActive(true);
return gameObject;
}
if(autoExpand)
{
return CreateObject(true);
}
Console.WriteLine($"[ERROR] - Pool don't have any other free elements of {typeof(T).Name}");
return null;
}
public override string ToString()
{
var stringBuilder = new StringBuilder();
stringBuilder.AppendLine("Active Elements:");
var activeObjects = pool.FindAll(x => x.activeSelf == true);
foreach (T obj in activeObjects)
{
stringBuilder.AppendLine(obj.ToString());
}
stringBuilder.AppendLine($"Count of active objects: {activeObjects.Count}");
stringBuilder.AppendLine($"Total count objects: {pool.Count}");
return stringBuilder.ToString();
}
}
}