< Summary

Class:DCLServices.MapRendererV2.Culling.MapCullingControllerTrackedState[T]
Assembly:MapRendererV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/MapRendererV2/Culling/TrackedState.cs
Covered lines:0
Uncovered lines:15
Coverable lines:15
Total lines:85
Line coverage:0% (0 of 15)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:3
Method coverage:0% (0 of 3)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
TrackedState(...)0%2100%
CallListener(...)0%20400%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/MapRendererV2/Culling/TrackedState.cs

#LineLine coverage
 1using System.Collections.Generic;
 2
 3namespace DCLServices.MapRendererV2.Culling
 4{
 5    public partial class MapCullingController
 6    {
 7        internal partial class TrackedState<T> : TrackedState where T: IMapPositionProvider
 8        {
 9            private readonly T obj;
 010            public override IMapPositionProvider Obj => obj;
 11
 12            private readonly IMapCullingListener<T> listener;
 13            private bool? lastCalledWasVisible = null;
 14
 015            public TrackedState(T obj, IMapCullingListener<T> listener)
 16            {
 017                nodeInQueue = new LinkedListNode<TrackedState>(this);
 018                this.obj = obj;
 019                this.listener = listener;
 020            }
 21
 22            public override void CallListener(bool forceCall = false)
 23            {
 024                bool currentVisible = visibleFlag > 0;
 25
 026                if (!forceCall)
 27                {
 028                    if (currentVisible == lastCalledWasVisible)
 029                        return;
 30                }
 31
 032                lastCalledWasVisible = currentVisible;
 33
 034                if (currentVisible)
 035                    listener.OnMapObjectBecameVisible(obj);
 36                else
 037                    listener.OnMapObjectCulled(obj);
 038            }
 39        }
 40
 41        internal abstract class TrackedState
 42        {
 43            public abstract IMapPositionProvider Obj { get; }
 44
 45            // Constant memory footprint => we don't add and remove State but keep a single instance of Node instead
 46            public LinkedListNode<TrackedState> nodeInQueue { get; protected set; }
 47
 48            protected int visibleFlag;
 49            protected int dirtyCamerasFlag;
 50
 51            public abstract void CallListener(bool forceCall = false);
 52
 53            public void SetCameraFlag(int value)
 54            {
 55                dirtyCamerasFlag = value;
 56            }
 57
 58            public void SetCameraFlag(int index, bool value)
 59            {
 60                if (value)
 61                    dirtyCamerasFlag |= (1 << index);
 62                else
 63                    dirtyCamerasFlag &= ~(1 << index);
 64            }
 65
 66            public bool IsCameraDirty(int index) =>
 67                (dirtyCamerasFlag & (1 << index)) > 0;
 68
 69            public void SetVisibleFlag(int value)
 70            {
 71                visibleFlag = value;
 72            }
 73
 74            public void SetVisibleFlag(int index, bool value)
 75            {
 76                if (value)
 77                    visibleFlag |= (1 << index);
 78                else
 79                    visibleFlag &= ~(1 << index);
 80            }
 81        }
 82
 83        IReadOnlyDictionary<IMapPositionProvider, TrackedState> IMapCullingController.TrackedObjects => trackedObjs;
 84    }
 85}