public void PickMouseActionByCamAngle() { // check camera angle float horizLook = playerLook.transform.localEulerAngles.y; float vertLook = playerLook.playerCamera.localEulerAngles.x; // vertical bounds if (vertLook > 360f - vertAngle / 2 || vertLook < vertAngle / 2) { // front if (horizLook > (360f - frontAngle / 2) || horizLook < (frontAngle / 2)) { availableAction = ClickAction.Scope; crosshair.SetHintToScope(); } // rear else if (horizLook > (180f - rearAngle / 2) && horizLook < (180 + rearAngle / 2)) { // nav selection in progress // decide direction to turn if (navSelection) { const float selDeadZone = 3f; // option of selection if (playerLook.transform.localEulerAngles.y < navSelectionPlayerYOrigin - selDeadZone) { if (availableAction == ClickAction.No) { appManager.soundManager.Play(SoundManager.soundId.uiClick); } crosshair.SetHintToNavOptions(-1); availableAction = ClickAction.NavigateLeft; } else if (playerLook.transform.localEulerAngles.y > navSelectionPlayerYOrigin + selDeadZone) { if (availableAction == ClickAction.No) { appManager.soundManager.Play(SoundManager.soundId.uiClick); } crosshair.SetHintToNavOptions(1); availableAction = ClickAction.NavigateRight; } else { crosshair.SetHintToNavOptions(0); availableAction = ClickAction.No; } } // turning already in progress else if (ship.shipNavigation.turning) { availableAction = ClickAction.No; crosshair.SetHintToWait(); } // turn available else { availableAction = ClickAction.Nav; crosshair.SetHintToNav(); } } else { availableAction = ClickAction.No; crosshair.NoHint(); // cancel nav selection on looking outside of rear area if (navSelection) { navSelection = false; appManager.soundManager.Play(SoundManager.soundId.noAction); } } } else { crosshair.NoHint(); } }