< 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:46
Uncovered lines:4
Coverable lines:50
Total lines:107
Line coverage:92% (46 of 50)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
MeshRendererHandler(...)0%110100%
OnComponentCreated(...)0%110100%
OnComponentRemoved(...)0%220100%
OnComponentModelUpdated(...)0%77095.65%

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 UnityEngine;
 7
 8namespace DCL.ECSComponents
 9{
 10    public class MeshRendererHandler : IECSComponentHandler<PBMeshRenderer>
 11    {
 12        private readonly IInternalECSComponent<InternalTexturizable> texturizableInternalComponent;
 13        private readonly IInternalECSComponent<InternalRenderers> renderersInternalComponent;
 14        private readonly DataStore_ECS7 ecs7DataStore;
 15
 16        private GameObject componentGameObject;
 17        private MeshFilter componentMeshFilter;
 18        private MeshRenderer componentMeshRenderer;
 19
 20        private AssetPromise_PrimitiveMesh primitiveMeshPromise;
 21        private PBMeshRenderer prevModel;
 22
 923        public MeshRendererHandler(
 24            DataStore_ECS7 dataStoreEcs7,
 25            IInternalECSComponent<InternalTexturizable> texturizableComponent,
 26            IInternalECSComponent<InternalRenderers> renderersComponent)
 27        {
 928            texturizableInternalComponent = texturizableComponent;
 929            renderersInternalComponent = renderersComponent;
 930            ecs7DataStore = dataStoreEcs7;
 931        }
 32
 33        public void OnComponentCreated(IParcelScene scene, IDCLEntity entity)
 34        {
 1335            componentGameObject = new GameObject("MeshRenderer");
 1336            componentGameObject.transform.SetParent(entity.gameObject.transform);
 1337            componentGameObject.transform.ResetLocalTRS();
 1338            componentMeshFilter = componentGameObject.AddComponent<MeshFilter>();
 1339            componentMeshRenderer = componentGameObject.AddComponent<MeshRenderer>();
 1340            componentMeshRenderer.sharedMaterial = Utils.EnsureResourcesMaterial("Materials/Default");
 1341            texturizableInternalComponent.AddRenderer(scene, entity, componentMeshRenderer);
 1342            renderersInternalComponent.AddRenderer(scene, entity, componentMeshRenderer);
 1343        }
 44
 45        public void OnComponentRemoved(IParcelScene scene, IDCLEntity entity)
 46        {
 1447            texturizableInternalComponent.RemoveRenderer(scene, entity, componentMeshRenderer);
 1448            renderersInternalComponent.RemoveRenderer(scene, entity, componentMeshRenderer);
 49
 1450            if (prevModel != null)
 1151                ecs7DataStore.RemovePendingResource(scene.sceneData.sceneNumber, prevModel);
 52
 1453            AssetPromiseKeeper_PrimitiveMesh.i.Forget(primitiveMeshPromise);
 1454            Object.Destroy(componentGameObject);
 1455        }
 56
 57        public void OnComponentModelUpdated(IParcelScene scene, IDCLEntity entity, PBMeshRenderer model)
 58        {
 1359            AssetPromise_PrimitiveMesh_Model? promiseModel = null;
 60
 1361            switch (model.MeshCase)
 62            {
 63                case PBMeshRenderer.MeshOneofCase.Box:
 864                    promiseModel = AssetPromise_PrimitiveMesh_Model.CreateBox(model.Box.Uvs);
 865                    break;
 66                case PBMeshRenderer.MeshOneofCase.Sphere:
 167                    promiseModel = AssetPromise_PrimitiveMesh_Model.CreateSphere();
 168                    break;
 69                case PBMeshRenderer.MeshOneofCase.Cylinder:
 270                    promiseModel = AssetPromise_PrimitiveMesh_Model.CreateCylinder(model.Cylinder.GetTopRadius(), model.
 271                    break;
 72                case PBMeshRenderer.MeshOneofCase.Plane:
 173                    promiseModel = AssetPromise_PrimitiveMesh_Model.CreatePlane(model.Plane.Uvs);
 74                    break;
 75            }
 76
 1377            if (!promiseModel.HasValue)
 78            {
 179                AssetPromiseKeeper_PrimitiveMesh.i.Forget(primitiveMeshPromise);
 80
 181                if (prevModel != null)
 082                    ecs7DataStore.RemovePendingResource(scene.sceneData.sceneNumber, prevModel);
 83
 184                return;
 85            }
 86
 1287            AssetPromise_PrimitiveMesh prevPromise = primitiveMeshPromise;
 1288            prevModel = model;
 89
 1290            primitiveMeshPromise = new AssetPromise_PrimitiveMesh(promiseModel.Value);
 1291            primitiveMeshPromise.OnSuccessEvent += shape =>
 92            {
 1293                componentMeshFilter.sharedMesh = shape.mesh;
 1294                ecs7DataStore.RemovePendingResource(scene.sceneData.sceneNumber, model);
 1295            };
 1296            primitiveMeshPromise.OnFailEvent += (mesh, exception) =>
 97            {
 098                ecs7DataStore.RemovePendingResource(scene.sceneData.sceneNumber, model);
 099                Debug.LogException(exception);
 0100            };
 101
 12102            ecs7DataStore.AddPendingResource(scene.sceneData.sceneNumber, model);
 12103            AssetPromiseKeeper_PrimitiveMesh.i.Keep(primitiveMeshPromise);
 12104            AssetPromiseKeeper_PrimitiveMesh.i.Forget(prevPromise);
 12105        }
 106    }
 107}