< Summary

Class:BIWInputHandler
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWInputHandler.cs
Covered lines:45
Uncovered lines:39
Coverable lines:84
Total lines:182
Line coverage:53.5% (45 of 84)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Initialize(...)0%220100%
Dispose()0%220100%
Update()0%4.054085.71%
CheckEditModeInput()0%2.062075%
StartMultiSelection()0%2100%
EndMultiSelection()0%2100%
MouseClick(...)0%56700%
MouseClickOnUI(...)0%2100%
IsMultiSelectionActive()0%2100%
RedoAction()0%2100%
UndoAction()0%6200%
MouseClickDetected()0%2100%
InputDone()0%2100%
StopInput()0%2100%
ResumeInput()0%2100%

File(s)

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

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.Helpers;
 3using System.Collections;
 4using System.Collections.Generic;
 5using UnityEngine;
 6using System;
 7
 8public interface IBIWInputHandler : IBIWController
 9{
 10}
 11
 12public class BIWInputHandler : BIWController, IBIWInputHandler
 13{
 14    private const float MS_BETWEEN_INPUT_INTERACTION = 200;
 15
 16    private IBIWActionController actionController;
 17    private IBIWModeController modeController;
 18    private IBIWInputWrapper inputWrapper;
 19    private IBIWOutlinerController outlinerController;
 20    private IBIWEntityHandler entityHandler;
 21
 22    private InputAction_Trigger toggleRedoActionInputAction;
 23    private InputAction_Trigger toggleUndoActionInputAction;
 24    private InputAction_Hold multiSelectionInputAction;
 25
 26    private InputAction_Hold.Started multiSelectionStartDelegate;
 27    private InputAction_Hold.Finished multiSelectionFinishedDelegate;
 28
 29    private InputAction_Trigger.Triggered redoDelegate;
 30    private InputAction_Trigger.Triggered undoDelegate;
 31
 32    private bool isMultiSelectionActive = false;
 33
 34    private float nexTimeToReceiveInput;
 35
 36    public override void Initialize(BIWContext biwContext)
 37    {
 2538        base.Initialize(biwContext);
 39
 2540        actionController = biwContext.actionController;
 2541        modeController = biwContext.modeController;
 2542        inputWrapper = biwContext.inputWrapper;
 2543        outlinerController = biwContext.outlinerController;
 2544        entityHandler = biwContext.entityHandler;
 45
 2546        toggleRedoActionInputAction = biwContext.inputsReferencesAsset.toggleRedoActionInputAction;
 2547        toggleUndoActionInputAction = biwContext.inputsReferencesAsset.toggleUndoActionInputAction;
 2548        multiSelectionInputAction = biwContext.inputsReferencesAsset.multiSelectionInputAction;
 49
 2550        if (HUDController.i.builderInWorldMainHud != null)
 51        {
 2552            HUDController.i.builderInWorldMainHud.OnStopInput += StopInput;
 2553            HUDController.i.builderInWorldMainHud.OnResumeInput += ResumeInput;
 54        }
 55
 2556        redoDelegate = (action) => RedoAction();
 2557        undoDelegate = (action) => UndoAction();
 58
 2559        toggleRedoActionInputAction.OnTriggered += redoDelegate;
 2560        toggleUndoActionInputAction.OnTriggered += undoDelegate;
 61
 2562        multiSelectionStartDelegate = (action) => StartMultiSelection();
 2563        multiSelectionFinishedDelegate = (action) => EndMultiSelection();
 64
 2565        BIWInputWrapper.OnMouseClick += MouseClick;
 2566        BIWInputWrapper.OnMouseClickOnUI += MouseClickOnUI;
 2567        modeController.OnInputDone += InputDone;
 68
 2569        multiSelectionInputAction.OnStarted += multiSelectionStartDelegate;
 2570        multiSelectionInputAction.OnFinished += multiSelectionFinishedDelegate;
 2571    }
 72
 73    public override void Dispose()
 74    {
 2575        base.Dispose();
 76
 2577        toggleRedoActionInputAction.OnTriggered -= redoDelegate;
 2578        toggleUndoActionInputAction.OnTriggered -= undoDelegate;
 79
 2580        multiSelectionInputAction.OnStarted -= multiSelectionStartDelegate;
 2581        multiSelectionInputAction.OnFinished -= multiSelectionFinishedDelegate;
 82
 2583        BIWInputWrapper.OnMouseClick -= MouseClick;
 2584        BIWInputWrapper.OnMouseClickOnUI -= MouseClickOnUI;
 2585        modeController.OnInputDone -= InputDone;
 2586        if (HUDController.i.builderInWorldMainHud != null)
 87        {
 2588            HUDController.i.builderInWorldMainHud.OnStopInput -= StopInput;
 2589            HUDController.i.builderInWorldMainHud.OnResumeInput -= ResumeInput;
 90        }
 2591    }
 92
 93    public override void Update()
 94    {
 295        base.Update();
 96
 297        if (Time.timeSinceLevelLoad < nexTimeToReceiveInput)
 098            return;
 99
 2100        if (Utils.isCursorLocked || modeController.IsGodModeActive())
 1101            CheckEditModeInput();
 2102        modeController.CheckInput();
 2103    }
 104
 105    private void CheckEditModeInput()
 106    {
 1107        outlinerController.CheckOutline();
 108
 1109        if (entityHandler.IsAnyEntitySelected())
 110        {
 0111            modeController.CheckInputSelectedEntities();
 112        }
 1113    }
 114
 115    private void StartMultiSelection()
 116    {
 0117        isMultiSelectionActive = true;
 0118        entityHandler.SetMultiSelectionActive(isMultiSelectionActive);
 0119        Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
 0120        modeController.StartMultiSelection();
 0121    }
 122
 123    private void EndMultiSelection()
 124    {
 0125        isMultiSelectionActive = false;
 0126        entityHandler.SetMultiSelectionActive(isMultiSelectionActive);
 0127        modeController.EndMultiSelection();
 0128        outlinerController.CancelUnselectedOutlines();
 0129    }
 130
 131    private void MouseClick(int buttonID, Vector3 position)
 132    {
 0133        if (!isEditModeActive)
 0134            return;
 135
 0136        if (Time.timeSinceLevelLoad < nexTimeToReceiveInput)
 0137            return;
 138
 0139        if (!BIWUtils.IsPointerOverUIElement())
 0140            HUDController.i.builderInWorldMainHud.HideExtraBtns();
 141
 0142        if (Utils.isCursorLocked || modeController.IsGodModeActive())
 143        {
 0144            if (buttonID == 0)
 145            {
 0146                MouseClickDetected();
 0147                InputDone();
 0148                return;
 149            }
 150
 0151            outlinerController.CheckOutline();
 152        }
 0153    }
 154
 0155    private void MouseClickOnUI(int buttonID, Vector3 position) { HUDController.i.builderInWorldMainHud.HideExtraBtns();
 156
 0157    public bool IsMultiSelectionActive() => isMultiSelectionActive;
 158
 159    private void RedoAction()
 160    {
 0161        actionController.TryToRedoAction();
 0162        InputDone();
 0163    }
 164
 165    private void UndoAction()
 166    {
 0167        InputDone();
 168
 0169        if (modeController.ShouldCancelUndoAction())
 0170            return;
 171
 0172        actionController.TryToUndoAction();
 0173    }
 174
 0175    private void MouseClickDetected() { modeController.MouseClickDetected(); }
 176
 0177    private void InputDone() { nexTimeToReceiveInput = Time.timeSinceLevelLoad + MS_BETWEEN_INPUT_INTERACTION / 1000; }
 178
 0179    private void StopInput() { inputWrapper.StopInput(); }
 180
 0181    private void ResumeInput() { inputWrapper.ResumeInput(); }
 182}