< 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:58
Uncovered lines:3
Coverable lines:61
Total lines:143
Line coverage:95% (58 of 61)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
OnPointerEventColliders()0%110100%
GetMeshName(...)0%220100%
Initialize(...)0%13.0213095%
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))
 320                return colliderNames[collider];
 21
 322            return null;
 23        }
 24
 25        private IDCLEntity ownerEntity;
 26
 27        public void Initialize(IDCLEntity entity)
 28        {
 7229            Renderer[] rendererList = entity?.meshesInfo?.renderers;
 30
 7231            if (rendererList == null || rendererList.Length == 0)
 32            {
 1633                if (colliders != null && colliders.Length > 0)
 634                    DestroyColliders();
 35
 1636                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                if (rendererList[i] == null)
 59                    continue;
 5660                colliders[i] = CreateCollider(rendererList[i]);
 61            }
 3862        }
 63
 64        void UpdateCollidersWithRenderersMesh(Renderer[] rendererList)
 65        {
 7666            for (int i = 0; i < colliders.Length; i++)
 67            {
 2068                if(colliders[i].sharedMaterial == null)
 2069                    colliders[i].sharedMesh = rendererList[i].GetComponent<MeshFilter>().sharedMesh;
 70            }
 1871        }
 72
 73        MeshCollider CreateCollider(Renderer renderer)
 74        {
 5675            GameObject go = new GameObject(COLLIDER_NAME);
 76
 5677            go.name = COLLIDER_NAME;
 5678            go.layer = PhysicsLayers.onPointerEventLayer; // to avoid character collisions with onclick collider
 79
 5680            var meshCollider = go.AddComponent<MeshCollider>();
 5681            meshCollider.sharedMesh = renderer.GetComponent<MeshFilter>().sharedMesh;
 5682            meshCollider.enabled = renderer.enabled;
 83
 5684            if (renderer.transform.parent != null)
 5685                colliderNames.Add(meshCollider, renderer.transform.parent.name);
 86
 5687            CollidersManager.i.AddOrUpdateEntityCollider(ownerEntity, meshCollider);
 88
 89            // Reset objects position, rotation and scale once it's been parented
 5690            Transform t = go.transform;
 91
 5692            t.SetParent(renderer.transform);
 5693            t.ResetLocalTRS();
 94
 5695            return meshCollider;
 96        }
 97
 98        private bool AreCollidersCreated(Renderer[] rendererList)
 99        {
 56100            if (colliders == null || colliders.Length == 0)
 38101                return false;
 102
 18103            if (rendererList.Length != colliders.Length)
 0104                return false;
 105
 76106            for (int i = 0; i < rendererList.Length; i++)
 107            {
 20108                bool foundChildCollider = false;
 46109                for (int j = 0; j < colliders.Length; j++)
 110                {
 23111                    if (colliders[j].transform.parent == rendererList[i].transform)
 112                    {
 20113                        foundChildCollider = true;
 20114                        break;
 115                    }
 116                }
 117
 20118                if (!foundChildCollider)
 0119                    return false;
 120            }
 121
 18122            return true;
 123        }
 124
 68125        public void Dispose() { DestroyColliders(); }
 126
 127        void DestroyColliders()
 128        {
 78129            if (colliders == null)
 40130                return;
 131
 188132            for (int i = 0; i < colliders.Length; i++)
 133            {
 56134                Collider collider = colliders[i];
 135
 56136                if (collider != null)
 32137                    UnityEngine.Object.Destroy(collider.gameObject);
 138            }
 139
 38140            colliders = null;
 38141        }
 142    }
 143}