text: /**
   * Player jump state
   * - Determines the operation by AI according to the state and renders based on state
   * - Initialize state image
   * - ### Decides actions while jumping
   * @extends {BaseState}
   * @classdesc Player jump state to decide actions while jumping
   */
  class PJumpingState extends BaseState { // eslint-disable-line  no-unused-vars
      /**
       * Player jump state constructor
       * @constructor
       * @param {number} maxVelocityX Maximum speed
       * @param {number} movePower The power to move in the air
       */
      constructor(maxVelocityX, movePower) {
          super();
  
          /**
           * Maximum speed vector
           * @protected
           * @type {number}
           */
          this.maxVelocityX = maxVelocityX;
          /**
           * Force applied when moving
           * @protected
           * @type {number}
           */
          this.movePower = movePower;
      }
  
      /**
       * Apply AI and decide action
       * @override
       * @param {number} dt Delta time
       * @return {boolean} Whether decided on action
       */
      apply(dt) {
          // input
          let vx = 0;
          if (Input.key.isPressed(Input.key.left())) {
              vx += -1;
          }
          if (Input.key.isPressed(Input.key.right())) {
              vx += 1;
          }
          if (vx !== 0) {
              this.entity.setDirection(vx);
              if (this.entity.body.velocityX * vx < 0 || Math.abs(this.entity.body.velocityX) < Math.abs(this.maxVelocityX)) {
                  this.entity.body.enforce(this.movePower * vx / dt, 0);
              }
          }
          if (Util.onGround(this.entity)) {
              if (Math.abs(this.entity.body.velocityX) < 100) {
                  this.ai.changeState(`stationary`);
              } else {
                  this.ai.changeState(`walk`);
              }
          }
          return true;
      }
  }
  