< Summary

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

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SceneEntitiesTracker(...)0%2100%
Dispose()0%6200%
OnEntityAdded(...)0%2100%
OnEntityRemoved(...)0%2100%
WatchEntityShape(...)0%6200%
KillWatchEntityShape(...)0%12300%
GetWireframeOriginal()0%6200%
DestroyWireframeOriginal()0%6200%

File(s)

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

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL;
 4using DCL.Models;
 5using DCL.Shaders;
 6using DCLPlugins.DebugPlugins.Commons;
 7using UnityEngine;
 8using Object = UnityEngine.Object;
 9
 10internal class SceneEntitiesTracker : ISceneListener
 11{
 12    internal const string WIREFRAME_GAMEOBJECT_NAME = "ShapeBoundingBoxWireframe";
 13    internal const string WIREFRAME_PREFAB_NAME = "Prefabs/WireframeCubeMesh";
 14
 015    private readonly Dictionary<IDCLEntity, WatchEntityShapeHandler> entityShapeHandler = new Dictionary<IDCLEntity, Wat
 16    private readonly IUpdateEventHandler updateEventHandler;
 17
 18    private GameObject wireframeOriginal;
 19    private Material wireframeMaterial;
 20
 021    public SceneEntitiesTracker(IUpdateEventHandler updateEventHandler)
 22    {
 023        this.updateEventHandler = updateEventHandler;
 024    }
 25
 26    void IDisposable.Dispose()
 27    {
 028        foreach (var handler in entityShapeHandler.Values)
 29        {
 030            handler.Dispose();
 31        }
 32
 033        entityShapeHandler.Clear();
 034        DestroyWireframeOriginal();
 035    }
 36
 37    void ISceneListener.OnEntityAdded(IDCLEntity entity)
 38    {
 039        WatchEntityShape(entity);
 040    }
 41
 42    void ISceneListener.OnEntityRemoved(IDCLEntity entity)
 43    {
 044        KillWatchEntityShape(entity);
 045    }
 46
 47    private void WatchEntityShape(IDCLEntity entity)
 48    {
 049        if (entityShapeHandler.ContainsKey(entity))
 50        {
 051            return;
 52        }
 053        entityShapeHandler.Add(entity, new WatchEntityShapeHandler(entity,
 54            new EntityWireframe(GetWireframeOriginal(), updateEventHandler)));
 055    }
 56
 57    private void KillWatchEntityShape(IDCLEntity entity)
 58    {
 059        if (entityShapeHandler.TryGetValue(entity, out WatchEntityShapeHandler entityWatchHandler))
 60        {
 061            entityWatchHandler.Dispose();
 062            entityShapeHandler.Remove(entity);
 63        }
 64
 065        if (entityShapeHandler.Count == 0)
 66        {
 067            DestroyWireframeOriginal();
 68        }
 069    }
 70
 71    private GameObject GetWireframeOriginal()
 72    {
 073        if (wireframeOriginal != null)
 74        {
 075            return wireframeOriginal;
 76        }
 077        wireframeOriginal = Object.Instantiate(Resources.Load<GameObject>(WIREFRAME_PREFAB_NAME));
 078        wireframeOriginal.name = WIREFRAME_GAMEOBJECT_NAME;
 079        wireframeMaterial = wireframeOriginal.GetComponent<Renderer>().material;
 080        wireframeMaterial.SetColor(ShaderUtils.EmissionColor, Color.grey);
 081        wireframeOriginal.SetActive(false);
 082        return wireframeOriginal;
 83    }
 84
 85    private void DestroyWireframeOriginal()
 86    {
 087        if (wireframeOriginal == null)
 88        {
 089            return;
 90        }
 091        Object.Destroy(wireframeOriginal);
 092        Object.Destroy(wireframeMaterial);
 093    }
 94}