< Summary

Class:DCLPlugins.ECSComponents.PointerInputRepresentantion
Assembly:DCL.ECSComponents.Events.Common
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/Events/PointerInputRepresentantion.cs
Covered lines:17
Uncovered lines:39
Coverable lines:56
Total lines:152
Line coverage:30.3% (17 of 56)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PointerInputRepresentantion(...)0%110100%
SetData(...)0%110100%
Dispose()0%2100%
GetTransform()0%2100%
get_entity()0%2100%
SetHoverState(...)0%2100%
IsAtHoverDistance(...)0%2100%
IsVisible()0%30500%
Report(...)0%30500%
GetEventType()0%2100%
GetActionButton()0%2100%
ShouldShowHoverFeedback()0%2100%
ConfigureColliders(...)0%2100%
ShouldReportEvent(...)0%20400%
Initializate(...)0%2.062075%
GetLamportTimestamp()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/Events/PointerInputRepresentantion.cs

#LineLine coverage
 1using System;
 2using DCL;
 3using DCL.Components;
 4using DCL.Controllers;
 5using DCL.ECS7;
 6using DCL.ECSComponents;
 7using DCL.ECSRuntime;
 8using DCL.Helpers;
 9using DCL.Interface;
 10using DCL.Models;
 11using DCLPlugins.UUIDEventComponentsPlugin.UUIDComponent.Interfaces;
 12using UnityEngine;
 13using Ray = UnityEngine.Ray;
 14
 15namespace DCLPlugins.ECSComponents
 16{
 17    public class PointerInputRepresentantion : IPointerInputEvent
 18    {
 19        private static int lamportTimestamp = 0;
 20        private IDCLEntity eventEntity;
 21        private IParcelScene scene;
 22        private readonly OnPointerEventHandler pointerEventHandler;
 23        private readonly PointerInputEventType type;
 24        private readonly IECSComponentWriter componentWriter;
 25        private readonly DataStore_ECS7 dataStore;
 26
 27        // This represents the model component, since we have several components model, we just use their data
 28        private bool showFeedback = false;
 29        private ActionButton button;
 30        private string hoverText;
 31        private float distance;
 32
 833        public PointerInputRepresentantion(IDCLEntity entity,DataStore_ECS7 dataStore,PointerInputEventType type, IECSCo
 34        {
 835            this.dataStore = dataStore;
 836            this.type = type;
 837            this.componentWriter = componentWriter;
 838            pointerEventHandler = new OnPointerEventHandler();
 39
 840            Initializate(entity);
 841        }
 42
 43        public void SetData(IParcelScene scene, IDCLEntity entity, bool showFeedback, ActionButton button, float distanc
 44        {
 845            this.scene = scene;
 846            eventEntity = entity;
 47
 848            this.showFeedback = showFeedback;
 849            this.button = button;
 850            this.distance = distance;
 851            this.hoverText = hoverText;
 852        }
 53
 54        public void Dispose()
 55        {
 056            dataStore.shapesReady.OnAdded -= ConfigureColliders;
 057            pointerEventHandler.Dispose();
 058        }
 59
 060        public Transform GetTransform() { return eventEntity.gameObject.transform; }
 61
 062        IDCLEntity IPointerEvent.entity => eventEntity;
 63
 64        void IPointerEvent.SetHoverState(bool hoverState)
 65        {
 066            pointerEventHandler.SetFeedbackState(showFeedback, hoverState, button.ToString(), hoverText);
 067        }
 68
 069        public bool /*IPointerEvent*/ IsAtHoverDistance(float distance) => distance <= this.distance;
 70
 71        public bool /*IPointerEvent*/ IsVisible()
 72        {
 073            if (eventEntity == null)
 074                return false;
 75
 076            bool isVisible = false;
 77
 078            if (eventEntity.meshesInfo != null &&
 79                eventEntity.meshesInfo.renderers != null &&
 80                eventEntity.meshesInfo.renderers.Length > 0)
 81            {
 082                isVisible = eventEntity.meshesInfo.renderers[0].enabled;
 83            }
 84
 085            return isVisible;
 86        }
 87
 88        void IPointerInputEvent.Report(WebInterface.ACTION_BUTTON buttonId, Ray ray, HitInfo hit)
 89        {
 090            if (!IsVisible())
 091                return;
 92
 093            if (ShouldReportEvent(buttonId, hit))
 94            {
 095                string meshName = pointerEventHandler.GetMeshName(hit.collider);
 096                long entityId = eventEntity.entityId;
 97                int componentId;
 98
 99                // We have to differentiate between OnPointerDown and OnPointerUp
 0100                switch (type)
 101                {
 102                    case PointerInputEventType.DOWN:
 0103                        componentId = ComponentID.ON_POINTER_DOWN_RESULT;
 104
 0105                        PBOnPointerDownResult downPayload = ProtoConvertUtils.GetPointerDownResultModel(button, meshName
 0106                        downPayload.Timestamp = GetLamportTimestamp();
 0107                        componentWriter.PutComponent(scene.sceneData.id, entityId, componentId,
 108                            downPayload);
 0109                        break;
 110                    case PointerInputEventType.UP:
 0111                        componentId = ComponentID.ON_POINTER_UP_RESULT;
 112
 0113                        PBOnPointerUpResult payload = ProtoConvertUtils.GetPointerUpResultModel(button, meshName, ray, h
 0114                        payload.Timestamp = GetLamportTimestamp();
 0115                        componentWriter.PutComponent(scene.sceneData.id, entityId, componentId,
 116                            payload);
 117                        break;
 118                }
 119            }
 0120        }
 121
 0122        PointerInputEventType IPointerInputEvent.GetEventType() => type;
 123
 0124        WebInterface.ACTION_BUTTON IPointerInputEvent.GetActionButton() => (WebInterface.ACTION_BUTTON) button;
 125
 0126        bool IPointerInputEvent.ShouldShowHoverFeedback()  => showFeedback;
 127
 0128        private void ConfigureColliders(long entityId, GameObject shapeGameObject) => pointerEventHandler.SetColliders(e
 129
 130        private bool ShouldReportEvent(WebInterface.ACTION_BUTTON buttonId, HitInfo hit)
 131        {
 0132            return IsVisible() &&
 133                   IsAtHoverDistance(hit.distance) &&
 134                   ((int)button == (int)WebInterface.ACTION_BUTTON.ANY || buttonId == (WebInterface.ACTION_BUTTON)button
 135        }
 136
 137        private void Initializate(IDCLEntity entity)
 138        {
 8139            if(dataStore.shapesReady.ContainsKey(entity.entityId))
 0140                pointerEventHandler.SetColliders(entity);
 141
 8142            dataStore.shapesReady.OnAdded += ConfigureColliders;
 8143        }
 144
 145        private int GetLamportTimestamp()
 146        {
 0147            int result = lamportTimestamp;
 0148            lamportTimestamp++;
 0149            return result;
 150        }
 151    }
 152}