< Summary

Class:DCL.ECSComponents.MaterialHandler
Assembly:DCL.ECSComponents.Material
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/Material/MaterialHandler.cs
Covered lines:26
Uncovered lines:13
Coverable lines:39
Total lines:112
Line coverage:66.6% (26 of 39)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
MaterialHandler(...)0%2100%
OnComponentCreated(...)0%2100%
OnComponentRemoved(...)0%110100%
OnComponentModelUpdated(...)0%6.566075%
CreatePBRMaterialPromiseModel(...)0%2100%
CreateBasicMaterialPromiseModel(...)0%110100%
CreateMaterialPromiseTextureModel(...)0%5.264057.14%
IsPbrMaterial(...)0%13130100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/Material/MaterialHandler.cs

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.ECS7.InternalComponents;
 3using DCL.ECSRuntime;
 4using DCL.Models;
 5
 6namespace DCL.ECSComponents
 7{
 8    public class MaterialHandler : IECSComponentHandler<PBMaterial>
 9    {
 10        private PBMaterial lastModel = null;
 11        internal AssetPromise_Material promiseMaterial;
 12
 13        private readonly IInternalECSComponent<InternalMaterial> materialInternalComponent;
 14
 015        public MaterialHandler(IInternalECSComponent<InternalMaterial> materialInternalComponent)
 16        {
 017            this.materialInternalComponent = materialInternalComponent;
 018        }
 19
 020        public void OnComponentCreated(IParcelScene scene, IDCLEntity entity) { }
 21
 22        public void OnComponentRemoved(IParcelScene scene, IDCLEntity entity)
 23        {
 224            materialInternalComponent.RemoveFor(scene, entity);
 225            AssetPromiseKeeper_Material.i.Forget(promiseMaterial);
 226        }
 27
 28        public void OnComponentModelUpdated(IParcelScene scene, IDCLEntity entity, PBMaterial model)
 29        {
 1030            if (lastModel != null && lastModel.Equals(model))
 231                return;
 32
 833            lastModel = model;
 34
 835            AssetPromise_Material_Model? promiseModel = null;
 836            AssetPromise_Material_Model.Texture? albedoTexture = CreateMaterialPromiseTextureModel(model.Texture, scene)
 37
 838            if (IsPbrMaterial(model))
 39            {
 040                AssetPromise_Material_Model.Texture? alphaTexture = CreateMaterialPromiseTextureModel(model.AlphaTexture
 041                AssetPromise_Material_Model.Texture? emissiveTexture = CreateMaterialPromiseTextureModel(model.EmissiveT
 042                AssetPromise_Material_Model.Texture? bumpTexture = CreateMaterialPromiseTextureModel(model.BumpTexture, 
 043                promiseModel = CreatePBRMaterialPromiseModel(model, albedoTexture, alphaTexture, emissiveTexture, bumpTe
 044            }
 845            else if (albedoTexture.HasValue)
 46            {
 847                promiseModel = CreateBasicMaterialPromiseModel(model, albedoTexture.Value);
 48            }
 49
 850            AssetPromise_Material prevPromise = promiseMaterial;
 51
 852            if (promiseModel.HasValue)
 53            {
 854                promiseMaterial = new AssetPromise_Material(promiseModel.Value);
 855                promiseMaterial.OnSuccessEvent += materialAsset =>
 56                {
 857                    materialInternalComponent.PutFor(scene, entity, new InternalMaterial()
 58                    {
 59                        material = materialAsset.material,
 60                        dirty = true
 61                    });
 862                };
 863                AssetPromiseKeeper_Material.i.Keep(promiseMaterial);
 64            }
 65
 866            AssetPromiseKeeper_Material.i.Forget(prevPromise);
 867        }
 68
 69        private static AssetPromise_Material_Model CreatePBRMaterialPromiseModel(PBMaterial model,
 70            AssetPromise_Material_Model.Texture? albedoTexture, AssetPromise_Material_Model.Texture? alphaTexture,
 71            AssetPromise_Material_Model.Texture? emissiveTexture, AssetPromise_Material_Model.Texture? bumpTexture)
 72        {
 073            return AssetPromise_Material_Model.CreatePBRMaterial(albedoTexture, alphaTexture, emissiveTexture, bumpTextu
 74                model.GetAlphaTest(), model.GetAlbedoColor().ToUnityColor(), model.GetEmissiveColor().ToUnityColor(),
 75                model.GetReflectiveColor().ToUnityColor(), (AssetPromise_Material_Model.TransparencyMode)model.GetTransp
 76                model.GetRoughness(), model.GetGlossiness(), model.GetSpecularIntensity(),
 77                model.GetEmissiveIntensity(), model.GetDirectIntensity());
 78        }
 79
 80        private static AssetPromise_Material_Model CreateBasicMaterialPromiseModel(PBMaterial model, AssetPromise_Materi
 81        {
 882            return AssetPromise_Material_Model.CreateBasicMaterial(albedoTexture, model.GetAlphaTest());
 83        }
 84
 85        private static AssetPromise_Material_Model.Texture? CreateMaterialPromiseTextureModel(PBMaterial.Types.Texture t
 86        {
 887            if (textureModel == null)
 088                return null;
 89
 890            if (string.IsNullOrEmpty(textureModel.Src))
 091                return null;
 92
 893            if (!scene.contentProvider.TryGetContentsUrl(textureModel.Src, out string url))
 94            {
 095                return null;
 96            }
 97
 898            return new AssetPromise_Material_Model.Texture(url,
 99                (UnityEngine.TextureWrapMode)textureModel.GetWrapMode(),
 100                (UnityEngine.FilterMode)textureModel.GetFilterMode());
 101        }
 102
 103        private static bool IsPbrMaterial(PBMaterial model)
 104        {
 8105            return (model.AlphaTexture != null || model.BumpTexture != null || model.EmissiveTexture != null
 106                    || model.HasGlossiness || model.HasMetallic || model.HasRoughness || model.HasDirectIntensity
 107                    || model.HasEmissiveIntensity || model.HasSpecularIntensity
 108                    || model.AlbedoColor != null || model.EmissiveColor != null || model.ReflectivityColor != null
 109                    || model.HasTransparencyMode);
 110        }
 111    }
 112}