Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
PoolManager.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3
4public class PoolManager : MonoBehaviour
5{
6 public class PoolGroup
7 {
8 public string id;
9
10 public Transform original;
11
12 public Transform holder;
13
14 public List<Transform> pooledList = new List<Transform>();
15
16 public PoolGroup(Transform original, PoolManager manager, string _id)
17 {
18 id = _id;
19 this.original = original;
20 holder = new GameObject().transform;
21 holder.SetParent(manager.transform);
22 holder.name = id;
23 }
24
25 public Transform Spawn(Transform parent)
26 {
27 Transform transform = null;
28 if (ignorePool)
29 {
30 transform = Object.Instantiate(original);
31 }
32 else if (pooledList.Count != 0)
33 {
34 transform = pooledList[pooledList.Count - 1];
35 pooledList.RemoveAt(pooledList.Count - 1);
36 }
37 else
38 {
39 transform = Object.Instantiate(original);
40 current.spawnedList[transform.GetHashCode()] = this;
41 }
42 if (Application.isEditor)
43 {
44 transform.SetAsLastSibling();
45 }
46 transform.SetParent(parent, worldPositionStays: false);
47 return transform;
48 }
49
50 public void Despawn(Transform trans)
51 {
52 trans.SetParent(holder, worldPositionStays: false);
53 pooledList.Add(trans);
54 }
55 }
56
57 public static PoolManager current;
58
59 public static Transform _trans;
60
61 public static bool ignorePool;
62
63 public Dictionary<string, PoolGroup> groups;
64
65 public Dictionary<int, PoolGroup> spawnedList;
66
67 private void Awake()
68 {
69 current = this;
70 _trans = base.transform;
71 spawnedList = new Dictionary<int, PoolGroup>();
72 groups = new Dictionary<string, PoolGroup>();
73 base.gameObject.SetActive(value: false);
74 }
75
76 public static T Spawn<T>(T original, Component parent = null) where T : Component
77 {
78 return current._Spawn(original.name, original.transform, parent?.transform).GetComponent<T>();
79 }
80
81 public static T Spawn<T>(string id, string path, Transform parent = null)
82 {
83 return current._Spawn(id, path, parent).GetComponent<T>();
84 }
85
86 public static Transform Spawn(string id, string path, Transform parent)
87 {
88 return current._Spawn(id, path, parent);
89 }
90
91 public static PoolGroup GetGroup(string id)
92 {
93 return current.groups[id];
94 }
95
96 private Transform _Spawn(string id, string path, Transform parent)
97 {
98 PoolGroup poolGroup = groups.TryGetValue(id);
99 if (poolGroup == null)
100 {
101 poolGroup = CreateGroup(id, path);
102 }
103 return poolGroup.Spawn(parent);
104 }
105
106 private Transform _Spawn(string id, Transform original, Transform parent)
107 {
108 PoolGroup poolGroup = groups.TryGetValue(id);
109 if (poolGroup == null)
110 {
111 poolGroup = CreateGroup(id, original);
112 }
113 return poolGroup.Spawn(parent);
114 }
115
116 public PoolGroup CreateGroup(string id, Transform original)
117 {
118 PoolGroup poolGroup = new PoolGroup(original, this, id);
119 groups.Add(id, poolGroup);
120 return poolGroup;
121 }
122
123 public PoolGroup CreateGroup(string id, string path)
124 {
125 return CreateGroup(id, Resources.Load<Transform>(path));
126 }
127
128 public static void Despawn(Component c)
129 {
130 if (Application.isPlaying)
131 {
132 if (ignorePool)
133 {
134 Object.Destroy(c.gameObject);
135 }
136 else
137 {
138 current.spawnedList[c.transform.GetHashCode()].Despawn(c.transform);
139 }
140 }
141 }
142
143 public static bool TryDespawn(Component c)
144 {
145 if (ignorePool)
146 {
147 return false;
148 }
149 PoolGroup poolGroup = current.spawnedList.TryGetValue(c.transform.GetHashCode());
150 if (poolGroup == null)
151 {
152 return false;
153 }
154 poolGroup.Despawn(c.transform);
155 return true;
156 }
157
158 public static void DespawnOrDestroy(Component c)
159 {
160 if (ignorePool || !TryDespawn(c))
161 {
162 Object.Destroy(c.gameObject);
163 }
164 }
165}
List< Transform > pooledList
Definition: PoolManager.cs:14
Transform Spawn(Transform parent)
Definition: PoolManager.cs:25
void Despawn(Transform trans)
Definition: PoolManager.cs:50
PoolGroup(Transform original, PoolManager manager, string _id)
Definition: PoolManager.cs:16
static void Despawn(Component c)
Definition: PoolManager.cs:128
static PoolManager current
Definition: PoolManager.cs:57
PoolGroup CreateGroup(string id, string path)
Definition: PoolManager.cs:123
static bool TryDespawn(Component c)
Definition: PoolManager.cs:143
static Transform _trans
Definition: PoolManager.cs:59
static T Spawn< T >(T original, Component parent=null)
Definition: PoolManager.cs:76
Transform _Spawn(string id, Transform original, Transform parent)
Definition: PoolManager.cs:106
static void DespawnOrDestroy(Component c)
Definition: PoolManager.cs:158
static PoolGroup GetGroup(string id)
Definition: PoolManager.cs:91
Dictionary< int, PoolGroup > spawnedList
Definition: PoolManager.cs:65
static bool ignorePool
Definition: PoolManager.cs:61
Transform _Spawn(string id, string path, Transform parent)
Definition: PoolManager.cs:96
Dictionary< string, PoolGroup > groups
Definition: PoolManager.cs:63
PoolGroup CreateGroup(string id, Transform original)
Definition: PoolManager.cs:116
static Transform Spawn(string id, string path, Transform parent)
Definition: PoolManager.cs:86
void Awake()
Definition: PoolManager.cs:67