< 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:144
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;
 5using DCL.Shaders;
 6
 7namespace DCL
 8{
 9    public class AssetPromise_Material : AssetPromise<Asset_Material>
 10    {
 11        private readonly AssetPromise_Material_Model model;
 12
 13        private AssetPromise_Texture emissiveTexturePromise;
 14        private AssetPromise_Texture alphaTexturetPromise;
 15        private AssetPromise_Texture albedoTexturePromise;
 16        private AssetPromise_Texture bumpTexturePormise;
 17
 18        private Coroutine loadCoroutine;
 19
 4020        public AssetPromise_Material(AssetPromise_Material_Model model)
 21        {
 4022            this.model = model;
 4023        }
 24
 3525        protected override void OnAfterLoadOrReuse() { }
 26
 4127        protected override void OnBeforeLoadOrReuse() { }
 28
 29        protected override void OnCancelLoading()
 30        {
 631            AssetPromiseKeeper_Texture.i.Forget(emissiveTexturePromise);
 632            AssetPromiseKeeper_Texture.i.Forget(alphaTexturetPromise);
 633            AssetPromiseKeeper_Texture.i.Forget(albedoTexturePromise);
 634            AssetPromiseKeeper_Texture.i.Forget(bumpTexturePormise);
 35
 636            CoroutineStarter.Stop(loadCoroutine);
 637            loadCoroutine = null;
 638        }
 39
 40        protected override void OnLoad(Action OnSuccess, Action<Exception> OnFail)
 41        {
 3442            CoroutineStarter.Stop(loadCoroutine);
 3443            loadCoroutine = CoroutineStarter.Start(CreateMaterial(model, OnSuccess, OnFail));
 3444        }
 45
 46        public override object GetId()
 47        {
 21148            return model;
 49        }
 50
 51        protected override bool AddToLibrary()
 52        {
 2853            if (!library.Add(asset))
 54            {
 055                return false;
 56            }
 57
 2858            asset = library.Get(asset.id);
 2859            return true;
 60        }
 61
 62        private IEnumerator CreateMaterial(AssetPromise_Material_Model model, Action OnSuccess, Action<Exception> OnFail
 63        {
 3464            Material material = model.isPbrMaterial ? PBRMaterial.Create() : BasicMaterial.Create();
 65#if UNITY_EDITOR
 3466            material.name = $"{(model.isPbrMaterial ? "PBRMaterial_" : "BasicMaterial_")}{model.GetHashCode()}";
 67#endif
 3468            if (model.isPbrMaterial)
 69            {
 1970                PBRMaterial.SetUpColors(material, model.albedoColor, model.emissiveColor, model.reflectivityColor, model
 1971                PBRMaterial.SetUpProps(material, model.metallic, model.roughness, model.glossiness, model.specularIntens
 1972                PBRMaterial.SetUpTransparency(material, model.transparencyMode, model.alphaTexture, model.albedoColor, m
 73            }
 74            else
 75            {
 1576                BasicMaterial.SetUp(material, model.alphaTest);
 77            }
 78
 3479            albedoTexturePromise = CreateTexturePromise(model.albedoTexture);
 3480            emissiveTexturePromise = CreateTexturePromise(model.emissiveTexture);
 3481            alphaTexturetPromise = CreateTexturePromise(model.alphaTexture);
 3482            bumpTexturePormise = CreateTexturePromise(model.bumpTexture);
 83
 3484            yield return WaitAll(albedoTexturePromise, emissiveTexturePromise, alphaTexturetPromise, bumpTexturePormise)
 85
 2886            if (albedoTexturePromise?.state == AssetPromiseState.FINISHED)
 87            {
 1888                material.SetTexture(ShaderUtils.BaseMap, albedoTexturePromise.asset.texture);
 89            }
 90
 2891            if (model.isPbrMaterial)
 92            {
 1893                if (emissiveTexturePromise?.state == AssetPromiseState.FINISHED)
 94                {
 095                    material.SetTexture(ShaderUtils.EmissionMap, emissiveTexturePromise.asset.texture);
 96                }
 1897                if (alphaTexturetPromise?.state == AssetPromiseState.FINISHED)
 98                {
 099                    material.SetTexture(ShaderUtils.AlphaTexture, alphaTexturetPromise.asset.texture);
 100                }
 18101                if (bumpTexturePormise?.state == AssetPromiseState.FINISHED)
 102                {
 0103                    material.SetTexture(ShaderUtils.BumpMap, bumpTexturePormise.asset.texture);
 104                }
 105            }
 106
 28107            SRPBatchingHelper.OptimizeMaterial(material);
 108
 28109            asset.material = material;
 28110            asset.emissiveTexturePromise = emissiveTexturePromise;
 28111            asset.alphaTexturetPromise = alphaTexturetPromise;
 28112            asset.albedoTexturePromise = albedoTexturePromise;
 28113            asset.bumpTexturePormise = bumpTexturePormise;
 114
 28115            OnSuccess?.Invoke();
 28116        }
 117
 118        private static AssetPromise_Texture CreateTexturePromise(AssetPromise_Material_Model.Texture? textureData)
 119        {
 136120            if (textureData == null)
 113121                return null;
 122
 23123            AssetPromise_Material_Model.Texture texture = textureData.Value;
 23124            var promise = new AssetPromise_Texture(texture.src, texture.wrapMode, texture.filterMode);
 23125            AssetPromiseKeeper_Texture.i.Keep(promise);
 23126            return promise;
 127        }
 128
 129        private static IEnumerator WaitAll(AssetPromise_Texture p1, AssetPromise_Texture p2, AssetPromise_Texture p3, As
 130        {
 34131            if (p1 != null)
 23132                yield return p1;
 133
 29134            if (p2 != null)
 0135                yield return p2;
 136
 29137            if (p3 != null)
 0138                yield return p3;
 139
 29140            if (p4 != null)
 0141                yield return p4;
 29142        }
 143    }
 144}