< Summary

Class:DCL.AssetLibrary_Poolable[AssetType]
Assembly:AssetPromiseKeeper
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/Common/AssetLibrary_Poolable.cs
Covered lines:54
Uncovered lines:17
Coverable lines:71
Total lines:158
Line coverage:76% (54 of 71)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AssetLibrary_Poolable(...)0%110100%
AssetLibrary_Poolable(...)0%2100%
OnPoolRemoved(...)0%220100%
Add(...)0%5.395075%
Get(...)0%3.243070%
GetCopyFromOriginal(...)0%3.243070%
Release(...)0%4.123050%
Contains(...)0%2.152066.67%
Contains(...)0%220100%
Cleanup()0%220100%
AssetIdToPoolId(...)0%220100%
PoolIdToAssetId(...)0%3.213071.43%
GetSaltSuffix()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/Common/AssetLibrary_Poolable.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using UnityEngine;
 3
 4namespace DCL
 5{
 6    public class AssetLibrary_Poolable<AssetType> : AssetLibrary<AssetType>
 7        where AssetType : Asset_WithPoolableContainer
 8    {
 9        private readonly string salt = null;
 10        IPooledObjectInstantiator instantiator;
 5411        public Dictionary<object, AssetType> masterAssets = new Dictionary<object, AssetType>();
 12
 013        public AssetLibrary_Poolable(IPooledObjectInstantiator instantiator) : this(instantiator, null) { }
 5414        public AssetLibrary_Poolable(IPooledObjectInstantiator instantiator, string salt)
 15        {
 5416            this.instantiator = instantiator;
 5417            this.salt = salt;
 5418        }
 19
 20        private void OnPoolRemoved(Pool pool)
 21        {
 12122            pool.OnCleanup -= OnPoolRemoved;
 12123            object assetId = PoolIdToAssetId(pool.id);
 24
 12125            if (masterAssets.ContainsKey(assetId))
 26            {
 3327                masterAssets[assetId].Cleanup();
 3328                masterAssets.Remove(assetId);
 29            }
 12130        }
 31
 32        public override bool Add(AssetType asset)
 33        {
 12134            if (asset == null || asset.container == null)
 35            {
 036                Debug.LogWarning("asset or asset.container == null? This shouldn't happen");
 037                return false;
 38            }
 39
 12140            if (!masterAssets.ContainsKey(asset.id))
 12141                masterAssets.Add(asset.id, asset);
 42
 12143            object poolId = AssetIdToPoolId(asset.id);
 12144            Pool pool = PoolManager.i.AddPool(poolId, asset.container, instantiator);
 45
 12146            pool.OnCleanup -= OnPoolRemoved;
 12147            pool.OnCleanup += OnPoolRemoved;
 48
 12149            if (asset.container == null)
 050                return false;
 51
 12152            return true;
 53        }
 54
 55        public override AssetType Get(object id)
 56        {
 15557            if (!Contains(id))
 058                return null;
 59
 15560            AssetType clone = masterAssets[id].Clone() as AssetType;
 15561            object poolId = AssetIdToPoolId(id);
 62
 15563            if (PoolManager.i.ContainsPool(poolId))
 64            {
 15565                clone.container = PoolManager.i.Get(poolId).gameObject;
 15566            }
 67            else
 68            {
 069                Debug.LogError("Pool was removed and AssetLibrary didn't notice?!");
 070                return null;
 71            }
 72
 15573            return clone;
 74        }
 75
 76        public AssetType GetCopyFromOriginal(object id)
 77        {
 2278            if (!Contains(id))
 079                return null;
 80
 2281            AssetType clone = masterAssets[id].Clone() as AssetType;
 2282            object poolId = AssetIdToPoolId(id);
 83
 2284            if (PoolManager.i.ContainsPool(poolId))
 85            {
 2286                clone.container = PoolManager.i.GetPool(poolId).InstantiateAsOriginal();
 2287            }
 88            else
 89            {
 090                Debug.LogError("Pool was removed and AssetLibrary didn't notice?!");
 091                return null;
 92            }
 93
 2294            return clone;
 95        }
 96
 97        public override void Release(AssetType asset)
 98        {
 8499            if (!Contains(asset))
 100            {
 0101                Debug.LogError("ERROR: Trying to release an asset not added to this library!");
 0102                return;
 103            }
 104
 84105            if (asset == null)
 106            {
 0107                Debug.LogError("ERROR: Trying to release null asset");
 0108                return;
 109            }
 110
 84111            PoolManager.i.Release(asset.container);
 84112        }
 113
 114        public override bool Contains(object id)
 115        {
 844116            if (masterAssets == null)
 0117                return false;
 118
 844119            return masterAssets.ContainsKey(id);
 120        }
 121
 122        public override bool Contains(AssetType asset)
 123        {
 256124            if (asset == null)
 2125                return false;
 126
 254127            return Contains(asset.id);
 128        }
 129
 130        public override void Cleanup()
 131        {
 3226132            foreach (var kvp in masterAssets)
 133            {
 88134                kvp.Value.Cleanup();
 135            }
 136
 1525137            masterAssets.Clear();
 1525138        }
 139
 303140        public object AssetIdToPoolId(object assetId) { return salt == null ? assetId : $"{assetId}{GetSaltSuffix()}"; }
 141
 142        public object PoolIdToAssetId(object poolId)
 143        {
 121144            if (salt == null)
 0145                return poolId;
 146
 121147            string id = poolId.ToString();
 121148            string saltSuffix = GetSaltSuffix();
 121149            if (id.EndsWith(saltSuffix))
 150            {
 121151                return id.Remove(id.Length - saltSuffix.Length);
 152            }
 0153            return poolId;
 154        }
 155
 424156        string GetSaltSuffix() { return  $"_{salt}"; }
 157    }
 158}