< Summary

Class:DCL.Components.AvatarOnPointerDown
Assembly:AvatarShape
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/AvatarOnPointerDown/AvatarOnPointerDown.cs
Covered lines:20
Uncovered lines:52
Coverable lines:72
Total lines:196
Line coverage:27.7% (20 of 72)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarOnPointerDown()0%110100%
GetActionButton()0%2100%
SetHoverState(...)0%72800%
OnDisable()0%4.943040%
Awake()0%110100%
OnDestroy()0%220100%
Initialize(...)0%330100%
IsAtHoverDistance(...)0%2100%
IsVisible()0%2100%
ShouldReportPassportInputEvent(...)0%12300%
Report(...)0%56700%
GetEventType()0%2100%
ReEnableOnInfoCardClosed(...)0%6200%
SetColliderEnabled(...)0%110100%
SetPassportEnabled(...)0%2100%
SetOnClickReportEnabled(...)0%2100%
GetTransform()0%2100%
OnPoolRelease()0%2100%
OnPoolGet()0%2100%
ShouldReportOnClickEvent(...)0%30500%
ShouldShowHoverFeedback()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/AvatarOnPointerDown/AvatarOnPointerDown.cs

#LineLine coverage
 1using System.Linq;
 2using DCL.Controllers;
 3using DCL.Interface;
 4using UnityEngine;
 5using DCL.Helpers;
 6using DCL.Models;
 7using DCLPlugins.UUIDEventComponentsPlugin.UUIDComponent.Interfaces;
 8using Ray = UnityEngine.Ray;
 9
 10namespace DCL.Components
 11{
 12    public class AvatarOnPointerDown : MonoBehaviour, IPointerInputEvent, IPoolLifecycleHandler,
 13        IAvatarOnPointerDownCollider
 14    {
 15        public new Collider collider;
 16        private OnPointerEvent.Model model;
 17        private OnPointerEventHandler eventHandler;
 18
 19        public InteractionHoverCanvasController hoverCanvas;
 020        public IDCLEntity entity { get; private set; }
 21        public event System.Action OnPointerDownReport;
 22        public event System.Action OnPointerEnterReport;
 23        public event System.Action OnPointerExitReport;
 24        private bool isHovering = false;
 25
 42626        private bool passportEnabled = true;
 42627        private bool onClickReportEnabled = true;
 28        private Player avatarPlayer;
 29
 30        public WebInterface.ACTION_BUTTON GetActionButton()
 31        {
 032            return model.GetActionButton();
 33        }
 34
 35        public void SetHoverState(bool state)
 36        {
 037            bool isHoveringDirty = state != isHovering;
 038            isHovering = state;
 039            eventHandler?.SetFeedbackState(model.showFeedback, state && passportEnabled, model.button, model.hoverText);
 040            if (!isHoveringDirty)
 041                return;
 042            if (isHovering)
 043                OnPointerEnterReport?.Invoke();
 44            else
 045                OnPointerExitReport?.Invoke();
 046        }
 47
 48        private void OnDisable()
 49        {
 42750            if (!isHovering)
 42751                return;
 052            isHovering = false;
 053            OnPointerExitReport?.Invoke();
 054        }
 55
 56        void Awake()
 57        {
 42258            CommonScriptableObjects.playerInfoCardVisibleState.OnChange += ReEnableOnInfoCardClosed;
 42259        }
 60
 61        void OnDestroy()
 62        {
 42263            CommonScriptableObjects.playerInfoCardVisibleState.OnChange -= ReEnableOnInfoCardClosed;
 42264            eventHandler?.Dispose();
 42265            CollidersManager.i.RemoveEntityCollider(entity, collider);
 42266        }
 67
 68        public void Initialize(OnPointerEvent.Model model, IDCLEntity entity, Player player)
 69        {
 470            this.model = model;
 471            this.entity = entity;
 472            this.avatarPlayer = player;
 73
 474            if (eventHandler == null)
 475                eventHandler = new OnPointerEventHandler();
 76
 477            eventHandler?.SetColliders(entity);
 478            CollidersManager.i.AddOrUpdateEntityCollider(entity, collider);
 479        }
 80
 81        public bool IsAtHoverDistance(float distance)
 82        {
 083            return distance <= model.distance;
 84        }
 85
 86        public bool IsVisible()
 87        {
 088            return true;
 89        }
 90
 91        public bool ShouldReportPassportInputEvent(WebInterface.ACTION_BUTTON buttonId, HitInfo hit)
 92        {
 093            return IsAtHoverDistance(hit.distance) &&
 94                   (model.button == "ANY" || buttonId.ToString() == model.button);
 95        }
 96
 97        public void Report(WebInterface.ACTION_BUTTON buttonId, Ray ray, HitInfo hit)
 98        {
 099            if (!enabled)
 0100                return;
 101
 0102            if (passportEnabled && ShouldReportPassportInputEvent(buttonId, hit))
 103            {
 0104                eventHandler.SetFeedbackState(model.showFeedback, false, model.button, model.hoverText);
 0105                passportEnabled = false;
 106
 0107                OnPointerDownReport?.Invoke();
 108            }
 109
 0110            if (onClickReportEnabled && ShouldReportOnClickEvent(buttonId, out IParcelScene playerScene))
 111            {
 0112                WebInterface.ReportAvatarClick(
 113                    playerScene.sceneData.id,
 114                    avatarPlayer.id,
 115                    WorldStateUtils.ConvertUnityToScenePosition(ray.origin, playerScene),
 116                    ray.direction,
 117                    hit.distance);
 118            }
 0119        }
 120
 121        public PointerInputEventType GetEventType()
 122        {
 0123            return PointerInputEventType.DOWN;
 124        }
 125
 126        void ReEnableOnInfoCardClosed(bool newState, bool prevState)
 127        {
 0128            if (passportEnabled || newState)
 0129                return;
 130
 0131            passportEnabled = true;
 0132        }
 133
 134        public void SetColliderEnabled(bool newEnabledState)
 135        {
 4136            collider.enabled = newEnabledState;
 4137        }
 138
 139        public void SetPassportEnabled(bool newEnabledState)
 140        {
 0141            passportEnabled = newEnabledState;
 0142            isHovering = false;
 0143        }
 144
 145        public void SetOnClickReportEnabled(bool newEnabledState)
 146        {
 0147            onClickReportEnabled = newEnabledState;
 0148        }
 149
 150        public Transform GetTransform()
 151        {
 0152            return transform;
 153        }
 154
 155        public void OnPoolRelease()
 156        {
 0157            eventHandler.Dispose();
 0158            avatarPlayer = null;
 0159        }
 160
 161        public void OnPoolGet()
 162        {
 0163        }
 164
 165        private bool ShouldReportOnClickEvent(WebInterface.ACTION_BUTTON buttonId, out IParcelScene playerScene)
 166        {
 0167            playerScene = null;
 168
 0169            if (buttonId != WebInterface.ACTION_BUTTON.POINTER)
 170            {
 0171                return false;
 172            }
 173
 0174            if (avatarPlayer == null)
 175            {
 0176                return false;
 177            }
 178
 0179            string playerSceneId = CommonScriptableObjects.sceneID.Get();
 180
 0181            if (string.IsNullOrEmpty(playerSceneId))
 182            {
 0183                return false;
 184            }
 185
 0186            playerScene = WorldStateUtils.GetCurrentScene();
 0187            return playerScene?.IsInsideSceneBoundaries(
 188                PositionUtils.UnityToWorldPosition(avatarPlayer.worldPosition)) ?? false;
 189        }
 190
 191        public bool ShouldShowHoverFeedback()
 192        {
 0193            return enabled && model.showFeedback;
 194        }
 195    }
 196}