All files / src/builder fieldBuilder.ts

100% Statements 22/22
100% Branches 5/5
100% Functions 5/5
100% Lines 22/22

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 7422x 22x             22x           167x                               7x 6x 6x   1x                 1x 1x   1x 1x   1x 1x       168x 116x   168x 116x   168x 168x               117x 117x      
import { FieldConfigure, FieldConfigureImpl } from './fieldConfigure'
import { FieldConfigSupplier } from '../value/fieldConfig'
 
/**
 * マップ ({@link Field}) を簡便に作るためのクラス.
 *
 * Field は本クラスを用いて作成してください.
 */
export class FieldBuilder extends FieldConfigureImpl {
  private static lastUsedScene?: g.Scene
  private static defaultConfig?: FieldConfigSupplier
  private static defaultConfigure?: FieldConfigure
 
  constructor (scene: g.Scene) {
    super(false, new FieldConfigSupplier(FieldBuilder.getDefaultConfig(scene).get()))
  }
 
  /**
   * 作成する Field のライブラリ利用者が自由に使えるフィールドを取得します.
   */
  override vars (): unknown
 
  /**
   * 作成する Field のライブラリ利用者が自由に使えるフィールドを設定します.
   *
   * @param vars ライブラリ利用者が自由に使えるフィールド
   */
  override vars (vars: unknown): FieldBuilder
 
  override vars (args?: unknown): unknown | FieldBuilder {
    if (arguments.length > 0) {
      super.vars(args)
      return this
    }
    return super.vars()
  }
 
  /**
   * 各属性値に値を設定しなかった際に使用されるデフォルト値を設定します.
   *
   * @param scene 現在の scene を指定してください.
   */
  static getDefault (scene: g.Scene): FieldConfigure {
    if (FieldBuilder.lastUsedScene !== scene) {
      FieldBuilder.resetDefault()
    }
    if (!FieldBuilder.defaultConfigure) {
      FieldBuilder.defaultConfigure = new FieldConfigureImpl(true, FieldBuilder.getDefaultConfig(scene))
    }
    FieldBuilder.lastUsedScene = scene
    return FieldBuilder.defaultConfigure
  }
 
  private static getDefaultConfig (scene: g.Scene): FieldConfigSupplier {
    if (FieldBuilder.lastUsedScene !== scene) {
      FieldBuilder.resetDefault()
    }
    if (!FieldBuilder.defaultConfig) {
      FieldBuilder.defaultConfig = new FieldConfigSupplier({ vars: undefined })
    }
    FieldBuilder.lastUsedScene = scene
    return FieldBuilder.defaultConfig
  }
 
  /**
   * {@link getDefault} で設定した変更を消去します.
   * @internal
   */
  private static resetDefault () {
    delete FieldBuilder.defaultConfig
    delete FieldBuilder.defaultConfigure
  }
}