< Summary

Class:GDX.Collections.Pooling.GameObjectPool
Assembly:GDX
File(s):D:/BuildAgent/work/GDX-Documentation/Projects/GDX_Development/Packages/com.dotbunny.gdx/GDX/Collections/Pooling/GameObjectPool.cs
Covered lines:175
Uncovered lines:35
Coverable lines:210
Total lines:510
Line coverage:83.3% (175 of 210)
Covered branches:0
Total branches:0
Covered methods:15
Total methods:15
Method coverage:100% (15 of 15)

Coverage History

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CreatePool(...)0%110100%
Get(...)0%4.14081.82%
Get(...)0%6.256080.95%
Get(...)0%5.235078.95%
Get(...)0%5.235078.95%
Get(...)0%5.275077.78%
Get(...)0%5.335076.47%
Get(...)0%5.275077.78%
Get(...)0%5.235078.95%
GetOrCreatePool(...)0%2.152066.67%
CreateItem(...)0%220100%
OnDestroyItemAction(...)0%6.256080.95%
OnReturnedToPoolAction(...)0%440100%
OnSpawnedFromPoolAction(...)0%440100%
OnTearDownAction(...)0%110100%

File(s)

D:/BuildAgent/work/GDX-Documentation/Projects/GDX_Development/Packages/com.dotbunny.gdx/GDX/Collections/Pooling/GameObjectPool.cs

