< Summary

Information
Class: Hertzole.ScriptableValues.ScriptableGameObjectPool
Assembly: Hertzole.ScriptableValues
File(s): ./Packages/se.hertzole.scriptable-values/Runtime/Pools/ScriptableGameObjectPool.cs
Tag: 52_28197466029
Line coverage
97%
Covered lines: 36
Uncovered lines: 1
Coverable lines: 37
Total lines: 78
Line coverage: 97.2%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ScriptableGameObjectPool()0%110100%
CreateObject()0%110100%
DestroyObject(...)0%220100%
OnGetInternal(...)0%110100%
OnReturnInternal(...)0%110100%
OnGet(...)0%220100%
OnReturn(...)0%220100%

File(s)

./Packages/se.hertzole.scriptable-values/Runtime/Pools/ScriptableGameObjectPool.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using Hertzole.ScriptableValues.Helpers;
 3using UnityEngine;
 4using UnityEngine.Pool;
 5
 6namespace Hertzole.ScriptableValues
 7{
 8    /// <summary>
 9    ///     A <see cref="ScriptableObject" /> that holds a pool of <see cref="GameObject" />.
 10    /// </summary>
 11#if UNITY_EDITOR
 12    [CreateAssetMenu(fileName = "New Game Object Pool", menuName = "Hertzole/Scriptable Values/Pools/Game Object Pool", 
 13#endif
 14    public class ScriptableGameObjectPool : ScriptablePool<GameObject>
 15    {
 16        [SerializeField]
 21617        private GameObject prefab = null!;
 18
 19        public GameObject Prefab
 20        {
 021            get { return prefab; }
 54022            set { prefab = value; }
 23        }
 24
 25        protected override GameObject CreateObject()
 18626        {
 18627            return Instantiate(prefab);
 18628        }
 29
 30        protected override void DestroyObject(GameObject item)
 18031        {
 32            // The object may already have been destroyed. Check if it exists first.
 18033            if (item != null)
 18034            {
 18035                Destroy(item.gameObject);
 18036            }
 18037        }
 38
 39        internal override void OnGetInternal(GameObject item)
 19840        {
 41            // Don't check for poolable here as it's done with components in OnGet.
 19842            OnGet(item);
 19843        }
 44
 45        internal override void OnReturnInternal(GameObject item)
 9646        {
 47            // Don't check for poolable here as it's done with components in OnReturn.
 9648            OnReturn(item);
 9649        }
 50
 51        protected override void OnGet(GameObject item)
 19852        {
 19853            Guard.IsNotNull(item, nameof(item));
 54
 19855            item.gameObject.SetActive(true);
 56
 19857            using PooledObject<List<IPoolable>> scope = ListPool<IPoolable>.Get(out List<IPoolable> poolableBuffer);
 19858            item.GetComponentsInChildren(true, poolableBuffer);
 79259            for (int i = 0; i < poolableBuffer.Count; i++)
 19860            {
 19861                poolableBuffer[i].OnUnpooled();
 19862            }
 39663        }
 64
 65        protected override void OnReturn(GameObject item)
 9666        {
 9667            using PooledObject<List<IPoolable>> scope = ListPool<IPoolable>.Get(out List<IPoolable> poolableBuffer);
 9668            item.GetComponentsInChildren(true, poolableBuffer);
 69
 38470            for (int i = 0; i < poolableBuffer.Count; i++)
 9671            {
 9672                poolableBuffer[i].OnPooled();
 9673            }
 74
 9675            item.gameObject.SetActive(false);
 19276        }
 77    }
 78}