All files / src/builder broadcasterBuilder.ts

100% Statements 35/35
100% Branches 8/8
100% Functions 8/8
100% Lines 35/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 13722x 22x 22x             22x           120x                               8x 5x 5x   3x                               10x 6x 5x   4x                               8x 5x 5x   3x                               11x 7x 7x   4x                 1x 1x   1x 1x   1x 1x       121x 118x   121x 118x       121x 121x               119x 119x      
import { image } from '../util/loader'
import { BroadcasterConfigure, BroadcasterConfigureImpl } from './broadcasterConfigure'
import { BroadcasterConfigSupplier } from '../value/broadcasterConfig'
 
/**
 * 放送者(プレイヤー) {@link Broadcaster} を簡便に作るためのクラス.
 *
 * Broadcaster は本クラスを用いて作成してください.
 */
export class BroadcasterBuilder extends BroadcasterConfigureImpl {
  private static lastUsedScene?: g.Scene
  private static defaultConfig?: BroadcasterConfigSupplier
  private static defaultConfigure?: BroadcasterConfigure
 
  constructor (scene: g.Scene) {
    super(false, scene, new BroadcasterConfigSupplier(BroadcasterBuilder.getDefaultConfig(scene).get()))
  }
 
  /**
   * 作成する Broadcaster に使用される画像アセットを取得します.
   */
  override asset (): g.ImageAsset
 
  /**
   * 作成する Broadcaster に設定する画像アセットを登録します.
   *
   * @param asset 描画に使用する画像アセット
   */
  override asset (asset: g.ImageAsset): BroadcasterBuilder
 
  override asset (args?: g.ImageAsset): g.ImageAsset | BroadcasterBuilder {
    if (args) {
      super.asset(args)
      return this
    }
    return super.asset()
  }
 
  /**
   * 作成する Broadcaster に設定する移動速度を取得します.
   */
  override speed (): number
 
  /**
   * 作成する Broadcaster に設定する移動速度を設定します.
   *
   * @param speed 移動速度
   */
  override speed (speed: number): BroadcasterBuilder
 
  override speed (args?: number): number | BroadcasterBuilder {
    if (args) {
      super.speed(args)
      return this
    }
    return super.speed()
  }
 
  /**
   * 作成する Broadcaster に設定する座標を取得します.
   */
  override location (): g.CommonOffset
 
  /**
   * 作成する Broadcaster の座標を設定します.
   *
   * @param location Broadcaster の座標
   */
  override location (location: g.CommonOffset): BroadcasterBuilder
 
  override location (args?: g.CommonOffset): Readonly<g.CommonOffset> | BroadcasterBuilder {
    if (args) {
      super.location(args)
      return this
    }
    return super.location()
  }
 
  /**
   * 作成する Broadcaster のライブラリ利用者が自由に使えるフィールドを取得します.
   */
  override vars (): unknown
 
  /**
   * 作成する Broadcaster のライブラリ利用者が自由に使えるフィールドを設定します.
   *
   * @param vars ライブラリ利用者が自由に使えるフィールド
   */
  override vars (vars: unknown): BroadcasterBuilder
 
  override vars (args?: unknown): unknown | BroadcasterBuilder {
    if (arguments.length > 0) {
      super.vars(args)
      return this
    }
    return super.vars()
  }
 
  /**
   * 各属性値に値を設定しなかった際に使用されるデフォルト値を設定します.
   *
   * @param scene 現在の scene を指定してください.
   */
  static getDefault (scene: g.Scene): BroadcasterConfigure {
    if (BroadcasterBuilder.lastUsedScene !== scene) {
      BroadcasterBuilder.resetDefault()
    }
    if (!BroadcasterBuilder.defaultConfigure) {
      BroadcasterBuilder.defaultConfigure = new BroadcasterConfigureImpl(true, scene, BroadcasterBuilder.getDefaultConfig(scene))
    }
    BroadcasterBuilder.lastUsedScene = scene
    return BroadcasterBuilder.defaultConfigure
  }
 
  private static getDefaultConfig (scene: g.Scene): BroadcasterConfigSupplier {
    if (BroadcasterBuilder.lastUsedScene !== scene) {
      BroadcasterBuilder.resetDefault()
    }
    if (!BroadcasterBuilder.defaultConfig) {
      BroadcasterBuilder.defaultConfig = new BroadcasterConfigSupplier({
        x: 0, y: 0, speed: 1, asset: image(scene, 'image/broadcaster.default.png'), vars: undefined
      })
    }
    BroadcasterBuilder.lastUsedScene = scene
    return BroadcasterBuilder.defaultConfig
  }
 
  /**
   * {@link getDefault} で設定した変更を消去します.
   * @internal
   */
  private static resetDefault () {
    delete BroadcasterBuilder.defaultConfig
    delete BroadcasterBuilder.defaultConfigure
  }
}