< 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:179
Line coverage:53.5% (45 of 84)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Init(...)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 { }
 9
 10public class BIWInputHandler : BIWController, IBIWInputHandler
 11{
 12    private const float MS_BETWEEN_INPUT_INTERACTION = 200;
 13
 14    private IBIWActionController actionController;
 15    private IBIWModeController modeController;
 16    private IBIWInputWrapper inputWrapper;
 17    private IBIWOutlinerController outlinerController;
 18    private IBIWEntityHandler entityHandler;
 19
 20    private InputAction_Trigger toggleRedoActionInputAction;
 21    private InputAction_Trigger toggleUndoActionInputAction;
 22    private InputAction_Hold multiSelectionInputAction;
 23
 24    private InputAction_Hold.Started multiSelectionStartDelegate;
 25    private InputAction_Hold.Finished multiSelectionFinishedDelegate;
 26
 27    private InputAction_Trigger.Triggered redoDelegate;
 28    private InputAction_Trigger.Triggered undoDelegate;
 29
 30    private bool isMultiSelectionActive = false;
 31
 32    private float nexTimeToReceiveInput;
 33
 34    public override void Init(BIWContext biwContext)
 35    {
 2636        base.Init(biwContext);
 37
 2638        actionController = biwContext.actionController;
 2639        modeController = biwContext.modeController;
 2640        inputWrapper = biwContext.inputWrapper;
 2641        outlinerController = biwContext.outlinerController;
 2642        entityHandler = biwContext.entityHandler;
 43
 2644        toggleRedoActionInputAction = biwContext.inputsReferencesAsset.toggleRedoActionInputAction;
 2645        toggleUndoActionInputAction = biwContext.inputsReferencesAsset.toggleUndoActionInputAction;
 2646        multiSelectionInputAction = biwContext.inputsReferencesAsset.multiSelectionInputAction;
 47
 2648        if (HUDController.i.builderInWorldMainHud != null)
 49        {
 2650            HUDController.i.builderInWorldMainHud.OnStopInput += StopInput;
 2651            HUDController.i.builderInWorldMainHud.OnResumeInput += ResumeInput;
 52        }
 53
 2654        redoDelegate = (action) => RedoAction();
 2655        undoDelegate = (action) => UndoAction();
 56
 2657        toggleRedoActionInputAction.OnTriggered += redoDelegate;
 2658        toggleUndoActionInputAction.OnTriggered += undoDelegate;
 59
 2660        multiSelectionStartDelegate = (action) => StartMultiSelection();
 2661        multiSelectionFinishedDelegate = (action) => EndMultiSelection();
 62
 2663        BIWInputWrapper.OnMouseClick += MouseClick;
 2664        BIWInputWrapper.OnMouseClickOnUI += MouseClickOnUI;
 2665        modeController.OnInputDone += InputDone;
 66
 2667        multiSelectionInputAction.OnStarted += multiSelectionStartDelegate;
 2668        multiSelectionInputAction.OnFinished += multiSelectionFinishedDelegate;
 2669    }
 70
 71    public override void Dispose()
 72    {
 2773        base.Dispose();
 74
 2775        toggleRedoActionInputAction.OnTriggered -= redoDelegate;
 2776        toggleUndoActionInputAction.OnTriggered -= undoDelegate;
 77
 2778        multiSelectionInputAction.OnStarted -= multiSelectionStartDelegate;
 2779        multiSelectionInputAction.OnFinished -= multiSelectionFinishedDelegate;
 80
 2781        BIWInputWrapper.OnMouseClick -= MouseClick;
 2782        BIWInputWrapper.OnMouseClickOnUI -= MouseClickOnUI;
 2783        modeController.OnInputDone -= InputDone;
 2784        if (HUDController.i.builderInWorldMainHud != null)
 85        {
 2786            HUDController.i.builderInWorldMainHud.OnStopInput -= StopInput;
 2787            HUDController.i.builderInWorldMainHud.OnResumeInput -= ResumeInput;
 88        }
 2789    }
 90
 91    public override void Update()
 92    {
 293        base.Update();
 94
 295        if (Time.timeSinceLevelLoad < nexTimeToReceiveInput)
 096            return;
 97
 298        if (Utils.isCursorLocked || modeController.IsGodModeActive())
 199            CheckEditModeInput();
 2100        modeController.CheckInput();
 2101    }
 102
 103    private void CheckEditModeInput()
 104    {
 1105        outlinerController.CheckOutline();
 106
 1107        if (entityHandler.IsAnyEntitySelected())
 108        {
 0109            modeController.CheckInputSelectedEntities();
 110        }
 1111    }
 112
 113    private void StartMultiSelection()
 114    {
 0115        isMultiSelectionActive = true;
 0116        entityHandler.SetMultiSelectionActive(isMultiSelectionActive);
 0117        Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
 0118        modeController.StartMultiSelection();
 0119    }
 120
 121    private void EndMultiSelection()
 122    {
 0123        isMultiSelectionActive = false;
 0124        entityHandler.SetMultiSelectionActive(isMultiSelectionActive);
 0125        modeController.EndMultiSelection();
 0126        outlinerController.CancelUnselectedOutlines();
 0127    }
 128
 129    private void MouseClick(int buttonID, Vector3 position)
 130    {
 0131        if (!isEditModeActive)
 0132            return;
 133
 0134        if (Time.timeSinceLevelLoad < nexTimeToReceiveInput)
 0135            return;
 136
 0137        if (!BIWUtils.IsPointerOverUIElement())
 0138            HUDController.i.builderInWorldMainHud.HideExtraBtns();
 139
 0140        if (Utils.isCursorLocked || modeController.IsGodModeActive())
 141        {
 0142            if (buttonID == 0)
 143            {
 0144                MouseClickDetected();
 0145                InputDone();
 0146                return;
 147            }
 0148            outlinerController.CheckOutline();
 149        }
 0150    }
 151
 0152    private void MouseClickOnUI(int buttonID, Vector3 position) { HUDController.i.builderInWorldMainHud.HideExtraBtns();
 153
 0154    public bool IsMultiSelectionActive() => isMultiSelectionActive;
 155
 156    private void RedoAction()
 157    {
 0158        actionController.TryToRedoAction();
 0159        InputDone();
 0160    }
 161
 162    private void UndoAction()
 163    {
 0164        InputDone();
 165
 0166        if (modeController.ShouldCancelUndoAction())
 0167            return;
 168
 0169        actionController.TryToUndoAction();
 0170    }
 171
 0172    private void MouseClickDetected() { modeController.MouseClickDetected(); }
 173
 0174    private void InputDone() { nexTimeToReceiveInput = Time.timeSinceLevelLoad + MS_BETWEEN_INPUT_INTERACTION / 1000; }
 175
 0176    private void StopInput() { inputWrapper.StopInput(); }
 177
 0178    private void ResumeInput() { inputWrapper.ResumeInput(); }
 179}