< Summary

Class:ECSSystems.MaterialSystem.ECSMaterialSystem
Assembly:ECS7Plugin.Systems.Material
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/MaterialSystem/ECSMaterialSystem.cs
Covered lines:21
Uncovered lines:0
Coverable lines:21
Total lines:68
Line coverage:100% (21 of 21)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CreateSystem(...)0%110100%
Update(...)0%880100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/MaterialSystem/ECSMaterialSystem.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL.ECS7.InternalComponents;
 4using DCL.ECSRuntime;
 5using UnityEngine;
 6using UnityEngine.Rendering;
 7
 8namespace ECSSystems.MaterialSystem
 9{
 10    public static class ECSMaterialSystem
 11    {
 12        private class State
 13        {
 14            public IECSReadOnlyComponentsGroup<InternalMaterial, InternalTexturizable> componentsGroup;
 15            public IInternalECSComponent<InternalTexturizable> texturizableComponent;
 16            public IInternalECSComponent<InternalMaterial> materialComponent;
 17        }
 18
 19        public static Action CreateSystem(IECSReadOnlyComponentsGroup<InternalMaterial, InternalTexturizable> components
 20            IInternalECSComponent<InternalTexturizable> texturizableComponent,
 21            IInternalECSComponent<InternalMaterial> materialComponent)
 22        {
 223            var state = new State()
 24            {
 25                componentsGroup = componentsGroup,
 26                texturizableComponent = texturizableComponent,
 27                materialComponent = materialComponent
 28            };
 829            return () => Update(state);
 30        }
 31
 32        private static void Update(State state)
 33        {
 634            var componentGroup = state.componentsGroup.group;
 35
 3436            for (int i = 0; i < componentGroup.Count; i++)
 37            {
 1138                var entityData = componentGroup[i];
 1139                InternalMaterial materialModel = entityData.componentData1.model;
 1140                InternalTexturizable texturizableModel = entityData.componentData2.model;
 41
 42                // if neither component has changed then we skip this entity
 1143                if (!materialModel.dirty && !texturizableModel.dirty)
 44                    continue;
 45
 646                IList<Renderer> renderers = texturizableModel.renderers;
 647                Material material = materialModel.material;
 648                materialModel.renderers = renderers;
 49
 2450                for (int j = 0; j < renderers.Count; j++)
 51                {
 652                    Renderer renderer = renderers[j];
 653                    if (renderer.sharedMaterial != material)
 54                    {
 655                        renderer.sharedMaterial = material;
 56                    }
 657                    renderer.shadowCastingMode = materialModel.castShadows ? ShadowCastingMode.On : ShadowCastingMode.Of
 58                }
 59
 660                materialModel.dirty = false;
 661                texturizableModel.dirty = false;
 62
 663                state.materialComponent.PutFor(entityData.scene, entityData.entity, materialModel);
 664                state.texturizableComponent.PutFor(entityData.scene, entityData.entity, texturizableModel);
 65            }
 666        }
 67    }
 68}