Handling first person shooter states

Hi,

I’m trying to make a first person shooter, but i’m looking at my code thinking it’s just horrible.
I’m currently just using a series of if statements to determine what the player can do in what state. But it just seems really messy and inefficient.

Is there another way anyone would recommend for this kind of logic?
It does work however, I just hate looking at how messy it is.
Thanks

       #regionStates
if(!shooting && !reloading)
{

if (Input.GetAxis("Vertical") != 0 || Input.GetAxis("Horizontal") != 0){

if(Input.GetButton("Reload")){

StartCoroutine(Reload ());

return;

}

if(Input.GetButton ("Sprint"))
{

if(Input.GetAxis("Vertical") > 0 && Input.GetAxis("Horizontal") == 0)
{

accuracyState = 2;
playerState = 2;

} else {

accuracyState = 0;
playerState = 1;

}

//Playeriswalking
} else {

if(Input.GetButtonDown("Shoot")){

StartCoroutine(Shoot ());

}

if (Input.GetAxis("Aim") > 0) {

accuracyState = 2;

playerState = 3;

//ifmoving
} else {

accuracyState = 1;

playerState = 1;

}

}

//Ifnotmoving
} else {

if(Input.GetButton("Reload")){

StartCoroutine(Reload ());

return;

}

if(Input.GetButtonDown("Shoot")){

StartCoroutine(Shoot ());

return;

}

if (Input.GetAxis("Aim") > 0) {

accuracyState = 2;

playerState = 3;

//ifmoving
} else {

accuracyState = 0;

playerState = 0;

}

}

switch (playerState) {

case0:
gun.CrossFade ("Pistol_Idle");
Player.Instance.fps.m_MouseLook.XSensitivity = 7;
Player.Instance.fps.m_MouseLook.YSensitivity = 7;
break;
case1:
gun.CrossFade ("Pistol_Walking");
Player.Instance.fps.m_MouseLook.XSensitivity = 7;
Player.Instance.fps.m_MouseLook.YSensitivity = 7;
break;
case2:
gun.CrossFade ("Pistol_Sprint");
Player.Instance.fps.m_MouseLook.XSensitivity = 7;
Player.Instance.fps.m_MouseLook.YSensitivity = 7;
break;
case3:
gun.CrossFade ("Pistol_ADS");
Player.Instance.fps.m_MouseLook.XSensitivity = 4;
Player.Instance.fps.m_MouseLook.YSensitivity = 4;
break;

}

}

#endregion

I’d probably start by looking up “enum”

Cheers for the reply. I am familiar with enums, but I feel like they’ll still require a load of if statements or switch based on the enum type. Granted it would write more tidily than it is now. Or is there some other functionality of enums you’re referring to?
Thanks again