< 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;
 4311        public Dictionary<object, AssetType> masterAssets = new Dictionary<object, AssetType>();
 12
 013        public AssetLibrary_Poolable(IPooledObjectInstantiator instantiator) : this(instantiator, null) { }
 4314        public AssetLibrary_Poolable(IPooledObjectInstantiator instantiator, string salt)
 15        {
 4316            this.instantiator = instantiator;
 4317            this.salt = salt;
 4318        }
 19
 20        private void OnPoolRemoved(Pool pool)
 21        {
 11222            pool.OnCleanup -= OnPoolRemoved;
 11223            object assetId = PoolIdToAssetId(pool.id);
 24
 11225            if (masterAssets.ContainsKey(assetId))
 26            {
 2227                masterAssets[assetId].Cleanup();
 2228                masterAssets.Remove(assetId);
 29            }
 11230        }
 31
 32        public override bool Add(AssetType asset)
 33        {
 11234            if (asset == null || asset.container == null)
 35            {
 036                Debug.LogWarning("asset or asset.container == null? This shouldn't happen");
 037                return false;
 38            }
 39
 11240            if (!masterAssets.ContainsKey(asset.id))
 11241                masterAssets.Add(asset.id, asset);
 42
 11243            object poolId = AssetIdToPoolId(asset.id);
 11244            Pool pool = PoolManager.i.AddPool(poolId, asset.container, instantiator);
 45
 11246            pool.OnCleanup -= OnPoolRemoved;
 11247            pool.OnCleanup += OnPoolRemoved;
 48
 11249            if (asset.container == null)
 050                return false;
 51
 11252            return true;
 53        }
 54
 55        public override AssetType Get(object id)
 56        {
 14157            if (!Contains(id))
 058                return null;
 59
 14160            AssetType clone = masterAssets[id].Clone() as AssetType;
 14161            object poolId = AssetIdToPoolId(id);
 62
 14163            if (PoolManager.i.ContainsPool(poolId))
 64            {
 14165                clone.container = PoolManager.i.Get(poolId).gameObject;
 14166            }
 67            else
 68            {
 069                Debug.LogError("Pool was removed and AssetLibrary didn't notice?!");
 070                return null;
 71            }
 72
 14173            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        {
 13999            if (!Contains(asset))
 100            {
 0101                Debug.LogError("ERROR: Trying to release an asset not added to this library!");
 0102                return;
 103            }
 104
 139105            if (asset == null)
 106            {
 0107                Debug.LogError("ERROR: Trying to release null asset");
 0108                return;
 109            }
 110
 139111            PoolManager.i.Release(asset.container);
 139112        }
 113
 114        public override bool Contains(object id)
 115        {
 831116            if (masterAssets == null)
 0117                return false;
 118
 831119            return masterAssets.ContainsKey(id);
 120        }
 121
 122        public override bool Contains(AssetType asset)
 123        {
 308124            if (asset == null)
 2125                return false;
 126
 306127            return Contains(asset.id);
 128        }
 129
 130        public override void Cleanup()
 131        {
 2864132            foreach (var kvp in masterAssets)
 133            {
 90134                kvp.Value.Cleanup();
 135            }
 136
 1342137            masterAssets.Clear();
 1342138        }
 139
 280140        public object AssetIdToPoolId(object assetId) { return salt == null ? assetId : $"{assetId}{GetSaltSuffix()}"; }
 141
 142        public object PoolIdToAssetId(object poolId)
 143        {
 112144            if (salt == null)
 0145                return poolId;
 146
 112147            string id = poolId.ToString();
 112148            string saltSuffix = GetSaltSuffix();
 112149            if (id.EndsWith(saltSuffix))
 150            {
 112151                return id.Remove(id.Length - saltSuffix.Length);
 152            }
 0153            return poolId;
 154        }
 155
 392156        string GetSaltSuffix() { return  $"_{salt}"; }
 157    }
 158}