< Summary

Information
Class: Hertzole.ScriptableValues.ScriptableComponentPool[T]
Assembly: Hertzole.ScriptableValues
File(s): ./Packages/se.hertzole.scriptable-values/Runtime/Pools/ScriptableComponentPool.cs
Tag: 52_28197466029
Line coverage
97%
Covered lines: 36
Uncovered lines: 1
Coverable lines: 37
Total lines: 76
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
ScriptableComponentPool()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/ScriptableComponentPool.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="Component" />.
 10    /// </summary>
 11    /// <typeparam name="T">The type of <see cref="Component" />.</typeparam>
 12    public abstract class ScriptableComponentPool<T> : ScriptablePool<T> where T : Component
 13    {
 14        [SerializeField]
 21015        private T prefab = null!;
 16
 17        public T Prefab
 18        {
 019            get { return prefab; }
 54020            set { prefab = value; }
 21        }
 22
 23        protected override T CreateObject()
 18624        {
 18625            return Instantiate(prefab);
 18626        }
 27
 28        protected override void DestroyObject(T item)
 18029        {
 30            // The object may already have been destroyed. Check if it exists first.
 18031            if (item != null)
 18032            {
 18033                Destroy(item.gameObject);
 18034            }
 18035        }
 36
 37        internal override void OnGetInternal(T item)
 19838        {
 39            // Don't check for poolable here and it's done with components in OnGet.
 19840            OnGet(item);
 19841        }
 42
 43        internal override void OnReturnInternal(T item)
 9644        {
 45            // Don't check for poolable here and it's done with components in OnReturn.
 9646            OnReturn(item);
 9647        }
 48
 49        protected override void OnGet(T item)
 19850        {
 19851            Guard.IsNotNull(item, nameof(item));
 52
 19853            item.gameObject.SetActive(true);
 54
 19855            using PooledObject<List<IPoolable>> scope = ListPool<IPoolable>.Get(out List<IPoolable> poolableBuffer);
 19856            item.GetComponentsInChildren(true, poolableBuffer);
 79257            for (int i = 0; i < poolableBuffer.Count; i++)
 19858            {
 19859                poolableBuffer[i].OnUnpooled();
 19860            }
 39661        }
 62
 63        protected override void OnReturn(T item)
 9664        {
 9665            using PooledObject<List<IPoolable>> scope = ListPool<IPoolable>.Get(out List<IPoolable> poolableBuffer);
 9666            item.GetComponentsInChildren(true, poolableBuffer);
 67
 38468            for (int i = 0; i < poolableBuffer.Count; i++)
 9669            {
 9670                poolableBuffer[i].OnPooled();
 9671            }
 72
 9673            item.gameObject.SetActive(false);
 19274        }
 75    }
 76}