< Summary

Class:BIWInputWrapper
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/BuilderInWorldInputWrapper.cs
Covered lines:38
Uncovered lines:51
Coverable lines:89
Total lines:212
Line coverage:42.6% (38 of 89)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWInputWrapper()0%2100%
Update()0%330100%
Dispose()0%110100%
HasMouseButtonInput(...)0%8.124036.36%
OnMouseWheelInput(...)0%3.713057.14%
SetMouseWheelDelta(...)0%110100%
UpdateMouseWheelInput()0%2.062075%
StopInput()0%2100%
ResumeInput()0%2100%
MouseUp(...)0%26.836016.67%
MouseUpInvoke(...)0%6.975057.14%
MouseUpOnGUI(...)0%220100%
MouseDown(...)0%17.85020%
MouseWheel(...)0%14.115028.57%
MouseDrag(...)0%8.744033.33%
MouseRawDrag(...)0%8.744033.33%
CanDrag()0%20400%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/BuilderInWorldInputWrapper.cs

#LineLine coverage
 1using System;
 2using System.Collections;
 3using System.Collections.Generic;
 4using DCL.Controllers;
 5using UnityEngine;
 6using UnityEngine.EventSystems;
 7
 8public interface IBIWInputWrapper : IBIWController
 9{
 10    public void StopInput();
 11
 12    public void ResumeInput();
 13}
 14
 15public class BIWInputWrapper : BIWController, IBIWInputWrapper
 16{
 17    private const float MS_CLICK_THRESHOLD = 500;
 18    private const float MOVEMENT_CLICK_THRESHOLD = 50;
 19    private const float MOUSE_WHEEL_THROTTLE = 0.1f;
 20
 21    private const string MOUSE_X_AXIS = "Mouse X";
 22    private const string MOUSE_Y_AXIS = "Mouse Y";
 23    private const string MOUSE_SCROLLWHEEL = "Mouse ScrollWheel";
 24
 25    public static event Action<int, Vector3> OnMouseClick;
 26    public static event Action<int, Vector3> OnMouseClickOnUI;
 27    public static event Action<int, Vector3> OnMouseDown;
 28    public static event Action<int, Vector3> OnMouseUp;
 29    public static event Action<int, Vector3> OnMouseUpOnUI;
 30
 31    public static event Action<float> OnMouseWheel;
 32
 33    public static event OnMouseDragDelegate OnMouseDrag;
 34    public static event OnMouseDragDelegateRaw OnMouseDragRaw;
 35
 36    public delegate void OnMouseDragDelegate(int buttonId, Vector3 position, float axisX, float axisY);
 37
 38    public delegate void OnMouseDragDelegateRaw(int buttonId, Vector3 position, float axisX, float axisY);
 39
 40    internal float lastTimeMouseDown = 0;
 41    internal Vector3 lastMousePosition;
 042    internal bool canInputBeMade = true;
 43    internal bool currentClickIsOnUi = false;
 44    internal int lastMouseWheelAxisDirection = 0;
 45    internal float lastMouseWheelTime = 0;
 46
 47    public override void Update()
 48    {
 249        base.Update();
 1650        for (int i = 0; i <= 2; i++)
 51        {
 652            if (HasMouseButtonInput(i))
 53                break;
 54        }
 55
 256        UpdateMouseWheelInput();
 257    }
 58
 59    public override void Dispose()
 60    {
 4361        base.Dispose();
 62
 4363        currentClickIsOnUi = false;
 4364    }
 65
 66    internal bool HasMouseButtonInput(int button)
 67    {
 668        if (Input.GetMouseButtonDown(button))
 69        {
 070            MouseDown(button, Input.mousePosition);
 071            return true;
 72        }
 73
 674        if (Input.GetMouseButton(button))
 75        {
 076            MouseDrag(button, Input.mousePosition, Input.GetAxis(MOUSE_X_AXIS), Input.GetAxis(MOUSE_Y_AXIS));
 077            MouseRawDrag(button, Input.mousePosition, Input.GetAxis(MOUSE_X_AXIS), Input.GetAxis(MOUSE_Y_AXIS));
 078            return true;
 79        }
 80
 681        if (Input.GetMouseButtonUp(button))
 82        {
 083            MouseUp(button, Input.mousePosition);
 084            return true;
 85        }
 86
 687        return false;
 88    }
 89
 90    internal void OnMouseWheelInput(float axisValue)
 91    {
 192        int axisDirection = (int)Mathf.Sign(axisValue);
 193        if (lastMouseWheelAxisDirection == axisDirection)
 94        {
 095            if (Time.unscaledTime - lastMouseWheelTime >= MOUSE_WHEEL_THROTTLE)
 096                SetMouseWheelDelta(axisValue, axisDirection);
 097        }
 98        else
 99        {
 1100            SetMouseWheelDelta(axisValue, axisDirection);
 101        }
 1102    }
 103
 104    internal void SetMouseWheelDelta(float axisValue, int axisDirection)
 105    {
 1106        MouseWheel(axisValue);
 1107        lastMouseWheelTime = Time.unscaledTime;
 1108        lastMouseWheelAxisDirection = axisDirection;
 1109    }
 110
 111    internal void UpdateMouseWheelInput()
 112    {
 2113        float axisValue = Input.GetAxis(MOUSE_SCROLLWHEEL);
 2114        if (axisValue != 0)
 0115            OnMouseWheelInput(axisValue);
 2116    }
 117
 0118    public void StopInput() { canInputBeMade = false; }
 119
 0120    public void ResumeInput() { canInputBeMade = true; }
 121
 122    internal void MouseUp(int buttonId, Vector3 mousePosition)
 123    {
 1124        if (!isEditModeActive)
 1125            return;
 126
 0127        if (currentClickIsOnUi)
 128        {
 0129            OnMouseClickOnUI?.Invoke(buttonId, mousePosition);
 0130            currentClickIsOnUi = false;
 0131            return;
 132        }
 133
 0134        if (!canInputBeMade)
 0135            return;
 136
 0137        if (!BIWUtils.IsPointerOverUIElement())
 0138            MouseUpInvoke(buttonId, mousePosition);
 139        else
 0140            MouseUpOnGUI(buttonId, mousePosition);
 0141    }
 142
 143    internal void MouseUpInvoke(int buttonId, Vector3 mousePosition)
 144    {
 1145        OnMouseUp?.Invoke(buttonId, mousePosition);
 1146        if (Vector3.Distance(mousePosition, lastMousePosition) >= MOVEMENT_CLICK_THRESHOLD)
 0147            return;
 1148        if (Time.unscaledTime >= lastTimeMouseDown + MS_CLICK_THRESHOLD / 1000)
 1149            return;
 0150        OnMouseClick?.Invoke(buttonId, mousePosition);
 0151    }
 152
 2153    internal void MouseUpOnGUI(int buttonId, Vector3 mousePosition) { OnMouseUpOnUI?.Invoke(buttonId, mousePosition); }
 154
 155    internal void MouseDown(int buttonId, Vector3 mousePosition)
 156    {
 1157        if (!isEditModeActive)
 1158            return;
 159
 0160        lastTimeMouseDown = Time.unscaledTime;
 0161        lastMousePosition = mousePosition;
 0162        currentClickIsOnUi = BIWUtils.IsPointerOverUIElement();
 163
 0164        if (!canInputBeMade)
 0165            return;
 0166        if (!currentClickIsOnUi)
 0167            OnMouseDown?.Invoke(buttonId, mousePosition);
 0168    }
 169
 170    internal void MouseWheel(float axisValue)
 171    {
 1172        if (!isEditModeActive)
 1173            return;
 174
 0175        if (!canInputBeMade)
 0176            return;
 0177        if (!BIWUtils.IsPointerOverUIElement())
 0178            OnMouseWheel?.Invoke(axisValue);
 0179    }
 180
 181    internal void MouseDrag(int buttonId, Vector3 mousePosition, float axisX, float axisY)
 182    {
 1183        if (!isEditModeActive)
 1184            return;
 185
 0186        if (!CanDrag())
 0187            return;
 188
 0189        OnMouseDrag?.Invoke(buttonId, mousePosition, axisX, axisY);
 0190    }
 191
 192    internal void MouseRawDrag(int buttonId, Vector3 mousePosition, float axisX, float axisY)
 193    {
 1194        if (!isEditModeActive)
 1195            return;
 196
 0197        if (!CanDrag())
 0198            return;
 199
 0200        OnMouseDragRaw?.Invoke(buttonId, mousePosition, axisX, axisY);
 0201    }
 202
 203    private bool CanDrag()
 204    {
 0205        if (!canInputBeMade ||
 206            currentClickIsOnUi ||
 207            BIWUtils.IsPointerOverUIElement())
 0208            return false;
 209
 0210        return true;
 211    }
 212}