< Summary

Class:DCL.ECSComponents.MeshRendererHandler
Assembly:DCL.ECSComponents.MeshRenderer
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/MeshRenderer/MeshRendererHandler.cs
Covered lines:52
Uncovered lines:16
Coverable lines:68
Total lines:140
Line coverage:76.4% (52 of 68)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:6
Method coverage:66.6% (4 of 6)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
MeshRendererHandler(...)0%110100%
OnComponentCreated(...)0%110100%
OnComponentRemoved(...)0%3.013088.89%
OnComponentModelUpdated(...)0%77095.65%
AddMeshToDatastoreSceneMetrics(...)0%2100%
RemoveMeshFromDatastoreSceneMetrics()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/MeshRenderer/MeshRendererHandler.cs

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.ECS7.InternalComponents;
 3using DCL.ECSRuntime;
 4using DCL.Helpers;
 5using DCL.Models;
 6using System.Collections.Generic;
 7using UnityEngine;
 8
 9namespace DCL.ECSComponents
 10{
 11    public class MeshRendererHandler : IECSComponentHandler<PBMeshRenderer>
 12    {
 13        private readonly IInternalECSComponent<InternalTexturizable> texturizableInternalComponent;
 14        private readonly IInternalECSComponent<InternalRenderers> renderersInternalComponent;
 15        private readonly DataStore_ECS7 ecs7DataStore;
 16        private readonly DataStore_WorldObjects dataStoreWorldObjects;
 17        private readonly bool isDebugMode = false;
 18        private IParcelScene scene;
 19        private GameObject componentGameObject;
 20        private MeshFilter componentMeshFilter;
 21        private MeshRenderer componentMeshRenderer;
 22        private AssetPromise_PrimitiveMesh primitiveMeshPromise;
 23        private PBMeshRenderer prevModel;
 724        private Rendereable currentRendereable = new Rendereable();
 25
 726        public MeshRendererHandler(
 27            DataStore_ECS7 dataStoreEcs7,
 28            IInternalECSComponent<InternalTexturizable> texturizableComponent,
 29            IInternalECSComponent<InternalRenderers> renderersComponent,
 30            DataStore_WorldObjects dataStoreWorldObjects,
 31            DebugConfig debugConfig)
 32        {
 733            texturizableInternalComponent = texturizableComponent;
 734            renderersInternalComponent = renderersComponent;
 735            ecs7DataStore = dataStoreEcs7;
 736            this.dataStoreWorldObjects = dataStoreWorldObjects;
 737            isDebugMode = debugConfig.isDebugMode.Get();
 738        }
 39
 40        public void OnComponentCreated(IParcelScene scene, IDCLEntity entity)
 41        {
 1142            this.scene = scene;
 43
 1144            componentGameObject = new GameObject("MeshRenderer");
 1145            componentGameObject.transform.SetParent(entity.gameObject.transform);
 1146            componentGameObject.transform.ResetLocalTRS();
 1147            componentMeshFilter = componentGameObject.AddComponent<MeshFilter>();
 1148            componentMeshRenderer = componentGameObject.AddComponent<MeshRenderer>();
 1149            componentMeshRenderer.sharedMaterial = Utils.EnsureResourcesMaterial("Materials/Default");
 1150            texturizableInternalComponent.AddRenderer(scene, entity, componentMeshRenderer);
 1151            renderersInternalComponent.AddRenderer(scene, entity, componentMeshRenderer);
 1152        }
 53
 54        public void OnComponentRemoved(IParcelScene scene, IDCLEntity entity)
 55        {
 1256            if (isDebugMode)
 057                RemoveMeshFromDatastoreSceneMetrics();
 58
 1259            texturizableInternalComponent.RemoveRenderer(scene, entity, componentMeshRenderer);
 1260            renderersInternalComponent.RemoveRenderer(scene, entity, componentMeshRenderer);
 61
 1262            if (prevModel != null)
 963                ecs7DataStore.RemovePendingResource(scene.sceneData.sceneNumber, prevModel);
 64
 1265            AssetPromiseKeeper_PrimitiveMesh.i.Forget(primitiveMeshPromise);
 1266            Object.Destroy(componentGameObject);
 1267        }
 68
 69        public void OnComponentModelUpdated(IParcelScene scene, IDCLEntity entity, PBMeshRenderer model)
 70        {
 1171            AssetPromise_PrimitiveMesh_Model? promiseModel = null;
 72
 1173            switch (model.MeshCase)
 74            {
 75                case PBMeshRenderer.MeshOneofCase.Box:
 676                    promiseModel = AssetPromise_PrimitiveMesh_Model.CreateBox(model.Box.Uvs);
 677                    break;
 78                case PBMeshRenderer.MeshOneofCase.Sphere:
 179                    promiseModel = AssetPromise_PrimitiveMesh_Model.CreateSphere();
 180                    break;
 81                case PBMeshRenderer.MeshOneofCase.Cylinder:
 282                    promiseModel = AssetPromise_PrimitiveMesh_Model.CreateCylinder(model.Cylinder.GetTopRadius(), model.
 283                    break;
 84                case PBMeshRenderer.MeshOneofCase.Plane:
 185                    promiseModel = AssetPromise_PrimitiveMesh_Model.CreatePlane(model.Plane.Uvs);
 86                    break;
 87            }
 88
 1189            if (!promiseModel.HasValue)
 90            {
 191                AssetPromiseKeeper_PrimitiveMesh.i.Forget(primitiveMeshPromise);
 92
 193                if (prevModel != null)
 094                    ecs7DataStore.RemovePendingResource(scene.sceneData.sceneNumber, prevModel);
 95
 196                return;
 97            }
 98
 1099            AssetPromise_PrimitiveMesh prevPromise = primitiveMeshPromise;
 10100            prevModel = model;
 101
 10102            primitiveMeshPromise = new AssetPromise_PrimitiveMesh(promiseModel.Value);
 10103            primitiveMeshPromise.OnSuccessEvent += shape =>
 104            {
 10105                componentMeshFilter.sharedMesh = shape.mesh;
 10106                ecs7DataStore.RemovePendingResource(scene.sceneData.sceneNumber, model);
 107
 10108                if (isDebugMode)
 109                {
 0110                    RemoveMeshFromDatastoreSceneMetrics();
 0111                    AddMeshToDatastoreSceneMetrics(entity, shape.mesh);
 112                }
 10113            };
 10114            primitiveMeshPromise.OnFailEvent += (mesh, exception) =>
 115            {
 0116                ecs7DataStore.RemovePendingResource(scene.sceneData.sceneNumber, model);
 0117                Debug.LogException(exception);
 0118            };
 119
 10120            ecs7DataStore.AddPendingResource(scene.sceneData.sceneNumber, model);
 10121            AssetPromiseKeeper_PrimitiveMesh.i.Keep(primitiveMeshPromise);
 10122            AssetPromiseKeeper_PrimitiveMesh.i.Forget(prevPromise);
 10123        }
 124
 125        private void AddMeshToDatastoreSceneMetrics(IDCLEntity entity, Mesh mesh)
 126        {
 0127            int triangleCount = mesh.triangles.Length;
 0128            currentRendereable.totalTriangleCount = triangleCount;
 0129            currentRendereable.meshes = new HashSet<Mesh>() { mesh };
 0130            currentRendereable.meshToTriangleCount = new Dictionary<Mesh, int>() { { mesh, triangleCount } };
 0131            currentRendereable.ownerId = entity.entityId;
 0132            dataStoreWorldObjects.AddRendereable(entity.scene.sceneData.sceneNumber, currentRendereable);
 0133        }
 134
 135        private void RemoveMeshFromDatastoreSceneMetrics()
 136        {
 0137            dataStoreWorldObjects.RemoveRendereable(scene.sceneData.sceneNumber, currentRendereable);
 0138        }
 139    }
 140}