All files / src/builder tickerBuilder.ts

100% Statements 42/42
100% Branches 10/10
100% Functions 10/10
100% Lines 42/42

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 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 18122x 22x             22x           13x                               16x 4x 4x   12x                               19x 5x 5x   14x                               8x 6x 5x   2x                               7x 5x 5x   2x                               7x 5x 5x   2x                               7x 6x 6x   1x                 1x 1x   1x 1x   1x 1x       14x 14x   14x 14x                 14x 14x               15x 15x      
import { TickerConfigure, TickerConfigureImpl } from './tickerConfigure'
import { TickerConfigSupplier } from '../value/tickerConfig'
 
/**
 * 残り時間制御器 {@link Ticker} を簡便に作るためのクラス.
 *
 * Ticker は本クラスを用いて作成してください.
 */
export class TickerBuilder extends TickerConfigureImpl {
  private static lastUsedScene?: g.Scene
  private static defaultConfig?: TickerConfigSupplier
  private static defaultConfigure?: TickerConfigure
 
  constructor (scene: g.Scene) {
    super(false, scene, new TickerConfigSupplier(TickerBuilder.getDefaultConfig(scene).get()))
  }
 
  /**
   * 作成する Ticker に設定する残り時間の初期値 (フレーム数) を取得します.
   */
  override frame (): number
 
  /**
   * 作成する Ticker に設定する残り時間の初期値 (フレーム数) を設定します.
   *
   * @param frame 残り時間の初期値 (フレーム数)
   */
  override frame (frame: number): TickerBuilder
 
  override frame (args?: number): number | TickerConfigure {
    if (typeof args === 'number') {
      super.frame(args)
      return this
    }
    return super.frame()
  }
 
  /**
   * 作成する Ticker に設定するフォントを取得します.
   */
  override font (): g.Font
 
  /**
   * 作成する Ticker に設定するフォントを設定します.
   *
   * @param font 描画に使用するフォント
   */
  override font (font: g.Font): TickerBuilder
 
  override font (args?: g.Font): g.Font | TickerBuilder {
    if (args) {
      super.font(args)
      return this
    }
    return super.font()
  }
 
  /**
   * 作成する Ticker に設定する得点の桁数を取得します.
   */
  override digit (): number
 
  /**
   * 作成する Ticker に設定する得点の桁数を設定します.
   *
   * @param digit 残り時間の桁数
   */
  override digit (digit: number): TickerBuilder
 
  override digit (args?: number): number | TickerBuilder {
    if (typeof args === 'number') {
      super.digit(args)
      return this
    }
    return super.digit()
  }
 
  /**
   * 作成する Ticker に設定する前置テキストを取得します.
   */
  override prefix (): string
 
  /**
   * 作成する Ticker に設定する前置テキストを設定します.
   *
   * @param prefix 前置テキスト
   */
  override prefix (prefix: string): TickerBuilder
 
  override prefix (args?: string): string | TickerBuilder {
    if (args) {
      super.prefix(args)
      return this
    }
    return super.prefix()
  }
 
  /**
   * 作成する Ticker に設定する後置テキストを取得します.
   */
  override suffix (): string
 
  /**
   * 作成する Ticker に設定する後置テキストを設定します.
   *
   * @param suffix 後置テキスト
   */
  override suffix (suffix: string): TickerBuilder
 
  override suffix (args?: string): string | TickerBuilder {
    if (args) {
      super.suffix(args)
      return this
    }
    return super.suffix()
  }
 
  /**
   * 作成する Ticker のライブラリ利用者が自由に使えるフィールドを取得します.
   */
  override vars (): unknown
 
  /**
   * 作成する Ticker のライブラリ利用者が自由に使えるフィールドを設定します.
   *
   * @param vars ライブラリ利用者が自由に使えるフィールド
   */
  override vars (vars: unknown): TickerBuilder
 
  override vars (args?: unknown): unknown | TickerBuilder {
    if (arguments.length > 0) {
      super.vars(args)
      return this
    }
    return super.vars()
  }
 
  /**
   * 各属性値に値を設定しなかった際に使用されるデフォルト値を設定します.
   *
   * @param scene 現在の scene を指定してください.
   */
  static getDefault (scene: g.Scene): TickerConfigure {
    if (TickerBuilder.lastUsedScene !== scene) {
      TickerBuilder.resetDefault()
    }
    if (!TickerBuilder.defaultConfigure) {
      TickerBuilder.defaultConfigure = new TickerConfigureImpl(true, scene, TickerBuilder.getDefaultConfig(scene))
    }
    TickerBuilder.lastUsedScene = scene
    return TickerBuilder.defaultConfigure
  }
 
  private static getDefaultConfig (scene: g.Scene): TickerConfigSupplier {
    if (TickerBuilder.lastUsedScene !== scene) {
      TickerBuilder.resetDefault()
    }
    if (!TickerBuilder.defaultConfig) {
      TickerBuilder.defaultConfig = new TickerConfigSupplier({
        frame: 1800,
        font: new g.DynamicFont({ game: scene.game, fontFamily: 'monospace', size: 40, strokeColor: 'white', strokeWidth: 4 }),
        digit: 2,
        prefix: '残り',
        suffix: '秒',
        vars: undefined
      })
    }
    TickerBuilder.lastUsedScene = scene
    return TickerBuilder.defaultConfig
  }
 
  /**
   * {@link getDefault} で設定した変更を消去します.
   * @internal
   */
  private static resetDefault () {
    delete TickerBuilder.defaultConfig
    delete TickerBuilder.defaultConfigure
  }
}