< 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:207
Line coverage:92.3% (24 of 26)
Covered branches:0
Total branches:0
Covered methods:9
Total methods:9
Method coverage:100% (9 of 9)

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;
 10using Decentraland.Sdk.Ecs6;
 11
 12namespace DCL.Components
 13{
 14    public class OnPointerEventHandler : IDisposable
 15    {
 116        public static bool enableInteractionHoverFeedback = true;
 17217        public OnPointerEventColliders eventColliders { get; private set; }
 18
 19        private IDCLEntity entity;
 20
 3821        public OnPointerEventHandler()
 22        {
 3823            eventColliders = new OnPointerEventColliders();
 3824        }
 25
 26        public void SetColliders(IDCLEntity entity)
 27        {
 7728            this.entity = entity;
 7729            eventColliders.Initialize(entity);
 7730        }
 31
 32        public void UpdateCollidersEnabledBasedOnRenderers(IDCLEntity entity)
 33        {
 134            this.entity = entity;
 135            eventColliders.UpdateCollidersEnabledBasedOnRenderers(entity);
 136        }
 37
 38        public void SetFeedbackState(bool showFeedback, bool hoverState, string button, string hoverText)
 39        {
 650340            if (!enableInteractionHoverFeedback)
 041                return;
 42
 650343            var cursorData = DataStore.i.Get<DataStore_Cursor>();
 650344            cursorData.hoverFeedbackEnabled.Set(showFeedback);
 45
 650346            if (showFeedback)
 47            {
 650348                if (hoverState)
 49                {
 649750                    cursorData.hoverFeedbackButton.Set(button);
 649751                    cursorData.hoverFeedbackText.Set(hoverText);
 52                }
 53
 650354                cursorData.hoverFeedbackHoverState.Set(hoverState);
 55            }
 650356        }
 57
 58        public string GetMeshName(Collider collider)
 59        {
 660            if (collider == null || eventColliders == null)
 061                return null;
 62
 663            return eventColliders.GetMeshName(collider);
 64        }
 65
 66        public void Dispose()
 67        {
 3868            eventColliders.Dispose();
 3869        }
 70    }
 71
 72    public class OnPointerEvent : UUIDComponent, IPointerInputEvent, IOutOfSceneBoundariesHandler
 73    {
 74        public static bool enableInteractionHoverFeedback = true;
 75
 76        [Serializable]
 77        public new class Model : UUIDComponent.Model
 78        {
 79            public string button = WebInterface.ACTION_BUTTON.ANY.ToString();
 80            public string hoverText = "Interact";
 81            public float distance = 10f;
 82            public bool showFeedback = true;
 83
 84            public override BaseModel GetDataFromJSON(string json) =>
 85                Utils.SafeFromJson<Model>(json);
 86
 87            public override BaseModel GetDataFromPb(ComponentBodyPayload pbModel)
 88            {
 89                if (pbModel.PayloadCase != ComponentBodyPayload.PayloadOneofCase.UuidCallback)
 90                    return Utils.SafeUnimplemented<OnPointerEvent, Model>(expected: ComponentBodyPayload.PayloadOneofCas
 91
 92                var pb = new Model();
 93
 94                if (pbModel.UuidCallback.HasUuid) pb.uuid = pbModel.UuidCallback.Uuid;
 95                if (pbModel.UuidCallback.HasType) pb.type = pbModel.UuidCallback.Type;
 96                if (pbModel.UuidCallback.HasButton) pb.button = pbModel.UuidCallback.Button;
 97                if (pbModel.UuidCallback.HasHoverText) pb.hoverText = pbModel.UuidCallback.HoverText;
 98                if (pbModel.UuidCallback.HasDistance) pb.distance = pbModel.UuidCallback.Distance;
 99                if (pbModel.UuidCallback.HasShowFeedback) pb.showFeedback = pbModel.UuidCallback.ShowFeedback;
 100
 101                return pb;
 102            }
 103
 104            public WebInterface.ACTION_BUTTON GetActionButton() =>
 105                button switch
 106                {
 107                    "PRIMARY" => WebInterface.ACTION_BUTTON.PRIMARY,
 108                    "SECONDARY" => WebInterface.ACTION_BUTTON.SECONDARY,
 109                    "POINTER" => WebInterface.ACTION_BUTTON.POINTER,
 110                    _ => WebInterface.ACTION_BUTTON.ANY,
 111                };
 112        }
 113
 114        public OnPointerEventHandler pointerEventHandler;
 115
 116        public override void Initialize(IParcelScene scene, IDCLEntity entity)
 117        {
 118            base.Initialize(scene, entity);
 119
 120            if (model == null)
 121                model = new OnPointerEvent.Model();
 122
 123            pointerEventHandler = new OnPointerEventHandler();
 124            SetEventColliders(entity);
 125
 126            entity.OnShapeUpdated -= SetEventColliders;
 127            entity.OnShapeUpdated += SetEventColliders;
 128
 129            DataStore.i.sceneBoundariesChecker.Add(entity,this);
 130        }
 131
 132        public WebInterface.ACTION_BUTTON GetActionButton()
 133        {
 134            return ((Model) this.model).GetActionButton();
 135        }
 136
 137        public void SetHoverState(bool hoverState)
 138        {
 139            Model model = (Model) this.model;
 140            pointerEventHandler.SetFeedbackState(model.showFeedback, hoverState, model.button, model.hoverText);
 141        }
 142
 143        void SetEventColliders(IDCLEntity entity)
 144        {
 145            pointerEventHandler.SetColliders(entity);
 146        }
 147
 148        public bool IsVisible()
 149        {
 150            if (entity == null)
 151                return false;
 152
 153            bool isVisible = false;
 154
 155            if (entity.meshesInfo != null &&
 156                entity.meshesInfo.renderers != null &&
 157                entity.meshesInfo.renderers.Length > 0)
 158            {
 159                isVisible = entity.meshesInfo.renderers[0].enabled;
 160            }
 161
 162            return isVisible;
 163        }
 164
 165        public bool IsAtHoverDistance(float distance)
 166        {
 167            Model model = this.model as Model;
 168            return distance <= model.distance;
 169        }
 170
 171        public override IEnumerator ApplyChanges(BaseModel newModel)
 172        {
 173            this.model = newModel ?? new Model();
 174            return null;
 175        }
 176
 177        public bool ShouldShowHoverFeedback()
 178        {
 179            Model model = this.model as Model;
 180            return model.showFeedback;
 181        }
 182
 183        void OnDestroy()
 184        {
 185            if (entity != null)
 186                entity.OnShapeUpdated -= SetEventColliders;
 187
 188            DataStore.i.sceneBoundariesChecker.Remove(entity,this);
 189
 190            pointerEventHandler.Dispose();
 191        }
 192
 193        public virtual void Report(WebInterface.ACTION_BUTTON buttonId, Ray ray, HitInfo hit)
 194        {
 195        }
 196
 197        public virtual PointerInputEventType GetEventType()
 198        {
 199            return PointerInputEventType.NONE;
 200        }
 201
 202        public void UpdateOutOfBoundariesState(bool enable)
 203        {
 204            pointerEventHandler.UpdateCollidersEnabledBasedOnRenderers(entity);
 205        }
 206    }
 207}