< Summary

Class:DCL.AssetPromise_Material
Assembly:AssetPromiseKeeper
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/Material/AssetPromise_Material.cs
Covered lines:48
Uncovered lines:17
Coverable lines:65
Total lines:143
Line coverage:73.8% (48 of 65)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AssetPromise_Material(...)0%2100%
OnAfterLoadOrReuse()0%110100%
OnBeforeLoadOrReuse()0%110100%
OnCancelLoading()0%110100%
OnLoad(...)0%110100%
GetId()0%110100%
AddToLibrary()0%2.062075%
CreateMaterial()0%37.3321066.67%
CreateTexturePromise(...)0%220100%
WaitAll()0%13.710066.67%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/Material/AssetPromise_Material.cs

#LineLine coverage
 1using System;
 2using System.Collections;
 3using DCL.Helpers;
 4using UnityEngine;
 5
 6namespace DCL
 7{
 8    public class AssetPromise_Material : AssetPromise<Asset_Material>
 9    {
 10        private readonly AssetPromise_Material_Model model;
 11
 12        private AssetPromise_Texture emissiveTexturePromise;
 13        private AssetPromise_Texture alphaTexturetPromise;
 14        private AssetPromise_Texture albedoTexturePromise;
 15        private AssetPromise_Texture bumpTexturePormise;
 16
 17        private Coroutine loadCoroutine;
 18
 019        public AssetPromise_Material(AssetPromise_Material_Model model)
 20        {
 021            this.model = model;
 022        }
 23
 2424        protected override void OnAfterLoadOrReuse() { }
 25
 2926        protected override void OnBeforeLoadOrReuse() { }
 27
 28        protected override void OnCancelLoading()
 29        {
 530            AssetPromiseKeeper_Texture.i.Forget(emissiveTexturePromise);
 531            AssetPromiseKeeper_Texture.i.Forget(alphaTexturetPromise);
 532            AssetPromiseKeeper_Texture.i.Forget(albedoTexturePromise);
 533            AssetPromiseKeeper_Texture.i.Forget(bumpTexturePormise);
 34
 535            CoroutineStarter.Stop(loadCoroutine);
 536            loadCoroutine = null;
 537        }
 38
 39        protected override void OnLoad(Action OnSuccess, Action<Exception> OnFail)
 40        {
 2241            CoroutineStarter.Stop(loadCoroutine);
 2242            loadCoroutine = CoroutineStarter.Start(CreateMaterial(model, OnSuccess, OnFail));
 2243        }
 44
 45        public override object GetId()
 46        {
 14447            return model;
 48        }
 49
 50        protected override bool AddToLibrary()
 51        {
 1752            if (!library.Add(asset))
 53            {
 054                return false;
 55            }
 56
 1757            asset = library.Get(asset.id);
 1758            return true;
 59        }
 60
 61        private IEnumerator CreateMaterial(AssetPromise_Material_Model model, Action OnSuccess, Action<Exception> OnFail
 62        {
 2263            Material material = model.isPbrMaterial ? PBRMaterial.Create() : BasicMaterial.Create();
 64#if UNITY_EDITOR
 2265            material.name = $"{(model.isPbrMaterial ? "PBRMaterial_" : "BasicMaterial_")}{model.GetHashCode()}";
 66#endif
 2267            if (model.isPbrMaterial)
 68            {
 069                PBRMaterial.SetUpColors(material, model.albedoColor, model.emissiveColor, model.reflectivityColor, model
 070                PBRMaterial.SetUpProps(material, model.metallic, model.roughness, model.glossiness, model.specularIntens
 071                PBRMaterial.SetUpTransparency(material, model.transparencyMode, model.alphaTexture, model.albedoColor, m
 072            }
 73            else
 74            {
 2275                BasicMaterial.SetUp(material, model.alphaTest);
 76            }
 77
 2278            albedoTexturePromise = CreateTexturePromise(model.albedoTexture);
 2279            emissiveTexturePromise = CreateTexturePromise(model.emissiveTexture);
 2280            alphaTexturetPromise = CreateTexturePromise(model.alphaTexture);
 2281            bumpTexturePormise = CreateTexturePromise(model.bumpTexture);
 82
 2283            yield return WaitAll(albedoTexturePromise, emissiveTexturePromise, alphaTexturetPromise, bumpTexturePormise)
 84
 1785            if (albedoTexturePromise?.state == AssetPromiseState.FINISHED)
 86            {
 1787                material.SetTexture(ShaderUtils.BaseMap, albedoTexturePromise.asset.texture);
 88            }
 89
 1790            if (model.isPbrMaterial)
 91            {
 092                if (emissiveTexturePromise?.state == AssetPromiseState.FINISHED)
 93                {
 094                    material.SetTexture(ShaderUtils.EmissionMap, emissiveTexturePromise.asset.texture);
 95                }
 096                if (alphaTexturetPromise?.state == AssetPromiseState.FINISHED)
 97                {
 098                    material.SetTexture(ShaderUtils.AlphaTexture, alphaTexturetPromise.asset.texture);
 99                }
 0100                if (bumpTexturePormise?.state == AssetPromiseState.FINISHED)
 101                {
 0102                    material.SetTexture(ShaderUtils.BumpMap, bumpTexturePormise.asset.texture);
 103                }
 104            }
 105
 17106            SRPBatchingHelper.OptimizeMaterial(material);
 107
 17108            asset.material = material;
 17109            asset.emissiveTexturePromise = emissiveTexturePromise;
 17110            asset.alphaTexturetPromise = alphaTexturetPromise;
 17111            asset.albedoTexturePromise = albedoTexturePromise;
 17112            asset.bumpTexturePormise = bumpTexturePormise;
 113
 17114            OnSuccess?.Invoke();
 17115        }
 116
 117        private static AssetPromise_Texture CreateTexturePromise(AssetPromise_Material_Model.Texture? textureData)
 118        {
 88119            if (textureData == null)
 66120                return null;
 121
 22122            AssetPromise_Material_Model.Texture texture = textureData.Value;
 22123            var promise = new AssetPromise_Texture(texture.src, texture.wrapMode, texture.filterMode);
 22124            AssetPromiseKeeper_Texture.i.Keep(promise);
 22125            return promise;
 126        }
 127
 128        private static IEnumerator WaitAll(AssetPromise_Texture p1, AssetPromise_Texture p2, AssetPromise_Texture p3, As
 129        {
 22130            if (p1 != null)
 22131                yield return p1;
 132
 17133            if (p2 != null)
 0134                yield return p2;
 135
 17136            if (p3 != null)
 0137                yield return p3;
 138
 17139            if (p4 != null)
 0140                yield return p4;
 17141        }
 142    }
 143}