< Summary

Class:ECSComponentsUtils
Assembly:ECSComponents.Utils
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/Utils/ECSComponentsUtils.cs
Covered lines:50
Uncovered lines:16
Coverable lines:66
Total lines:172
Line coverage:75.7% (50 of 66)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
RemoveMaterialTransition(...)0%6200%
UpdateMeshInfo(...)0%220100%
UpdateMeshInfoColliders(...)0%5.264057.14%
GeneratePrimitive(...)0%110100%
UpdateRenderer(...)0%110100%
ConfigurePrimitiveShapeVisibility(...)0%7.736063.64%
RemoveRendereableFromDataStore(...)0%110100%
AddRendereableToDataStore(...)0%110100%
DisposeMeshInfo(...)0%4.044086.67%
CalculateNFTCollidersLayer(...)0%12300%
CalculateCollidersLayer(...)0%3.583060%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/Utils/ECSComponentsUtils.cs

#LineLine coverage
 1using System.Collections;
 2using System.Collections.Generic;
 3using DCL;
 4using DCL.Configuration;
 5using DCL.ECSComponents;
 6using DCL.Helpers;
 7using DCL.Models;
 8using UnityEngine;
 9
 10public static class ECSComponentsUtils
 11{
 12    public static void RemoveMaterialTransition(GameObject go)
 13    {
 014        MaterialTransitionController[] materialTransitionControllers = go.GetComponentsInChildren<MaterialTransitionCont
 15
 016        for (var i = 0; i < materialTransitionControllers.Length; i++)
 17        {
 018            GameObject.Destroy(materialTransitionControllers[i]);
 19        }
 020    }
 21
 22    public static void UpdateMeshInfo(bool isVisible, bool withCollisions, bool isPointerBlocker, MeshesInfo meshesInfo)
 23    {
 424        foreach (Renderer renderer in meshesInfo.renderers)
 25        {
 126            renderer.enabled = isVisible;
 27        }
 28
 129        UpdateMeshInfoColliders(withCollisions, isPointerBlocker, meshesInfo);
 130    }
 31
 32    public static void UpdateMeshInfoColliders(bool withCollisions, bool isPointerBlocker, MeshesInfo meshesInfo)
 33    {
 234        int colliderLayer = isPointerBlocker ? PhysicsLayers.onPointerEventLayer : PhysicsLayers.defaultLayer;
 35
 436        foreach (Collider collider in meshesInfo.colliders)
 37        {
 038            collider.enabled = withCollisions;
 039            collider.gameObject.layer = colliderLayer;
 40        }
 241    }
 42
 43    public static MeshesInfo GeneratePrimitive(IDCLEntity entity, Mesh mesh, GameObject gameObject,bool visible, bool wi
 44    {
 45        // We create the unity components needed to generate the primitive
 2646        MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>();
 2647        meshFilter.sharedMesh = mesh;
 2648        MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();
 2649        meshRenderer.sharedMaterial = Utils.EnsureResourcesMaterial("Materials/Default");
 2650        Renderer[] renderers = new Renderer[] { meshRenderer };
 2651        MeshFilter[] meshFilters = new MeshFilter[] { meshFilter };
 52
 53        // We generate the mesh info on the entity, so we can use on other systems
 2654        MeshesInfo meshesInfo = new MeshesInfo();
 2655        meshesInfo.innerGameObject = gameObject;
 2656        meshesInfo.meshRootGameObject = gameObject;
 2657        meshesInfo.UpdateRenderersCollection(renderers,meshFilters);
 58
 59        // We generate the representation of the primitive and assign it to the meshInfo
 2660        ShapeRepresentation shape = new ShapeRepresentation();
 2661        shape.UpdateModel(visible, withCollisions);
 2662        meshesInfo.currentShape = shape;
 63
 64        // We should remove this relation in the future, the entity shouldn't know about the mesh
 2665        entity.meshesInfo = meshesInfo;
 66
 67        // We update the rendering
 2668        UpdateRenderer(entity, gameObject, renderers, visible, withCollisions, isPointerBlocker);
 69
 2670        return meshesInfo;
 71    }
 72
 73    public static void UpdateRenderer(IDCLEntity entity, GameObject meshGameObject, Renderer[] renderers,bool visible, b
 74    {
 2775        ConfigurePrimitiveShapeVisibility(meshGameObject, visible,renderers);
 76
 77        // TODO: For better perfomance we should create the correct collider to each component shape instead of creating
 2778        CollidersManager.i.ConfigureColliders(entity.meshRootGameObject,withCollisions, false, entity,CalculateColliders
 2779    }
 80
 81    public static void ConfigurePrimitiveShapeVisibility(GameObject meshGameObject, bool shouldBeVisible, Renderer[] mes
 82    {
 2783        if (meshGameObject == null)
 084            return;
 85
 86        Collider onPointerEventCollider;
 87
 10888        for (var i = 0; i < meshRenderers.Length; i++)
 89        {
 2790            meshRenderers[i].enabled = shouldBeVisible;
 91
 2792            if (meshRenderers[i].transform.childCount > 0)
 93            {
 094                onPointerEventCollider = meshRenderers[i].transform.GetChild(0).GetComponent<Collider>();
 95
 096                if (onPointerEventCollider != null && onPointerEventCollider.gameObject.layer == PhysicsLayers.onPointer
 097                    onPointerEventCollider.enabled = shouldBeVisible;
 98            }
 99        }
 27100    }
 101
 102    public static void RemoveRendereableFromDataStore(string sceneId, Rendereable rendereable)
 103    {
 23104        DataStore.i.sceneWorldObjects.RemoveRendereable(sceneId, rendereable);
 23105    }
 106
 107    public static Rendereable AddRendereableToDataStore(string sceneId, long entityId, Mesh mesh, GameObject gameObject,
 108    {
 28109        int triangleCount = mesh.triangles.Length;
 110
 28111        var newRendereable =
 112            new Rendereable()
 113            {
 114                container = gameObject,
 115                totalTriangleCount = triangleCount,
 116                meshes = new HashSet<Mesh>() { mesh },
 117                meshToTriangleCount = new Dictionary<Mesh, int>() { { mesh, triangleCount } }
 118            };
 119
 28120        newRendereable.renderers = new HashSet<Renderer>(renderers);
 28121        newRendereable.ownerId = entityId;
 122
 28123        DataStore.i.sceneWorldObjects.AddRendereable(sceneId, newRendereable);
 28124        return newRendereable;
 125    }
 126
 127    public static void DisposeMeshInfo(MeshesInfo meshesInfo)
 128    {
 129        // Dispose renderer
 100130        foreach (Renderer renderer in meshesInfo.renderers)
 131        {
 24132            Utils.CleanMaterials(renderer);
 24133            GameObject.Destroy(renderer);
 134        }
 135
 136        // Dispose Mesh filter
 100137        foreach (MeshFilter meshFilter in meshesInfo.meshFilters)
 138        {
 24139            GameObject.Destroy(meshFilter);
 140        }
 141
 142        // Dispose collider
 52143        foreach (Collider collider in meshesInfo.colliders)
 144        {
 0145            GameObject.Destroy(collider);
 146        }
 147
 26148        meshesInfo.CleanReferences();
 26149    }
 150
 151    public static int CalculateNFTCollidersLayer(bool withCollisions, bool isPointerBlocker)
 152    {
 153        // We can't enable this layer changer logic until we redeploy all the builder and street scenes with the correct
 154        /* if (!model.withCollisions && model.isPointerBlocker)
 155            return PhysicsLayers.onPointerEventLayer;
 156        else */
 0157        if (withCollisions && !isPointerBlocker)
 0158            return PhysicsLayers.characterOnlyLayer;
 159
 0160        return PhysicsLayers.defaultLayer;
 161    }
 162
 163    private static int CalculateCollidersLayer(bool withCollisions, bool isPointerBlocker)
 164    {
 27165        if (isPointerBlocker)
 0166            return PhysicsLayers.onPointerEventLayer;
 27167        else if (withCollisions)
 0168            return PhysicsLayers.characterOnlyLayer;
 169
 27170        return PhysicsLayers.defaultLayer;
 171    }
 172}