< Summary

Class:DCL.Components.OnPointerEventColliders
Assembly:MainScripts
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/UUIDComponent/OnPointerEventColliders.cs
Covered lines:56
Uncovered lines:4
Coverable lines:60
Total lines:141
Line coverage:93.3% (56 of 60)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
OnPointerEventColliders()0%110100%
GetMeshName(...)0%2.152066.67%
Initialize(...)0%12.0212094.74%
UpdateCollidersWithRenderersMesh(...)0%330100%
CreateCollider(...)0%220100%
AreCollidersCreated(...)0%8.18088.24%
Dispose()0%110100%
DestroyColliders()0%440100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/UUIDComponent/OnPointerEventColliders.cs

#LineLine coverage
 1using System;
 2using DCL.Configuration;
 3using DCL.Helpers;
 4using DCL.Models;
 5using System.Collections.Generic;
 6using UnityEngine;
 7
 8namespace DCL.Components
 9{
 10    public class OnPointerEventColliders : IDisposable
 11    {
 12        public const string COLLIDER_NAME = "OnPointerEventCollider";
 13
 14        internal MeshCollider[] colliders;
 3415        Dictionary<Collider, string> colliderNames = new Dictionary<Collider, string>();
 16
 17        public string GetMeshName(Collider collider)
 18        {
 619            if (colliderNames.ContainsKey(collider))
 020                return colliderNames[collider];
 21
 622            return null;
 23        }
 24
 25        private IDCLEntity ownerEntity;
 26
 27        public void Initialize(IDCLEntity entity)
 28        {
 9729            Renderer[] rendererList = entity?.meshesInfo?.renderers;
 30
 9731            if (rendererList == null || rendererList.Length == 0)
 32            {
 4133                if (colliders != null && colliders.Length > 0)
 3134                    DestroyColliders();
 35
 4136                return;
 37            }
 38
 5639            if (AreCollidersCreated(rendererList))
 40            {
 1841                UpdateCollidersWithRenderersMesh(rendererList);
 1842                return;
 43            }
 44
 3845            IShape shape = entity.meshesInfo.currentShape;
 46
 3847            ownerEntity = entity;
 48
 3849            DestroyColliders();
 50
 3851            if (shape == null)
 052                return;
 53
 3854            colliders = new MeshCollider[rendererList.Length];
 55
 18856            for (int i = 0; i < colliders.Length; i++)
 57            {
 5658                colliders[i] = CreateCollider(rendererList[i]);
 59            }
 3860        }
 61
 62        void UpdateCollidersWithRenderersMesh(Renderer[] rendererList)
 63        {
 7664            for (int i = 0; i < colliders.Length; i++)
 65            {
 2066                if(colliders[i].sharedMaterial == null)
 2067                    colliders[i].sharedMesh = rendererList[i].GetComponent<MeshFilter>().sharedMesh;
 68            }
 1869        }
 70
 71        MeshCollider CreateCollider(Renderer renderer)
 72        {
 5673            GameObject go = new GameObject(COLLIDER_NAME);
 74
 5675            go.name = COLLIDER_NAME;
 5676            go.layer = PhysicsLayers.onPointerEventLayer; // to avoid character collisions with onclick collider
 77
 5678            var meshCollider = go.AddComponent<MeshCollider>();
 5679            meshCollider.sharedMesh = renderer.GetComponent<MeshFilter>().sharedMesh;
 5680            meshCollider.enabled = renderer.enabled;
 81
 5682            if (renderer.transform.parent != null)
 5683                colliderNames.Add(meshCollider, renderer.transform.parent.name);
 84
 5685            CollidersManager.i.AddOrUpdateEntityCollider(ownerEntity, meshCollider);
 86
 87            // Reset objects position, rotation and scale once it's been parented
 5688            Transform t = go.transform;
 89
 5690            t.SetParent(renderer.transform);
 5691            t.ResetLocalTRS();
 92
 5693            return meshCollider;
 94        }
 95
 96        private bool AreCollidersCreated(Renderer[] rendererList)
 97        {
 5698            if (colliders == null || colliders.Length == 0)
 3899                return false;
 100
 18101            if (rendererList.Length != colliders.Length)
 0102                return false;
 103
 76104            for (int i = 0; i < rendererList.Length; i++)
 105            {
 20106                bool foundChildCollider = false;
 46107                for (int j = 0; j < colliders.Length; j++)
 108                {
 23109                    if (colliders[j].transform.parent == rendererList[i].transform)
 110                    {
 20111                        foundChildCollider = true;
 20112                        break;
 113                    }
 114                }
 115
 20116                if (!foundChildCollider)
 0117                    return false;
 118            }
 119
 18120            return true;
 121        }
 122
 68123        public void Dispose() { DestroyColliders(); }
 124
 125        void DestroyColliders()
 126        {
 103127            if (colliders == null)
 65128                return;
 129
 188130            for (int i = 0; i < colliders.Length; i++)
 131            {
 56132                Collider collider = colliders[i];
 133
 56134                if (collider != null)
 50135                    UnityEngine.Object.Destroy(collider.gameObject);
 136            }
 137
 38138            colliders = null;
 38139        }
 140    }
 141}