< 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:211
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
 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    public delegate void OnMouseDragDelegateRaw(int buttonId, Vector3 position, float axisX, float axisY);
 38
 39    internal float lastTimeMouseDown = 0;
 40    internal Vector3 lastMousePosition;
 041    internal bool canInputBeMade = true;
 42    internal bool currentClickIsOnUi = false;
 43    internal int lastMouseWheelAxisDirection = 0;
 44    internal float lastMouseWheelTime = 0;
 45
 46    public override void Update()
 47    {
 248        base.Update();
 1649        for (int i = 0; i <= 2; i++)
 50        {
 651            if (HasMouseButtonInput(i))
 52                break;
 53        }
 54
 255        UpdateMouseWheelInput();
 256    }
 57
 58    public override void Dispose()
 59    {
 3660        base.Dispose();
 61
 3662        currentClickIsOnUi = false;
 3663    }
 64
 65    internal bool HasMouseButtonInput(int button)
 66    {
 667        if (Input.GetMouseButtonDown(button))
 68        {
 069            MouseDown(button, Input.mousePosition);
 070            return true;
 71        }
 72
 673        if (Input.GetMouseButton(button))
 74        {
 075            MouseDrag(button, Input.mousePosition, Input.GetAxis(MOUSE_X_AXIS), Input.GetAxis(MOUSE_Y_AXIS));
 076            MouseRawDrag(button, Input.mousePosition, Input.GetAxis(MOUSE_X_AXIS), Input.GetAxis(MOUSE_Y_AXIS));
 077            return true;
 78        }
 79
 680        if (Input.GetMouseButtonUp(button))
 81        {
 082            MouseUp(button, Input.mousePosition);
 083            return true;
 84        }
 85
 686        return false;
 87    }
 88
 89    internal void OnMouseWheelInput(float axisValue)
 90    {
 191        int axisDirection = (int)Mathf.Sign(axisValue);
 192        if (lastMouseWheelAxisDirection == axisDirection)
 93        {
 094            if (Time.unscaledTime - lastMouseWheelTime >= MOUSE_WHEEL_THROTTLE)
 095                SetMouseWheelDelta(axisValue, axisDirection);
 096        }
 97        else
 98        {
 199            SetMouseWheelDelta(axisValue, axisDirection);
 100        }
 1101    }
 102
 103    internal void SetMouseWheelDelta(float axisValue, int axisDirection)
 104    {
 1105        MouseWheel(axisValue);
 1106        lastMouseWheelTime = Time.unscaledTime;
 1107        lastMouseWheelAxisDirection = axisDirection;
 1108    }
 109
 110    internal void UpdateMouseWheelInput()
 111    {
 2112        float axisValue = Input.GetAxis(MOUSE_SCROLLWHEEL);
 2113        if (axisValue != 0)
 0114            OnMouseWheelInput(axisValue);
 2115    }
 116
 0117    public void StopInput() { canInputBeMade = false; }
 118
 0119    public void ResumeInput() { canInputBeMade = true; }
 120
 121    internal void MouseUp(int buttonId, Vector3 mousePosition)
 122    {
 1123        if (!isEditModeActive)
 1124            return;
 125
 0126        if (currentClickIsOnUi)
 127        {
 0128            OnMouseClickOnUI?.Invoke(buttonId, mousePosition);
 0129            currentClickIsOnUi = false;
 0130            return;
 131        }
 132
 0133        if (!canInputBeMade)
 0134            return;
 135
 0136        if (!BIWUtils.IsPointerOverUIElement())
 0137            MouseUpInvoke(buttonId, mousePosition);
 138        else
 0139            MouseUpOnGUI(buttonId, mousePosition);
 0140    }
 141
 142    internal void MouseUpInvoke(int buttonId, Vector3 mousePosition)
 143    {
 1144        OnMouseUp?.Invoke(buttonId, mousePosition);
 1145        if (Vector3.Distance(mousePosition, lastMousePosition) >= MOVEMENT_CLICK_THRESHOLD)
 0146            return;
 1147        if (Time.unscaledTime >= lastTimeMouseDown + MS_CLICK_THRESHOLD / 1000)
 1148            return;
 0149        OnMouseClick?.Invoke(buttonId, mousePosition);
 0150    }
 151
 2152    internal void MouseUpOnGUI(int buttonId, Vector3 mousePosition) { OnMouseUpOnUI?.Invoke(buttonId, mousePosition); }
 153
 154    internal void MouseDown(int buttonId, Vector3 mousePosition)
 155    {
 1156        if (!isEditModeActive)
 1157            return;
 158
 0159        lastTimeMouseDown = Time.unscaledTime;
 0160        lastMousePosition = mousePosition;
 0161        currentClickIsOnUi = BIWUtils.IsPointerOverUIElement();
 162
 0163        if (!canInputBeMade)
 0164            return;
 0165        if (!currentClickIsOnUi)
 0166            OnMouseDown?.Invoke(buttonId, mousePosition);
 0167    }
 168
 169    internal void MouseWheel(float axisValue)
 170    {
 1171        if (!isEditModeActive)
 1172            return;
 173
 0174        if (!canInputBeMade)
 0175            return;
 0176        if (!BIWUtils.IsPointerOverUIElement())
 0177            OnMouseWheel?.Invoke(axisValue);
 0178    }
 179
 180    internal void MouseDrag(int buttonId, Vector3 mousePosition, float axisX, float axisY)
 181    {
 1182        if (!isEditModeActive)
 1183            return;
 184
 0185        if (!CanDrag())
 0186            return;
 187
 0188        OnMouseDrag?.Invoke(buttonId, mousePosition, axisX, axisY);
 0189    }
 190
 191    internal void MouseRawDrag(int buttonId, Vector3 mousePosition, float axisX, float axisY)
 192    {
 1193        if (!isEditModeActive)
 1194            return;
 195
 0196        if (!CanDrag())
 0197            return;
 198
 0199        OnMouseDragRaw?.Invoke(buttonId, mousePosition, axisX, axisY);
 0200    }
 201
 202    private bool CanDrag()
 203    {
 0204        if (!canInputBeMade ||
 205            currentClickIsOnUi ||
 206            BIWUtils.IsPointerOverUIElement())
 0207            return false;
 208
 0209        return true;
 210    }
 211}