< 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
Covered methods:12
Total methods:13
Method coverage:92.3% (12 of 13)

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;
 3311        public Dictionary<object, AssetType> masterAssets = new Dictionary<object, AssetType>();
 12
 013        public AssetLibrary_Poolable(IPooledObjectInstantiator instantiator) : this(instantiator, null) { }
 3314        public AssetLibrary_Poolable(IPooledObjectInstantiator instantiator, string salt)
 15        {
 3316            this.instantiator = instantiator;
 3317            this.salt = salt;
 3318        }
 19
 20        private void OnPoolRemoved(Pool pool)
 21        {
 10822            pool.OnCleanup -= OnPoolRemoved;
 10823            object assetId = PoolIdToAssetId(pool.id);
 24
 10825            if (masterAssets.ContainsKey(assetId))
 26            {
 2627                masterAssets[assetId].Cleanup();
 2628                masterAssets.Remove(assetId);
 29            }
 10830        }
 31
 32        public override bool Add(AssetType asset)
 33        {
 10834            if (asset == null || asset.container == null)
 35            {
 036                Debug.LogWarning("asset or asset.container == null? This shouldn't happen");
 037                return false;
 38            }
 39
 10840            if (!masterAssets.ContainsKey(asset.id))
 10841                masterAssets.Add(asset.id, asset);
 42
 10843            object poolId = AssetIdToPoolId(asset.id);
 10844            Pool pool = PoolManager.i.AddPool(poolId, asset.container, instantiator);
 45
 10846            pool.OnCleanup -= OnPoolRemoved;
 10847            pool.OnCleanup += OnPoolRemoved;
 48
 10849            if (asset.container == null)
 050                return false;
 51
 10852            return true;
 53        }
 54
 55        public override AssetType Get(object id)
 56        {
 12757            if (!Contains(id))
 058                return null;
 59
 12760            AssetType clone = masterAssets[id].Clone() as AssetType;
 12761            object poolId = AssetIdToPoolId(id);
 62
 12763            if (PoolManager.i.ContainsPool(poolId))
 64            {
 12765                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
 12773            return clone;
 74        }
 75
 76        public AssetType GetCopyFromOriginal(object id)
 77        {
 1178            if (!Contains(id))
 079                return null;
 80
 1181            AssetType clone = masterAssets[id].Clone() as AssetType;
 1182            object poolId = AssetIdToPoolId(id);
 83
 1184            if (PoolManager.i.ContainsPool(poolId))
 85            {
 1186                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
 1194            return clone;
 95        }
 96
 97        public override void Release(AssetType asset)
 98        {
 6599            if (!Contains(asset))
 100            {
 0101                Debug.LogError("ERROR: Trying to release an asset not added to this library!");
 0102                return;
 103            }
 104
 65105            if (asset == null)
 106            {
 0107                Debug.LogError("ERROR: Trying to release null asset");
 0108                return;
 109            }
 110
 65111            PoolManager.i.Release(asset.container);
 65112        }
 113
 114        public override bool Contains(object id)
 115        {
 623116            if (masterAssets == null)
 0117                return false;
 118
 623119            return masterAssets.ContainsKey(id);
 120        }
 121
 122        public override bool Contains(AssetType asset)
 123        {
 180124            if (asset == null)
 1125                return false;
 126
 179127            return Contains(asset.id);
 128        }
 129
 130        public override void Cleanup()
 131        {
 2086132            foreach (var kvp in masterAssets)
 133            {
 82134                kvp.Value.Cleanup();
 135            }
 136
 961137            masterAssets.Clear();
 961138        }
 139
 249140        public object AssetIdToPoolId(object assetId) { return salt == null ? assetId : $"{assetId}{GetSaltSuffix()}"; }
 141
 142        public object PoolIdToAssetId(object poolId)
 143        {
 108144            if (salt == null)
 0145                return poolId;
 146
 108147            string id = poolId.ToString();
 108148            string saltSuffix = GetSaltSuffix();
 108149            if (id.EndsWith(saltSuffix))
 150            {
 108151                return id.Remove(id.Length - saltSuffix.Length);
 152            }
 0153            return poolId;
 154        }
 155
 357156        string GetSaltSuffix() { return  $"_{salt}"; }
 157    }
 158}