< Summary

Class:BIWOutlinerController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWOutlinerController.cs
Covered lines:77
Uncovered lines:18
Coverable lines:95
Total lines:216
Line coverage:81% (77 of 95)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWOutlinerController()0%110100%
Initialize(...)0%110100%
EnterEditMode(...)0%110100%
ExitEditMode()0%110100%
Dispose()0%110100%
SetOutlineCheckActive(...)0%2100%
CheckOutline()0%7.777075%
IsEntityOutlined(...)0%110100%
OutlineEntities(...)0%6200%
OutlineEntity(...)0%8.518080%
CancelUnselectedOutlines()0%12300%
RemoveEntitiesOutlineOutsidePointerOrUnselected()0%440100%
CancelAllOutlines()0%2.262060%
CancelEntityOutline(...)0%6.046090%
ActivateBuilderInWorldCamera()0%220100%
DeactivateBuilderInWorldCamera()0%3.013090%
RemoveBuilderInWorldCamera()0%3.013088.89%

File(s)

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

#LineLine coverage
 1using System;
 2using DCL.Configuration;
 3using DCL.Controllers;
 4using System.Collections.Generic;
 5using UnityEngine;
 6using UnityEngine.Rendering.Universal;
 7
 8public interface IBIWOutlinerController : IBIWController
 9{
 10    void OutlineEntity(BIWEntity entity);
 11    void CancelEntityOutline(BIWEntity entityToQuitOutline);
 12    void OutlineEntities(List<BIWEntity> entitiesToEdit);
 13    void CheckOutline();
 14    void CancelUnselectedOutlines();
 15    void CancelAllOutlines();
 16    void SetOutlineCheckActive(bool isActive);
 17}
 18
 19public class BIWOutlinerController : BIWController, IBIWOutlinerController
 20{
 21    internal const int OUTLINER_OPTIMIZATION_TIMES = 10;
 22    private const int BUILDER_RENDERER_INDEX = 1;
 23
 24    private Material cameraOutlinerMaterial;
 25
 26    private IBIWRaycastController raycastController;
 27
 3128    private readonly List<BIWEntity> entitiesOutlined = new List<BIWEntity>();
 29    private int outlinerOptimizationCounter = 0;
 3130    private bool isOutlineCheckActive = true;
 31
 32    public override void Initialize(BIWContext context)
 33    {
 3134        base.Initialize(context);
 3135        cameraOutlinerMaterial = context.projectReferencesAsset.cameraOutlinerMaterial;
 36
 3137        raycastController = context.raycastController;
 3138    }
 39
 40    public override void EnterEditMode(IParcelScene scene)
 41    {
 1542        base.EnterEditMode(scene);
 1543        ActivateBuilderInWorldCamera();
 1544    }
 45
 46    public override void ExitEditMode()
 47    {
 548        base.ExitEditMode();
 549        DeactivateBuilderInWorldCamera();
 550    }
 51
 52    public override void Dispose()
 53    {
 3154        base.Dispose();
 3155        RemoveBuilderInWorldCamera();
 3156    }
 57
 058    public void SetOutlineCheckActive(bool isActive) { isOutlineCheckActive = isActive; }
 59
 60    public void CheckOutline()
 61    {
 1262        if (outlinerOptimizationCounter >= OUTLINER_OPTIMIZATION_TIMES && isOutlineCheckActive)
 63        {
 164            if (!BIWUtils.IsPointerOverUIElement() && !BIWUtils.IsPointerOverMaskElement(BIWSettings.GIZMOS_LAYER))
 65            {
 166                BIWEntity entity = raycastController.GetEntityOnPointer();
 167                RemoveEntitiesOutlineOutsidePointerOrUnselected();
 68
 169                if (entity != null && !entity.isSelected)
 070                    OutlineEntity(entity);
 071            }
 72            else
 73            {
 074                CancelUnselectedOutlines();
 75            }
 76
 177            outlinerOptimizationCounter = 0;
 178        }
 79        else
 1180            outlinerOptimizationCounter++;
 1181    }
 82
 483    public bool IsEntityOutlined(BIWEntity entity) { return entitiesOutlined.Contains(entity); }
 84
 85    public void OutlineEntities(List<BIWEntity> entitiesToEdit)
 86    {
 087        foreach (BIWEntity entityToEdit in entitiesToEdit)
 88        {
 089            OutlineEntity(entityToEdit);
 90        }
 091    }
 92
 93    public void OutlineEntity(BIWEntity entity)
 94    {
 495        if (entity.rootEntity.meshRootGameObject == null)
 096            return;
 97
 498        if (!entity.rootEntity.meshRootGameObject && entity.rootEntity.renderers.Length <= 0)
 099            return;
 100
 4101        if (entitiesOutlined.Contains(entity))
 0102            return;
 103
 4104        if (entity.isLocked)
 1105            return;
 106
 3107        entitiesOutlined.Add(entity);
 108
 12109        for (int i = 0; i < entity.rootEntity.meshesInfo.renderers.Length; i++)
 110        {
 3111            if ( entity.rootEntity.meshesInfo.renderers[i] == null)
 112                continue;
 3113            entity.rootEntity.meshesInfo.renderers[i].gameObject.layer = BIWSettings.SELECTION_LAYER_INDEX;
 114        }
 3115    }
 116
 117    public void CancelUnselectedOutlines()
 118    {
 0119        for (int i = 0; i < entitiesOutlined.Count; i++)
 120        {
 0121            if (!entitiesOutlined[i].isSelected)
 122            {
 0123                CancelEntityOutline(entitiesOutlined[i]);
 124            }
 125        }
 0126    }
 127
 128    public void RemoveEntitiesOutlineOutsidePointerOrUnselected()
 129    {
 1130        var entity = raycastController.GetEntityOnPointer();
 4131        for (int i = 0; i < entitiesOutlined.Count; i++)
 132        {
 1133            if (!entitiesOutlined[i].isSelected || entity != entitiesOutlined[i])
 1134                CancelEntityOutline(entitiesOutlined[i]);
 135        }
 1136    }
 137
 138    public void CancelAllOutlines()
 139    {
 8140        for (int i = 0; i < entitiesOutlined.Count; i++)
 141        {
 0142            CancelEntityOutline(entitiesOutlined[i]);
 143        }
 4144    }
 145
 146    public void CancelEntityOutline(BIWEntity entityToQuitOutline)
 147    {
 3148        if (!entitiesOutlined.Contains(entityToQuitOutline))
 0149            return;
 150
 3151        if (entityToQuitOutline.rootEntity.meshRootGameObject && entityToQuitOutline.rootEntity.meshesInfo.renderers.Len
 152        {
 12153            for (int x = 0; x < entityToQuitOutline.rootEntity.meshesInfo.renderers.Length; x++)
 154            {
 3155                if ( entityToQuitOutline.rootEntity.meshesInfo.renderers[x] == null)
 156                    continue;
 3157                entityToQuitOutline.rootEntity.meshesInfo.renderers[x].gameObject.layer = BIWSettings.DEFAULT_LAYER_INDE
 158            }
 159        }
 160
 3161        entitiesOutlined.Remove(entityToQuitOutline);
 3162    }
 163
 164    private void ActivateBuilderInWorldCamera()
 165    {
 15166        Camera camera = Camera.main;
 15167        BIWOutline outliner = camera.GetComponent<BIWOutline>();
 15168        if (outliner == null)
 169        {
 14170            outliner = camera.gameObject.AddComponent(typeof(BIWOutline)) as BIWOutline;
 14171            outliner.SetOutlineMaterial(cameraOutlinerMaterial);
 14172        }
 173        else
 174        {
 1175            outliner.enabled = true;
 176        }
 177
 15178        outliner.Activate();
 179
 15180        UniversalAdditionalCameraData additionalCameraData = camera.transform.GetComponent<UniversalAdditionalCameraData
 15181        additionalCameraData.SetRenderer(BUILDER_RENDERER_INDEX);
 15182    }
 183
 184    private void DeactivateBuilderInWorldCamera()
 185    {
 5186        Camera camera = Camera.main;
 187
 5188        if (camera == null)
 0189            return;
 190
 5191        BIWOutline outliner = camera.GetComponent<BIWOutline>();
 5192        if (outliner != null)
 193        {
 3194            outliner.enabled = false;
 3195            outliner.Deactivate();
 196        }
 197
 5198        UniversalAdditionalCameraData additionalCameraData = camera.transform.GetComponent<UniversalAdditionalCameraData
 5199        additionalCameraData.SetRenderer(0);
 5200    }
 201
 202    private void RemoveBuilderInWorldCamera()
 203    {
 31204        Camera camera = Camera.main;
 205
 31206        if (camera == null)
 0207            return;
 208
 31209        BIWOutline outliner = camera.GetComponent<BIWOutline>();
 31210        if (outliner == null)
 17211            return;
 212
 14213        outliner.Dispose();
 14214        GameObject.Destroy(outliner);
 14215    }
 216}