< Summary

Class:DCL.Components.OnPointerEventHandler
Assembly:DCL.Components.Events
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/UUIDEventComponentsPlugin/UUIDComponent/OnPointerEvent.cs
Covered lines:24
Uncovered lines:2
Coverable lines:26
Total lines:197
Line coverage:92.3% (24 of 26)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
OnPointerEventHandler()0%110100%
OnPointerEventHandler()0%110100%
SetColliders(...)0%110100%
UpdateCollidersEnabledBasedOnRenderers(...)0%110100%
SetFeedbackState(...)0%4.024090%
GetMeshName(...)0%3.333066.67%
Dispose()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/UUIDEventComponentsPlugin/UUIDComponent/OnPointerEvent.cs

#LineLine coverage
 1using System;
 2using System.Collections;
 3using DCL.Controllers;
 4using DCL.Helpers;
 5using DCL.Interface;
 6using DCL.Models;
 7using DCLPlugins.UUIDEventComponentsPlugin.UUIDComponent.Interfaces;
 8using UnityEngine;
 9using Ray = UnityEngine.Ray;
 10
 11namespace DCL.Components
 12{
 13    public class OnPointerEventHandler : IDisposable
 14    {
 115        public static bool enableInteractionHoverFeedback = true;
 18416        public OnPointerEventColliders eventColliders { get; private set; }
 17
 18        private IDCLEntity entity;
 19
 4220        public OnPointerEventHandler()
 21        {
 4222            eventColliders = new OnPointerEventColliders();
 4223        }
 24
 25        public void SetColliders(IDCLEntity entity)
 26        {
 8127            this.entity = entity;
 8128            eventColliders.Initialize(entity);
 8129        }
 30
 31        public void UpdateCollidersEnabledBasedOnRenderers(IDCLEntity entity)
 32        {
 133            this.entity = entity;
 134            eventColliders.UpdateCollidersEnabledBasedOnRenderers(entity);
 135        }
 36
 37        public void SetFeedbackState(bool showFeedback, bool hoverState, string button, string hoverText)
 38        {
 1621839            if (!enableInteractionHoverFeedback)
 040                return;
 41
 1621842            var cursorData = DataStore.i.Get<DataStore_Cursor>();
 1621843            cursorData.hoverFeedbackEnabled.Set(showFeedback);
 44
 1621845            if (showFeedback)
 46            {
 1621847                if (hoverState)
 48                {
 1621249                    cursorData.hoverFeedbackButton.Set(button);
 1621250                    cursorData.hoverFeedbackText.Set(hoverText);
 51                }
 52
 1621853                cursorData.hoverFeedbackHoverState.Set(hoverState);
 54            }
 1621855        }
 56
 57        public string GetMeshName(Collider collider)
 58        {
 659            if (collider == null || eventColliders == null)
 060                return null;
 61
 662            return eventColliders.GetMeshName(collider);
 63        }
 64
 65        public void Dispose()
 66        {
 4267            eventColliders.Dispose();
 4268        }
 69    }
 70
 71    public class OnPointerEvent : UUIDComponent, IPointerInputEvent, IOutOfSceneBoundariesHandler
 72    {
 73        public static bool enableInteractionHoverFeedback = true;
 74
 75        [System.Serializable]
 76        public new class Model : UUIDComponent.Model
 77        {
 78            public string button = WebInterface.ACTION_BUTTON.ANY.ToString();
 79            public string hoverText = "Interact";
 80            public float distance = 10f;
 81            public bool showFeedback = true;
 82
 83            public override BaseModel GetDataFromJSON(string json)
 84            {
 85                return Utils.SafeFromJson<Model>(json);
 86            }
 87
 88            public WebInterface.ACTION_BUTTON GetActionButton()
 89            {
 90                switch (button)
 91                {
 92                    case "PRIMARY":
 93                        return WebInterface.ACTION_BUTTON.PRIMARY;
 94                    case "SECONDARY":
 95                        return WebInterface.ACTION_BUTTON.SECONDARY;
 96                    case "POINTER":
 97                        return WebInterface.ACTION_BUTTON.POINTER;
 98                    default:
 99                        return WebInterface.ACTION_BUTTON.ANY;
 100                }
 101            }
 102        }
 103
 104        public OnPointerEventHandler pointerEventHandler;
 105
 106        public override void Initialize(IParcelScene scene, IDCLEntity entity)
 107        {
 108            base.Initialize(scene, entity);
 109
 110            if (model == null)
 111                model = new OnPointerEvent.Model();
 112
 113            pointerEventHandler = new OnPointerEventHandler();
 114            SetEventColliders(entity);
 115
 116            entity.OnShapeUpdated -= SetEventColliders;
 117            entity.OnShapeUpdated += SetEventColliders;
 118
 119            DataStore.i.sceneBoundariesChecker.Add(entity,this);
 120        }
 121
 122        public WebInterface.ACTION_BUTTON GetActionButton()
 123        {
 124            return ((Model) this.model).GetActionButton();
 125        }
 126
 127        public void SetHoverState(bool hoverState)
 128        {
 129            Model model = (Model) this.model;
 130            pointerEventHandler.SetFeedbackState(model.showFeedback, hoverState, model.button, model.hoverText);
 131        }
 132
 133        void SetEventColliders(IDCLEntity entity)
 134        {
 135            pointerEventHandler.SetColliders(entity);
 136        }
 137
 138        public bool IsVisible()
 139        {
 140            if (entity == null)
 141                return false;
 142
 143            bool isVisible = false;
 144
 145            if (entity.meshesInfo != null &&
 146                entity.meshesInfo.renderers != null &&
 147                entity.meshesInfo.renderers.Length > 0)
 148            {
 149                isVisible = entity.meshesInfo.renderers[0].enabled;
 150            }
 151
 152            return isVisible;
 153        }
 154
 155        public bool IsAtHoverDistance(float distance)
 156        {
 157            Model model = this.model as Model;
 158            return distance <= model.distance;
 159        }
 160
 161        public override IEnumerator ApplyChanges(BaseModel newModel)
 162        {
 163            this.model = newModel ?? new Model();
 164            return null;
 165        }
 166
 167        public bool ShouldShowHoverFeedback()
 168        {
 169            Model model = this.model as Model;
 170            return model.showFeedback;
 171        }
 172
 173        void OnDestroy()
 174        {
 175            if (entity != null)
 176                entity.OnShapeUpdated -= SetEventColliders;
 177
 178            DataStore.i.sceneBoundariesChecker.Remove(entity,this);
 179
 180            pointerEventHandler.Dispose();
 181        }
 182
 183        public virtual void Report(WebInterface.ACTION_BUTTON buttonId, Ray ray, HitInfo hit)
 184        {
 185        }
 186
 187        public virtual PointerInputEventType GetEventType()
 188        {
 189            return PointerInputEventType.NONE;
 190        }
 191
 192        public void UpdateOutOfBoundariesState(bool enable)
 193        {
 194            pointerEventHandler.UpdateCollidersEnabledBasedOnRenderers(entity);
 195        }
 196    }
 197}