public IHeroState HandleInput(Hero hero, InputManager input, CollisionManager collision, GravityManager grav)
    {
        fallDir             = grav.GetGravityVector2();
        airControlDir       = grav.GravCorrectWorldToLocalInput(input.horizontalInput, input.verticalInput);
        fallHorizontalRight = collision.transformRight;


        if (collision.onGround)
        {
            return(gameObject.GetComponent <IdleState>());
        }

        if (collision.transformUp.x == 0)
        {
            fallHorizontalDir = input.horizontalInput;
        }
        else if (collision.transformUp.x == 1)
        {
            fallHorizontalDir = -input.verticalInput;
        }
        else if (collision.transformUp.x == -1)
        {
            fallHorizontalDir = input.verticalInput;
        }

        if ((collision.onRightWall && fallHorizontalDir > 0) || collision.onLeftWall && fallHorizontalDir < 0)
        {
            fallHorizontalDir = 0;
        }

        return(null);
    }