Phaser3 Sprite派生クラスのファイル分割

prefabs/player.ts
import { Scene } from "phaser";

const ANIM_STAT = {
  IDLE: "idle",
};

export class Player extends Phaser.GameObjects.Sprite {
  private context: Scene;

  private keyA: Phaser.Input.Keyboard.Key;
  private keyS: Phaser.Input.Keyboard.Key;
  private keyD: Phaser.Input.Keyboard.Key;
  private keyW: Phaser.Input.Keyboard.Key;

  constructor(scene: Scene, x: number, y: number) {
    super(scene, x, y, 'hoge');
    this.context = scene;

    this.anims.create({
      key: ANIM_STAT.IDLE,
      frames: this.anims.generateFrameNames('hoge', {
        prefix: "idle/frame",
        start: 0,
        end: 5,
        zeroPad: 4,
      }),
      frameRate: 8,
      repeat: -1,
    });

    this.setOrigin(0.5, 1);
    this.setScale(4);
    this.play(ANIM_STAT.IDLE);

    this.context.add.existing(this);

    this.keyA = this.context.input.keyboard.addKey(
      Phaser.Input.Keyboard.KeyCodes.A
    );
    this.keyS = this.context.input.keyboard.addKey(
      Phaser.Input.Keyboard.KeyCodes.S
    );
    this.keyD = this.context.input.keyboard.addKey(
      Phaser.Input.Keyboard.KeyCodes.D
    );
    this.keyW = this.context.input.keyboard.addKey(
      Phaser.Input.Keyboard.KeyCodes.W
    );
  }

  protected preUpdate(time: number, delta: number) {
    super.preUpdate(time, delta);

    if (this.keyA.isDown) {
      this.x -= 10;
    }
    if (this.keyD.isDown) {
      this.x += 10;
    }
  }
}
prefabs/index.ts
export * from "./player";
scenes/main-scene.ts
import { Player } from "../prefabs";

export class MainScene extends Phaser.Scene {
  private player: Player;

  constructor() {
    super({
      key: "MainScene",
    });
  }

  preload(): void {
    console.log("main scene preload");
  }

  create(): void {
    console.log("main scene create");

    this.player = new Player(
      this,
      this.cameras.main.centerX,
      this.cameras.main.height * 0.8
    );
  }

  update(time: number, delta: number) {
    super.update(time, delta);
  }
}