Implementing a "Fire Mode" in 2D

Making an artillery game and I want there to be a shot mode on keypress.

Have had a working projectile fire but I am having trouble getting it to work with update, I’m not sure where exactly I’m going wrong… can anyone help with this?
{

public Transform firepoint;
public GameObject shell;
public GameObject clone;
public Camera playcam;
private float vforce;
private float hforce;
bool h;
void Start()
{
}

// Update is called once per frame
void Update()
{
    if (Input.GetButtonDown("Fire1"))
    {
        ShootMode();
    }

    if (Input.GetButtonDown("CamChange"))
    {
        CamChange();
    }
}

private void CamChange()
{
    if (GameObject.Find("MainCam").GetComponent<Camera>().enabled == true)
    {
        GameObject.Find("MainCam").GetComponent<Camera>().enabled = false;
        playcam.enabled = true;
        return;
    }
    if (playcam.isActiveAndEnabled == true)
    {
        GameObject.Find("MainCam").GetComponent<Camera>().enabled = true;
        playcam.enabled = false;
        return;
    }
}

void ShootMode()
{
    GetComponent<playermovement>().enabled = false;
    bool h = GetComponent<playermovement>().facingRight;
    hforce = 0;

    bool exitSM = false;

    while (!exitSM)
    {
        if (Input.GetButtonDown("Fire1"))
        {
            GetComponent<playermovement>().enabled = true;
            exitSM = true;
        }

        if (Input.GetButtonDown("Jump"))
        {
            if (hforce > 5)
            {
                hforce = 5;
            }
            if (hforce < 0)
            {
                hforce = 0;
            }
            fire();
            exitSM = true;
        }
        if (Input.GetButtonDown("Horizontal"))
        {
                hforce = hforce + Input.GetAxis("Horizontal");   
        }
     
    }
}

void fire()
{
    clone = Instantiate(shell, firepoint.position, firepoint.rotation) as GameObject;
    clone.AddComponent<Destructible2D.OnCollision>();
    clone.SetActive(true);
    if (h == false)
    {

        clone.GetComponent<Rigidbody2D>().AddForce(new Vector2(hforce * -100, vforce*10));

    }

    if (h == true)
    {
        clone.GetComponent<SpriteRenderer>().flipX = true;
        clone.GetComponent<Rigidbody2D>().AddForce(new Vector2(hforce *100, vforce*10));

    }
    GetComponent<playermovement>().enabled = true;

}
}

“fire()” is only called when “Fire1” and “Jump” are pressed down at the same time. ShootMode is only called when “Fire1” is pressed, which then checks if “Jump” is pressed. That’s probably not what you want.

Instead of nesting the “Jump” check inside of the “Fire1” check, separate the two.