void Update()
    {
        wasGrounded = characterController.isGrounded;

        ProcessPlayerInput(); // check input
        GroundCheck();  // check ground status
        JumpCheck(); // jump
        Move(); // finally move
    }


   private void Move()
    {
        ApplyGravity();
        GetDesiredMovementSpeed();

        finalVector =
            (groundVector * finalSpeed) +
            (Vector3.up * gravitySim); // we combine our velocities/vectors

        if (jump.magnitude > playerSettings.jumpMagn)
        {
            finalVector += jump;
        }

        characterController.Move(finalVector * Time.deltaTime); // pass in our vectors
        jump = Vector3.Lerp(jump, Vector3.zero, playerSettings.jumpSmoothing * Time.deltaTime); // dampen the jump vector towards 0
        // incorrect lerp function, btw ^
    }

  private void ApplyGravity()
    {
        if (characterController.isGrounded && gravitySim < playerSettings.gravity)
            gravitySim = playerSettings.gravity;

        gravitySim += playerSettings.gravity * Time.deltaTime;
    }

    private void JumpCheck()
    {
        if (Input.GetKeyDown(KeyCode.Space) && jumpCounter > 0)
        {
            ResetVerticalVelocity();

            var calculatedJumpModifier = 1f;
            if (isRunning)
                calculatedJumpModifier = runningJumpModifier;

            jump += Vector3.up.normalized * (playerSettings.jumpForce * calculatedJumpModifier) / playerSettings.mass;
            jumpCounter--;
            audioSource.PlayOneShot(jumpSound);
        }
    }

    public void ResetVerticalVelocity()
    {
        jump.y = 0f;
        gravitySim = 0f;
    }