< Summary

Class:ECSSystems.PointerInputSystem.ECSPointerInputSystem
Assembly:ECS7Plugin.Systems.PointerInput
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/PointerInputSystem/ECSPointerInputSystem.cs
Covered lines:22
Uncovered lines:27
Coverable lines:49
Total lines:161
Line coverage:44.8% (22 of 49)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CreateSystem(...)0%110100%
Update(...)0%24.3414062.5%
IsSameEntity(...)0%20400%
ShowHoverFeedback(...)0%12300%
HideHoverFeedback(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/PointerInputSystem/ECSPointerInputSystem.cs

#LineLine coverage
 1using System;
 2using DCL;
 3using DCL.ECS7;
 4using DCL.ECS7.InternalComponents;
 5using DCL.ECSComponents;
 6using DCL.ECSRuntime;
 7
 8namespace ECSSystems.PointerInputSystem
 9{
 10    public static class ECSPointerInputSystem
 11    {
 12        private class State
 13        {
 14            public IECSComponentWriter componentWriter;
 15            public IECSReadOnlyComponentsGroup<InternalColliders, PBOnPointerDown> pointerDownGroup;
 16            public IECSReadOnlyComponentsGroup<InternalColliders, PBOnPointerUp> pointerUpGroup;
 17            public IInternalECSComponent<InternalColliders> pointerColliderComponent;
 18            public ECSComponent<PBOnPointerDown> pointerDownComponent;
 19            public ECSComponent<PBOnPointerUp> pointerUpComponent;
 20            public DataStore_ECS7 dataStoreEcs7;
 21            public DataStore_Cursor dataStoreCursor;
 22            public bool isPointerDown;
 23            public PointerInputResult lastPointerDownResult;
 24            public PointerHoverResult lastPointerHoverResult;
 25        }
 26
 27        public static Action CreateSystem(
 28            IECSComponentWriter componentWriter,
 29            IECSReadOnlyComponentsGroup<InternalColliders, PBOnPointerDown> pointerDownGroup,
 30            IECSReadOnlyComponentsGroup<InternalColliders, PBOnPointerUp> pointerUpGroup,
 31            IInternalECSComponent<InternalColliders> pointerColliderComponent,
 32            ECSComponent<PBOnPointerDown> pointerDownComponent,
 33            ECSComponent<PBOnPointerUp> pointerUpComponent,
 34            DataStore_ECS7 dataStoreEcs,
 35            DataStore_Cursor dataStoreCursor)
 36        {
 237            var state = new State()
 38            {
 39                componentWriter = componentWriter,
 40                pointerDownGroup = pointerDownGroup,
 41                pointerUpGroup = pointerUpGroup,
 42                pointerColliderComponent = pointerColliderComponent,
 43                pointerDownComponent = pointerDownComponent,
 44                pointerUpComponent = pointerUpComponent,
 45                dataStoreEcs7 = dataStoreEcs,
 46                dataStoreCursor = dataStoreCursor,
 47                isPointerDown = false,
 48                lastPointerDownResult = PointerInputResult.empty,
 49                lastPointerHoverResult = PointerHoverResult.empty
 50            };
 751            return () => Update(state);
 52        }
 53
 54        private static void Update(State state)
 55        {
 556            bool isPointerDown = state.isPointerDown;
 57
 58            // process pointer down/up input
 559            if (state.dataStoreEcs7.lastPointerInputEvent.HasValue)
 60            {
 361                isPointerDown = state.dataStoreEcs7.lastPointerInputEvent.Value.isButtonDown;
 362                DataStore_ECS7.PointerEvent pointerEvent = state.dataStoreEcs7.lastPointerInputEvent.Value;
 63
 364                PointerInputResult result = PointerDownUpProcessor.ProcessPointerDownUp(pointerEvent,
 65                    state.pointerColliderComponent, state.pointerDownComponent, state.pointerUpComponent,
 66                    state.lastPointerDownResult);
 67
 368                state.lastPointerDownResult = result;
 369                if (result.hasValue)
 70                {
 371                    if (pointerEvent.isButtonDown)
 72                    {
 273                        if (result.shouldTriggerEvent)
 74                        {
 175                            state.componentWriter.PutComponent(result.sceneId, result.entityId,
 76                                ComponentID.ON_POINTER_DOWN_RESULT,
 77                                ProtoConvertUtils.GetPointerDownResultModel((ActionButton)pointerEvent.buttonId,
 78                                    null, pointerEvent.rayResult.ray, pointerEvent.rayResult.hitInfo.hit),
 79                                ECSComponentWriteType.SEND_TO_SCENE);
 80                        }
 181                    }
 82                    else
 83                    {
 184                        if (result.shouldTriggerEvent)
 85                        {
 186                            state.componentWriter.PutComponent(result.sceneId, result.entityId,
 87                                ComponentID.ON_POINTER_UP_RESULT,
 88                                ProtoConvertUtils.GetPointerUpResultModel((ActionButton)pointerEvent.buttonId,
 89                                    null, pointerEvent.rayResult.ray, pointerEvent.rayResult.hitInfo.hit),
 90                                ECSComponentWriteType.SEND_TO_SCENE);
 91                        }
 192                        state.lastPointerDownResult = PointerInputResult.empty;
 93                    }
 94                }
 95            }
 96
 97            // process pointer hover
 598            if (state.dataStoreEcs7.lastPointerRayHit.HasValue)
 99            {
 0100                PointerHoverResult result = PointerHoverProcessor.ProcessPointerHover(isPointerDown,
 101                    state.dataStoreEcs7.lastPointerRayHit.Value, state.pointerDownGroup, state.pointerUpGroup);
 102
 0103                if (isPointerDown)
 104                {
 0105                    PointerInputResult lastPointerDown = state.lastPointerDownResult;
 0106                    if (result.hasValue && !result.Equals(state.lastPointerHoverResult) && result.IsSameEntity(lastPoint
 107                    {
 0108                        state.dataStoreCursor.ShowHoverFeedback(result);
 109                    }
 0110                }
 111                else
 112                {
 0113                    if (result.hasValue && !result.Equals(state.lastPointerHoverResult))
 114                    {
 0115                        state.dataStoreCursor.ShowHoverFeedback(result);
 116                    }
 117                }
 0118                state.lastPointerHoverResult = result;
 0119            }
 5120            else if (state.lastPointerHoverResult.hasValue)
 121            {
 0122                state.dataStoreCursor.HideHoverFeedback();
 0123                state.lastPointerHoverResult = PointerHoverResult.empty;
 124            }
 125
 5126            state.dataStoreEcs7.lastPointerInputEvent = null;
 5127            state.dataStoreEcs7.lastPointerRayHit = null;
 5128            state.isPointerDown = isPointerDown;
 5129        }
 130
 131        private static bool IsSameEntity(this PointerHoverResult self, PointerInputResult other)
 132        {
 0133            if (!self.hasValue || !other.hasValue)
 0134                return false;
 135
 0136            return self.sceneId == other.sceneId && self.entityId == other.entityId;
 137        }
 138
 139        private static void ShowHoverFeedback(this DataStore_Cursor cursor, PointerHoverResult hoverResult)
 140        {
 0141            if (!hoverResult.hasValue)
 0142                return;
 143
 0144            cursor.hoverFeedbackEnabled.Set(hoverResult.hasFeedback);
 145
 0146            if (hoverResult.hasFeedback)
 147            {
 0148                cursor.cursorType.Set(DataStore_Cursor.CursorType.HOVER);
 0149                cursor.hoverFeedbackButton.Set(hoverResult.buttonId.ToString());
 0150                cursor.hoverFeedbackText.Set(hoverResult.text);
 0151                cursor.hoverFeedbackHoverState.Set(true);
 152            }
 0153        }
 154
 155        private static void HideHoverFeedback(this DataStore_Cursor cursor)
 156        {
 0157            cursor.cursorType.Set(DataStore_Cursor.CursorType.NORMAL);
 0158            cursor.hoverFeedbackHoverState.Set(false);
 0159        }
 160    }
 161}