< Summary

Class:EntityWireframe
Assembly:DebugPlugins_ShapesBoundingBoxDisplayer
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/DebugPlugins/ShapesBoundingBoxDisplayer/EntityWireframe.cs
Covered lines:0
Uncovered lines:43
Coverable lines:43
Total lines:96
Line coverage:0% (0 of 43)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
EntityWireframe(...)0%2100%
Dispose()0%2100%
OnShapeUpdated(...)0%12300%
OnShapeCleaned(...)0%2100%
LateUpdate()0%6200%
CleanWireframe()0%6200%
DestroyWireframe(...)0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/DebugPlugins/ShapesBoundingBoxDisplayer/EntityWireframe.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL;
 4using DCL.Models;
 5using DCLPlugins.DebugPlugins.Commons;
 6using UnityEngine;
 7using Object = UnityEngine.Object;
 8
 9internal class EntityWireframe : IShapeListener
 10{
 11    internal const float WIREFRAME_SIZE_MULTIPLIER = 1.01f;
 12
 13    private readonly GameObject wireframeOriginal;
 14    private readonly IUpdateEventHandler updateEventHandler;
 15
 016    internal readonly List<GameObject> entityWireframes = new List<GameObject>();
 17    private MeshesInfo meshesInfo;
 18
 019    public EntityWireframe(GameObject wireframeOriginal, IUpdateEventHandler updateEventHandler)
 20    {
 021        this.wireframeOriginal = wireframeOriginal;
 022        this.updateEventHandler = updateEventHandler;
 023    }
 24
 25    void IDisposable.Dispose()
 26    {
 027        CleanWireframe();
 028    }
 29
 30    void IShapeListener.OnShapeUpdated(IDCLEntity entity)
 31    {
 032        updateEventHandler.RemoveListener(IUpdateEventHandler.EventType.LateUpdate, LateUpdate);
 33
 034        meshesInfo = entity.meshesInfo;
 035        int wireframesCount = entityWireframes.Count;
 036        int renderersCount = meshesInfo.renderers.Length;
 37
 038        for (int i = wireframesCount; i < renderersCount; i++)
 39        {
 040            var wireframe = Object.Instantiate(wireframeOriginal);
 041            wireframe.transform.localScale = Vector3.zero;
 042            wireframe.SetActive(true);
 043            entityWireframes.Add(wireframe);
 44        }
 45
 046        for (int i = wireframesCount; i > renderersCount; i--)
 47        {
 048            int index = i - 1;
 049            DestroyWireframe(entityWireframes[index]);
 050            entityWireframes.RemoveAt(index);
 51        }
 52
 053        updateEventHandler.AddListener(IUpdateEventHandler.EventType.LateUpdate, LateUpdate);
 054    }
 55
 56    void IShapeListener.OnShapeCleaned(IDCLEntity entity)
 57    {
 058        CleanWireframe();
 059    }
 60
 61    internal void LateUpdate()
 62    {
 063        int renderersCount = meshesInfo.renderers.Length;
 64
 065        for (int i = 0; i < renderersCount; i++)
 66        {
 067            Transform wireframeT = entityWireframes[i].transform;
 068            Renderer renderer = meshesInfo.renderers[i];
 069            Bounds rendererBounds = renderer.bounds;
 70
 071            wireframeT.position = rendererBounds.center;
 072            wireframeT.localScale = rendererBounds.size * WIREFRAME_SIZE_MULTIPLIER;
 73
 074            wireframeT.gameObject.SetActive(true);
 75        }
 076    }
 77
 78    private void CleanWireframe()
 79    {
 080        for (int i = 0; i < entityWireframes.Count; i++)
 81        {
 082            DestroyWireframe(entityWireframes[i]);
 83        }
 084        entityWireframes.Clear();
 085        updateEventHandler.RemoveListener(IUpdateEventHandler.EventType.LateUpdate, LateUpdate);
 086    }
 87
 88    private void DestroyWireframe(GameObject wireframe)
 89    {
 090        if (wireframe == null)
 091            return;
 92
 093        wireframe.SetActive(false);
 094        Object.Destroy(wireframe);
 095    }
 96}