< Summary

Class:BIWOutlinerController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWOutlinerController.cs
Covered lines:24
Uncovered lines:56
Coverable lines:80
Total lines:180
Line coverage:30% (24 of 80)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWOutlinerController()0%110100%
EnterEditMode(...)0%2100%
ExitEditMode()0%2100%
SetOutlineCheckActive(...)0%2100%
CheckOutline()0%56700%
IsEntityOutlined(...)0%110100%
OutlineEntities(...)0%6200%
OutlineEntity(...)0%8.518080%
CancelUnselectedOutlines()0%12300%
RemoveEntitiesOutsidePointerOrUnselected()0%20400%
CancelAllOutlines()0%2.262060%
CancelEntityOutline(...)0%660100%
ActivateBuilderInWorldCamera()0%6200%
DeactivateBuilderInWorldCamera()0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWOutlinerController.cs

#LineLine coverage
 1using Builder;
 2using DCL.Configuration;
 3using DCL.Controllers;
 4using System.Collections.Generic;
 5using UnityEngine;
 6using UnityEngine.Rendering.Universal;
 7
 8public class BIWOutlinerController : BIWController
 9{
 10    [Header("Build References")]
 19811    public int builderRendererIndex = 1;
 12
 13    public Material outlineMaterial;
 14    public Material cameraOutlinerMaterial;
 15
 16    [SerializeField] internal BuilderInWorldEntityHandler builderInWorldEntityHandler;
 17    public BIWInputHandler biwInputHandler;
 18    public LayerMask layerToStopOutline;
 19
 19820    private List<DCLBuilderInWorldEntity> entitiesOutlined = new List<DCLBuilderInWorldEntity>();
 21    private int outlinerOptimizationCounter = 0;
 19822    private bool isOutlineCheckActive = true;
 23
 24    public override void EnterEditMode(ParcelScene scene)
 25    {
 026        base.EnterEditMode(scene);
 027        ActivateBuilderInWorldCamera();
 028    }
 29
 30    public override void ExitEditMode()
 31    {
 032        base.ExitEditMode();
 033        DeactivateBuilderInWorldCamera();
 034    }
 35
 036    public void SetOutlineCheckActive(bool isActive) { isOutlineCheckActive = isActive; }
 37
 38    public void CheckOutline()
 39    {
 040        if (outlinerOptimizationCounter >= 10 && isOutlineCheckActive)
 41        {
 042            if (!BuilderInWorldUtils.IsPointerOverUIElement() && !BuilderInWorldUtils.IsPointerOverMaskElement(layerToSt
 43            {
 044                DCLBuilderInWorldEntity entity = builderInWorldEntityHandler.GetEntityOnPointer();
 045                RemoveEntitiesOutsidePointerOrUnselected();
 46
 047                if (entity != null && !entity.IsSelected)
 048                    OutlineEntity(entity);
 049            }
 50            else
 51            {
 052                CancelUnselectedOutlines();
 53            }
 54
 055            outlinerOptimizationCounter = 0;
 056        }
 57        else
 058            outlinerOptimizationCounter++;
 059    }
 60
 361    public bool IsEntityOutlined(DCLBuilderInWorldEntity entity) { return entitiesOutlined.Contains(entity); }
 62
 63    public void OutlineEntities(List<DCLBuilderInWorldEntity> entitiesToEdit)
 64    {
 065        foreach (DCLBuilderInWorldEntity entityToEdit in entitiesToEdit)
 66        {
 067            OutlineEntity(entityToEdit);
 68        }
 069    }
 70
 71    public void OutlineEntity(DCLBuilderInWorldEntity entity)
 72    {
 373        if (entity.rootEntity.meshRootGameObject == null)
 074            return;
 75
 376        if (!entity.rootEntity.meshRootGameObject && entity.rootEntity.renderers.Length <= 0)
 077            return;
 78
 379        if (entitiesOutlined.Contains(entity))
 080            return;
 81
 382        if (entity.IsLocked)
 183            return;
 84
 285        entitiesOutlined.Add(entity);
 86
 887        for (int i = 0; i < entity.rootEntity.meshesInfo.renderers.Length; i++)
 88        {
 289            if ( entity.rootEntity.meshesInfo.renderers[i] == null)
 90                continue;
 291            entity.rootEntity.meshesInfo.renderers[i].gameObject.layer = BuilderInWorldSettings.SELECTION_LAYER;
 92        }
 293    }
 94
 95    public void CancelUnselectedOutlines()
 96    {
 097        for (int i = 0; i < entitiesOutlined.Count; i++)
 98        {
 099            if (!entitiesOutlined[i].IsSelected)
 100            {
 0101                CancelEntityOutline(entitiesOutlined[i]);
 102            }
 103        }
 0104    }
 105
 106    public void RemoveEntitiesOutsidePointerOrUnselected()
 107    {
 0108        var entity = builderInWorldEntityHandler.GetEntityOnPointer();
 0109        for (int i = 0; i < entitiesOutlined.Count; i++)
 110        {
 0111            if (!entitiesOutlined[i].IsSelected || entity != entitiesOutlined[i])
 0112                CancelEntityOutline(entitiesOutlined[i]);
 113        }
 0114    }
 115
 116    public void CancelAllOutlines()
 117    {
 22118        for (int i = 0; i < entitiesOutlined.Count; i++)
 119        {
 0120            CancelEntityOutline(entitiesOutlined[i]);
 121        }
 11122    }
 123
 124    public void CancelEntityOutline(DCLBuilderInWorldEntity entityToQuitOutline)
 125    {
 12126        if (!entitiesOutlined.Contains(entityToQuitOutline))
 10127            return;
 128
 2129        if (entityToQuitOutline.rootEntity.meshRootGameObject && entityToQuitOutline.rootEntity.meshesInfo.renderers.Len
 130        {
 8131            for (int x = 0; x < entityToQuitOutline.rootEntity.meshesInfo.renderers.Length; x++)
 132            {
 2133                if ( entityToQuitOutline.rootEntity.meshesInfo.renderers[x] == null)
 134                    continue;
 2135                entityToQuitOutline.rootEntity.meshesInfo.renderers[x].gameObject.layer = BuilderInWorldSettings.DEFAULT
 136            }
 137        }
 138
 2139        entitiesOutlined.Remove(entityToQuitOutline);
 2140    }
 141
 142    public void ActivateBuilderInWorldCamera()
 143    {
 0144        Camera camera = Camera.main;
 0145        DCLBuilderOutline outliner = camera.GetComponent<DCLBuilderOutline>();
 146
 0147        if (outliner == null)
 148        {
 0149            outliner = camera.gameObject.AddComponent(typeof(DCLBuilderOutline)) as DCLBuilderOutline;
 0150            outliner.SetOutlineMaterial(cameraOutlinerMaterial);
 0151        }
 152        else
 153        {
 0154            outliner.enabled = true;
 155        }
 156
 0157        outliner.Activate();
 158
 0159        UniversalAdditionalCameraData additionalCameraData = camera.transform.GetComponent<UniversalAdditionalCameraData
 0160        additionalCameraData.SetRenderer(builderRendererIndex);
 0161    }
 162
 163    public void DeactivateBuilderInWorldCamera()
 164    {
 0165        Camera camera = Camera.main;
 166
 0167        if (camera == null)
 0168            return;
 169
 0170        DCLBuilderOutline outliner = camera.GetComponent<DCLBuilderOutline>();
 0171        if (outliner != null)
 172        {
 0173            outliner.enabled = false;
 0174            outliner.Deactivate();
 175        }
 176
 0177        UniversalAdditionalCameraData additionalCameraData = camera.transform.GetComponent<UniversalAdditionalCameraData
 0178        additionalCameraData.SetRenderer(0);
 0179    }
 180}