Help rotating gun towards mouse position (with flipping)

Hi,

I have been working on a 2d platformer for quite a while now and am looking at trying to add in weapons and shooting. Currently I have it setup so that the player model flips if they are moving left or right, and now I am trying to add in a weapon. I am trying to make it so that the gun will rotate towards where the mouse cursor is, but if the player is looking left and the gun is looking right, the gun will flip, instead of rotating over 180 degrees and looking weird.

Here is my code so far for the gun:

public Vector3 mousePos;
public Vector3 gunPos;
public float angle;

// Update is called once per frame
void Update () {
    mousePos = Input.mousePosition;
    gunPos = Camera.main.WorldToScreenPoint(transform.position);
    mousePos.x = mousePos.x - gunPos.x;
    mousePos.y = mousePos.y - gunPos.y;
    angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}

However, with this code, the gun doesn’t rotate properly if my mouse cursor moves to the side of the screen that the player is not looking at.!

62493-help1.png

62494-help2.png

Try this

  void Update ()
    {
        if (transform.localScale.x == 1)
        {
            Vector3 mousePos = Input.mousePosition;
            mousePos.z = 5.23f;

            Vector3 gunPos = Camera.main.WorldToScreenPoint(transform.position);
            mousePos.x = mousePos.x - objectPos.x;
            mousePos.y = mousePos.y - objectPos.y;

            float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
        }
        else if (transform.localScale.x == -1)
        {
            Vector3 mousePos = Input.mousePosition;
            mousePos.z = 5.23f;

            Vector3 gunPos = Camera.main.WorldToScreenPoint(transform.position);
            mousePos.x = mousePos.x - objectPos.x;
            mousePos.y = mousePos.y - objectPos.y;

            float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(new Vector3(0, 0, -angle));
        }
    }

`