#LineLine coverage
 1// Copyright (c) 2020-2022 dotBunny Inc.
 2// dotBunny licenses this file to you under the BSL-1.0 license.
 3// See the LICENSE file in the project root for more information.
 4
 5#if !UNITY_DOTSRUNTIME
 6
 7using System.Runtime.CompilerServices;
 8using UnityEngine;
 9
 10namespace GDX.Collections.Pooling
 11{
 12    /// <summary>
 13    ///     <see cref="GameObject" /> based functionality extending the <see cref="SimpleListManagedPool" /> to better s
 14    ///     <see cref="GameObject" /> patterns.
 15    /// </summary>
 16    /// <exception cref="UnsupportedRuntimeException">Not supported on DOTS Runtime.</exception>
 17    [VisualScriptingCompatible(1)]
 18    public static class GameObjectPool
 19    {
 20        /// <summary>
 21        ///     The <see cref="SimpleListManagedPool" /> flags index used to determine if the object which is used to cr
 22        ///     has the <see cref="IGameObjectPoolItem" /> interface on a root component.
 23        /// </summary>
 24        const int k_HasInterfaceFlag = 5;
 25
 26        /// <summary>
 27        ///     Create a <see cref="GameObject" /> based <see cref="SimpleListManagedPool" /> for the provided
 28        ///     <paramref name="gameObject" />.
 29        /// </summary>
 30        /// <param name="gameObject">The object which going to be cloned.</param>
 31        /// <param name="parent">The container object.</param>
 32        /// <param name="minimumObjects">The minimum number of objects to be pooled.</param>
 33        /// <param name="maximumObjects">The maximum number of objects to be pooled.</param>
 34        /// <param name="allowCreateMore">Can more items be created as needed when starved for items?</param>
 35        /// <param name="allowReuseWhenCapped">Should we reuse oldest items when starving for items?</param>
 36        /// <param name="allowManagedTearDown">Does the pool allow a managed tear down event call?</param>
 37        public static IManagedPool CreatePool(
 38            GameObject gameObject,
 39            Transform parent,
 40            int minimumObjects = 10,
 41            int maximumObjects = 50,
 42            bool allowCreateMore = true,
 43            bool allowReuseWhenCapped = false,
 44            bool allowManagedTearDown = false)
 1445        {
 46            // Create our new pool
 1447            SimpleListManagedPool newGameManagedPool = new SimpleListManagedPool(
 48                gameObject,
 49                CreateItem,
 50                minimumObjects,
 51                maximumObjects,
 52                parent,
 53                false,
 54                allowCreateMore,
 55                allowReuseWhenCapped,
 56                allowManagedTearDown)
 57            {
 58                Flags = {[k_HasInterfaceFlag] = gameObject.GetComponent<IGameObjectPoolItem>() != null}
 59            };
 60
 1461            ManagedPoolBuilder.AddManagedPool(newGameManagedPool);
 62
 1463            newGameManagedPool.OutCachedCount = 0;
 64
 65            // Assign actions
 1466            newGameManagedPool.OnDestroyItem += OnDestroyItemAction;
 1467            newGameManagedPool.OnTearDown += OnTearDownAction;
 1468            newGameManagedPool.OnSpawnedFromPool += OnSpawnedFromPoolAction;
 1469            newGameManagedPool.OnReturnedToPool += OnReturnedToPoolAction;
 70
 1471            return newGameManagedPool;
 1472        }
 73
 74        /// <summary>
 75        ///     Get the next available item from the <paramref name="pool"/>.
 76        /// </summary>
 77        /// <param name="pool">The <see cref="SimpleListManagedPool"/> created with <see cref="GameObjectPool"/> to pull
 78        /// <param name="triggerOnSpawnedFromPool">Should the <see cref="OnSpawnedFromPoolAction"/> be called when getti
 79        /// <returns>A <see cref="GameObject" /> from the <see cref="SimpleListManagedPool"/>, or null if no item is ava
 80        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 81        public static GameObject Get(SimpleListManagedPool pool, bool triggerOnSpawnedFromPool = true)
 482        {
 83            // Pull
 484            object item = pool.Get(false);
 485            if (item == null)
 086            {
 087                return null;
 88            }
 89
 90            // Actions
 491            if (triggerOnSpawnedFromPool)
 192            {
 193                OnSpawnedFromPoolAction(pool, item);
 194            }
 95
 96            // Return
 497            return item is IGameObjectPoolItem gameObjectPoolItem ? gameObjectPoolItem.GetGameObject() : (GameObject)ite
 498        }
 99
 100        /// <summary>
 101        ///     Get the next available item from the <paramref name="pool"/> and parent it to a <see cref="Transform"/>.
 102        /// </summary>
 103        /// <param name="pool">The <see cref="SimpleListManagedPool"/> created with <see cref="GameObjectPool"/> to pull
 104        /// <param name="parent">The transform parent on the item pulled from the <see cref="SimpleListManagedPool"/>.</
 105        /// <param name="worldPositionStays">Ensure that the world position of the item pulled from the <see cref="Simpl
 106        /// <param name="zeroLocalPosition">Set the local position of the item pulled from the <see cref="SimpleListMana
 107        /// <param name="triggerOnSpawnedFromPool">Should the <see cref="OnSpawnedFromPoolAction"/> be called when getti
 108        /// <returns>A <see cref="GameObject" /> from the <see cref="SimpleListManagedPool"/>, or null if no item is ava
 109        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 110        public static GameObject Get(SimpleListManagedPool pool, Transform parent, bool worldPositionStays = false, bool
 2111        {
 112            // Pull
 2113            object item = pool.Get(false);
 2114            if (item == null)
 0115            {
 0116                return null;
 117            }
 2118            GameObject returnObject = item is IGameObjectPoolItem gameObjectPoolItem ? gameObjectPoolItem.GetGameObject(
 2119            if (returnObject == null)
 0120            {
 0121                return null;
 122            }
 123
 124            // Translate
 2125            Transform transform = returnObject.transform;
 2126            transform.SetParent(parent, worldPositionStays);
 2127            if (!worldPositionStays && zeroLocalPosition)
 1128            {
 1129                transform.localPosition = Vector3.zero;
 1130            }
 131
 132            // Actions
 2133            if (triggerOnSpawnedFromPool)
 2134            {
 2135                OnSpawnedFromPoolAction(pool, item);
 2136            }
 137
 138            // Return
 2139            return returnObject;
 2140        }
 141
 142        /// <summary>
 143        ///     Get the next available item from the <paramref name="pool"/>, parent it to a <see cref="Transform"/>, an
 144        /// </summary>
 145        /// <param name="pool">The <see cref="SimpleListManagedPool"/> created with <see cref="GameObjectPool"/> to pull
 146        /// <param name="parent">The transform parent on the item pulled from the <see cref="SimpleListManagedPool"/>.</
 147        /// <param name="localPosition">The local position to set on the item pulled from the <see cref="SimpleListManag
 148        /// <param name="localRotation">The local rotation to set on the item pulled from the <see cref="SimpleListManag
 149        /// <param name="triggerOnSpawnedFromPool">Should the <see cref="OnSpawnedFromPoolAction"/> be called when getti
 150        /// <returns>A <see cref="GameObject" /> from the <see cref="SimpleListManagedPool"/>, or null if no item is ava
 151        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 152        public static GameObject Get(SimpleListManagedPool pool, Transform parent, Vector3 localPosition, Quaternion loc
 1153        {
 154            // Pull
 1155            object item = pool.Get(false);
 1156            if (item == null)
 0157            {
 0158                return null;
 159            }
 1160            GameObject returnObject = item is IGameObjectPoolItem gameObjectPoolItem ? gameObjectPoolItem.GetGameObject(
 1161            if (returnObject == null)
 0162            {
 0163                return null;
 164            }
 165
 166            // Translate
 1167            Transform transform = returnObject.transform;
 1168            transform.SetParent(parent);
 1169            transform.localPosition = localPosition;
 1170            transform.localRotation = localRotation;
 171
 172            // Actions
 1173            if (triggerOnSpawnedFromPool)
 1174            {
 1175                OnSpawnedFromPoolAction(pool, item);
 1176            }
 177
 178            // Return
 1179            return returnObject;
 1180        }
 181
 182        /// <summary>
 183        ///     Get the next available item from the <paramref name="pool"/>, parent it to a <see cref="Transform"/>, an
 184        /// </summary>
 185        /// <param name="pool">The <see cref="SimpleListManagedPool"/> created with <see cref="GameObjectPool"/> to pull
 186        /// <param name="parent">The transform parent on the item pulled from the <see cref="SimpleListManagedPool"/>.</
 187        /// <param name="localPosition">The local position to set on the item pulled from the <see cref="SimpleListManag
 188        /// <param name="worldLookAtPosition">The world position to have the item pulled from the <see cref="SimpleListM
 189        /// <param name="triggerOnSpawnedFromPool">Should the <see cref="OnSpawnedFromPoolAction"/> be called when getti
 190        /// <returns>A <see cref="GameObject" /> from the <see cref="SimpleListManagedPool"/>, or null if no item is ava
 191        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 192        public static GameObject Get(SimpleListManagedPool pool, Transform parent, Vector3 localPosition, Vector3 worldL
 1193        {
 194            // Pull
 1195            object item = pool.Get(false);
 1196            if (item == null)
 0197            {
 0198                return null;
 199            }
 1200            GameObject returnObject = item is IGameObjectPoolItem gameObjectPoolItem ? gameObjectPoolItem.GetGameObject(
 1201            if (returnObject == null)
 0202            {
 0203                return null;
 204            }
 205
 206            // Translate
 1207            Transform transform = returnObject.transform;
 1208            transform.SetParent(parent);
 1209            transform.localPosition = localPosition;
 1210            transform.LookAt(worldLookAtPosition);
 211
 212            // Actions
 1213            if (triggerOnSpawnedFromPool)
 1214            {
 1215                OnSpawnedFromPoolAction(pool, item);
 1216            }
 217
 218            // Return
 1219            return returnObject;
 1220        }
 221
 222        /// <summary>
 223        ///     Get the next available item from the <paramref name="pool"/>, and set its world position and where it is
 224        /// </summary>
 225        /// <param name="pool">The <see cref="SimpleListManagedPool"/> created with <see cref="GameObjectPool"/> to pull
 226        /// <param name="worldPosition">The world position to set on the item pulled from the <see cref="SimpleListManag
 227        /// <param name="worldLookAtPosition">The world position to have the item pulled from the <see cref="SimpleListM
 228        /// <param name="triggerOnSpawnedFromPool">Should the <see cref="OnSpawnedFromPoolAction"/> be called when getti
 229        /// <returns>A <see cref="GameObject" /> from the <see cref="SimpleListManagedPool"/>, or null if no item is ava
 230        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 231        public static GameObject Get(SimpleListManagedPool pool, Vector3 worldPosition, Vector3 worldLookAtPosition, boo
 1232        {
 233            // Pull
 1234            object item = pool.Get(false);
 1235            if (item == null)
 0236            {
 0237                return null;
 238            }
 1239            GameObject returnObject = item is IGameObjectPoolItem gameObjectPoolItem ? gameObjectPoolItem.GetGameObject(
 1240            if (returnObject == null)
 0241            {
 0242                return null;
 243            }
 244
 245            // Translate
 1246            Transform transform = returnObject.transform;
 1247            transform.position = worldPosition;
 1248            transform.LookAt(worldLookAtPosition);
 249
 250            // Actions
 1251            if (triggerOnSpawnedFromPool)
 1252            {
 1253                OnSpawnedFromPoolAction(pool, item);
 1254            }
 255
 256            // Return
 1257            return returnObject;
 1258        }
 259
 260        /// <summary>
 261        ///     Get the next available item from the <paramref name="pool"/>, and set its world position and rotation.
 262        /// </summary>
 263        /// <param name="pool">The <see cref="SimpleListManagedPool"/> created with <see cref="GameObjectPool"/> to pull
 264        /// <param name="worldPosition">The world position to set on the item pulled from the <see cref="SimpleListManag
 265        /// <param name="worldRotation">The world rotation to set on the item pulled from the <see cref="SimpleListManag
 266        /// <param name="triggerOnSpawnedFromPool">Should the <see cref="OnSpawnedFromPoolAction"/> be called when getti
 267        /// <returns>A <see cref="GameObject" /> from the <see cref="SimpleListManagedPool"/>, or null if no item is ava
 268        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 269        public static GameObject Get(SimpleListManagedPool pool, Vector3 worldPosition, Quaternion worldRotation, bool t
 1270        {
 271            // Pull
 1272            object item = pool.Get(false);
 1273            if (item == null)
 0274            {
 0275                return null;
 276            }
 1277            GameObject returnObject = item is IGameObjectPoolItem gameObjectPoolItem ? gameObjectPoolItem.GetGameObject(
 1278            if (returnObject == null)
 0279            {
 0280                return null;
 281            }
 282
 283            // Translate
 1284            Transform transform = returnObject.transform;
 1285            transform.SetPositionAndRotation(worldPosition, worldRotation);
 286
 287            // Actions
 1288            if (triggerOnSpawnedFromPool)
 1289            {
 1290                OnSpawnedFromPoolAction(pool, item);
 1291            }
 292
 293            // Return
 1294            return returnObject;
 1295        }
 296
 297        /// <summary>
 298        ///     Get the next available item from the <paramref name="pool"/>, and set its world position and rotation af
 299        /// </summary>
 300        /// <param name="pool">The <see cref="SimpleListManagedPool"/> created with <see cref="GameObjectPool"/> to pull
 301        /// <param name="worldPosition">The world position to set on the item pulled from the <see cref="SimpleListManag
 302        /// <param name="worldRotation">The world rotation to set on the item pulled from the <see cref="SimpleListManag
 303        /// <param name="parent">The transform parent on the item pulled from the <see cref="SimpleListManagedPool"/>.</
 304        /// <param name="triggerOnSpawnedFromPool">Should the <see cref="OnSpawnedFromPoolAction"/> be called when getti
 305        /// <returns>A <see cref="GameObject" /> from the <see cref="SimpleListManagedPool"/>, or null if no item is ava
 306        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 307        public static GameObject Get(SimpleListManagedPool pool, Vector3 worldPosition, Quaternion worldRotation, Transf
 1308        {
 309            // Pull
 1310            object item = pool.Get(false);
 1311            if (item == null)
 0312            {
 0313                return null;
 314            }
 1315            GameObject returnObject = item is IGameObjectPoolItem gameObjectPoolItem ? gameObjectPoolItem.GetGameObject(
 1316            if (returnObject == null)
 0317            {
 0318                return null;
 319            }
 320
 321            // Translate
 1322            Transform transform = returnObject.transform;
 1323            transform.SetPositionAndRotation(worldPosition, worldRotation);
 1324            transform.SetParent(parent, true);
 325
 326            // Actions
 1327            if (triggerOnSpawnedFromPool)
 1328            {
 1329                OnSpawnedFromPoolAction(pool, item);
 1330            }
 331
 332            // Return
 1333            return returnObject;
 1334        }
 335
 336        /// <summary>
 337        ///     Get the next available item from the <paramref name="pool"/>, and set its world position and look at pos
 338        /// </summary>
 339        /// <param name="pool">The <see cref="SimpleListManagedPool"/> created with <see cref="GameObjectPool"/> to pull
 340        /// <param name="worldPosition">The world position to set on the item pulled from the <see cref="SimpleListManag
 341        /// <param name="worldLookAtPosition">The world position to have the item pulled from the <see cref="SimpleListM
 342        /// <param name="parent">The transform parent on the item pulled from the <see cref="SimpleListManagedPool"/>.</
 343        /// <param name="triggerOnSpawnedFromPool">Should the <see cref="OnSpawnedFromPoolAction"/> be called when getti
 344        /// <returns>A <see cref="GameObject" /> from the <see cref="SimpleListManagedPool"/>, or null if no item is ava
 345        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 346        public static GameObject Get(SimpleListManagedPool pool, Vector3 worldPosition, Vector3 worldLookAtPosition, Tra
 1347        {
 348            // Pull
 1349            object item = pool.Get(false);
 1350            if (item == null)
 0351            {
 0352                return null;
 353            }
 1354            GameObject returnObject = item is IGameObjectPoolItem gameObjectPoolItem ? gameObjectPoolItem.GetGameObject(
 1355            if (returnObject == null)
 0356            {
 0357                return null;
 358            }
 359
 360            // Translate
 1361            Transform transform = returnObject.transform;
 1362            transform.position = worldPosition;
 1363            transform.SetParent(parent, true);
 1364            transform.LookAt(worldLookAtPosition);
 365
 366            // Actions
 1367            if(triggerOnSpawnedFromPool)
 1368            {
 1369                OnSpawnedFromPoolAction(pool, item);
 1370            }
 371
 372            // Return
 1373            return returnObject;
 1374        }
 375
 376        /// <summary>
 377        ///     Gets a pool for the <paramref name="gameObject"/>, or creates a new <see cref="SimpleListManagedPool" />
 378        /// </summary>
 379        /// <param name="gameObject">The object which going to be cloned.</param>
 380        /// <param name="parent">The container object.</param>
 381        /// <param name="minimumObjects">The minimum number of objects to be pooled.</param>
 382        /// <param name="maximumObjects">The maximum number of objects to be pooled.</param>
 383        /// <param name="allowCreateMore">Can more items be created as needed when starved for items?</param>
 384        /// <param name="allowReuseWhenCapped">Should we reuse oldest items when starving for items?</param>
 385        /// <param name="allowManagedTearDown">Does the pool allow a managed tear down event call?</param>
 386        public static IManagedPool GetOrCreatePool(
 387            GameObject gameObject,
 388            Transform parent,
 389            int minimumObjects = 10,
 390            int maximumObjects = 50,
 391            bool allowCreateMore = true,
 392            bool allowReuseWhenCapped = false,
 393            bool allowManagedTearDown = false)
 14394        {
 14395            if (ManagedPools.TryGetFirstPool(gameObject, out IManagedPool checkPool))
 0396            {
 0397                return checkPool;
 398            }
 14399            return CreatePool(gameObject, parent, minimumObjects, maximumObjects, allowCreateMore, allowReuseWhenCapped,
 400                allowManagedTearDown);
 14401        }
 402
 403        /// <summary>
 404        ///     Create a new item for the <paramref name="pool"/>.
 405        /// </summary>
 406        /// <param name="pool">The <see cref="SimpleListManagedPool"/> to create an item for, and assign too.</param>
 407        /// <returns>The newly created item.</returns>
 408        static object CreateItem(SimpleListManagedPool pool)
 12409        {
 12410            GameObject spawnedObject =
 411                Object.Instantiate((GameObject)pool.BaseObject, (Transform)pool.ContainerObject, true);
 412
 12413            if (pool.Flags[k_HasInterfaceFlag])
 9414            {
 415                // The old swap for the interface instead of the GameObject
 416                // ReSharper disable once Unity.PerformanceCriticalCodeInvocation, Unity.ExpensiveCode
 9417                IGameObjectPoolItem item = spawnedObject.GetComponent<IGameObjectPoolItem>();
 9418                item.SetParentPool(pool);
 9419                item.OnReturnedToPool();
 9420                pool.InItems.AddWithExpandCheck(item);
 9421                pool.InCachedCount++;
 9422                return item;
 423            }
 424
 3425            spawnedObject.SetActive(false);
 3426            pool.InItems.AddWithExpandCheck(spawnedObject);
 3427            pool.InCachedCount++;
 3428            return spawnedObject;
 12429        }
 430
 431        /// <summary>
 432        ///     The subscribed action called when an item is requested to be destroyed..
 433        /// </summary>
 434        /// <param name="item">The item being destroyed.</param>
 435        static void OnDestroyItemAction(object item)
 12436        {
 12437            if (item == null) return;
 438
 439            Object unityObject;
 12440            if (item is IGameObjectPoolItem poolItem && poolItem.IsValidItem())
 9441            {
 9442                unityObject = poolItem.GetGameObject();
 9443            }
 444            else
 3445            {
 3446                unityObject = (Object)item;
 3447            }
 448
 12449            if (unityObject != null)
 12450            {
 451#if UNITY_EDITOR
 12452                if (Application.isPlaying)
 0453                {
 0454                    Object.Destroy(unityObject, 0f);
 0455                }
 456                else
 12457                {
 12458                    Object.DestroyImmediate(unityObject);
 12459                }
 460#else
 461                Object.Destroy(unityObject, 0f);
 462#endif
 463
 12464            }
 465
 12466        }
 467
 468        /// <summary>
 469        ///     The subscribed action called when an item is returned to the <paramref name="pool"/>.
 470        /// </summary>
 471        /// <param name="pool">The <see cref="SimpleListManagedPool"/> which the <paramref name="item"/> is being return
 472        /// <param name="item">The item being returned to the <paramref name="pool"/>.</param>
 473        static void OnReturnedToPoolAction(SimpleListManagedPool pool, object item)
 12474        {
 12475            if (!pool.Flags[k_HasInterfaceFlag])
 3476            {
 3477                (item as GameObject)?.SetActive(false);
 3478                return;
 479            }
 480
 9481            (item as IGameObjectPoolItem)?.OnReturnedToPool();
 12482        }
 483
 484        /// <summary>
 485        ///     The subscribed action called when an item is spawned from the <paramref name="pool"/>.
 486        /// </summary>
 487        /// <param name="pool">The <see cref="SimpleListManagedPool"/> which has had the <paramref name="item"/> spawned
 488        /// <param name="item">The spawned item.</param>
 489        static void OnSpawnedFromPoolAction(SimpleListManagedPool pool, object item)
 9490        {
 9491            if (!pool.Flags[k_HasInterfaceFlag])
 2492            {
 2493                (item as GameObject)?.SetActive(true);
 2494                return;
 495            }
 496
 7497            (item as IGameObjectPoolItem)?.OnSpawnedFromPool();
 9498        }
 499
 500        /// <summary>
 501        ///     The subscribed action called when the <paramref name="pool"/> is asked to <see cref="IManagedPool.TearDo
 502        /// </summary>
 503        /// <param name="pool">The <see cref="SimpleListManagedPool"/> being torn down.</param>
 504        static void OnTearDownAction(SimpleListManagedPool pool)
 14505        {
 14506            ManagedPoolBuilder.RemoveManagedPool(pool);
 14507        }
 508    }
 509}
 510#endif

Methods/Properties

CreatePool(UnityEngine.GameObject, UnityEngine.Transform, System.Int32, System.Int32, System.Boolean, System.Boolean, System.Boolean)
Get(GDX.Collections.Pooling.SimpleListManagedPool, System.Boolean)
Get(GDX.Collections.Pooling.SimpleListManagedPool, UnityEngine.Transform, System.Boolean, System.Boolean, System.Boolean)
Get(GDX.Collections.Pooling.SimpleListManagedPool, UnityEngine.Transform, UnityEngine.Vector3, UnityEngine.Quaternion, System.Boolean)
Get(GDX.Collections.Pooling.SimpleListManagedPool, UnityEngine.Transform, UnityEngine.Vector3, UnityEngine.Vector3, System.Boolean)
Get(GDX.Collections.Pooling.SimpleListManagedPool, UnityEngine.Vector3, UnityEngine.Vector3, System.Boolean)
Get(GDX.Collections.Pooling.SimpleListManagedPool, UnityEngine.Vector3, UnityEngine.Quaternion, System.Boolean)
Get(GDX.Collections.Pooling.SimpleListManagedPool, UnityEngine.Vector3, UnityEngine.Quaternion, UnityEngine.Transform, System.Boolean)
Get(GDX.Collections.Pooling.SimpleListManagedPool, UnityEngine.Vector3, UnityEngine.Vector3, UnityEngine.Transform, System.Boolean)
GetOrCreatePool(UnityEngine.GameObject, UnityEngine.Transform, System.Int32, System.Int32, System.Boolean, System.Boolean, System.Boolean)
CreateItem(GDX.Collections.Pooling.SimpleListManagedPool)
OnDestroyItemAction(System.Object)
OnReturnedToPoolAction(GDX.Collections.Pooling.SimpleListManagedPool, System.Object)
OnSpawnedFromPoolAction(GDX.Collections.Pooling.SimpleListManagedPool, System.Object)
OnTearDownAction(GDX.Collections.Pooling.SimpleListManagedPool)