All files / src/model layer.ts

100% Statements 9/9
100% Branches 0/0
100% Functions 2/2
100% Lines 8/8

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                                                                            22x             78x 78x 78x 78x 78x 78x       312x                    
import { LayerConfig, LayerType } from '../value/layerConfig'
 
/**
 * ゲーム g.Scene 上にエンティティを前後適切に配置するためのレイヤ層.
 *
 * {@link LayerBuilder} を使ってインスタンスを作成してください.
 */
export interface Layer {
  /**
   * マップ層.
   *
   * {@link Spot}, {@link Broadcaster} を配置するためのレイヤ.
   */
  readonly field: g.E
  /**
   * 生放送層.
   *
   * {@link Live}, を配置するためのレイヤ.
   */
  readonly screen: g.E
  /**
   * コメント層
   *
   * {@link CommentDeployer} がコメントを配置するためのレイヤ
   */
  readonly comment: g.E
  /**
   * ヘッダー層
   *
   * {@link Scorer} が得点, {@link Ticker} が残り時間を配置するためのレイヤ
   */
  readonly header: g.E
  /**
   * ライブラリ利用者が自由に使えるフィールドです.
   */
  vars?: unknown
}
 
export class LayerImpl implements Layer {
  readonly field: g.E
  readonly screen: g.E
  readonly comment: g.E
  readonly header: g.E
  vars?: unknown
 
  constructor (private readonly scene: g.Scene, private readonly config: LayerConfig) {
    this.field = this.createEntity('field')
    this.screen = this.createEntity('screen')
    this.comment = this.createEntity('comment')
    this.header = this.createEntity('header')
    this.vars = config.vars
  }
 
  private createEntity (typ: LayerType) {
    return new g.E({
      scene: this.scene,
      parent: this.scene,
      x: this.config[typ].x,
      y: this.config[typ].y,
      width: this.config[typ].width,
      height: this.config[typ].height
    })
  }
}