< 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:52
Uncovered lines:17
Coverable lines:69
Total lines:158
Line coverage:75.3% (52 of 69)
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.333066.67%
GetCopyFromOriginal(...)0%3.333066.67%
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        {
 11722            pool.OnCleanup -= OnPoolRemoved;
 11723            object assetId = PoolIdToAssetId(pool.id);
 24
 11725            if (masterAssets.ContainsKey(assetId))
 26            {
 3227                masterAssets[assetId].Cleanup();
 3228                masterAssets.Remove(assetId);
 29            }
 11730        }
 31
 32        public override bool Add(AssetType asset)
 33        {
 11734            if (asset == null || asset.container == null)
 35            {
 036                Debug.LogWarning("asset or asset.container == null? This shouldn't happen");
 037                return false;
 38            }
 39
 11740            if (!masterAssets.ContainsKey(asset.id))
 11741                masterAssets.Add(asset.id, asset);
 42
 11743            object poolId = AssetIdToPoolId(asset.id);
 11744            Pool pool = PoolManager.i.AddPool(poolId, asset.container, instantiator);
 45
 11746            pool.OnCleanup -= OnPoolRemoved;
 11747            pool.OnCleanup += OnPoolRemoved;
 48
 11749            if (asset.container == null)
 050                return false;
 51
 11752            return true;
 53        }
 54
 55        public override AssetType Get(object id)
 56        {
 15357            if (!Contains(id))
 058                return null;
 59
 15360            AssetType clone = masterAssets[id].Clone() as AssetType;
 15361            object poolId = AssetIdToPoolId(id);
 62
 15363            if (PoolManager.i.ContainsPool(poolId))
 64            {
 15365                clone.container = PoolManager.i.Get(poolId).gameObject;
 66            }
 67            else
 68            {
 069                Debug.LogError("Pool was removed and AssetLibrary didn't notice?!");
 070                return null;
 71            }
 72
 15373            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();
 87            }
 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        {
 9499            if (!Contains(asset))
 100            {
 0101                Debug.LogError("ERROR: Trying to release an asset not added to this library!");
 0102                return;
 103            }
 104
 94105            if (asset == null)
 106            {
 0107                Debug.LogError("ERROR: Trying to release null asset");
 0108                return;
 109            }
 110
 94111            PoolManager.i.Release(asset.container);
 94112        }
 113
 114        public override bool Contains(object id)
 115        {
 808116            if (masterAssets == null)
 0117                return false;
 118
 808119            return masterAssets.ContainsKey(id);
 120        }
 121
 122        public override bool Contains(AssetType asset)
 123        {
 252124            if (asset == null)
 2125                return false;
 126
 250127            return Contains(asset.id);
 128        }
 129
 130        public override void Cleanup()
 131        {
 2308132            foreach (var kvp in masterAssets)
 133            {
 85134                kvp.Value.Cleanup();
 135            }
 136
 1069137            masterAssets.Clear();
 1069138        }
 139
 297140        public object AssetIdToPoolId(object assetId) { return salt == null ? assetId : $"{assetId}{GetSaltSuffix()}"; }
 141
 142        public object PoolIdToAssetId(object poolId)
 143        {
 117144            if (salt == null)
 0145                return poolId;
 146
 117147            string id = poolId.ToString();
 117148            string saltSuffix = GetSaltSuffix();
 117149            if (id.EndsWith(saltSuffix))
 150            {
 117151                return id.Remove(id.Length - saltSuffix.Length);
 152            }
 0153            return poolId;
 154        }
 155
 414156        string GetSaltSuffix() { return  $"_{salt}"; }
 157    }
 158}