< Summary

Class:Builder.MeshLoadIndicator.DCLBuilderMeshLoadIndicatorController
Assembly:Builder
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Builder/Scripts/MeshLoadIndicator/DCLBuilderMeshLoadIndicatorController.cs
Covered lines:54
Uncovered lines:8
Coverable lines:62
Total lines:141
Line coverage:87% (54 of 62)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Awake()0%110100%
OnEnable()0%220100%
OnDisable()0%110100%
Init()0%110100%
Dispose()0%550100%
OnEntityAdded(...)0%330100%
OnShapeUpdated(...)0%220100%
OnResetBuilderScene()0%110100%
OnPreviewModeChanged(...)0%6200%
ShowIndicator(...)0%330100%
HideIndicator(...)0%4.14081.82%
HideAllIndicators()0%3.793055.56%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Builder/Scripts/MeshLoadIndicator/DCLBuilderMeshLoadIndicatorController.cs

#LineLine coverage
 1using UnityEngine;
 2using System.Collections.Generic;
 3
 4namespace Builder.MeshLoadIndicator
 5{
 6    public class DCLBuilderMeshLoadIndicatorController : MonoBehaviour
 7    {
 8        [SerializeField] private DCLBuilderMeshLoadIndicator baseIndicator = null;
 9
 10        private Queue<DCLBuilderMeshLoadIndicator> indicatorsAvailable;
 11        private List<DCLBuilderMeshLoadIndicator> indicatorsInUse;
 12
 13        private bool isGameObjectActive = false;
 14        private bool isPreviewMode = false;
 15
 216        private void Awake() { Init(); }
 17
 18        private void OnEnable()
 19        {
 120            if (!isGameObjectActive)
 21            {
 122                DCLBuilderEntity.OnEntityAddedWithTransform += OnEntityAdded;
 123                DCLBuilderEntity.OnEntityShapeUpdated += OnShapeUpdated;
 124                DCLBuilderBridge.OnResetBuilderScene += OnResetBuilderScene;
 125                DCLBuilderBridge.OnPreviewModeChanged += OnPreviewModeChanged;
 26            }
 127            isGameObjectActive = true;
 128        }
 29
 30        private void OnDisable()
 31        {
 132            isGameObjectActive = false;
 133            DCLBuilderEntity.OnEntityAddedWithTransform -= OnEntityAdded;
 134            DCLBuilderEntity.OnEntityShapeUpdated -= OnShapeUpdated;
 135            DCLBuilderBridge.OnResetBuilderScene -= OnResetBuilderScene;
 136            DCLBuilderBridge.OnPreviewModeChanged -= OnPreviewModeChanged;
 137        }
 38
 39        public void Init()
 40        {
 341            indicatorsAvailable = new Queue<DCLBuilderMeshLoadIndicator>();
 342            indicatorsInUse = new List<DCLBuilderMeshLoadIndicator>();
 343        }
 44
 45        public void Dispose()
 46        {
 2047            if (indicatorsAvailable == null || indicatorsInUse == null)
 1848                return;
 49
 650            foreach (DCLBuilderMeshLoadIndicator indicator in indicatorsAvailable)
 51            {
 152                Destroy(indicator.gameObject);
 53            }
 54
 655            foreach (DCLBuilderMeshLoadIndicator indicator in indicatorsInUse)
 56            {
 157                Destroy(indicator.gameObject);
 58            }
 259        }
 60
 61        private void OnEntityAdded(DCLBuilderEntity entity)
 62        {
 163            if (!entity.HasShape() && !isPreviewMode)
 64            {
 165                ShowIndicator(entity.transform.position, entity.rootEntity.entityId);
 66            }
 167        }
 68
 69        private void OnShapeUpdated(DCLBuilderEntity entity)
 70        {
 171            if (!isPreviewMode)
 72            {
 173                HideIndicator(entity.rootEntity.entityId);
 74            }
 175        }
 76
 277        private void OnResetBuilderScene() { HideAllIndicators(); }
 78
 79        private void OnPreviewModeChanged(bool isPreview)
 80        {
 081            isPreviewMode = isPreview;
 082            if (isPreview)
 83            {
 084                HideAllIndicators();
 85            }
 086        }
 87
 88        public DCLBuilderMeshLoadIndicator ShowIndicator(Vector3 position, string entityId)
 89        {
 90            DCLBuilderMeshLoadIndicator ret;
 91
 892            if (indicatorsAvailable == null)
 493                return null;
 94
 495            if (indicatorsAvailable.Count > 0)
 96            {
 197                ret = indicatorsAvailable.Dequeue();
 198                ret.transform.position = position;
 199            }
 100            else
 101            {
 3102                ret = Object.Instantiate(baseIndicator, position, Quaternion.identity, transform);
 103            }
 104
 4105            ret.loadingEntityId = entityId;
 4106            ret.gameObject.SetActive(true);
 4107            indicatorsInUse.Add(ret);
 4108            return ret;
 109        }
 110
 111        public void HideIndicator(string entityId)
 112        {
 6113            if (indicatorsInUse == null)
 3114                return;
 115
 6116            for (int i = 0; i < indicatorsInUse.Count; i++)
 117            {
 3118                if (indicatorsInUse[i].loadingEntityId == entityId)
 119                {
 3120                    indicatorsInUse[i].gameObject.SetActive(false);
 3121                    indicatorsAvailable.Enqueue(indicatorsInUse[i]);
 3122                    indicatorsInUse.RemoveAt(i);
 3123                    break;
 124                }
 125            }
 0126        }
 127
 128        public void HideAllIndicators()
 129        {
 1130            if (indicatorsInUse == null)
 0131                return;
 132
 2133            for (int i = 0; i < indicatorsInUse.Count; i++)
 134            {
 0135                indicatorsInUse[i].gameObject.SetActive(false);
 0136                indicatorsAvailable.Enqueue(indicatorsInUse[i]);
 137            }
 1138            indicatorsInUse.Clear();
 1139        }
 140    }
 141}