Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
ObjectPool.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3using UnityEngine.Events;
4
5public class ObjectPool<T> where T : new()
6{
7 private readonly Stack<T> m_Stack = new Stack<T>();
8
9 private readonly UnityAction<T> m_ActionOnGet;
10
11 private readonly UnityAction<T> m_ActionOnRelease;
12
13 public int countAll { get; private set; }
14
16
17 public int countInactive => m_Stack.Count;
18
19 public ObjectPool(UnityAction<T> actionOnGet, UnityAction<T> actionOnRelease)
20 {
21 m_ActionOnGet = actionOnGet;
22 m_ActionOnRelease = actionOnRelease;
23 }
24
25 public T Get()
26 {
27 T val;
28 if (m_Stack.Count == 0)
29 {
30 val = new T();
31 countAll++;
32 }
33 else
34 {
35 val = m_Stack.Pop();
36 }
37 if (m_ActionOnGet != null)
38 {
39 m_ActionOnGet(val);
40 }
41 return val;
42 }
43
44 public void Release(T element)
45 {
46 if (m_Stack.Count > 0 && (object)m_Stack.Peek() == (object)element)
47 {
48 Debug.LogError("Internal error. Trying to destroy object that is already released to pool.");
49 }
50 if (m_ActionOnRelease != null)
51 {
52 m_ActionOnRelease(element);
53 }
54 m_Stack.Push(element);
55 }
56}
readonly UnityAction< T > m_ActionOnGet
Definition: ObjectPool.cs:9
int countActive
Definition: ObjectPool.cs:15
readonly Stack< T > m_Stack
Definition: ObjectPool.cs:7
readonly UnityAction< T > m_ActionOnRelease
Definition: ObjectPool.cs:11
int countAll
Definition: ObjectPool.cs:13
ObjectPool(UnityAction< T > actionOnGet, UnityAction< T > actionOnRelease)
Definition: ObjectPool.cs:19
void Release(T element)
Definition: ObjectPool.cs:44
int countInactive
Definition: ObjectPool.cs:17