My character controller script is broken

my character moves fine for a little while but then its as if the W key gets stuck down? the character can still rotate but is stuck moving in the same direction. what you cant see in the image is:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharControl : MonoBehaviour
{
float Speed = 4;
float rotSpeed = 80;
float rot = 0f;
float Gravity = 8;

Vector3 moveDir = Vector3.zero;

CharacterController controller;
Animator anim;

void Start()
{
    controller = GetComponent<CharacterController>();
    anim = GetComponent<Animator>();
}

void Update()
{
    if (controller.isGrounded)
    {
        if (Input.GetKey (KeyCode.W))
        {
            anim.SetInteger("Condition", 1);
            moveDir = new Vector3(0, 0, 1);
            moveDir *= Speed;
            moveDir = transform.TransformDirection(moveDir);
        }
        if (Input.GetKeyUp(KeyCode.W))
        {
            anim.SetInteger("Condition", 0);
            moveDir = new Vector3(0, 0, 0);
            moveDir *= Speed;
        }
        if (Input.GetKey(KeyCode.S))
        {
            Speed = 2;
            anim.SetInteger("Condition", 2);
            moveDir = new Vector3(0, 0, -1);
            moveDir *= Speed;
            moveDir = transform.TransformDirection(moveDir);
        }
        if (Input.GetKeyUp(KeyCode.S))
        {
            Speed = 4;
            anim.SetInteger("Condition", 0);
            moveDir = new Vector3(0, 0, 0);
            moveDir *= Speed;
        }
    }
    rot += Input.GetAxis("Horizontal") * rotSpeed * Time.deltaTime;
    transform.eulerAngles = new Vector3(0, rot, 0);

    moveDir.y -= Gravity * Time.deltaTime;
    controller.Move(moveDir * Time.deltaTime);
}

}


Maybe it’s because you have the moveDir *= Speed; on W and it’s GetKeyUp