< Summary

Class:DCL.MouseCatcher
Assembly:MouseCatcher
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Helpers/MouseCatcher/MouseCatcher.cs
Covered lines:6
Uncovered lines:29
Coverable lines:35
Total lines:117
Line coverage:17.1% (6 of 35)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Start()0%110100%
OnDestroy()0%220100%
LockCursor()0%42600%
UnlockCursor()0%6200%
OnPointerDown(...)0%20400%
OnPointerUp(...)0%6200%
UnlockCursorBrowser(...)0%20400%
IsEqualsToRaycastTarget(...)0%2100%
HandleUnlockInput(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Helpers/MouseCatcher/MouseCatcher.cs

#LineLine coverage
 1#if UNITY_WEBGL && !UNITY_EDITOR
 2#define WEB_PLATFORM
 3#endif
 4
 5using DCL.Helpers;
 6using System;
 7using UnityEngine;
 8using UnityEngine.UI;
 9using UnityEngine.EventSystems;
 10
 11namespace DCL
 12{
 13    public interface IMouseCatcher
 14    {
 15        bool IsLocked { get; }
 16        event Action OnMouseUnlock;
 17        event Action OnMouseLock;
 18
 19        void UnlockCursor();
 20    }
 21
 22    public class MouseCatcher : MonoBehaviour, IMouseCatcher, IPointerDownHandler, IPointerUpHandler
 23    {
 24        private readonly DataStoreRef<DataStore_LoadingScreen> dataStoreLoadingScreen;
 25        [SerializeField] private InputAction_Trigger unlockInputAction;
 26        [SerializeField] private Canvas canvas;
 27        [SerializeField] private Image raycastTarget;
 28
 29        private HUDCanvasCameraModeController hudCanvasCameraModeController;
 30
 031        public bool IsLocked => Utils.IsCursorLocked;
 032        private bool renderingEnabled => CommonScriptableObjects.rendererState.Get();
 33
 34        public event Action OnMouseUnlock;
 35        public event Action OnMouseLock;
 36        public event Action OnMouseDown;
 37
 38        private void Start()
 39        {
 340            hudCanvasCameraModeController = new HUDCanvasCameraModeController(canvas, DataStore.i.camera.hudsCamera);
 341            unlockInputAction.OnTriggered += HandleUnlockInput;
 342        }
 43
 44        private void OnDestroy()
 45        {
 346            hudCanvasCameraModeController?.Dispose();
 347            unlockInputAction.OnTriggered -= HandleUnlockInput;
 348        }
 49
 50        public void LockCursor()
 51        {
 052            if (!renderingEnabled || DataStore.i.common.isSignUpFlow.Get() || dataStoreLoadingScreen.Ref.loadingHUD.visi
 053                return;
 54
 055            Utils.LockCursor();
 56#if !WEB_PLATFORM
 057            OnMouseLock?.Invoke();
 58#endif
 059        }
 60
 61        public void UnlockCursor()
 62        {
 063            Utils.UnlockCursor();
 64#if !WEB_PLATFORM
 065            OnMouseUnlock?.Invoke();
 66#endif
 067        }
 68
 69        public void OnPointerDown(PointerEventData eventData)
 70        {
 071            if (eventData.button == PointerEventData.InputButton.Right)
 72            {
 073                LockCursor();
 074                DataStore.i.camera.panning.Set(true);
 75            }
 076            else if(DataStore.i.camera.leftMouseButtonCursorLock.Get())
 077                LockCursor();
 78
 079            OnMouseDown?.Invoke();
 080        }
 81
 82        public void OnPointerUp(PointerEventData eventData)
 83        {
 084            if (eventData.button == PointerEventData.InputButton.Right)
 85            {
 086                DataStore.i.camera.panning.Set(false);
 087                UnlockCursor();
 88            }
 089        }
 90
 91#region BROWSER_ONLY
 92        //TODO(Brian): Move all this mechanism to a new MouseLockController and branch
 93        //             behaviour using strategy pattern instead of this.
 94
 95        /// <summary>
 96        /// Externally -ONLY- called by the browser
 97        /// </summary>
 98        /// <param name="val">1 is locked, 0 is unlocked</param>
 99        public void UnlockCursorBrowser(int val)
 100        {
 0101            bool lockPointer = val != 0;
 0102            Utils.BrowserSetCursorState(lockPointer);
 103
 0104            if (lockPointer)
 0105                OnMouseLock?.Invoke();
 106            else
 0107                OnMouseUnlock?.Invoke();
 0108        }
 109#endregion
 110
 111        public bool IsEqualsToRaycastTarget(GameObject gameObject) =>
 0112            raycastTarget.gameObject == gameObject;
 113
 114        private void HandleUnlockInput(DCLAction_Trigger action) =>
 0115            UnlockCursor();
 116    }
 117}