< 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:26
Uncovered lines:44
Coverable lines:70
Total lines:185
Line coverage:37.1% (26 of 70)
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%6200%
IsVisible()0%2100%
ShouldReportPassportInputEvent(...)0%12300%
Report(...)0%56700%
GetEventType()0%2100%
ReEnableOnInfoCardClosed(...)0%6200%
SetColliderEnabled(...)0%110100%
SetPassportEnabled(...)0%110100%
SetOnClickReportEnabled(...)0%110100%
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 DCL.Controllers;
 2using DCL.Interface;
 3using UnityEngine;
 4using DCL.Helpers;
 5using DCL.Models;
 6using DCLPlugins.UUIDEventComponentsPlugin.UUIDComponent.Interfaces;
 7using Ray = UnityEngine.Ray;
 8
 9namespace DCL.Components
 10{
 11    public class AvatarOnPointerDown : MonoBehaviour, IAvatarOnPointerDown, IPoolLifecycleHandler,
 12        IAvatarOnPointerDownCollider, IUnlockedCursorInputEvent
 13    {
 14        public new Collider collider;
 15        private OnPointerEvent.Model model;
 16        private OnPointerEventHandler eventHandler;
 17
 18        public InteractionHoverCanvasController hoverCanvas;
 33719        public IDCLEntity entity { get; private set; }
 20        public event System.Action OnPointerDownReport;
 21        public event System.Action OnPointerEnterReport;
 22        public event System.Action OnPointerExitReport;
 23        private bool isHovering = false;
 24
 33925        private bool passportEnabled = true;
 33926        private bool onClickReportEnabled = true;
 27        private Player avatarPlayer;
 28
 29        public WebInterface.ACTION_BUTTON GetActionButton()
 30        {
 031            return model.GetActionButton();
 32        }
 33
 34        public void SetHoverState(bool state)
 35        {
 036            bool isHoveringDirty = state != isHovering;
 037            isHovering = state;
 038            eventHandler?.SetFeedbackState(model.showFeedback, state && passportEnabled, model.button, model.hoverText);
 39
 040            if (!isHoveringDirty)
 041                return;
 42
 043            if (isHovering)
 044                OnPointerEnterReport?.Invoke();
 45            else
 046                OnPointerExitReport?.Invoke();
 047        }
 48
 49        private void OnDisable()
 50        {
 33851            if (!isHovering)
 33852                return;
 53
 054            isHovering = false;
 055            OnPointerExitReport?.Invoke();
 056        }
 57
 58        void Awake()
 59        {
 33360            CommonScriptableObjects.playerInfoCardVisibleState.OnChange += ReEnableOnInfoCardClosed;
 33361        }
 62
 63        void OnDestroy()
 64        {
 33365            CommonScriptableObjects.playerInfoCardVisibleState.OnChange -= ReEnableOnInfoCardClosed;
 33366            eventHandler?.Dispose();
 33367            CollidersManager.i.RemoveEntityCollider(entity, collider);
 33368        }
 69
 70        public void Initialize(OnPointerEvent.Model model, IDCLEntity entity, Player player)
 71        {
 472            this.model = model;
 473            this.entity = entity;
 474            this.avatarPlayer = player;
 75
 476            if (eventHandler == null)
 477                eventHandler = new OnPointerEventHandler();
 78
 479            eventHandler?.SetColliders(entity);
 480            CollidersManager.i.AddOrUpdateEntityCollider(entity, collider);
 481        }
 82
 83        public bool IsAtHoverDistance(float distance) =>
 084            !Utils.IsCursorLocked || distance <= model.distance;
 85
 86        public bool IsVisible()
 87        {
 088            return true;
 89        }
 90
 91        private bool ShouldReportPassportInputEvent(WebInterface.ACTION_BUTTON buttonId, HitInfo hit) =>
 092            isHovering && (model.button == "ANY" || buttonId.ToString() == model.button);
 93
 94        public void Report(WebInterface.ACTION_BUTTON buttonId, Ray ray, HitInfo hit)
 95        {
 096            if (!enabled)
 097                return;
 98
 099            if (passportEnabled && ShouldReportPassportInputEvent(buttonId, hit))
 100            {
 0101                eventHandler.SetFeedbackState(model.showFeedback, false, model.button, model.hoverText);
 0102                passportEnabled = false;
 103
 0104                OnPointerDownReport?.Invoke();
 105            }
 106
 0107            if (onClickReportEnabled && ShouldReportOnClickEvent(buttonId, out IParcelScene playerScene))
 108            {
 0109                AudioScriptableObjects.buttonClick.Play(true);
 110
 0111                WebInterface.ReportAvatarClick(
 112                    playerScene.sceneData.sceneNumber,
 113                    avatarPlayer.id,
 114                    WorldStateUtils.ConvertUnityToScenePosition(ray.origin, playerScene),
 115                    ray.direction,
 116                    hit.distance);
 117            }
 0118        }
 119
 120        public PointerInputEventType GetEventType()
 121        {
 0122            return PointerInputEventType.DOWN;
 123        }
 124
 125        void ReEnableOnInfoCardClosed(bool newState, bool prevState)
 126        {
 0127            if (passportEnabled || newState)
 0128                return;
 129
 0130            passportEnabled = true;
 0131        }
 132
 133        public void SetColliderEnabled(bool newEnabledState)
 134        {
 4135            collider.enabled = newEnabledState;
 4136        }
 137
 138        public void SetPassportEnabled(bool newEnabledState)
 139        {
 8140            passportEnabled = newEnabledState;
 8141            isHovering = false;
 8142        }
 143
 144        public void SetOnClickReportEnabled(bool newEnabledState)
 145        {
 4146            onClickReportEnabled = newEnabledState;
 4147        }
 148
 149        public Transform GetTransform()
 150        {
 0151            return transform;
 152        }
 153
 154        public void OnPoolRelease()
 155        {
 0156            eventHandler.Dispose();
 0157            avatarPlayer = null;
 0158        }
 159
 0160        public void OnPoolGet() { }
 161
 162        private bool ShouldReportOnClickEvent(WebInterface.ACTION_BUTTON buttonId, out IParcelScene playerScene)
 163        {
 0164            playerScene = null;
 165
 0166            if (buttonId != WebInterface.ACTION_BUTTON.POINTER) { return false; }
 167
 0168            if (avatarPlayer == null) { return false; }
 169
 0170            int playerSceneNumber = CommonScriptableObjects.sceneNumber.Get();
 171
 0172            if (playerSceneNumber <= 0) { return false; }
 173
 0174            playerScene = WorldStateUtils.GetCurrentScene();
 175
 0176            return playerScene?.IsInsideSceneBoundaries(
 177                PositionUtils.UnityToWorldPosition(avatarPlayer.worldPosition)) ?? false;
 178        }
 179
 180        public bool ShouldShowHoverFeedback()
 181        {
 0182            return enabled && model.showFeedback;
 183        }
 184    }
 185}