< 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:57
Uncovered lines:7
Coverable lines:64
Total lines:143
Line coverage:89% (57 of 64)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AssetPromise_Material(...)0%110100%
OnAfterLoadOrReuse()0%110100%
OnBeforeLoadOrReuse()0%110100%
OnCancelLoading()0%110100%
OnLoad(...)0%110100%
GetId()0%110100%
AddToLibrary()0%2.062075%
CreateMaterial()0%21.4921089.66%
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
 4019        public AssetPromise_Material(AssetPromise_Material_Model model)
 20        {
 4021            this.model = model;
 4022        }
 23
 3524        protected override void OnAfterLoadOrReuse() { }
 25
 4126        protected override void OnBeforeLoadOrReuse() { }
 27
 28        protected override void OnCancelLoading()
 29        {
 630            AssetPromiseKeeper_Texture.i.Forget(emissiveTexturePromise);
 631            AssetPromiseKeeper_Texture.i.Forget(alphaTexturetPromise);
 632            AssetPromiseKeeper_Texture.i.Forget(albedoTexturePromise);
 633            AssetPromiseKeeper_Texture.i.Forget(bumpTexturePormise);
 34
 635            CoroutineStarter.Stop(loadCoroutine);
 636            loadCoroutine = null;
 637        }
 38
 39        protected override void OnLoad(Action OnSuccess, Action<Exception> OnFail)
 40        {
 3441            CoroutineStarter.Stop(loadCoroutine);
 3442            loadCoroutine = CoroutineStarter.Start(CreateMaterial(model, OnSuccess, OnFail));
 3443        }
 44
 45        public override object GetId()
 46        {
 21147            return model;
 48        }
 49
 50        protected override bool AddToLibrary()
 51        {
 2852            if (!library.Add(asset))
 53            {
 054                return false;
 55            }
 56
 2857            asset = library.Get(asset.id);
 2858            return true;
 59        }
 60
 61        private IEnumerator CreateMaterial(AssetPromise_Material_Model model, Action OnSuccess, Action<Exception> OnFail
 62        {
 3463            Material material = model.isPbrMaterial ? PBRMaterial.Create() : BasicMaterial.Create();
 64#if UNITY_EDITOR
 3465            material.name = $"{(model.isPbrMaterial ? "PBRMaterial_" : "BasicMaterial_")}{model.GetHashCode()}";
 66#endif
 3467            if (model.isPbrMaterial)
 68            {
 1969                PBRMaterial.SetUpColors(material, model.albedoColor, model.emissiveColor, model.reflectivityColor, model
 1970                PBRMaterial.SetUpProps(material, model.metallic, model.roughness, model.glossiness, model.specularIntens
 1971                PBRMaterial.SetUpTransparency(material, model.transparencyMode, model.alphaTexture, model.albedoColor, m
 72            }
 73            else
 74            {
 1575                BasicMaterial.SetUp(material, model.alphaTest);
 76            }
 77
 3478            albedoTexturePromise = CreateTexturePromise(model.albedoTexture);
 3479            emissiveTexturePromise = CreateTexturePromise(model.emissiveTexture);
 3480            alphaTexturetPromise = CreateTexturePromise(model.alphaTexture);
 3481            bumpTexturePormise = CreateTexturePromise(model.bumpTexture);
 82
 3483            yield return WaitAll(albedoTexturePromise, emissiveTexturePromise, alphaTexturetPromise, bumpTexturePormise)
 84
 2885            if (albedoTexturePromise?.state == AssetPromiseState.FINISHED)
 86            {
 1887                material.SetTexture(ShaderUtils.BaseMap, albedoTexturePromise.asset.texture);
 88            }
 89
 2890            if (model.isPbrMaterial)
 91            {
 1892                if (emissiveTexturePromise?.state == AssetPromiseState.FINISHED)
 93                {
 094                    material.SetTexture(ShaderUtils.EmissionMap, emissiveTexturePromise.asset.texture);
 95                }
 1896                if (alphaTexturetPromise?.state == AssetPromiseState.FINISHED)
 97                {
 098                    material.SetTexture(ShaderUtils.AlphaTexture, alphaTexturetPromise.asset.texture);
 99                }
 18100                if (bumpTexturePormise?.state == AssetPromiseState.FINISHED)
 101                {
 0102                    material.SetTexture(ShaderUtils.BumpMap, bumpTexturePormise.asset.texture);
 103                }
 104            }
 105
 28106            SRPBatchingHelper.OptimizeMaterial(material);
 107
 28108            asset.material = material;
 28109            asset.emissiveTexturePromise = emissiveTexturePromise;
 28110            asset.alphaTexturetPromise = alphaTexturetPromise;
 28111            asset.albedoTexturePromise = albedoTexturePromise;
 28112            asset.bumpTexturePormise = bumpTexturePormise;
 113
 28114            OnSuccess?.Invoke();
 28115        }
 116
 117        private static AssetPromise_Texture CreateTexturePromise(AssetPromise_Material_Model.Texture? textureData)
 118        {
 136119            if (textureData == null)
 113120                return null;
 121
 23122            AssetPromise_Material_Model.Texture texture = textureData.Value;
 23123            var promise = new AssetPromise_Texture(texture.src, texture.wrapMode, texture.filterMode);
 23124            AssetPromiseKeeper_Texture.i.Keep(promise);
 23125            return promise;
 126        }
 127
 128        private static IEnumerator WaitAll(AssetPromise_Texture p1, AssetPromise_Texture p2, AssetPromise_Texture p3, As
 129        {
 34130            if (p1 != null)
 23131                yield return p1;
 132
 29133            if (p2 != null)
 0134                yield return p2;
 135
 29136            if (p3 != null)
 0137                yield return p3;
 138
 29139            if (p4 != null)
 0140                yield return p4;
 29141        }
 142    }
 143}