< 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:22
Uncovered lines:10
Coverable lines:32
Total lines:117
Line coverage:68.7% (22 of 32)
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%15.6612070.59%
CreatePBRMaterialPromiseModel(...)0%2100%
CreateBasicMaterialPromiseModel(...)0%110100%
CreateMaterialPromiseTextureModel(...)0%220100%
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, new InternalMaterial() { material = null });
 225            AssetPromiseKeeper_Material.i.Forget(promiseMaterial);
 226        }
 27
 28        public void OnComponentModelUpdated(IParcelScene scene, IDCLEntity entity, PBMaterial model)
 29        {
 1230            if (lastModel != null && lastModel.Equals(model))
 231                return;
 32
 1033            lastModel = model;
 34
 35            AssetPromise_Material_Model promiseModel;
 1036            AssetPromise_Material_Model.Texture? albedoTexture = model.Texture != null ? CreateMaterialPromiseTextureMod
 37                model.Texture.GetTextureUrl(scene),
 38                model.Texture.GetWrapMode(),
 39                model.Texture.GetFilterMode()
 40            ) : null;
 41
 1042            if (IsPbrMaterial(model))
 43            {
 044                AssetPromise_Material_Model.Texture? alphaTexture = model.AlphaTexture != null ? CreateMaterialPromiseTe
 45                    model.AlphaTexture.GetTextureUrl(scene),
 46                    model.AlphaTexture.GetWrapMode(),
 47                    model.AlphaTexture.GetFilterMode()
 48                ) : null;
 49
 050                AssetPromise_Material_Model.Texture? emissiveTexture = model.EmissiveTexture != null ? CreateMaterialPro
 51                    model.EmissiveTexture.GetTextureUrl(scene),
 52                    model.EmissiveTexture.GetWrapMode(),
 53                    model.EmissiveTexture.GetFilterMode()
 54                ) : null;
 55
 056                AssetPromise_Material_Model.Texture? bumpTexture = model.BumpTexture != null ? CreateMaterialPromiseText
 57                    model.BumpTexture.GetTextureUrl(scene),
 58                    model.BumpTexture.GetWrapMode(),
 59                    model.BumpTexture.GetFilterMode()
 60                ) : null;
 61
 062                promiseModel = CreatePBRMaterialPromiseModel(model, albedoTexture, alphaTexture, emissiveTexture, bumpTe
 063            }
 64            else
 65            {
 1066                promiseModel = CreateBasicMaterialPromiseModel(model, albedoTexture);
 67            }
 68
 1069            AssetPromise_Material prevPromise = promiseMaterial;
 70
 1071            promiseMaterial = new AssetPromise_Material(promiseModel);
 1072            promiseMaterial.OnSuccessEvent += materialAsset =>
 73            {
 1074                materialInternalComponent.PutFor(scene, entity, new InternalMaterial()
 75                {
 76                    material = materialAsset.material
 77                });
 1078            };
 1079            AssetPromiseKeeper_Material.i.Keep(promiseMaterial);
 80
 1081            AssetPromiseKeeper_Material.i.Forget(prevPromise);
 1082        }
 83
 84        private static AssetPromise_Material_Model CreatePBRMaterialPromiseModel(PBMaterial model,
 85            AssetPromise_Material_Model.Texture? albedoTexture, AssetPromise_Material_Model.Texture? alphaTexture,
 86            AssetPromise_Material_Model.Texture? emissiveTexture, AssetPromise_Material_Model.Texture? bumpTexture)
 87        {
 088            return AssetPromise_Material_Model.CreatePBRMaterial(albedoTexture, alphaTexture, emissiveTexture, bumpTextu
 89                model.GetAlphaTest(), model.GetAlbedoColor().ToUnityColor(), model.GetEmissiveColor().ToUnityColor(),
 90                model.GetReflectiveColor().ToUnityColor(), (AssetPromise_Material_Model.TransparencyMode)model.GetTransp
 91                model.GetRoughness(), model.GetGlossiness(), model.GetSpecularIntensity(),
 92                model.GetEmissiveIntensity(), model.GetDirectIntensity());
 93        }
 94
 95        private static AssetPromise_Material_Model CreateBasicMaterialPromiseModel(PBMaterial model, AssetPromise_Materi
 96        {
 1097            return AssetPromise_Material_Model.CreateBasicMaterial(albedoTexture, model.GetAlphaTest());
 98        }
 99
 100        private static AssetPromise_Material_Model.Texture? CreateMaterialPromiseTextureModel(string textureUrl, UnityEn
 101        {
 10102            if (string.IsNullOrEmpty(textureUrl))
 2103                return null;
 104
 8105            return new AssetPromise_Material_Model.Texture(textureUrl, wrapMode, filterMode);
 106        }
 107
 108        private static bool IsPbrMaterial(PBMaterial model)
 109        {
 10110            return (model.AlphaTexture != null || model.BumpTexture != null || model.EmissiveTexture != null
 111                    || model.HasGlossiness || model.HasMetallic || model.HasRoughness || model.HasDirectIntensity
 112                    || model.HasEmissiveIntensity || model.HasSpecularIntensity
 113                    || model.AlbedoColor != null || model.EmissiveColor != null || model.ReflectivityColor != null
 114                    || model.HasTransparencyMode);
 115        }
 116    }
 117}