예제 #1
0
    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();
        }
    }