< Summary

Class:ECSComponentsUtils
Assembly:ECSComponents.Utils
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/Utils/ECSComponentsUtils.cs
Covered lines:51
Uncovered lines:17
Coverable lines:68
Total lines:176
Line coverage:75% (51 of 68)
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%8.125050%
GeneratePrimitive(...)0%110100%
UpdateRenderer(...)0%110100%
ConfigurePrimitiveShapeVisibility(...)0%7.736063.64%
RemoveRendereableFromDataStore(...)0%110100%
AddRendereableToDataStore(...)0%110100%
DisposeMeshInfo(...)0%5.165081.25%
CalculateNFTCollidersLayer(...)0%12300%
CalculateCollidersLayer(...)0%3.073080%

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            if (collider == null) continue;
 39
 040            collider.enabled = withCollisions;
 041            collider.gameObject.layer = colliderLayer;
 42        }
 243    }
 44
 45    public static MeshesInfo GeneratePrimitive(IDCLEntity entity, Mesh mesh, GameObject gameObject,bool visible, bool wi
 46    {
 47        // We create the unity components needed to generate the primitive
 2648        MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>();
 2649        meshFilter.sharedMesh = mesh;
 2650        MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();
 2651        meshRenderer.sharedMaterial = Utils.EnsureResourcesMaterial("Materials/Default");
 2652        Renderer[] renderers = new Renderer[] { meshRenderer };
 2653        MeshFilter[] meshFilters = new MeshFilter[] { meshFilter };
 54
 55        // We generate the mesh info on the entity, so we can use on other systems
 2656        MeshesInfo meshesInfo = new MeshesInfo();
 2657        meshesInfo.innerGameObject = gameObject;
 2658        meshesInfo.meshRootGameObject = gameObject;
 2659        meshesInfo.UpdateRenderersCollection(renderers,meshFilters);
 60
 61        // We generate the representation of the primitive and assign it to the meshInfo
 2662        ShapeRepresentation shape = new ShapeRepresentation();
 2663        shape.UpdateModel(visible, withCollisions);
 2664        meshesInfo.currentShape = shape;
 65
 66        // We should remove this relation in the future, the entity shouldn't know about the mesh
 2667        entity.meshesInfo = meshesInfo;
 68
 69        // We update the rendering
 2670        UpdateRenderer(entity, gameObject, renderers, visible, withCollisions, isPointerBlocker);
 71
 2672        return meshesInfo;
 73    }
 74
 75    public static void UpdateRenderer(IDCLEntity entity, GameObject meshGameObject, Renderer[] renderers,bool visible, b
 76    {
 2777        ConfigurePrimitiveShapeVisibility(meshGameObject, visible,renderers);
 78
 79        // TODO: For better perfomance we should create the correct collider to each component shape instead of creating
 2780        CollidersManager.i.ConfigureColliders(entity.meshRootGameObject,withCollisions, false, entity,CalculateColliders
 2781    }
 82
 83    public static void ConfigurePrimitiveShapeVisibility(GameObject meshGameObject, bool shouldBeVisible, Renderer[] mes
 84    {
 2785        if (meshGameObject == null)
 086            return;
 87
 88        Collider onPointerEventCollider;
 89
 10890        for (var i = 0; i < meshRenderers.Length; i++)
 91        {
 2792            meshRenderers[i].enabled = shouldBeVisible;
 93
 2794            if (meshRenderers[i].transform.childCount > 0)
 95            {
 096                onPointerEventCollider = meshRenderers[i].transform.GetChild(0).GetComponent<Collider>();
 97
 098                if (onPointerEventCollider != null && onPointerEventCollider.gameObject.layer == PhysicsLayers.onPointer
 099                    onPointerEventCollider.enabled = shouldBeVisible;
 100            }
 101        }
 27102    }
 103
 104    public static void RemoveRendereableFromDataStore(string sceneId, Rendereable rendereable)
 105    {
 23106        DataStore.i.sceneWorldObjects.RemoveRendereable(sceneId, rendereable);
 23107    }
 108
 109    public static Rendereable AddRendereableToDataStore(string sceneId, long entityId, Mesh mesh, GameObject gameObject,
 110    {
 28111        int triangleCount = mesh.triangles.Length;
 112
 28113        var newRendereable =
 114            new Rendereable()
 115            {
 116                container = gameObject,
 117                totalTriangleCount = triangleCount,
 118                meshes = new HashSet<Mesh>() { mesh },
 119                meshToTriangleCount = new Dictionary<Mesh, int>() { { mesh, triangleCount } }
 120            };
 121
 28122        newRendereable.renderers = new HashSet<Renderer>(renderers);
 28123        newRendereable.ownerId = entityId;
 124
 28125        DataStore.i.sceneWorldObjects.AddRendereable(sceneId, newRendereable);
 28126        return newRendereable;
 127    }
 128
 129    public static void DisposeMeshInfo(MeshesInfo meshesInfo)
 130    {
 131        // Dispose renderer
 100132        foreach (Renderer renderer in meshesInfo.renderers)
 133        {
 24134            Utils.CleanMaterials(renderer);
 24135            GameObject.Destroy(renderer);
 136        }
 137
 138        // Dispose Mesh filter
 100139        foreach (MeshFilter meshFilter in meshesInfo.meshFilters)
 140        {
 24141            GameObject.Destroy(meshFilter);
 142        }
 143
 144        // Dispose collider
 52145        foreach (Collider collider in meshesInfo.colliders)
 146        {
 0147            if (collider == null) continue;
 148
 0149            GameObject.Destroy(collider);
 150        }
 151
 26152        meshesInfo.CleanReferences();
 26153    }
 154
 155    public static int CalculateNFTCollidersLayer(bool withCollisions, bool isPointerBlocker)
 156    {
 157        // We can't enable this layer changer logic until we redeploy all the builder and street scenes with the correct
 158        /* if (!model.withCollisions && model.isPointerBlocker)
 159            return PhysicsLayers.onPointerEventLayer;
 160        else */
 0161        if (withCollisions && !isPointerBlocker)
 0162            return PhysicsLayers.characterOnlyLayer;
 163
 0164        return PhysicsLayers.defaultLayer;
 165    }
 166
 167    private static int CalculateCollidersLayer(bool withCollisions, bool isPointerBlocker)
 168    {
 27169        if (isPointerBlocker)
 26170            return PhysicsLayers.onPointerEventLayer;
 1171        else if (withCollisions)
 0172            return PhysicsLayers.characterOnlyLayer;
 173
 1174        return PhysicsLayers.defaultLayer;
 175    }
 176}