< 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:215
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%
Init(...)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 DCL.Configuration;
 2using DCL.Controllers;
 3using System.Collections.Generic;
 4using UnityEngine;
 5using UnityEngine.Rendering.Universal;
 6
 7public interface IBIWOutlinerController
 8{
 9    void OutlineEntity(BIWEntity entity);
 10    void CancelEntityOutline(BIWEntity entityToQuitOutline);
 11    void OutlineEntities(List<BIWEntity> entitiesToEdit);
 12    void CheckOutline();
 13    void CancelUnselectedOutlines();
 14    void CancelAllOutlines();
 15    void SetOutlineCheckActive(bool isActive);
 16}
 17
 18public class BIWOutlinerController : BIWController, IBIWOutlinerController
 19{
 20    internal const int OUTLINER_OPTIMIZATION_TIMES = 10;
 21    private const int BUILDER_RENDERER_INDEX = 1;
 22
 23    private Material cameraOutlinerMaterial;
 24
 25    private IBIWRaycastController raycastController;
 26
 3227    private readonly List<BIWEntity> entitiesOutlined = new List<BIWEntity>();
 28    private int outlinerOptimizationCounter = 0;
 3229    private bool isOutlineCheckActive = true;
 30
 31    public override void Init(BIWContext context)
 32    {
 3233        base.Init(context);
 3234        cameraOutlinerMaterial = context.projectReferencesAsset.cameraOutlinerMaterial;
 35
 3236        raycastController = context.raycastController;
 3237    }
 38
 39    public override void EnterEditMode(ParcelScene scene)
 40    {
 1441        base.EnterEditMode(scene);
 1442        ActivateBuilderInWorldCamera();
 1443    }
 44
 45    public override void ExitEditMode()
 46    {
 1147        base.ExitEditMode();
 1148        DeactivateBuilderInWorldCamera();
 1149    }
 50
 51    public override void Dispose()
 52    {
 3353        base.Dispose();
 3354        RemoveBuilderInWorldCamera();
 3355    }
 56
 057    public void SetOutlineCheckActive(bool isActive) { isOutlineCheckActive = isActive; }
 58
 59    public void CheckOutline()
 60    {
 1261        if (outlinerOptimizationCounter >= OUTLINER_OPTIMIZATION_TIMES && isOutlineCheckActive)
 62        {
 163            if (!BIWUtils.IsPointerOverUIElement() && !BIWUtils.IsPointerOverMaskElement(BIWSettings.GIZMOS_LAYER))
 64            {
 165                BIWEntity entity = raycastController.GetEntityOnPointer();
 166                RemoveEntitiesOutlineOutsidePointerOrUnselected();
 67
 168                if (entity != null && !entity.isSelected)
 069                    OutlineEntity(entity);
 070            }
 71            else
 72            {
 073                CancelUnselectedOutlines();
 74            }
 75
 176            outlinerOptimizationCounter = 0;
 177        }
 78        else
 1179            outlinerOptimizationCounter++;
 1180    }
 81
 482    public bool IsEntityOutlined(BIWEntity entity) { return entitiesOutlined.Contains(entity); }
 83
 84    public void OutlineEntities(List<BIWEntity> entitiesToEdit)
 85    {
 086        foreach (BIWEntity entityToEdit in entitiesToEdit)
 87        {
 088            OutlineEntity(entityToEdit);
 89        }
 090    }
 91
 92    public void OutlineEntity(BIWEntity entity)
 93    {
 494        if (entity.rootEntity.meshRootGameObject == null)
 095            return;
 96
 497        if (!entity.rootEntity.meshRootGameObject && entity.rootEntity.renderers.Length <= 0)
 098            return;
 99
 4100        if (entitiesOutlined.Contains(entity))
 0101            return;
 102
 4103        if (entity.isLocked)
 1104            return;
 105
 3106        entitiesOutlined.Add(entity);
 107
 12108        for (int i = 0; i < entity.rootEntity.meshesInfo.renderers.Length; i++)
 109        {
 3110            if ( entity.rootEntity.meshesInfo.renderers[i] == null)
 111                continue;
 3112            entity.rootEntity.meshesInfo.renderers[i].gameObject.layer = BIWSettings.SELECTION_LAYER_INDEX;
 113        }
 3114    }
 115
 116    public void CancelUnselectedOutlines()
 117    {
 0118        for (int i = 0; i < entitiesOutlined.Count; i++)
 119        {
 0120            if (!entitiesOutlined[i].isSelected)
 121            {
 0122                CancelEntityOutline(entitiesOutlined[i]);
 123            }
 124        }
 0125    }
 126
 127    public void RemoveEntitiesOutlineOutsidePointerOrUnselected()
 128    {
 1129        var entity = raycastController.GetEntityOnPointer();
 4130        for (int i = 0; i < entitiesOutlined.Count; i++)
 131        {
 1132            if (!entitiesOutlined[i].isSelected || entity != entitiesOutlined[i])
 1133                CancelEntityOutline(entitiesOutlined[i]);
 134        }
 1135    }
 136
 137    public void CancelAllOutlines()
 138    {
 8139        for (int i = 0; i < entitiesOutlined.Count; i++)
 140        {
 0141            CancelEntityOutline(entitiesOutlined[i]);
 142        }
 4143    }
 144
 145    public void CancelEntityOutline(BIWEntity entityToQuitOutline)
 146    {
 3147        if (!entitiesOutlined.Contains(entityToQuitOutline))
 0148            return;
 149
 3150        if (entityToQuitOutline.rootEntity.meshRootGameObject && entityToQuitOutline.rootEntity.meshesInfo.renderers.Len
 151        {
 12152            for (int x = 0; x < entityToQuitOutline.rootEntity.meshesInfo.renderers.Length; x++)
 153            {
 3154                if ( entityToQuitOutline.rootEntity.meshesInfo.renderers[x] == null)
 155                    continue;
 3156                entityToQuitOutline.rootEntity.meshesInfo.renderers[x].gameObject.layer = BIWSettings.DEFAULT_LAYER_INDE
 157            }
 158        }
 159
 3160        entitiesOutlined.Remove(entityToQuitOutline);
 3161    }
 162
 163    private void ActivateBuilderInWorldCamera()
 164    {
 14165        Camera camera = Camera.main;
 14166        BIWOutline outliner = camera.GetComponent<BIWOutline>();
 14167        if (outliner == null)
 168        {
 13169            outliner = camera.gameObject.AddComponent(typeof(BIWOutline)) as BIWOutline;
 13170            outliner.SetOutlineMaterial(cameraOutlinerMaterial);
 13171        }
 172        else
 173        {
 1174            outliner.enabled = true;
 175        }
 176
 14177        outliner.Activate();
 178
 14179        UniversalAdditionalCameraData additionalCameraData = camera.transform.GetComponent<UniversalAdditionalCameraData
 14180        additionalCameraData.SetRenderer(BUILDER_RENDERER_INDEX);
 14181    }
 182
 183    private void DeactivateBuilderInWorldCamera()
 184    {
 11185        Camera camera = Camera.main;
 186
 11187        if (camera == null)
 0188            return;
 189
 11190        BIWOutline outliner = camera.GetComponent<BIWOutline>();
 11191        if (outliner != null)
 192        {
 9193            outliner.enabled = false;
 9194            outliner.Deactivate();
 195        }
 196
 11197        UniversalAdditionalCameraData additionalCameraData = camera.transform.GetComponent<UniversalAdditionalCameraData
 11198        additionalCameraData.SetRenderer(0);
 11199    }
 200
 201    private void RemoveBuilderInWorldCamera()
 202    {
 33203        Camera camera = Camera.main;
 204
 33205        if (camera == null)
 0206            return;
 207
 33208        BIWOutline outliner = camera.GetComponent<BIWOutline>();
 33209        if (outliner == null)
 20210            return;
 211
 13212        outliner.Dispose();
 13213        GameObject.Destroy(outliner);
 13214    }
 215}