< 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:51
Uncovered lines:4
Coverable lines:55
Total lines:129
Line coverage:92.7% (51 of 55)
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.44%
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 Collider[] colliders;
 3215        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        {
 9229            Renderer[] rendererList = entity?.meshesInfo?.renderers;
 30
 9231            if (rendererList == null || rendererList.Length == 0)
 32            {
 3933                if (colliders != null && colliders.Length > 0)
 3034                    DestroyColliders();
 35
 3936                return;
 37            }
 38
 5339            if (AreCollidersCreated(rendererList))
 1740                return;
 41
 3642            IShape shape = entity.meshesInfo.currentShape;
 43
 3644            ownerEntity = entity;
 45
 3646            DestroyColliders();
 47
 3648            if (shape == null)
 049                return;
 50
 3651            colliders = new Collider[rendererList.Length];
 52
 18053            for (int i = 0; i < colliders.Length; i++)
 54            {
 5455                colliders[i] = CreateCollider(rendererList[i]);
 56            }
 3657        }
 58
 59        Collider CreateCollider(Renderer renderer)
 60        {
 5461            GameObject go = new GameObject(COLLIDER_NAME);
 62
 5463            go.name = COLLIDER_NAME;
 5464            go.layer = PhysicsLayers.onPointerEventLayer; // to avoid character collisions with onclick collider
 65
 5466            var meshCollider = go.AddComponent<MeshCollider>();
 5467            meshCollider.sharedMesh = renderer.GetComponent<MeshFilter>().sharedMesh;
 5468            meshCollider.enabled = renderer.enabled;
 69
 5470            if (renderer.transform.parent != null)
 5471                colliderNames.Add(meshCollider, renderer.transform.parent.name);
 72
 5473            CollidersManager.i.AddOrUpdateEntityCollider(ownerEntity, meshCollider);
 74
 75            // Reset objects position, rotation and scale once it's been parented
 5476            Transform t = go.transform;
 77
 5478            t.SetParent(renderer.transform);
 5479            t.ResetLocalTRS();
 80
 5481            return meshCollider;
 82        }
 83
 84        private bool AreCollidersCreated(Renderer[] rendererList)
 85        {
 5386            if (colliders == null || colliders.Length == 0)
 3687                return false;
 88
 1789            if (rendererList.Length != colliders.Length)
 090                return false;
 91
 7292            for (int i = 0; i < rendererList.Length; i++)
 93            {
 1994                bool foundChildCollider = false;
 4495                for (int j = 0; j < colliders.Length; j++)
 96                {
 2297                    if (colliders[j].transform.parent == rendererList[i].transform)
 98                    {
 1999                        foundChildCollider = true;
 19100                        break;
 101                    }
 102                }
 103
 19104                if (!foundChildCollider)
 0105                    return false;
 106            }
 107
 17108            return true;
 109        }
 110
 64111        public void Dispose() { DestroyColliders(); }
 112
 113        void DestroyColliders()
 114        {
 98115            if (colliders == null)
 62116                return;
 117
 180118            for (int i = 0; i < colliders.Length; i++)
 119            {
 54120                Collider collider = colliders[i];
 121
 54122                if (collider != null)
 48123                    UnityEngine.Object.Destroy(collider.gameObject);
 124            }
 125
 36126            colliders = null;
 36127        }
 128    }
 129}