< 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:58
Uncovered lines:10
Coverable lines:68
Total lines:155
Line coverage:85.2% (58 of 68)
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%3.243070%
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 Cysharp.Threading.Tasks;
 2using System;
 3using System.Collections;
 4using DCL.Helpers;
 5using UnityEngine;
 6using DCL.Shaders;
 7
 8namespace DCL
 9{
 10    public class AssetPromise_Material : AssetPromise<Asset_Material>
 11    {
 12        private readonly AssetPromise_Material_Model model;
 13
 14        private AssetPromise_Texture emissiveTexturePromise;
 15        private AssetPromise_Texture alphaTexturetPromise;
 16        private AssetPromise_Texture albedoTexturePromise;
 17        private AssetPromise_Texture bumpTexturePormise;
 18
 19        private Coroutine loadCoroutine;
 20
 4021        public AssetPromise_Material(AssetPromise_Material_Model model)
 22        {
 4023            this.model = model;
 4024        }
 25
 3526        protected override void OnAfterLoadOrReuse() { }
 27
 4128        protected override void OnBeforeLoadOrReuse() { }
 29
 30        protected override void OnCancelLoading()
 31        {
 632            AssetPromiseKeeper_Texture.i.Forget(emissiveTexturePromise);
 633            AssetPromiseKeeper_Texture.i.Forget(alphaTexturetPromise);
 634            AssetPromiseKeeper_Texture.i.Forget(albedoTexturePromise);
 635            AssetPromiseKeeper_Texture.i.Forget(bumpTexturePormise);
 36
 637            CoroutineStarter.Stop(loadCoroutine);
 638            loadCoroutine = null;
 639        }
 40
 41        protected override void OnLoad(Action OnSuccess, Action<Exception> OnFail)
 42        {
 3443            CoroutineStarter.Stop(loadCoroutine);
 3444            loadCoroutine = CoroutineStarter.Start(CreateMaterial(model, OnSuccess, OnFail));
 3445        }
 46
 47        public override object GetId()
 48        {
 21149            return model;
 50        }
 51
 52        protected override bool AddToLibrary()
 53        {
 2854            if (!library.Add(asset))
 55            {
 056                return false;
 57            }
 58
 2859            asset = library.Get(asset.id);
 2860            return true;
 61        }
 62
 63        private IEnumerator CreateMaterial(AssetPromise_Material_Model model, Action OnSuccess, Action<Exception> OnFail
 64        {
 3465            Material material = model.isPbrMaterial ? PBRMaterial.Create() : BasicMaterial.Create();
 66#if UNITY_EDITOR
 3467            material.name = $"{(model.isPbrMaterial ? "PBRMaterial_" : "BasicMaterial_")}{model.GetHashCode()}";
 68#endif
 3469            if (model.isPbrMaterial)
 70            {
 1971                PBRMaterial.SetUpColors(material, model.albedoColor, model.emissiveColor, model.reflectivityColor, model
 1972                PBRMaterial.SetUpProps(material, model.metallic, model.roughness, model.glossiness, model.specularIntens
 1973                PBRMaterial.SetUpTransparency(material, model.transparencyMode, model.alphaTexture, model.albedoColor, m
 74            }
 75            else
 76            {
 1577                BasicMaterial.SetUp(material, model.alphaTest);
 78            }
 79
 3480            albedoTexturePromise = CreateTexturePromise(model.albedoTexture);
 3481            emissiveTexturePromise = CreateTexturePromise(model.emissiveTexture);
 3482            alphaTexturetPromise = CreateTexturePromise(model.alphaTexture);
 3483            bumpTexturePormise = CreateTexturePromise(model.bumpTexture);
 84
 3485            yield return WaitAll(albedoTexturePromise, emissiveTexturePromise, alphaTexturetPromise, bumpTexturePormise)
 86
 2887            if (albedoTexturePromise?.state == AssetPromiseState.FINISHED)
 88            {
 1889                material.SetTexture(ShaderUtils.BaseMap, albedoTexturePromise.asset.texture);
 90            }
 91
 2892            if (model.isPbrMaterial)
 93            {
 1894                if (emissiveTexturePromise?.state == AssetPromiseState.FINISHED)
 95                {
 096                    material.SetTexture(ShaderUtils.EmissionMap, emissiveTexturePromise.asset.texture);
 97                }
 1898                if (alphaTexturetPromise?.state == AssetPromiseState.FINISHED)
 99                {
 0100                    material.SetTexture(ShaderUtils.AlphaTexture, alphaTexturetPromise.asset.texture);
 101                }
 18102                if (bumpTexturePormise?.state == AssetPromiseState.FINISHED)
 103                {
 0104                    material.SetTexture(ShaderUtils.BumpMap, bumpTexturePormise.asset.texture);
 105                }
 106            }
 107
 28108            SRPBatchingHelper.OptimizeMaterial(material);
 109
 28110            asset.material = material;
 28111            asset.emissiveTexturePromise = emissiveTexturePromise;
 28112            asset.alphaTexturetPromise = alphaTexturetPromise;
 28113            asset.albedoTexturePromise = albedoTexturePromise;
 28114            asset.bumpTexturePormise = bumpTexturePormise;
 115
 28116            OnSuccess?.Invoke();
 28117        }
 118
 119        private static AssetPromise_Texture CreateTexturePromise(AssetPromise_Material_Model.Texture? textureData)
 120        {
 136121            if (textureData == null)
 113122                return null;
 123
 23124            AssetPromise_Material_Model.Texture texture = textureData.Value;
 125
 23126            if (texture.videoTexture)
 127            {
 0128                var promise = new AssetPromise_EmptyTexture();
 0129                AssetPromiseKeeper_Texture.i.Keep(promise);
 0130                return promise;
 131            }
 132            else
 133            {
 23134                var promise = new AssetPromise_Texture(texture.src, texture.wrapMode, texture.filterMode);
 23135                AssetPromiseKeeper_Texture.i.Keep(promise);
 23136                return promise;
 137            }
 138        }
 139
 140        private static IEnumerator WaitAll(AssetPromise_Texture p1, AssetPromise_Texture p2, AssetPromise_Texture p3, As
 141        {
 34142            if (p1 != null)
 23143                yield return p1;
 144
 29145            if (p2 != null)
 0146                yield return p2;
 147
 29148            if (p3 != null)
 0149                yield return p3;
 150
 29151            if (p4 != null)
 0152                yield return p4;
 29153        }
 154    }
 155}