< Summary

Class:InputManager
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Managers/InputManager.cs
Covered lines:0
Uncovered lines:167
Coverable lines:167
Total lines:213
Line coverage:0% (0 of 167)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:19
Method coverage:0% (0 of 19)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
InputManager()0%2100%
Awake()0%12300%
Update()0%2100%
HandleInput()0%6200%
HandleLockableInput()0%56700%
Handle3DModeMouseInput()0%12300%
Handle3DModeScrollWheelInput()0%6200%
Handle3DModeLockableInput()0%1561200%
HandleTacticalModeMouseInput()0%20400%
HandleTacticalModeScrollWheelInput()0%6200%
HandleTacticalModeLockableInput()0%1561200%
HandleNonLockableInput()0%72800%
HandleCameraFollowInput(...)0%12300%

File(s)

/github/workspace/Assets/Scripts/Managers/InputManager.cs

#LineLine coverage
 1using UnityEngine;
 2
 3public class InputManager : MonoBehaviour {
 04  public static InputManager Instance { get; private set; }
 5
 06  public bool MouseActive { get; set; } = true;
 07  public bool LockUserInput { get; set; } = false;
 8
 9  private Vector2 _lastMousePosition;
 010  private bool _isDragging = false;
 11
 012  private void Awake() {
 013    if (Instance != null && Instance != this) {
 014      Destroy(gameObject);
 015      return;
 16    }
 017    Instance = this;
 018    DontDestroyOnLoad(gameObject);
 019  }
 20
 021  private void Update() {
 022    HandleInput();
 023  }
 24
 025  private void HandleInput() {
 026    if (!LockUserInput) {
 027      HandleLockableInput();
 028    }
 029    HandleNonLockableInput();
 030  }
 31
 032  private void HandleLockableInput() {
 033    if (MouseActive) {
 034      switch (UIManager.Instance.UIMode) {
 035        case UIMode.THREE_DIMENSIONAL: {
 036          Handle3DModeMouseInput();
 037          Handle3DModeScrollWheelInput();
 038          break;
 39        }
 040        case UIMode.TACTICAL: {
 041          HandleTacticalModeMouseInput();
 042          HandleTacticalModeScrollWheelInput();
 043          break;
 44        }
 045        default: {
 046          Debug.LogError($"Invalid UI mode: {UIManager.Instance.UIMode}.");
 047          break;
 48        }
 49      }
 050    }
 51
 052    switch (UIManager.Instance.UIMode) {
 053      case UIMode.THREE_DIMENSIONAL: {
 054        Handle3DModeLockableInput();
 055        break;
 56      }
 057      case UIMode.TACTICAL: {
 058        HandleTacticalModeLockableInput();
 059        break;
 60      }
 061      default: {
 062        Debug.LogError($"Invalid UI mode: {UIManager.Instance.UIMode}.");
 063        break;
 64      }
 65    }
 66
 067    if (Input.GetKeyDown(KeyCode.Tab)) {
 068      UIManager.Instance.ToggleUIMode();
 069    }
 070  }
 71
 072  private void Handle3DModeMouseInput() {
 073    if (Input.GetMouseButton(0)) {
 074      CameraController.Instance.OrbitCamera(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
 075    } else if (Input.GetMouseButton(1)) {
 076      CameraController.Instance.RotateCamera(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
 077    }
 078  }
 79
 080  private void Handle3DModeScrollWheelInput() {
 081    if (Input.GetAxis("Mouse ScrollWheel") != 0) {
 082      CameraController.Instance.ZoomCamera(Input.GetAxis("Mouse ScrollWheel") * 500);
 083    }
 084  }
 85
 086  private void Handle3DModeLockableInput() {
 087    if (Input.GetKey(KeyCode.LeftShift)) {
 088      CameraController.Instance.CameraSpeed = CameraController.Instance.CameraSpeedMax;
 089    } else {
 090      CameraController.Instance.CameraSpeed = CameraController.Instance.CameraSpeedNormal;
 091    }
 92
 93    // Translational movement.
 094    if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) {
 095      CameraController.Instance.TranslateCamera(CameraController.TranslationInput.Forward);
 096    }
 097    if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) {
 098      CameraController.Instance.TranslateCamera(CameraController.TranslationInput.Left);
 099    }
 0100    if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) {
 0101      CameraController.Instance.TranslateCamera(CameraController.TranslationInput.Back);
 0102    }
 0103    if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) {
 0104      CameraController.Instance.TranslateCamera(CameraController.TranslationInput.Right);
 0105    }
 0106    if (Input.GetKey(KeyCode.Q)) {
 0107      CameraController.Instance.TranslateCamera(CameraController.TranslationInput.Up);
 0108    }
 0109    if (Input.GetKey(KeyCode.E)) {
 0110      CameraController.Instance.TranslateCamera(CameraController.TranslationInput.Down);
 0111    }
 0112  }
 113
 0114  private void HandleTacticalModeMouseInput() {
 115    // Start drag on right mouse button.
 0116    if (Input.GetMouseButtonDown(1)) {
 0117      _isDragging = true;
 0118      _lastMousePosition = Input.mousePosition;
 0119    }
 120    // End drag when button released.
 0121    else if (Input.GetMouseButtonUp(1)) {
 0122      _isDragging = false;
 0123    }
 124
 125    // Handle dragging.
 0126    if (_isDragging) {
 0127      Vector2 currentMousePos = Input.mousePosition;
 0128      Vector2 delta = currentMousePos - _lastMousePosition;
 0129      TacticalPanel.Instance.Pan(delta);
 0130      _lastMousePosition = currentMousePos;
 0131    }
 0132  }
 133
 0134  private void HandleTacticalModeScrollWheelInput() {
 0135    if (Input.GetAxis("Mouse ScrollWheel") != 0) {
 0136      TacticalPanel.Instance.ZoomIn(Input.GetAxis("Mouse ScrollWheel") * 0.1f);
 0137    }
 0138  }
 139
 0140  private void HandleTacticalModeLockableInput() {
 141    // Handle keyboard input for panning.
 0142    Vector2 keyboardPanDirection = Vector2.zero;
 0143    if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) {
 0144      keyboardPanDirection.y += -1;
 0145    }
 0146    if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) {
 0147      keyboardPanDirection.x += 1;
 0148    }
 0149    if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) {
 0150      keyboardPanDirection.y += 1;
 0151    }
 0152    if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) {
 0153      keyboardPanDirection.x += -1;
 0154    }
 155
 0156    if (Input.GetKeyDown(KeyCode.Q)) {
 0157      TacticalPanel.Instance.CycleRangeUp();
 0158    }
 0159    if (Input.GetKeyDown(KeyCode.E)) {
 0160      TacticalPanel.Instance.CycleRangeDown();
 0161    }
 162
 0163    if (keyboardPanDirection != Vector2.zero) {
 0164      TacticalPanel.Instance.PanWithKeyboard(keyboardPanDirection.normalized);
 0165    }
 0166  }
 167
 0168  private void HandleNonLockableInput() {
 0169    if (Input.GetKeyDown(KeyCode.Escape)) {
 0170      SimManager.Instance.QuitSimulation();
 0171    }
 172
 0173    if (Input.GetKeyDown(KeyCode.R)) {
 0174      SimManager.Instance.EndSimulation();
 0175      SimManager.Instance.ResetAndStartSimulation();
 0176    }
 177
 0178    if (Input.GetKeyDown(KeyCode.L)) {
 0179      UIManager.Instance.ToggleConfigSelectorPanel();
 0180    }
 181
 0182    if (Input.GetKeyDown(KeyCode.C)) {
 0183      ParticleManager.Instance.ClearHitMarkers();
 0184    }
 185
 0186    if (Input.GetKeyDown(KeyCode.P)) {
 0187      CameraController.Instance.AutoRotate = !CameraController.Instance.AutoRotate;
 0188    }
 189
 0190    if (Input.GetKeyDown(KeyCode.Space)) {
 191      // Pause the time.
 0192      if (!SimManager.Instance.IsPaused) {
 0193        SimManager.Instance.PauseSimulation();
 0194      } else {
 0195        SimManager.Instance.ResumeSimulation();
 0196      }
 0197    }
 198
 0199    HandleCameraFollowInput(KeyCode.Alpha1, CameraFollowType.ALL_AGENTS);
 0200    HandleCameraFollowInput(KeyCode.Alpha2, CameraFollowType.ALL_INTERCEPTORS);
 0201    HandleCameraFollowInput(KeyCode.Alpha3, CameraFollowType.ALL_THREATS);
 0202  }
 203
 0204  private void HandleCameraFollowInput(KeyCode key, CameraFollowType followType) {
 0205    if (Input.GetKeyDown(key)) {
 0206      if (Input.GetKey(KeyCode.LeftControl)) {
 0207        CameraController.Instance.Follow(followType);
 0208      } else {
 0209        CameraController.Instance.Snap(followType);
 0210      }
 0211    }
 0212  }
 213}