IPlayerState IPlayerState.Update(PlayerMovementRB player)
        {
            if (player.controlState == ControlState.CONTROLLABLE)
            {
                if (player.directionVector.sqrMagnitude != 0)
                {
                    return player.statePool.GetState("MOVING");
                }
                else if (Input.GetButtonDown(player.jumpButton))
                {
                    return player.statePool.GetState("JUMPING");
                }
                else if (Input.GetButtonDown(player.interactButton))
                {
                    player.Interact();
                }
                else if (Input.GetButtonDown(player.crouchButton))
                {
                    return player.statePool.GetState("CROUCHING");
                }
            }

            if (!player.grounded)
            {
                return player.statePool.GetState("FALLING");
            }

            // TODO: if( crouch is pressed) { return new PlayerStateCrouching(); }
            return this;
        }
        IPlayerState IPlayerState.Update(PlayerMovementRB player)
        {
            // Check if the player jumped BEFORE we check if they aren't grounded
            // so if both happen in the same frame they can still jump
            if (Input.GetButtonDown(player.jumpButton))
            {
                return player.statePool.GetState("JUMPING");
            }
            else if (!player.grounded)
            {
                return player.statePool.GetState("FALLING");
            }
            else if (Input.GetButtonDown(player.interactButton))
            {
                player.Interact();
            }
            else if (Input.GetButtonDown(player.crouchButton))
            {
                return player.statePool.GetState("CRAWLING");
            }

            // Set animator speed and then if not moving go to Idle state
            player.anim.SetFloat("Speed", player.currentSpeed);
            if (player.directionVector.sqrMagnitude == 0)
            {
                return player.statePool.GetState("IDLE");
            }
            return this;
        }
 IPlayerState IPlayerState.Update(PlayerMovementRB player)
 {
     if (player.rb.velocity.y < 0)
     {
         return player.statePool.GetState("FALLING");
     }
     else if (player.grounded)
     {
         return player.statePool.GetState("IDLE");
     }
     else if(player.carryState == CarryState.CARRYING && Input.GetButtonDown(player.interactButton))
     {
         player.Interact();
     }
     return this;
 }