@Override
   public void act(float deltaTime) {
      Vector2 curVel = body.getLinearVelocity();
      float startX = body.getPosition().x;
      if (Gdx.input.isKeyPressed(Keys.D)) {
         state = STATE_WALKING;
         forward = true;
         stateTime += deltaTime;
         if (startX < (getStage().getWidth() - getWidth() / 2)) {
            translate(WALK_SPEED, 0);
         }
      } else if (Gdx.input.isKeyPressed(Keys.A)) {
         state = STATE_WALKING;
         forward = false;
         stateTime += deltaTime;
         if (startX > 0) {
            translate(-WALK_SPEED, 0);
         }
      } else {
         state = STATE_STOPPED;
         stateTime = 0;
         body.setLinearVelocity(0, curVel.y);
      }


      if (Gdx.input.isKeyPressed(Keys.W) && curVel.y < 0.1f && curVel.y >= 0) {
         // TODO: this can trigger at top of jump too
         stateTime = 0;
         // big upward push
         body.setLinearVelocity(0, 650*Platform.WORLD_TO_BOX);
      }

      if (Gdx.input.isKeyPressed(Keys.ALT_RIGHT)) {
         Gdx.app.debug("bob", "Position: " + getX() + "," + getY() + ", " + getWidth() + "," + getHeight());
      }
   }