{"version":3,"file":"bp-prism-game.mjs","sources":["../../../projects/prism/src/lib/text/display-dialog/display-dialog.component.ts","../../../projects/prism/src/lib/text/display-dialog/display-dialog.component.html","../../../projects/prism/src/lib/service/display-dialog.service.ts","../../../projects/prism/src/lib/service/game-cookie.service.ts","../../../projects/prism/src/lib/gameboard/gameboard-constants.ts","../../../projects/prism/src/lib/enum/observable-type.enum.ts","../../../projects/prism/src/lib/asset/enum/asset-align.enum.ts","../../../projects/prism/src/lib/asset/enum/asset-align-vertical.enum.ts","../../../projects/prism/src/lib/asset/asset.class.ts","../../../projects/prism/src/lib/base/base.class.ts","../../../projects/prism/src/lib/enum/image-loaded.enum.ts","../../../projects/prism/src/lib/base/prism-base/prism-base.class.ts","../../../projects/prism/src/lib/base/alien-base/alien-base.class.ts","../../../projects/prism/src/lib/enum/asset-direction.enum.ts","../../../projects/prism/src/lib/aliens/alien/alien.class.ts","../../../projects/prism/src/lib/aliens/alien-1/alien-1.class.ts","../../../projects/prism/src/lib/aliens/alien-2/alien-2.class.ts","../../../projects/prism/src/lib/enum/alien-path.enum.ts","../../../projects/prism/src/lib/enum/alien-path-direction.enum.ts","../../../projects/prism/src/lib/service/path.service.ts","../../../projects/prism/src/lib/aliens/alien-dropship/alien-dropship.class.ts","../../../projects/prism/src/lib/service/invasion.service.ts","../../../projects/prism/src/lib/gunner/gunner.class.ts","../../../projects/prism/src/lib/gunner/main-gunner/main-gunner.class.ts","../../../projects/prism/src/lib/missile/missile.class.ts","../../../projects/prism/src/lib/service/missile.service.ts","../../../projects/prism/src/lib/text/character.class.ts","../../../projects/prism/src/lib/text/number/number.class.ts","../../../projects/prism/src/lib/enum/text-type.enum.ts","../../../projects/prism/src/lib/text/letter/letter.class.ts","../../../projects/prism/src/lib/service/text.service.ts","../../../projects/prism/src/lib/prism/prism-blast/prism-blast-constants.ts","../../../projects/prism/src/lib/prism/prism-blast/prism-blast.class.ts","../../../projects/prism/src/lib/prism/prism-blast-icon/prism-blast-icon.class.ts","../../../projects/prism/src/lib/service/prism-blast.service.ts","../../../projects/prism/src/lib/scenery/scenery.class.ts","../../../projects/prism/src/lib/enum/game-assets.enum.ts","../../../projects/prism/src/lib/scenery/water/water.class.ts","../../../projects/prism/src/lib/enum/asset-type.enum.ts","../../../projects/prism/src/lib/scenery/tree/tree.class.ts","../../../projects/prism/src/lib/scenery/lava/lava.class.ts","../../../projects/prism/src/lib/scenery/rock/rock.class.ts","../../../projects/prism/src/lib/scenery/grass/grass.class.ts","../../../projects/prism/src/lib/scenery/slime/slime.class.ts","../../../projects/prism/src/lib/service/scenery.service.ts","../../../projects/prism/src/lib/level/level.class.ts","../../../projects/prism/src/lib/level/bridge/bridge.class.ts","../../../projects/prism/src/lib/level/level-one/level-one.class.ts","../../../projects/prism/src/lib/level/path/path.class.ts","../../../projects/prism/src/lib/service/gameboard.service.ts","../../../projects/prism/src/lib/images/main-gunner/main-gunner.base64.ts","../../../projects/prism/src/lib/images/prism-base/prism-base.base64.ts","../../../projects/prism/src/lib/images/alien/alien-1/alien-one-right.base64.ts","../../../projects/prism/src/lib/images/alien/alien-2/alien-2-animate-west-1.base64.ts","../../../projects/prism/src/lib/images/prism-blast-icon/prism-blast-icon.base64.ts","../../../projects/prism/src/lib/game-instruction/game-instruction.component.ts","../../../projects/prism/src/lib/game-instruction/game-instruction.component.html","../../../projects/prism/src/lib/service/water.service.ts","../../../projects/prism/src/lib/images/scenery/tree/tree.base64.ts","../../../projects/prism/src/lib/images/scenery/water/water-zero.base64.ts","../../../projects/prism/src/lib/images/levels/level-one.base64.ts","../../../projects/prism/src/lib/images/main-gunner/main-gunner-support.base64.ts","../../../projects/prism/src/lib/images/scenery/lava/lava-one.base64.ts","../../../projects/prism/src/lib/images/levels/bridge.base64.ts","../../../projects/prism/src/lib/images/scenery/rock/rock.base64.ts","../../../projects/prism/src/lib/images/scenery/grass.base64.ts","../../../projects/prism/src/lib/images/main-gunner/missiles/missile.base64.ts","../../../projects/prism/src/lib/images/main-gunner/missiles/missile-red.base64.ts","../../../projects/prism/src/lib/images/main-gunner/missiles/missile-blue.base64.ts","../../../projects/prism/src/lib/images/main-gunner/missiles/missile-green.base64.ts","../../../projects/prism/src/lib/images/main-gunner/missiles/missile-indigo.base64.ts","../../../projects/prism/src/lib/images/main-gunner/missiles/missile-orange.base64.ts","../../../projects/prism/src/lib/images/main-gunner/missiles/missile-yellow.base64.ts","../../../projects/prism/src/lib/images/main-gunner/missiles/missile-violet.base64.ts","../../../projects/prism/src/lib/images/levels/path.base64.ts","../../../projects/prism/src/lib/images/scenery/slime/slime.base64.ts","../../../projects/prism/src/lib/images/levels/path-direction.base64.ts","../../../projects/prism/src/lib/images/alien/alien-1/alien-one-left.base64.ts","../../../projects/prism/src/lib/images/scenery/tree/tree-land.base64.ts","../../../projects/prism/src/lib/images/alien/alien-dropship/alien-dropship-1.base64.ts","../../../projects/prism/src/lib/images/alien/alien-dropship/tractor-beam/tractor-beam-1.base64.ts","../../../projects/prism/src/lib/images/alien/alien-base.base64.ts","../../../projects/prism/src/lib/images/scenery/water/water-eleven.base64.ts","../../../projects/prism/src/lib/images/scenery/water/water-three.base64.ts","../../../projects/prism/src/lib/images/scenery/water/water-one.base64.ts","../../../projects/prism/src/lib/images/scenery/water/water-waves.base64.ts","../../../projects/prism/src/lib/images/alien/alien-dropship/tractor-beam/tractor-beam-2.base64.ts","../../../projects/prism/src/lib/images/alien/alien-dropship/tractor-beam/tractor-beam-3.base64.ts","../../../projects/prism/src/lib/images/scenery/rock/rock-land.base64.ts","../../../projects/prism/src/lib/images/scenery/slime/slime-ground.base64.ts","../../../projects/prism/src/lib/images/scenery/slime/slime-two.base64.ts","../../../projects/prism/src/lib/images/alien/alien-2/alien-2-animate-east-1.base64.ts","../../../projects/prism/src/lib/images/alien/alien-2/alien-2-animate-east-2.base64.ts","../../../projects/prism/src/lib/images/alien/alien-2/alien-2-animate-west-2.base64.ts","../../../projects/prism/src/lib/images/alien/alien-2/alien-2-animate-north-1.base64.ts","../../../projects/prism/src/lib/images/alien/alien-2/alien-2-animate-north-2.base64.ts","../../../projects/prism/src/lib/images/number/number-0.base64.ts","../../../projects/prism/src/lib/images/number/number-1.base64.ts","../../../projects/prism/src/lib/images/number/number-2.base64.ts","../../../projects/prism/src/lib/images/number/number-3.base64.ts","../../../projects/prism/src/lib/images/number/number-4.base64.ts","../../../projects/prism/src/lib/images/number/number-5.base64.ts","../../../projects/prism/src/lib/images/number/number-6.base64.ts","../../../projects/prism/src/lib/images/number/number-7.base64.ts","../../../projects/prism/src/lib/images/number/number-8.base64.ts","../../../projects/prism/src/lib/images/number/number-9.base64.ts","../../../projects/prism/src/lib/images/letter/letter-l.base64.ts","../../../projects/prism/src/lib/images/letter/letter-p.base64.ts","../../../projects/prism/src/lib/images/alien/alien-dropship/alien-dropship-2.base64.ts","../../../projects/prism/src/lib/service/image.service.ts","../../../projects/prism/src/lib/service/game.service.ts","../../../projects/prism/src/lib/gameboard/gameboard.component.ts","../../../projects/prism/src/lib/gameboard/gameboard.component.html","../../../projects/prism/src/lib/aliens/alien/test-component/alien.component.ts","../../../projects/prism/src/lib/aliens/alien/test-component/alien.component.html","../../../projects/prism/src/lib/text/letter/test-component/letter.component.ts","../../../projects/prism/src/lib/text/letter/test-component/letter.component.html","../../../projects/prism/src/lib/gunner/main-gunner/main-gunner-constants.ts","../../../projects/prism/src/lib/gunner/test-component/main-gunner.component.ts","../../../projects/prism/src/lib/gunner/test-component/main-gunner.component.html","../../../projects/prism/src/lib/missile/test-component/missile.component.ts","../../../projects/prism/src/lib/missile/test-component/missile.component.html","../../../projects/prism/src/lib/text/number/test-component/number.component.ts","../../../projects/prism/src/lib/text/number/test-component/number.component.html","../../../projects/prism/src/lib/base/test-component/base.component.ts","../../../projects/prism/src/lib/base/test-component/base.component.html","../../../projects/prism/src/lib/prism/prism-blast/test-component/prism-blast.component.ts","../../../projects/prism/src/lib/prism/prism-blast/test-component/prism-blast.component.html","../../../projects/prism/src/lib/prism/prism-blast-icon/test-component/prism-blast-icon.component.ts","../../../projects/prism/src/lib/prism/prism-blast-icon/test-component/prism-blast-icon.component.html","../../../projects/prism/src/lib/scenery/test-component/scenery.component.ts","../../../projects/prism/src/lib/scenery/test-component/scenery.component.html","../../../projects/prism/src/lib/prism/prism.component.ts","../../../projects/prism/src/lib/prism/prism.component.html","../../../projects/prism/src/lib/prism.module.ts","../../../projects/prism/src/public-api.ts","../../../projects/prism/src/bp-prism-game.ts"],"sourcesContent":["import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { DisplayDialogDataModel } from './model/display-dialog-model';\n\n/**\n * Display Dialog component for display\n */\n@Component({\n  selector: 'bp-prism-display-dialog',\n  templateUrl: './display-dialog.component.html',\n  styleUrls: ['./display-dialog.component.scss']\n})\nexport class DisplayDialogComponent {\n  /**\n   * The title of the dialog box\n   */\n  title: string;\n\n  /**\n   * The messate text of the dialog box\n   */\n  messageText: string;\n\n  /**\n   * If The message should be displayed\n   */\n  displayMessage: boolean;\n\n  /**\n   * If font is red\n   */\n  isRedFont: boolean;\n\n  /**\n   * The GenericDialogComponent constructor\n   *\n   * @param dialogRef MatDialogRef of this from DI\n   * @param data MAT_DIALOG_DATA from DI of the caller\n   */\n  constructor(\n    public dialogRef: MatDialogRef<DisplayDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) private data: DisplayDialogDataModel\n  ) {\n    this.title = this.data.title;\n    this.messageText = this.data.messageText;\n    this.displayMessage = this.messageText !== undefined;\n    this.isRedFont = data.isFontRed;\n  }\n}\n","<div class=\"dialog-container\">\n  <h1 mat-dialog-title name=\"title\" [innerHtml]=\"title\" [class.game-over-font]=\"isRedFont\"></h1>\n  <div mat-dialog-content name=\"messageText\" [innerHtml]=\"messageText\" *ngIf=\"displayMessage\"></div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef, DialogPosition } from '@angular/material/dialog';\nimport { DisplayDialogComponent } from '../text/display-dialog/display-dialog.component';\nimport { DisplayDialogDataModel } from '../text/display-dialog/model/display-dialog-model';\nimport { GameDataModel } from '../model/game-data.model';\n\n/**\n * The display dialog service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class DisplayDialogService {\n  /**\n   * The constructor\n   *\n   * @param dialog The MatDialog from DI\n   */\n\n  constructor(private dialog: MatDialog) {}\n\n  /**\n   * Get the Dialog Position\n   */\n  private getDialogPosition(): DialogPosition {\n    return {\n      top: '350px'\n    } as DialogPosition;\n  }\n\n  /**\n   * Display the game over text\n   */\n  public displayGameOver(data: GameDataModel): MatDialogRef<DisplayDialogComponent> {\n    return this.dialog.open(DisplayDialogComponent, {\n      panelClass: 'display-dialog-container',\n      position: this.getDialogPosition(),\n      data: {\n        title: `GAME OVER`,\n        messageText: `High Score: ${data.highScore}<br>Level: ${data.level}`,\n        isFontRed: true\n      } as DisplayDialogDataModel\n    });\n  }\n\n  /**\n   * Display the next level text\n   */\n  public displayNextLevel(data: GameDataModel): MatDialogRef<DisplayDialogComponent> {\n    return this.dialog.open(DisplayDialogComponent, {\n      panelClass: 'display-dialog-container',\n      position: this.getDialogPosition(),\n      data: {\n        title: `NEXT LEVEL`,\n        messageText: `Level: ${data.level}`,\n        isFontRed: false\n      } as DisplayDialogDataModel\n    });\n  }\n\n  /**\n   * Display the game paused text\n   */\n  public displayGamePaused(): MatDialogRef<DisplayDialogComponent> {\n    return this.dialog.open(DisplayDialogComponent, {\n      panelClass: 'display-dialog-container',\n      position: this.getDialogPosition(),\n      data: {\n        title: `PAUSED`,\n        isFontRed: false\n      } as DisplayDialogDataModel\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CookieService } from 'ngx-cookie-service';\nimport { GameDataModel } from '../model/game-data.model';\n\n/**\n * The Cookie service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GameCookieService {\n  /**\n   * The constructor\n   * @param cookieService The cookieService from DI\n   */\n  constructor(private cookieService: CookieService) {}\n\n  /**\n   * Get the cookie\n   */\n  private getCookie(cookieName: string): string {\n    return this.cookieService.get(cookieName);\n  }\n\n  /**\n   * Get the High Score\n   */\n  public getGameData(): GameDataModel {\n    const cookie = this.getCookie('bp-prism');\n    return cookie ? (JSON.parse(cookie) as GameDataModel) : ({ highScore: 0, level: 1 } as GameDataModel);\n  }\n\n  /**\n   * Set the cookie\n   */\n  public setGameData(data: GameDataModel): void {\n    this.cookieService.set('bp-prism', JSON.stringify(data));\n  }\n\n  /**\n   * Get the Debug information\n   */\n  public getDebugData(): string {\n    const cookie = this.getCookie('bp-prism-debug');\n    /* eslint-disable-next-line */\n    return cookie ? JSON.parse(cookie)['assetName'] as string : '';\n  }\n\n  /**\n   * Set the debug cookie data\n   *\n   * @param assetName The asset name\n   */\n  public setDebugData(assetName: string): void {\n    this.cookieService.set('bp-prism-debug', JSON.stringify(Object({ assetName })));\n  }\n}\n","/**\n * The Game board\n * 1 - Blank\n * 2 - Trees\n * 3 - Rocks\n * 4 - Water\n * 5 - Grass\n * 6 - Slime\n * 7 - Lava\n * 8 - Main Gunner\n * 9 - Alien Base\n * 10 - Prism Base\n * 11 - Score\n * 12 - High Score\n * 13 - Level\n * 14 - Prism Blast icon\n * 15 - Bridge\n * 16 - Path\n */\n\n// prettier-ignore\nexport const GAMEBOARD = [\n  [1,  12, 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  11, 1,  1,  1,  1,  1,  1,  1,  1,  1],\n  [1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1],\n  [1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1],\n  [2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  0,  0,  0,  0,  0,  2,  0,  0,  0,  3,  3,  3,  2,  2,  2,  2,  2,  2,  2],\n  [2,  0,  0,  0,  2,  2,  2,  3,  3,  3,  3,  3,  2,  0,  2,  0,  2,  2,  0,  0,  0,  3,  3,  3,  0,  0,  0,  0,  0,  9,  0],\n  [2,  0,  2,  0,  0,  2,  2,  3,  3,  3,  2,  2,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  2,  3,  0,  0,  0,  0,  0,  2,  2],\n  [2,  9,  0,  2,  0,  2,  5,  2,  2,  2,  2,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  2,  2,  0,  0,  0,  0,  0,  2,  2,  2],\n  [2,  2,  2,  2,  0,  2,  5,  5,  5,  2,  9,  0,  2,  2,  0,  0,  2,  0,  0,  2,  2,  0,  0,  0,  2,  0,  0,  2,  0,  0,  2],\n  [2,  2,  2,  0,  0,  2,  5,  2,  0,  0,  0,  2,  2,  3,  2,  2,  0,  2,  0,  0,  2,  0,  0,  0,  0,  2,  2,  0,  0,  0,  0],\n  [2,  2,  2,  0,  2,  3,  3,  3,  0,  0,  0,  2,  3,  4,  2,  2,  0,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],\n  [2,  5,  2,  0,  2,  0,  0,  3,  0,  0,  2,  3,  4,  4,  4,  2,  0,  0,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],\n  [2,  2,  2,  0,  2,  0,  3,  3,  0,  2,  3,  3,  4,  4,  4,  0,  0,  9,  0,  2,  0,  0,  0,  0,  3,  3,  2,  2,  0,  0,  0],\n  [5,  2,  0,  0,  2,  0,  3,  2,  0,  0,  2,  3,  3,  4,  0,  0,  2,  2,  2,  2,  0,  0,  0,  3,  4,  4,  4,  2,  0,  0,  0],\n  [2,  5,  0,  2,  2,  0,  3,  3,  0,  0,  0,  2,  3,  0,  0,  2,  0,  0,  2,  2,  0,  0,  2,  4,  4,  4,  4,  2,  0,  0,  0],\n  [2,  2,  0,  3,  2,  0,  2,  3,  0,  0,  0,  2,  0,  0,  2,  0,  0,  0,  0,  0,  2,  2,  2,  4,  4,  4,  4,  4,  2,  0,  0],\n  [2,  5,  0,  3,  2,  0,  3,  3,  0,  0,  0,  2,  0,  2,  0,  0,  0,  0,  0,  0,  0,  2,  3,  4,  4,  4,  2,  2,  2,  0,  0],\n  [2,  0,  0,  2,  2,  0,  3,  2,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  3,  3,  2,  4,  2,  2,  2,  0,  0,  0,  0],\n  [2,  0,  2,  2,  2,  0,  3,  3,  0,  0,  0,  2,  0,  0,  1,  1,  1,  0,  0,  3,  3,  3,  4,  4,  3,  3,  2,  2,  2,  2,  0],\n  [2,  0,  0,  0,  2,  0,  3,  3,  0,  0,  0,  0,  2,  3,  1,  1,  1,  0,  0,  3,  3,  2,  4,  2,  3,  3,  3,  2,  2,  2,  0],\n  [2,  2,  0,  0,  0,  0,  2,  3,  0,  0,  0,  0,  0,  3,  1,  8,  1,  0,  0,  3,  3,  4,  4,  3,  3,  0,  0,  2,  0,  0,  0],\n  [0,  0,  2,  2,  0,  2,  2,  5,  0,  0,  0,  0,  0,  0,  1,  1,  1,  0,  2,  3,  4,  4,  3,  3,  0,  0,  2,  2,  0,  3,  3],\n  [0,  2,  2,  2,  0,  2,  2,  5,  0,  2,  0,  0,  0,  0,  2,  3,  0,  0,  3,  3,  2,  5,  5,  2,  0,  2,  0,  0,  0,  3,  3],\n  [0,  2,  2,  0,  0,  2,  4,  2,  0,  2,  0,  2,  2,  3,  5,  2,  2,  0,  2,  2,  5,  5,  5,  2,  0,  2,  0,  2,  2,  3,  7],\n  [0,  2,  0,  0,  2,  4,  4,  2,  0,  0,  0,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  0,  2,  0,  2,  7,  7,  7],\n  [0,  0,  0,  2,  4,  4,  2,  2,  2,  2,  0,  0,  2,  5,  3,  3,  3,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  7,  7,  7],\n  [0,  2,  2,  4,  4,  4,  4,  4,  3,  3,  5,  0,  0,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  2,  2,  0,  0,  2,  7,  7,  7],\n  [0,  2,  4,  4,  4,  2,  2,  4,  4,  2,  5,  2,  0,  4,  4,  4,  2,  2,  0,  0,  0,  0,  0,  2,  0,  0,  2,  7,  7,  7,  7],\n  [0,  2,  2,  2,  2,  2,  2,  2,  4,  4,  2,  4,  15, 4,  4,  4,  5,  3,  3,  0,  0,  0,  0,  2,  0,  2,  7,  7,  7,  7,  7],\n  [0,  0,  0,  0,  0,  0,  0,  2,  2,  4,  4,  4,  0,  3,  2,  3,  5,  3,  3,  0,  0,  2,  2,  0,  0,  2,  7,  7,  7,  7,  7],\n  [2,  2,  2,  2,  2,  2,  0,  0,  2,  4,  4,  4,  0,  3,  2,  3,  5,  5,  2,  2,  0,  2,  2,  0,  2,  7,  7,  7,  7,  7,  7],\n  [2,  6,  6,  2,  2,  6,  2,  0,  2,  2,  2,  2,  0,  3,  2,  3,  5,  5,  5,  5,  0,  2,  2,  0,  0,  2,  7,  7,  7,  7,  7],\n  [2,  6,  6,  2,  6,  6,  2,  0,  2,  0,  0,  0,  0,  2,  3,  5,  5,  2,  2,  2,  0,  0,  0,  2,  0,  0,  2,  7,  7,  7,  7],\n  [2,  6,  6,  6,  6,  6,  2,  0,  2,  0,  3,  2,  3,  3,  3,  2,  5,  5,  5,  2,  2,  2,  0,  2,  2,  0,  0,  2,  2,  7,  7],\n  [2,  2,  2,  2,  6,  2,  2,  0,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  2,  0,  0,  2,  7,  7],\n  [2,  2,  2,  6,  6,  6,  2,  0,  0,  0,  0,  0,  0,  0,  0,  10, 0,  0,  0,  0,  0,  2,  5,  2,  0,  0,  2,  0,  2,  7,  7],\n  [2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  2,  2,  2],\n  [1,  1,  14, 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  13, 1,  1,  1],\n  [1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1]\n];\n\n/**\n * GAMEBOARD TWO\n */\nconst GAMEBOARDTWO = JSON.parse(JSON.stringify(GAMEBOARD)) as number[][];\nGAMEBOARDTWO[6][1] = 0;\nGAMEBOARDTWO[18][2] = 9;\n\nGAMEBOARDTWO[4][29] = 0;\nGAMEBOARDTWO[16][26] = 9;\n\nGAMEBOARDTWO[7][10] = 0;\nGAMEBOARDTWO[8][18] = 9;\n\nGAMEBOARDTWO[11][17] = 0;\nGAMEBOARDTWO[21][15] = 9;\n\n/**\n * GAMEBOARD THREE\n */\nconst GAMEBOARDTHREE = JSON.parse(JSON.stringify(GAMEBOARD)) as number[][];\nGAMEBOARDTHREE[6][1] = 0;\nGAMEBOARDTHREE[10][5] = 9;\n\nGAMEBOARDTHREE[4][29] = 0;\nGAMEBOARDTHREE[20][24] = 9;\n\nGAMEBOARDTHREE[7][10] = 0;\nGAMEBOARDTHREE[13][20] = 9;\n\nGAMEBOARDTHREE[11][17] = 0;\nGAMEBOARDTHREE[3][15] = 9;\n\n/**\n * GAMEBOARD FOUR\n */\nconst GAMEBOARDFOUR = JSON.parse(JSON.stringify(GAMEBOARD)) as number[][];\nGAMEBOARDFOUR[6][1] = 0;\nGAMEBOARDFOUR[20][0] = 9;\n\nGAMEBOARDFOUR[4][29] = 0;\nGAMEBOARDFOUR[4][28] = 9;\n\nGAMEBOARDFOUR[7][10] = 0;\nGAMEBOARDFOUR[16][18] = 9;\n\nGAMEBOARDFOUR[11][17] = 0;\nGAMEBOARDFOUR[8][7] = 9;\n\n/**\n * The Game Boards\n */\nexport const GAMEBOARDS = [\n  GAMEBOARD,\n  GAMEBOARDTWO,\n  GAMEBOARDTHREE,\n  GAMEBOARDFOUR,\n  GAMEBOARD,\n  GAMEBOARDTWO,\n  GAMEBOARDTHREE,\n  GAMEBOARDFOUR,\n  GAMEBOARD\n];\n\n/**\n * Block Size\n */\nexport const BLOCK_SIZE = 5;\n\n/**\n * Columns\n */\nexport const COLS = GAMEBOARD[0].length * BLOCK_SIZE;\n/**\n * Rows\n */\nexport const ROWS = GAMEBOARD.length * BLOCK_SIZE;\n\n/**\n * The Level Waves\n */\nexport class LEVELWAVES {\n  /**\n   * Level 0 Wave\n   */\n  static readonly 0 = 1;\n  /**\n   * Level 1 Wave\n   */\n  static readonly 1 = 1;\n  /**\n   * Level 2 Wave\n   */\n  static readonly 2 = 2;\n  /**\n   * Level 3 Wave\n   */\n  static readonly 3 = 3;\n  /**\n   * Level 4 Wave\n   */\n  static readonly 4 = 4;\n  /**\n   * Level 5 Wave\n   */\n  static readonly 5 = 5;\n  /**\n   * Level 6 Wave\n   */\n  static readonly 6 = 6;\n  /**\n   * Level 7 Wave\n   */\n  static readonly 7 = 7;\n}\n\n/**\n * The Level Speed\n */\nexport class LEVELSPEED {\n  /**\n   * Level 0 Speed\n   */\n  static readonly 0 = 500;\n  /**\n   * Level 1 Speed\n   */\n  static readonly 1 = 450;\n  /**\n   * Level 2 Speed\n   */\n  static readonly 2 = 400;\n  /**\n   * Level 3 Speed\n   */\n  static readonly 3 = 375;\n  /**\n   * Level 4 Speed\n   */\n  static readonly 4 = 350;\n  /**\n   * Level 5 Speed\n   */\n  static readonly 5 = 325;\n  /**\n   * Level 6 Speed\n   */\n  static readonly 6 = 300;\n  /**\n   * Level 7 Speed\n   */\n  static readonly 7 = 275;\n}\n\n/**\n * The Level Creep\n */\nexport class LEVELCREEP {\n  /**\n   * Level 0 Creep\n   */\n  static readonly 0 = 5;\n  /**\n   * Level 1 Creep\n   */\n  static readonly 1 = 10;\n  /**\n   * Level 2 Creep\n   */\n  static readonly 2 = 15;\n  /**\n   * Level 3 Creep\n   */\n  static readonly 3 = 20;\n  /**\n   * Level 4 Creep\n   */\n  static readonly 4 = 25;\n  /**\n   * Level 5 Creep\n   */\n  static readonly 5 = 30;\n  /**\n   * Level 6 Creep\n   */\n  static readonly 6 = 40;\n  /**\n   * Level 7 Creep\n   */\n  static readonly 7 = 50;\n}\n\n/**\n * The keys\n */\nexport class KEY {\n  /**\n   * Space\n   */\n  static readonly SPACE = 'Space';\n  /**\n   * Left\n   */\n  static readonly LEFT = 'ArrowLeft';\n  /**\n   * Right\n   */\n  static readonly RIGHT = 'ArrowRight';\n  /**\n   * KeyP\n   */\n  static readonly P = 'KeyP';\n  /**\n   * Down\n   */\n  static readonly DOWN = 'ArrowDown';\n  /**\n   * up\n   */\n  static readonly UP = 'ArrowUp';\n}\n","/**\n * The Observable Enum\n */\nexport enum ObservableTypeEnum {\n  /**\n   * Alien Hit\n   */\n  alienDestroyed = 'alienDestroyed',\n  /**\n   * Game Over\n   */\n  gameOver = 'gameOver',\n  /**\n   * Game Paused\n   */\n  gamePaused = 'gamePaused',\n  /**\n   * Images Loaded\n   */\n  imagesLoaded = 'imagesLoaded',\n  /**\n   * Key Down Event\n   */\n  keyDownEvent = 'keyDownEvent',\n  /**\n   * Key Up Event\n   */\n  keyUpEvent = 'keyUpEvent',\n  /**\n   * Level Completed\n   */\n  levelCompleted = 'levelCompleted',\n  /**\n   * Missile Destroyed Event\n   */\n  missileDestroyed = 'missileDestroyed',\n  /**\n   * Missile Launched Event\n   */\n  missileLaunched = 'missileLaunched',\n  /**\n   * Prism Base Destroyed\n   */\n  prismBaseDestroyed = 'prismBaseDestroyed',\n  /**\n   * Prism Blast Defused Event\n   */\n  prismBlastDefused = 'prismBlastDefused',\n  /**\n   * Prism Blast Fire Event\n   */\n  prismBlastFire = 'prismBlastFire',\n  /**\n   * Prism Blast Launched Event\n   */\n  prismBlastLaunched = 'prismBlastLaunched'\n}\n","/**\n * The Asset Align Enum\n */\nexport enum AssetAlignEnum {\n  /**\n   * Left\n   */\n  left = 'left',\n  /**\n   * Left Third\n   */\n  leftThird = 'leftThird',\n  /**\n   * Left Fourth\n   */\n  leftFourth = 'leftFourth',\n  /**\n   * right\n   */\n  right = 'right',\n  /**\n   * right Third\n   */\n  rightThird = 'rightThird',\n  /**\n   * right Fourth\n   */\n  rightFourth = 'rightFourth',\n  /**\n   * Center\n   */\n  center = 'center'\n}\n","/**\n * The Asset Align Vertical Enum\n */\nexport enum AssetAlignVerticalEnum {\n  /**\n   * Top\n   */\n  top = 'top',\n  /**\n   * Bottom\n   */\n  bottom = 'bottom',\n  /**\n   * Middle\n   */\n  middle = 'middle'\n}\n","import { IAsset } from '../interface/asset.interface';\nimport { GameService } from '../service/game.service';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { TimerModel } from '../model/timer.model';\nimport { BoundaryModel } from '../model/boundary.model';\nimport { AssetAlignEnum } from './enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from './enum/asset-align-vertical.enum';\nimport { AssetScaleModel } from '../model/asset-scale.mode';\nimport { ImageLocationModel } from '../model/image/image-location.model';\nimport { ImageLoadedEnum } from '../enum/image-loaded.enum';\n\n/**\n * The Asset Class\n */\nexport abstract class AssetClass implements IAsset {\n  /**\n   * The x coordinate\n   */\n  public x: number;\n  /**\n   * The y coordinate\n   */\n  public y: number;\n  /**\n   * The request id from the animation\n   */\n  protected requestId: number;\n  /**\n   * The Asset Timmer\n   */\n  protected assetTimer: TimerModel;\n  /**\n   * Animation Counter\n   */\n  protected animationCounter: number;\n  /**\n   * the boardary model\n   */\n  protected boundary: BoundaryModel;\n  /**\n   * Is the asset is destroyed\n   */\n  public isDestroyed: boolean;\n  /**\n   * If the asset can be animated\n   */\n  public isAnimated: boolean;\n  /**\n   * If the asset knowns the game is over\n   */\n  protected isGameOver: boolean;\n  /**\n   * If the asset knowns the game is paused\n   */\n  protected isGamePaused: boolean;\n  /**\n   * The scale of the object\n   */\n  public assetScale: AssetScaleModel;\n  /**\n   * The images\n   */\n  protected images: ImageLocationModel[];\n  /**\n   * If the image is loaded\n   */\n  protected isImageLoaded: boolean;\n  /**\n   * The asset height\n   */\n  private assetHeight: number;\n  /**\n   * The asset width\n   */\n  private assetWidth: number;\n\n  /**\n   * Constructor\n   * @param gameService The game service\n   * @param ctx The ctx\n   * @param assetUid the uid of the asset\n   * @param imageType The optional animation number\n   */\n  constructor(\n    protected gameService: GameService,\n    protected ctx: CanvasRenderingContext2D,\n    protected assetUid: number,\n    protected imageType?: ImageLoadedEnum\n  ) {\n    this.assetScale = {\n      x: 1,\n      y: 1\n    } as AssetScaleModel;\n    this.x = 0;\n    this.y = 0;\n\n    this.images = [];\n\n    this.assetHeight = 0;\n    this.assetWidth = 0;\n\n    this.isAnimated = false;\n    this.isDestroyed = false;\n    this.isGameOver = false;\n    this.isGamePaused = false;\n    this.isImageLoaded = false;\n\n    this.assetTimer = { start: performance.now(), elapsed: 0 };\n    this.animationCounter = 0;\n\n    this.boundary = this.gameService.getBoundary();\n\n    this.init();\n  }\n\n  /**\n   * Init the asset\n   */\n  init(): void {\n    this.gameService.getMasterObservable().subscribe((result: ObservableModel) => {\n      if (result.type === ObservableTypeEnum.keyDownEvent || result.type === ObservableTypeEnum.keyUpEvent) {\n        this.processKeyStroke(result);\n      } else if (result.type === ObservableTypeEnum.gameOver) {\n        this.isGameOver = result.booleanData;\n      } else if (result.type === ObservableTypeEnum.gamePaused) {\n        this.isGamePaused = result.booleanData;\n      }\n    });\n  }\n  /**\n   * The extended animate class\n   */\n  /* eslint-disable-next-line */\n  public animate(): void {}\n\n  /**\n   * Get the Asset height\n   */\n  getAssetHeight(): number {\n    return this.assetHeight * this.assetScale.y;\n  }\n\n  /**\n   * Get the Asset Width\n   */\n  getAssetWidth(): number {\n    return this.assetWidth * this.assetScale.x;\n  }\n\n  /**\n   *  set The Asset Dimensions\n   * @param height The asset height\n   * @param width The asset width\n   */\n  setAssetDimensions(height: number, width: number): void {\n    this.assetHeight = height;\n    this.assetWidth = width;\n  }\n\n  /**\n   * Get the asset uid\n   */\n  get uid() {\n    return this.assetUid;\n  }\n\n  /**\n   * Process the key stroke\n   * @param eventCode the key event code\n   */\n  /* eslint-disable-next-line */\n  protected processKeyStroke(event: ObservableModel): void {}\n\n  /**\n   * Move the asset\n   * @param asset The asset input\n   */\n  move(asset: IAsset): void {\n    this.x = asset.x;\n    this.y = asset.y;\n  }\n\n  /**\n   * Determine if we should stop the animation\n   */\n  protected stopAnimation(): boolean {\n    return this.isDestroyed || this.isGameOver || this.isGamePaused;\n  }\n\n  /**\n   * Position the Asset\n   */\n  positionAsset(alignPosition: AssetAlignEnum, justifyPosition: AssetAlignVerticalEnum): IAsset {\n    let x = 0;\n    let y = 0;\n\n    if (alignPosition === AssetAlignEnum.center) {\n      x = (this.boundary.right - this.getAssetWidth()) / 2;\n    } else if (alignPosition === AssetAlignEnum.leftThird) {\n      x = this.boundary.right / 3 - this.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.leftFourth) {\n      x = this.boundary.right / 4 - this.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.rightThird) {\n      x = (this.boundary.right * 2) / 3 - this.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.rightFourth) {\n      x = (this.boundary.right * 3) / 4 - this.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.right) {\n      x = this.boundary.right - this.getAssetWidth();\n    }\n\n    if (justifyPosition === AssetAlignVerticalEnum.bottom) {\n      y = this.boundary.floor - this.getAssetHeight();\n    } else if (justifyPosition === AssetAlignVerticalEnum.middle) {\n      y = (this.boundary.floor - this.getAssetHeight()) / 2;\n    }\n\n    return {\n      x: Math.round(x),\n      y: Math.round(y)\n    } as IAsset;\n  }\n}\n","import { GameService } from '../service/game.service';\nimport { AssetClass } from '../asset/asset.class';\nimport { ImageLocationModel } from '../model/image/image-location.model';\n\n/**\n * The Prism Base Class\n */\nexport abstract class BaseClass extends AssetClass {\n  /**\n   * The current base\n   */\n  protected currentBase: ImageLocationModel;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n  }\n\n  /**\n   * Draw the base\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.ctx.save();\n      this.ctx.translate(this.x, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n      this.ctx.drawImage(this.currentBase.imageSource, this.currentBase.x, this.currentBase.y);\n      this.ctx.restore();\n    }\n  }\n\n  /**\n   * Animate the base\n   */\n  public animate(): void {\n    this.draw();\n  }\n}\n","/**\n * The Image Loaded Enum\n */\nexport enum ImageLoadedEnum {\n  /**\n   * Unknown\n   */\n  unknown = 'unknown',\n  /**\n   * Alien Base\n   */\n  alienBase = 'alienBase',\n  /**\n   * Alien Dropship 1\n   */\n  alienDropship1 = 'alienDropship1',\n  /**\n   * Alien Dropship 2\n   */\n  alienDropship2 = 'alienDropship2',\n  /**\n   * Alien One Right\n   */\n  alienOneRight = 'alienOneRight',\n  /**\n   * Alien One Left\n   */\n  alienOneLeft = 'alienOneLeft',\n  /**\n   * Alien 2 Animation East 1\n   */\n  alien2AnimationEast1 = 'alien2AnimationEast1',\n  /**\n   * Alien 2 Animation East 2\n   */\n  alien2AnimationEast2 = 'alien2AnimationEast2',\n  /**\n   * Alien 2 Animation North 1\n   */\n  alien2AnimationNorth1 = 'alien2AnimationNorth1',\n  /**\n   * Alien 2 Animation North 2\n   */\n  alien2AnimationNorth2 = 'alien2AnimationNorth2',\n  /**\n   * Alien 2 Animation West 1\n   */\n  alien2AnimationWest1 = 'alien2AnimationWest1',\n  /**\n   * Alien 2 Animation West 2\n   */\n  alien2AnimationWest2 = 'alien2AnimationWest2',\n  /**\n   * Scenery Bridge\n   */\n  bridge = 'bridge',\n  /**\n   * grass\n   */\n  grass = 'grass',\n  /**\n   * Scenery Lava\n   */\n  lava = 'lava',\n  /**\n   * letter l\n   */\n  letterl = 'letterl',\n  /**\n   * letter p\n   */\n  letterp = 'letterp',\n  /**\n   * level one\n   */\n  levelOneMap = 'levelOneMap',\n  /**\n   * Main Gunner\n   */\n  mainGunner = 'mainGunner',\n  /**\n   * Main Gunner Support\n   */\n  mainGunnerSupport = 'mainGunnerSupport',\n  /**\n   * Blue missile\n   */\n  missileBlue = 'missileBlue',\n  /**\n   * missile green\n   */\n  missileGreen = 'missileGreen',\n  /**\n   * missile indigo\n   */\n  missileIndigo = 'missileIndigo',\n  /**\n   * missile orange\n   */\n  missileOrange = 'missileOrange',\n  /**\n   * missile red\n   */\n  missileRed = 'missileRed',\n  /**\n   * missile violet\n   */\n  missileViolet = 'missileViolet',\n  /**\n   * missile white\n   */\n  missileWhite = 'missileWhite',\n  /**\n   * missile yellow\n   */\n  missileYellow = 'missileYellow',\n  /**\n   * number 0\n   */\n  number0 = 'number0',\n  /**\n   * number 1\n   */\n  number1 = 'number1',\n  /**\n   * number 2\n   */\n  number2 = 'number2',\n  /**\n   * number 3\n   */\n  number3 = 'number3',\n  /**\n   * number 4\n   */\n  number4 = 'number4',\n  /**\n   * number 5\n   */\n  number5 = 'number5',\n  /**\n   * number 6\n   */\n  number6 = 'number6',\n  /**\n   * number 7\n   */\n  number7 = 'number7',\n  /**\n   * number 8\n   */\n  number8 = 'number8',\n  /**\n   * number 9\n   */\n  number9 = 'number9',\n  /**\n   * path\n   */\n  path = 'path',\n  /**\n   * path direction\n   */\n  pathDirection = 'pathDirection',\n  /**\n   * prism base\n   */\n  prismBase = 'prismBase',\n  /**\n   * prism blast icon\n   */\n  prismBlastIcon = 'prismBlastIcon',\n  /**\n   * rock\n   */\n  rock = 'rock',\n  /**\n   * rock land\n   */\n  rockGround = 'rockGround',\n  /**\n   * slime\n   */\n  slime = 'slime',\n  /**\n   * slime 2\n   */\n  slime2 = 'slime2',\n  /**\n   * slime ground\n   */\n  slimeGround = 'slimeGround',\n  /**\n   * Tractor Beam 1\n   */\n  tractorBeam1 = 'tractorBeam1',\n  /**\n   * Tractor Beam 2\n   */\n  tractorBeam2 = 'tractorBeam2',\n  /**\n   * Tractor Beam 3\n   */\n  tractorBeam3 = 'tractorBeam3',\n  /**\n   * Scenery Tree\n   */\n  tree = 'tree',\n  /**\n   * Scenery Tree Land\n   */\n  treeGround = 'treeGround',\n  /**\n   * Scenery Water 0\n   */\n  water0 = 'water0',\n  /**\n   * Scenery Water 1\n   */\n  water1 = 'water1',\n  /**\n   * Scenery Water 2\n   */\n  water2 = 'water2',\n  /**\n   * Scenery Water 3\n   */\n  water3 = 'water3',\n  /**\n   * Scenery Water 4\n   */\n  water4 = 'water4',\n  /**\n   * Scenery Water 5\n   */\n  water5 = 'water5',\n  /**\n   * Scenery Water 6\n   */\n  water6 = 'water6',\n  /**\n   * Scenery Water 7\n   */\n  water7 = 'water7',\n  /**\n   * Scenery Water 8\n   */\n  water8 = 'water8',\n  /**\n   * Scenery Water 9\n   */\n  water9 = 'water9',\n  /**\n   * Scenery Water 10\n   */\n  water10 = 'water10',\n  /**\n   * Scenery Water 11\n   */\n  water11 = 'water11',\n  /**\n   * Scenery Water 12\n   */\n  water12 = 'water12',\n  /**\n   * Scenery Water 13\n   */\n  water13 = 'water13',\n  /**\n   * Scenery Water 14\n   */\n  water14 = 'water14',\n  /**\n   * Scenery Water 15\n   */\n  water15 = 'water15',\n  /**\n   * Scenery Water Waves\n   */\n  waterWaves = 'waterWaves'\n}\n","import { GameService } from '../../service/game.service';\nimport { BaseClass } from '../base.class';\nimport { KEY, BLOCK_SIZE } from '../../gameboard/gameboard-constants';\nimport { ObservableModel } from '../../model/observable.model';\nimport { ObservableTypeEnum } from '../../enum/observable-type.enum';\nimport { IAsset } from '../../interface/asset.interface';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\n\n/**\n * The Prism Base Class\n */\nexport class PrismBaseClass extends BaseClass {\n  /**\n   * moves\n   */\n  private moves = {\n    [KEY.P]: true\n  };\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n    this.loadPrismBaseImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the alien Images\n   */\n  private loadPrismBaseImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.prismBase];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n\n    this.currentBase = this.images[0];\n  }\n\n  /**\n   * Press Key Stroke\n   * @param event The Key event\n   */\n  protected processKeyStroke(event: ObservableModel): void {\n    const eventCode = event.stringData;\n    const keyDown = event.type === ObservableTypeEnum.keyDownEvent;\n\n    if (this.moves[eventCode] && keyDown) {\n      this.gameService.emitMasterObservableEvent({\n        type: ObservableTypeEnum.prismBlastLaunched,\n        assetCoordinateData: {\n          x: this.x,\n          y: this.y - BLOCK_SIZE\n        } as IAsset,\n        booleanData: true\n      } as ObservableModel);\n    }\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { BaseClass } from '../base.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\n\n/**\n * The Alien Base Class\n */\nexport class AlienBaseClass extends BaseClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n\n    this.loadAlienBaseImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the alien Images\n   */\n  private loadAlienBaseImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.alienBase];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n\n    this.currentBase = this.images[0];\n  }\n}\n","/**\n * The Asset Direction Enum\n */\nexport enum AssetDirectionEnum {\n  /**\n   * East\n   */\n  east = 90,\n  /**\n   * West\n   */\n  west = -90,\n  /**\n   * North\n   */\n  north = 0,\n  /**\n   * South\n   */\n  south = 180\n}\n","import { IAsset } from '../../interface/asset.interface';\nimport { GameService } from '../../service/game.service';\nimport { AssetClass } from '../../asset/asset.class';\nimport { ImageLocationModel } from '../../model/image/image-location.model';\nimport { TimerModel } from '../../model/timer.model';\nimport { BLOCK_SIZE } from '../../gameboard/gameboard-constants';\nimport { AssetDirectionEnum } from '../../enum/asset-direction.enum';\nimport { ObservableModel } from '../../model/observable.model';\nimport { ObservableTypeEnum } from '../../enum/observable-type.enum';\n\n/**\n * The Alien Class\n */\nexport abstract class AlienClass extends AssetClass {\n  /**\n   * The alien moves for debug\n   */\n  protected nextMove: IAsset;\n  /**\n   * The alien moves for debug\n   */\n  protected allMoves: IAsset[];\n  /**\n   * The alien speed number\n   */\n  private alienSpeed: number;\n  /**\n   * The current alien\n   */\n  protected currentAlien: ImageLocationModel;\n\n  /**\n   * All the East facing aliens\n   */\n  protected eastAlienImages: ImageLocationModel[];\n\n  /**\n   * All the West facing aliens\n   */\n  protected westAlienImages: ImageLocationModel[];\n\n  /**\n   * All the North facing aliens\n   */\n  protected northAlienImages: ImageLocationModel[];\n\n  /**\n   * The Asset Timmer\n   */\n  private alienAssetTimer: TimerModel;\n\n  /**\n   * The Current Alien Direction\n   */\n  private currentAlienDirection: AssetDirectionEnum;\n\n  /**\n   * The original alien speed\n   */\n  private originamAlienSpeed: number;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n    this.alienAssetTimer = { start: performance.now(), elapsed: 0 };\n    this.alienSpeed = 500;\n    this.originamAlienSpeed = this.alienSpeed;\n    this.currentAlienDirection = AssetDirectionEnum.west;\n    this.eastAlienImages = [];\n    this.westAlienImages = [];\n    this.northAlienImages = [];\n\n    this.gameService.getMasterObservable().subscribe((event: ObservableModel) => {\n      if (event.type === ObservableTypeEnum.prismBlastLaunched && event.booleanData) {\n        this.alienSpeed = 2000;\n      } else if (event.type === ObservableTypeEnum.prismBlastDefused && event.booleanData) {\n        this.alienSpeed = this.originamAlienSpeed;\n      }\n    });\n  }\n\n  /**\n   * Determine the path of the creep\n   *\n   * @param moves All the moves of the creep\n   */\n  public setCreepPath(moves: IAsset[]): void {\n    this.allMoves = moves;\n    this.nextMove = this.allMoves[0];\n    this.move(this.allMoves[0]);\n  }\n\n  /**\n   * Set the creep speed\n   * @param speed The speed to set\n   */\n  public setCreepSpeed(speed: number): void {\n    this.alienSpeed = speed;\n  }\n\n  /**\n   * Draw the alien\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.ctx.save();\n      this.ctx.translate(this.x + BLOCK_SIZE / 2, this.y + BLOCK_SIZE / 2);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n      this.ctx.drawImage(this.currentAlien.imageSource, this.currentAlien.x, this.currentAlien.y);\n      this.ctx.restore();\n    }\n  }\n\n  /**\n   * Animate the alien\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n    this.alienAssetTimer.elapsed = now - this.alienAssetTimer.start;\n\n    if (this.stopAnimation()) {\n      return;\n    }\n\n    if (this.assetTimer.elapsed > Math.floor(this.alienSpeed / 2)) {\n      this.assetTimer.start = now;\n      this.nextMove = this.allMoves.shift();\n      this.move(this.nextMove);\n\n      if (this.nextMove.rotate === 90 && this.currentAlienDirection !== AssetDirectionEnum.east) {\n        this.currentAlienDirection = AssetDirectionEnum.east;\n        this.images = this.eastAlienImages;\n      } else if (this.nextMove.rotate === -90 && this.currentAlienDirection !== AssetDirectionEnum.west) {\n        this.currentAlienDirection = AssetDirectionEnum.west;\n        this.images = this.westAlienImages;\n      } else if (this.nextMove.rotate === 0 && this.currentAlienDirection !== AssetDirectionEnum.north) {\n        this.currentAlienDirection = AssetDirectionEnum.north;\n        this.images = this.northAlienImages;\n      }\n\n      if (this.gameService.isBaseDestroy(this)) {\n        this.isDestroyed = true;\n        return;\n      }\n    }\n\n    if (this.alienAssetTimer.elapsed > Math.floor(this.alienSpeed / 4)) {\n      this.alienAssetTimer.start = now;\n      this.currentAlien = this.images[this.animationCounter++ % this.images.length];\n    }\n\n    this.draw();\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\n\n/**\n * The Alien 1 Class\n */\nexport class Alien1Class extends AlienClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   * @param spawnLocation The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n\n    this.loadAlienImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the alien Images\n   */\n  private loadAlienImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.alienOneRight, ImageLoadedEnum.alienOneLeft];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n\n    this.currentAlien = this.images[0];\n    this.eastAlienImages = this.images;\n    this.northAlienImages = this.images;\n    this.westAlienImages = this.images;\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\n\n/**\n * The Alien 2 Class\n */\nexport class Alien2Class extends AlienClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   * @param spawnLocation The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n\n    this.loadAlienImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the alien Images\n   */\n  private loadAlienImages(): void {\n    const imagesToLoad = [\n      ImageLoadedEnum.alien2AnimationEast1,\n      ImageLoadedEnum.alien2AnimationEast2,\n      ImageLoadedEnum.alien2AnimationNorth1,\n      ImageLoadedEnum.alien2AnimationNorth2,\n      ImageLoadedEnum.alien2AnimationWest1,\n      ImageLoadedEnum.alien2AnimationWest2\n    ];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n\n    this.eastAlienImages = [this.images[0], this.images[1]];\n    this.northAlienImages = [this.images[2], this.images[3]];\n    this.westAlienImages = [this.images[4], this.images[5]];\n\n    this.images = this.westAlienImages;\n\n    this.currentAlien = this.images[0];\n  }\n}\n","/**\n * The Alien Path Enum\n */\nexport enum AlienPathEnum {\n  /**\n   * Empty\n   */\n  empty = 'empty',\n  /**\n   * Start\n   */\n  start = 'start',\n  /**\n   * Invalid\n   */\n  invalid = 'invalid',\n  /**\n   * Valid\n   */\n  valid = 'valid',\n  /**\n   * Goal\n   */\n  goal = 'goal',\n  /**\n   * Main Gunner\n   */\n  gunner = 'gunner',\n  /**\n   * Alien Base\n   */\n  alientBase = 'alienBase',\n  /**\n   * Blocked\n   */\n  blocked = 'blocked',\n  /**\n   * Unknown\n   */\n  unknown = 'unknown',\n  /**\n   * Visited\n   */\n  visited = 'visited',\n  /**\n   * Obstacle\n   */\n  obstacle = 'obstacle'\n}\n","/**\n * The Alien Path Direction Enum\n */\nexport enum AlienPathDirectionEnum {\n  /**\n   * North\n   */\n  north = 'north',\n  /**\n   * East\n   */\n  east = 'east',\n  /**\n   * West\n   */\n  west = 'west',\n  /**\n   * South\n   */\n  south = 'south'\n}\n","import { Injectable } from '@angular/core';\nimport { IAsset } from '../interface/asset.interface';\nimport { AlienPathEnum } from '../enum/alien-path.enum';\nimport { AlienLocationModel } from '../model/alien/alien-location.model';\nimport { AlienPathDirectionEnum } from '../enum/alien-path-direction.enum';\nimport { BLOCK_SIZE } from '../gameboard/gameboard-constants';\nimport { AssetDirectionEnum } from '../enum/asset-direction.enum';\n\n/**\n * The path service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class PathService {\n  // http://gregtrowbridge.com/a-basic-pathfinding-algorithm/\n  /**\n   * Finds the shortest path for an alien from the spawn location\n   * To the base\n   *\n   * @param startCoordinates  the Starting Coordinating\n   */\n  findShortestPath(startCoordinates: IAsset, gameboard: AlienPathEnum[][]): IAsset[] {\n    const pathBoard = JSON.parse(JSON.stringify(gameboard)) as AlienPathEnum[][];\n    const distanceFromLeft = startCoordinates.x;\n    const distanceFromTop = startCoordinates.y;\n\n    // Each \"location\" will store its coordinates\n    // and the shortest path required to arrive there\n    const location = {\n      distanceFromTop,\n      distanceFromLeft,\n      path: [\n        {\n          x: distanceFromLeft * BLOCK_SIZE,\n          y: distanceFromTop * BLOCK_SIZE\n        } as IAsset\n      ],\n      status: AlienPathEnum.start\n    } as AlienLocationModel;\n\n    // Initialize the queue with the start location already inside\n    const queue = [location];\n\n    // Loop through the grid searching for the goal\n    while (queue.length > 0) {\n      // Take the first location off the queue\n      const currentLocation = queue.shift();\n\n      // Explore South\n      let newLocation = this.exploreInDirection(currentLocation, AlienPathDirectionEnum.south, pathBoard);\n      if (newLocation.status === AlienPathEnum.goal) {\n        return newLocation.path;\n      } else if (newLocation.status === AlienPathEnum.valid) {\n        queue.push(newLocation);\n      }\n\n      // Explore East\n      newLocation = this.exploreInDirection(currentLocation, AlienPathDirectionEnum.east, pathBoard);\n      if (newLocation.status === AlienPathEnum.goal) {\n        return newLocation.path;\n      } else if (newLocation.status === AlienPathEnum.valid) {\n        queue.push(newLocation);\n      }\n\n      // Explore West\n      newLocation = this.exploreInDirection(currentLocation, AlienPathDirectionEnum.west, pathBoard);\n      if (newLocation.status === AlienPathEnum.goal) {\n        return newLocation.path;\n      } else if (newLocation.status === AlienPathEnum.valid) {\n        queue.push(newLocation);\n      }\n\n      // Explore North\n      newLocation = this.exploreInDirection(currentLocation, AlienPathDirectionEnum.north, pathBoard);\n      if (newLocation.status === AlienPathEnum.goal) {\n        return newLocation.path;\n      } else if (newLocation.status === AlienPathEnum.valid) {\n        queue.push(newLocation);\n      }\n    }\n\n    // No valid path found\n    return [];\n    // Emergency map fix\n    /*\n    return [\n      {\n        x: 0,\n        y: 0,\n        rotate: 0\n      } as IAsset\n    ];\n    */\n  }\n\n  /**\n   * Checks the location status\n   */\n  private locationStatus(location: AlienLocationModel, localPathboard: AlienPathEnum[][]): AlienPathEnum {\n    const yGridSize = localPathboard.length;\n    const xGridSize = localPathboard[0].length;\n    const distanceFromTop = location.distanceFromTop;\n    const distanceFromLeft = location.distanceFromLeft;\n\n    if (\n      location.distanceFromLeft < 0 ||\n      location.distanceFromLeft >= xGridSize ||\n      location.distanceFromTop < 0 ||\n      location.distanceFromTop >= yGridSize\n    ) {\n      // location is not on the grid--return false\n      return AlienPathEnum.invalid;\n    } else if (localPathboard[distanceFromTop][distanceFromLeft] === AlienPathEnum.goal) {\n      return AlienPathEnum.goal;\n    } else if (localPathboard[distanceFromTop][distanceFromLeft] !== AlienPathEnum.empty) {\n      // location is either an obstacle or has been visited\n      return AlienPathEnum.blocked;\n    } else {\n      return AlienPathEnum.valid;\n    }\n  }\n\n  /**\n   * Explore around the current location\n   * @param currentLocation The current location\n   * @param direction the direction to explore\n   */\n  private exploreInDirection(\n    currentLocation: AlienLocationModel,\n    direction: AlienPathDirectionEnum,\n    localPathboard: AlienPathEnum[][]\n  ): AlienLocationModel {\n    const newPath = currentLocation.path.slice();\n    let rotation = 0;\n\n    let distanceFromTop = currentLocation.distanceFromTop;\n    let distanceFromLeft = currentLocation.distanceFromLeft;\n\n    if (direction === AlienPathDirectionEnum.north) {\n      distanceFromTop -= 1;\n      rotation = AssetDirectionEnum.north;\n    } else if (direction === AlienPathDirectionEnum.east) {\n      rotation = AssetDirectionEnum.east;\n      distanceFromLeft += 1;\n    } else if (direction === AlienPathDirectionEnum.south) {\n      rotation = AssetDirectionEnum.south;\n      distanceFromTop += 1;\n    } else {\n      rotation = AssetDirectionEnum.west;\n      distanceFromLeft -= 1;\n    }\n\n    let xOffset = 0;\n    let yOffset = 0;\n    const offset = BLOCK_SIZE / 2;\n\n    if (rotation === AssetDirectionEnum.north) {\n      yOffset = offset;\n    } else if (rotation === AssetDirectionEnum.south) {\n      yOffset = -offset;\n    } else if (rotation === AssetDirectionEnum.east) {\n      xOffset = -offset;\n    } else {\n      xOffset = offset;\n    }\n\n    newPath.push({\n      x: distanceFromLeft * BLOCK_SIZE + xOffset,\n      y: distanceFromTop * BLOCK_SIZE + yOffset,\n      rotate: rotation\n    } as IAsset);\n\n    newPath.push({\n      x: distanceFromLeft * BLOCK_SIZE,\n      y: distanceFromTop * BLOCK_SIZE,\n      rotate: rotation\n    } as IAsset);\n\n    const newLocation = {\n      distanceFromTop,\n      distanceFromLeft,\n      path: newPath,\n      status: AlienPathEnum.unknown\n    } as AlienLocationModel;\n    newLocation.status = this.locationStatus(newLocation, localPathboard);\n\n    // If this new location is valid, mark it as 'Visited'\n    if (newLocation.status === AlienPathEnum.valid) {\n      localPathboard[newLocation.distanceFromTop][newLocation.distanceFromLeft] = AlienPathEnum.visited;\n    }\n\n    return newLocation;\n  }\n\n  /**\n   * Get the Alien Drop Ship Path\n   * @param startPosition The starting position\n   * @param endPosition The ending position\n   */\n  getAlienDropShipPath(startPosition: IAsset, endPosition: IAsset): IAsset[] {\n    const path: IAsset[] = [];\n    const yPosition = endPosition.y > 0 ? endPosition.y - BLOCK_SIZE : endPosition.y;\n    for (let index = startPosition.x; index <= endPosition.x; index += BLOCK_SIZE / 2) {\n      path.push({\n        x: index,\n        y: yPosition,\n        rotate: AssetDirectionEnum.north\n      } as IAsset);\n    }\n\n    return path;\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { PathService } from '../../service/path.service';\nimport { IAsset } from '../../interface/asset.interface';\nimport { BLOCK_SIZE } from '../../gameboard/gameboard-constants';\nimport { ImageLocationModel } from '../../model/image/image-location.model';\nimport { TimerModel } from '../../model/timer.model';\n\n/**\n * The Alien Dropship Class\n */\nexport class AlienDropshipClass extends AlienClass {\n  /**\n   * If the aliens should start to land\n   */\n  private atLandingBase: boolean;\n  /**\n   * The tractor beam Image\n   */\n  private tractorBeamImage: ImageLocationModel;\n  /**\n   * The tractor beam Image\n   */\n  private tractorBeamImages: ImageLocationModel[];\n  /**\n   * The path service\n   */\n  private pathService: PathService;\n  /**\n   * The leaving the landingBase\n   */\n  private isLeavingBase: boolean;\n  /**\n   * Tractor Beam Scale\n   */\n  private tractorBeamScale: number;\n  /**\n   * The Tractor Beam Timmer\n   */\n  private tractorBeamTimer: TimerModel;\n  /**\n   * The Tractor Beam Animation Counter\n   */\n  private tractorBeamAnimationCounter: number;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   * @param spawnLocation The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n\n    this.tractorBeamTimer = { start: performance.now(), elapsed: 0 };\n    this.pathService = new PathService();\n    this.tractorBeamImages = [];\n    this.tractorBeamAnimationCounter = 0;\n    this.tractorBeamScale = 0;\n    this.setAlienDropshipToDeploy();\n\n    this.loadAlienDropshipImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the alien Images\n   */\n  private loadAlienDropshipImages(): void {\n    let imagesToLoad = [ImageLoadedEnum.alienDropship1, ImageLoadedEnum.alienDropship2];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n    });\n\n    imagesToLoad = [ImageLoadedEnum.tractorBeam1, ImageLoadedEnum.tractorBeam2, ImageLoadedEnum.tractorBeam3];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.tractorBeamImages.push(this.gameService.getImage(key));\n    });\n\n    this.isImageLoaded = true;\n    this.currentAlien = this.images[0];\n    this.tractorBeamImage = this.tractorBeamImages[0];\n  }\n\n  /**\n   * If the aliens can land\n   */\n  public canLandAliens(): boolean {\n    return this.atLandingBase;\n  }\n\n  /**\n   * Reset the ship to deploy aliens\n   */\n  public setAlienDropshipToDeploy(): void {\n    this.atLandingBase = false;\n    this.isLeavingBase = false;\n    this.tractorBeamScale = 0.05;\n  }\n\n  /**\n   * If the aliens have landed\n   */\n  public setAliensLanded(): void {\n    const gameboard = this.gameService.getBoardSize();\n    const endingPosition = {\n      x: gameboard.width + BLOCK_SIZE,\n      y: this.nextMove.y + BLOCK_SIZE\n    } as IAsset;\n    this.allMoves = this.pathService.getAlienDropShipPath(this.nextMove, endingPosition);\n    this.isLeavingBase = true;\n    this.atLandingBase = false;\n  }\n\n  /**\n   * Draw the alien tractor beam\n   */\n  private drawTractorBeam(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x + BLOCK_SIZE / 2, this.y + BLOCK_SIZE / 2);\n    this.ctx.scale(this.assetScale.x * this.tractorBeamScale, this.assetScale.y * this.tractorBeamScale);\n    this.ctx.drawImage(this.tractorBeamImage.imageSource, this.tractorBeamImage.x, this.tractorBeamImage.y);\n    this.ctx.restore();\n    if (this.tractorBeamScale < 1) {\n      this.tractorBeamScale += 0.05;\n    }\n  }\n\n  /**\n   * Animate the alien\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n    this.tractorBeamTimer.elapsed = now - this.tractorBeamTimer.start;\n\n    if (this.stopAnimation()) {\n      this.setAlienDropshipToDeploy();\n      return;\n    }\n\n    if (this.assetTimer.elapsed > 75) {\n      this.currentAlien = this.images[this.animationCounter++ % this.images.length];\n      this.assetTimer.start = now;\n\n      if (this.allMoves.length > 0 && !this.canLandAliens()) {\n        this.nextMove = this.allMoves.shift();\n        this.move(this.nextMove);\n      } else if (this.allMoves.length === 0 && !this.canLandAliens()) {\n        this.atLandingBase = true;\n      } else if (this.isLeavingBase && !this.gameService.valid(this.nextMove)) {\n        this.isDestroyed = true;\n      }\n    }\n\n    if (this.allMoves.length === 0 && this.canLandAliens() && this.tractorBeamTimer.elapsed > 15) {\n      this.tractorBeamImage = this.tractorBeamImages[\n        this.tractorBeamAnimationCounter++ % this.tractorBeamImages.length\n      ];\n      this.tractorBeamTimer.start = now;\n      this.drawTractorBeam();\n    }\n    this.draw();\n  }\n}\n","import { IAsset } from '../interface/asset.interface';\nimport { GameService } from './game.service';\nimport { AlienClass } from '../aliens/alien/alien.class';\nimport { AlienBaseClass } from '../base/alien-base/alien-base.class';\nimport { Alien1Class } from '../aliens/alien-1/alien-1.class';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { AssetClass } from '../asset/asset.class';\nimport { AlienWaveModel } from '../model/alien/alien-wave.model';\nimport { InvasionSetupModel } from '../model/invasion-setup.model';\nimport { BaseClass } from '../base/base.class';\nimport { Alien2Class } from '../aliens/alien-2/alien-2.class';\nimport { PathService } from './path.service';\nimport { AlienDropshipClass } from '../aliens/alien-dropship/alien-dropship.class';\n\n/**\n * The invasion service\n */\nexport class InvasionService extends AssetClass {\n  /**\n   * The alien bases\n   */\n  private bases: AlienBaseClass[];\n\n  /**\n   * Aliens at each base\n   */\n  private baseAliens: AlienWaveModel[];\n\n  /**\n   * Aliens drop ships\n   */\n  private alienDropships: AlienDropshipClass[];\n\n  /**\n   * The alien Release Counter\n   */\n  private alienReleaseCounter: number;\n\n  /**\n   * The wave counter\n   */\n  private waveCounter: number;\n\n  /**\n   * The total waves\n   */\n  private waveTotal: number;\n\n  /**\n   * The aliens Per Wave\n   */\n  private aliensPerWave: number;\n\n  /**\n   * The dropship counter\n   */\n  private dropshipCounter: number;\n\n  /**\n   * The Wave\n   */\n  private waves: number;\n\n  /**\n   * The Alien Speed\n   */\n  private alienSpeed: number;\n\n  /**\n   * The Total Aliens\n   */\n  private totalAliens: number;\n\n  /**\n   * The Base Positions\n   */\n  private basePositions: IAsset[];\n\n  /**\n   * The path service\n   */\n  private pathService: PathService;\n\n  /**\n   * The constructor\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D) {\n    super(gameService, ctx, 0);\n    this.bases = [];\n    this.baseAliens = [];\n    this.alienDropships = [];\n    this.waveTotal = 0;\n    this.dropshipCounter = 0;\n    this.pathService = new PathService();\n\n    this.setup();\n  }\n\n  /**\n   * Initialize the board\n   */\n  private setup(): void {\n    this.basePositions = this.gameService.getAlienBasePositions();\n\n    this.basePositions.map((position: IAsset) => {\n      const alienBase = new AlienBaseClass(this.gameService, this.ctx, 1);\n      alienBase.move(position);\n      this.bases.push(alienBase);\n    });\n\n    this.gameService.getMasterObservable().subscribe((event: ObservableModel) => {\n      if (event.type === ObservableTypeEnum.alienDestroyed) {\n        this.isLevelCompleted();\n      }\n    });\n  }\n\n  /**\n   * Build the creep\n   */\n  private buildCreep(): void {\n    let alienUid = 0;\n    let baseAlienPosition = 0;\n\n    this.baseAliens.map((alienWave: AlienWaveModel) => {\n      alienWave.aliens.map((alien: AlienClass) => {\n        alienUid++;\n        alien.isAnimated = false;\n        alien.isDestroyed = false;\n      });\n    });\n\n    this.alienDropships.map((alienDropship: AlienDropshipClass) => {\n      alienDropship.isDestroyed = false;\n      alienDropship.isAnimated = false;\n    });\n\n    for (let wave = 0; wave < this.waves; wave++) {\n      this.basePositions.map((position: IAsset) => {\n        if (!this.alienDropships[baseAlienPosition]) {\n          this.alienDropships.push(new AlienDropshipClass(this.gameService, this.ctx, this.alienDropships.length));\n        }\n\n        if (!this.baseAliens[baseAlienPosition]) {\n          this.baseAliens.push({\n            startingPoint: position,\n            aliens: []\n          } as AlienWaveModel);\n        }\n\n        for (let index = this.baseAliens[baseAlienPosition].aliens.length; index < this.aliensPerWave; index++) {\n          let alien: AlienClass;\n          if (baseAlienPosition % 2 === 0) {\n            alien = new Alien1Class(this.gameService, this.ctx, alienUid++);\n          } else {\n            alien = new Alien2Class(this.gameService, this.ctx, alienUid++);\n          }\n          alien.isAnimated = false;\n          alien.isDestroyed = false;\n\n          this.baseAliens[baseAlienPosition].aliens.push(alien);\n        }\n\n        baseAlienPosition++;\n      });\n    }\n  }\n\n  /**\n   * Shuffle the waves\n   */\n  private shuffle(): void {\n    let currentIndex = this.basePositions.length;\n    let temporaryValue: IAsset;\n    let randomIndex: number;\n\n    // While there remain elements to shuffle...\n    while (0 !== currentIndex) {\n      // Pick a remaining element...\n      randomIndex = Math.floor(Math.random() * currentIndex);\n      currentIndex -= 1;\n\n      // And swap it with the current element.\n      temporaryValue = this.basePositions[currentIndex];\n      this.basePositions[currentIndex] = this.basePositions[randomIndex];\n      this.basePositions[randomIndex] = temporaryValue;\n    }\n  }\n\n  /**\n   * Configure the Alien drop ship\n   * @param index the index of the dropship\n   * @param position the position of the base\n   */\n  private configureAlienDropship(index: number, position: IAsset): void {\n    this.alienDropships[index].setAlienDropshipToDeploy();\n    this.alienDropships[index].move(position);\n    this.alienDropships[index].setCreepPath(\n      this.pathService.getAlienDropShipPath(\n        {\n          x: 0,\n          y: position.y\n        } as IAsset,\n        position\n      )\n    );\n  }\n\n  /**\n   * position the aliens at the starting point\n   */\n  private positionAliens(): void {\n    this.shuffle();\n    let basePosition = 0;\n\n    for (let wave = 0; wave < this.waves; wave++) {\n      this.basePositions.map((position: IAsset) => {\n        this.configureAlienDropship(basePosition, position);\n\n        this.baseAliens[basePosition].aliens.map((alien: AlienClass) => {\n          alien.setCreepSpeed(this.alienSpeed);\n          alien.setCreepPath(\n            this.pathService.findShortestPath(\n              this.gameService.convertIAssetToGameboardIAsset(position),\n              this.gameService.getGameBoard()\n            )\n          );\n        });\n\n        basePosition++;\n      });\n    }\n  }\n\n  /**\n   * Determine if the level is completed\n   */\n  private isLevelCompleted(): void {\n    this.totalAliens--;\n\n    if (this.totalAliens === 0) {\n      this.gameService.emitMasterObservableEvent({\n        type: ObservableTypeEnum.levelCompleted,\n        booleanData: true\n      } as ObservableModel);\n    }\n  }\n\n  /**\n   * Animate the bases\n   */\n  private animateBases(): void {\n    this.basePositions = this.gameService.getAlienBasePositions();\n    let basePositionCounter = 0;\n    if (this.bases.length > 0) {\n      this.basePositions.map((position: IAsset) => {\n        this.bases[basePositionCounter].move(position);\n        basePositionCounter++;\n      });\n    }\n  }\n\n  /**\n   * Start the animations\n   *\n   * @param invasionSetup Set up the invasion\n   */\n  public initInvasion(invasionSetup: InvasionSetupModel): void {\n    this.aliensPerWave = invasionSetup.alienPerWave ? invasionSetup.alienPerWave : 10;\n    this.waves = invasionSetup.waves ? invasionSetup.waves : 2;\n    this.alienSpeed = invasionSetup.alienSpeed ? invasionSetup.alienSpeed : 500;\n    this.waveTotal = this.basePositions.length * this.waves;\n    this.dropshipCounter = 0;\n    this.totalAliens = this.aliensPerWave * this.waveTotal;\n\n    this.animateBases();\n    this.buildCreep();\n    this.positionAliens();\n    this.waveCounter = 0;\n    this.alienReleaseCounter = 0;\n    this.launchNextAlienDropship();\n  }\n\n  /**\n   * Start Alien Creep\n   */\n  private startAlienCreep(baseIndex: number, alienIndex: number): void {\n    if (this.baseAliens.length > 0) {\n      this.baseAliens[baseIndex].aliens[alienIndex].isAnimated = true;\n    }\n  }\n\n  /**\n   * Get All Active Aliens\n   */\n  public getActiveAliens(): AlienClass[] {\n    let activeAliens: AlienClass[] = [];\n\n    this.baseAliens.map((alienWave: AlienWaveModel) => {\n      activeAliens = activeAliens.concat(alienWave.aliens.filter((alien: AlienClass) => alien.isDestroyed === false));\n    });\n\n    return activeAliens;\n  }\n\n  /**\n   * Animate\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.bases.map((base: BaseClass) => {\n      base.animate();\n    });\n\n    if (this.stopAnimation()) {\n      return;\n    }\n\n    this.baseAliens.map((alienWave: AlienWaveModel) => {\n      alienWave.aliens\n        .filter((alien: AlienClass) => alien.isAnimated && alien.isDestroyed === false)\n        .map((alien: AlienClass) => {\n          alien.animate(now);\n        });\n    });\n  }\n\n  /**\n   * Launch the next drop ship\n   * @param index The index of the drop ship\n   */\n  private launchNextAlienDropship(): void {\n    if (this.alienDropships[this.dropshipCounter]) {\n      this.alienDropships[this.dropshipCounter].isAnimated = true;\n    }\n  }\n\n  /**\n   * Animate\n   *\n   * @param now The current animation time\n   */\n  public animateDropships(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n    if (this.stopAnimation()) {\n      return;\n    }\n\n    this.alienDropships\n      .filter((alienDropship: AlienDropshipClass) => alienDropship.isAnimated && alienDropship.isDestroyed === false)\n      .map((alienDropship: AlienDropshipClass) => {\n        alienDropship.animate(now);\n      });\n\n    if (this.dropshipCounter === this.alienDropships.length) {\n      return;\n    }\n\n    if (this.alienDropships[this.dropshipCounter].canLandAliens()) {\n      if (this.assetTimer.elapsed > this.alienSpeed) {\n        this.assetTimer.start = now;\n        if (this.alienReleaseCounter === this.aliensPerWave) {\n          this.alienDropships[this.dropshipCounter++].setAliensLanded();\n          this.launchNextAlienDropship();\n          this.waveCounter++;\n          this.alienReleaseCounter = 0;\n        } else {\n          this.startAlienCreep(this.waveCounter, this.alienReleaseCounter++);\n        }\n      }\n    }\n  }\n}\n","import { GameService } from '../service/game.service';\nimport { AssetClass } from '../asset/asset.class';\nimport { IAsset } from '../interface/asset.interface';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { ObservableModel } from '../model/observable.model';\nimport { BLOCK_SIZE } from '../gameboard/gameboard-constants';\nimport { ImageLocationModel } from '../model/image/image-location.model';\n\n/**\n * The Main Gunner Class\n */\nexport abstract class GunnerClass extends AssetClass {\n  /**\n   * Rotation Degrees\n   */\n  protected rotationDegree: number;\n\n  /**\n   * If the missile has been fired\n   */\n  protected missileFired: boolean;\n\n  /**\n   * The center of the gunner\n   */\n  private centerPosition: IAsset;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n\n    this.missileFired = false;\n\n    this.move();\n  }\n\n  /**\n   * Override the move method to center the base\n   */\n  public move(): void {\n    const position = this.gameService.getGunnerPosition();\n    this.centerPosition = {\n      x: position.x + BLOCK_SIZE / 2,\n      y: position.y\n    } as IAsset;\n\n    this.x = position.x;\n    this.y = position.y;\n  }\n\n  /**\n   * Set the rotation\n   * @param rotation The rotation in degress\n   * @param isRight  If the key is the right key\n   */\n  protected setRotation(rotation: number, isRight: boolean): void {\n    this.rotationDegree += isRight ? rotation : -1 * rotation;\n  }\n\n  /**\n   * Set the rotation of the gun to 0;\n   */\n  public resetRotation(): void {\n    this.rotationDegree = 0;\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.ctx.save();\n\n      this.ctx.translate(this.x + BLOCK_SIZE / 2, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n\n      this.images.map((imageData: ImageLocationModel) => {\n        if (imageData.isRotate) {\n          this.ctx.rotate(this.gameService.getRadians(this.rotationDegree));\n        }\n        this.ctx.drawImage(imageData.imageSource, imageData.x, imageData.y);\n      });\n\n      this.ctx.restore();\n    }\n  }\n\n  /**\n   * Animate the base\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n\n    if (this.assetTimer.elapsed > 500 && this.missileFired) {\n      this.missileFired = false;\n      this.assetTimer.start = now;\n      this.gameService.emitMasterObservableEvent({\n        type: ObservableTypeEnum.missileLaunched,\n        assetCoordinateData: this.centerPosition,\n        assetRotationData: this.rotationDegree\n      } as ObservableModel);\n    }\n\n    this.draw();\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { GunnerClass } from '../gunner.class';\nimport { ObservableModel } from '../../model/observable.model';\nimport { ObservableTypeEnum } from '../../enum/observable-type.enum';\nimport { KEY } from '../../gameboard/gameboard-constants';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\n\n/**\n * The Main Gunner Class\n */\nexport class MainGunnerClass extends GunnerClass {\n  /**\n   * The Key Down Interval\n   */\n  private keyDownInterval: NodeJS.Timer;\n\n  /**\n   * The Space Key Down Interval\n   */\n  private spaceKeyDownInterval: NodeJS.Timer;\n\n  /**\n   * The Key Down Timeout\n   */\n  private keyDownTimeout: NodeJS.Timer;\n\n  /**\n   * The current Key down\n   */\n  private currentKeyDown: string;\n\n  /**\n   * The current Key down\n   */\n  private missilesFiring: boolean;\n\n  /**\n   * moves\n   */\n  private moves = {\n    [KEY.LEFT]: true,\n    [KEY.RIGHT]: true,\n    [KEY.SPACE]: true\n  };\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n\n    this.loadGunnerImages();\n\n    this.missilesFiring = false;\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n\n    this.rotationDegree = 0;\n  }\n\n  /**\n   * Load the Gunner Images\n   */\n  private loadGunnerImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.mainGunnerSupport, ImageLoadedEnum.mainGunner];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n\n    this.setAssetDimensions(this.images[0].height, this.images[0].width);\n  }\n\n  /**\n   * Press Key Stroke\n   * @param event The Key event\n   */\n  protected processKeyStroke(event: ObservableModel): void {\n    const eventCode = event.stringData;\n    const keyDown = event.type === ObservableTypeEnum.keyDownEvent;\n\n    if (this.moves[eventCode]) {\n      if (eventCode === KEY.SPACE && keyDown && !this.missilesFiring) {\n        this.missilesFiring = true;\n        this.missileFired = true;\n        this.spaceKeyDownInterval = setInterval(() => {\n          this.missileFired = true;\n        }, 500);\n      } else if (eventCode === KEY.SPACE && !keyDown) {\n        this.missilesFiring = false;\n        clearInterval(this.spaceKeyDownInterval);\n      } else if (eventCode !== KEY.SPACE) {\n        const rotation = 5.625;\n\n        if ((keyDown && this.currentKeyDown !== eventCode) || (!keyDown && this.currentKeyDown === eventCode)) {\n          clearInterval(this.keyDownInterval);\n          clearTimeout(this.keyDownTimeout);\n          this.keyDownInterval = undefined;\n          this.currentKeyDown = undefined;\n        }\n\n        if (keyDown && this.currentKeyDown !== eventCode) {\n          this.currentKeyDown = eventCode;\n\n          this.keyDownTimeout = setTimeout(() => {\n            this.keyDownInterval = setInterval(() => {\n              this.setRotation(rotation, eventCode === KEY.RIGHT);\n            }, 50);\n          }, 250);\n        }\n\n        if (keyDown) {\n          this.setRotation(rotation, eventCode === KEY.RIGHT);\n        }\n      }\n    }\n  }\n}\n","import { GameService } from '../service/game.service';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { ObservableModel } from '../model/observable.model';\nimport { AssetClass } from '../asset/asset.class';\nimport { IAsset } from '../interface/asset.interface';\nimport { MissileLaunchModel } from './model/missile-launch.model';\nimport { KEY } from '../gameboard/gameboard-constants';\nimport { ImageLocationModel } from '../model/image/image-location.model';\nimport { ImageLoadedEnum } from '../enum/image-loaded.enum';\nimport { AssetScaleModel } from '../model/asset-scale.mode';\n\n/**\n * The Missile Class\n */\nexport class MissileClass extends AssetClass {\n  /**\n   * The rotation Degress\n   */\n  private rotationDegree: number;\n  /**\n   * The launchPosition\n   */\n  private launchPosition: IAsset;\n  /**\n   * The originalPosition\n   */\n  private originalPosition: IAsset;\n  /**\n   * The current missile\n   */\n  private currentMissile: ImageLocationModel;\n\n  /**\n   * moves\n   */\n  private moves = {\n    [KEY.UP]: (asset: IAsset): IAsset => ({ ...asset, y: asset.y - 3 })\n  };\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the misssle\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n\n    this.loadMissileImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Gunner Images\n   */\n  private loadMissileImages(): void {\n    const imagesToLoad = [\n      ImageLoadedEnum.missileWhite,\n      ImageLoadedEnum.missileBlue,\n      ImageLoadedEnum.missileGreen,\n      ImageLoadedEnum.missileIndigo,\n      ImageLoadedEnum.missileOrange,\n      ImageLoadedEnum.missileRed,\n      ImageLoadedEnum.missileViolet,\n      ImageLoadedEnum.missileYellow\n    ];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n\n    this.currentMissile = this.images[0];\n  }\n\n  /**\n   * Set the Missile Color\n   * @param index The index of the color\n   */\n  public setMissileColor(index: number): void {\n    this.currentMissile = this.images[index];\n  }\n\n  /**\n   * Un Set the Missile Color\n   */\n  public unsetMissileColor(): void {\n    this.currentMissile = this.images[0];\n  }\n\n  /**\n   * Add the shadow\n   * @param position The position of the shadow\n   */\n  private addMissileShadow(position: IAsset): void {\n    const currentAngle = Math.abs(Math.floor(this.rotationDegree / 360));\n    const missileDegree = (this.rotationDegree - currentAngle * 360) % 360;\n    const shadowRotationDegree = missileDegree < 0 ? 360 + missileDegree : missileDegree;\n\n    let xOffset = shadowRotationDegree >= 90 && shadowRotationDegree <= 135 ? 2 : 7.5;\n\n    xOffset = shadowRotationDegree >= 225 && shadowRotationDegree <= 260 ? 12.5 : xOffset;\n\n    const missileMultiplier =\n      (shadowRotationDegree >= -45 && shadowRotationDegree <= 135) || shadowRotationDegree >= 315 ? -1 : 1;\n\n    this.ctx.fillStyle = 'grey';\n    this.ctx.fillRect(position.x + missileMultiplier * xOffset, position.y + 20, 2.5, 10);\n  }\n\n  /**\n   * Draw evenything necessary\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.ctx.save();\n      this.ctx.translate(this.x, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n\n      if (this.currentMissile.isRotate) {\n        this.ctx.rotate(this.gameService.getRadians(this.rotationDegree));\n      }\n      this.ctx.drawImage(this.currentMissile.imageSource, this.currentMissile.x, this.currentMissile.y);\n\n      this.addMissileShadow({\n        x: this.currentMissile.x,\n        y: this.currentMissile.y\n      } as IAsset);\n      this.ctx.restore();\n    }\n  }\n\n  /**\n   * Set the rotation degree\n   * @param rotationDegree The rotation degress\n   */\n  public setMissileData(data: MissileLaunchModel): void {\n    this.rotationDegree = data.rotation;\n    this.launchPosition = data.position;\n    this.originalPosition = data.position;\n    const firstMove = this.convertMissilePosition();\n    firstMove.y -= 3;\n    this.move(firstMove);\n  }\n\n  /**\n   * Round to the nearest 100\n   * @param asset The asset to round\n   */\n  private roundCoordinates(asset: IAsset): IAsset {\n    asset.x = Math.round(asset.x * 100) / 100;\n    asset.y = Math.round(asset.y * 100) / 100;\n    return asset;\n  }\n\n  /**\n   * Convert the missile position based on the angle\n   */\n  private convertMissilePosition(): IAsset {\n    this.launchPosition = this.moves[KEY.UP](this.launchPosition);\n    const distance = this.originalPosition.y - this.launchPosition.y;\n\n    const rad = this.gameService.getRadians(180 - this.rotationDegree);\n    return this.roundCoordinates({\n      x: this.originalPosition.x + distance * Math.sin(rad),\n      y: this.originalPosition.y + distance * Math.cos(rad)\n    } as IAsset);\n  }\n\n  /**\n   * Animate the missile\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n\n    if (this.stopAnimation()) {\n      if (this.isGameOver || this.isDestroyed) {\n        this.gameService.emitMasterObservableEvent({\n          type: ObservableTypeEnum.missileDestroyed,\n          numberData: this.uid\n        } as ObservableModel);\n      }\n\n      return;\n    }\n\n    if (this.assetTimer.elapsed > 30) {\n      this.assetTimer.start = now;\n      const asset = this.convertMissilePosition();\n      if (this.gameService.valid(asset)) {\n        this.move(asset);\n      } else {\n        this.isDestroyed = true;\n      }\n    }\n\n    this.draw();\n  }\n}\n","import { GameService } from './game.service';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { MissileClass } from '../missile/missile.class';\nimport { MissileLaunchModel } from '../missile/model/missile-launch.model';\nimport { IAsset } from '../interface/asset.interface';\n\n/**\n * The projectile service\n */\nexport class MissileService {\n  /**\n   * The missiles\n   */\n  private missiles: MissileClass[];\n  /**\n   * The can fire\n   */\n  private canFire: boolean;\n  /**\n   * The current missile rotation\n   */\n  private currentMissileRotation: number;\n  /**\n   * The current missile Position\n   */\n  private currentMissilePosition: IAsset;\n  /**\n   * The game is paused\n   */\n  private isGamePaused: boolean;\n\n  /**\n   * The constructor\n   *\n   * @param gameService The GameService\n   * @param ctx The ctx\n   */\n  constructor(private gameService: GameService, private ctx: CanvasRenderingContext2D) {\n    this.missiles = [];\n    this.currentMissilePosition = this.gameService.getGunnerPosition();\n    this.currentMissilePosition.x += 2.5;\n    this.currentMissileRotation = 0;\n    this.isGamePaused = false;\n  }\n\n  /**\n   * Init the service with the listener\n   */\n  public init(): void {\n    this.gameService.getMasterObservable().subscribe((event: ObservableModel) => {\n      if (event.type === ObservableTypeEnum.gameOver) {\n        this.canFire = !event.booleanData;\n      } else if (event.type === ObservableTypeEnum.missileLaunched) {\n        this.currentMissilePosition = event.assetCoordinateData;\n        this.launchMissile(event);\n      } else if (event.type === ObservableTypeEnum.missileDestroyed) {\n        this.markMissileDestroyed(event);\n      } else if (event.type === ObservableTypeEnum.prismBlastFire) {\n        this.firePrismBlastMissiles();\n      } else if (event.type === ObservableTypeEnum.gamePaused) {\n        this.isGamePaused = event.booleanData;\n      }\n    });\n  }\n\n  /**\n   * Mark a Missile Destroyed\n   * @param event The event\n   */\n  private markMissileDestroyed(event: ObservableModel): void {\n    this.missiles[event.numberData].isDestroyed = true;\n    this.missiles[event.numberData].isAnimated = false;\n  }\n\n  /**\n   * Find any unused missiles\n   */\n  private findUnusedMissile(): MissileClass {\n    return this.missiles.filter((missile: MissileClass) => missile.isDestroyed)[0];\n  }\n\n  /**\n   * Return all Active Missiles\n   */\n  public getActiveMissiles(): MissileClass[] {\n    return this.missiles.filter((missile: MissileClass) => missile.isAnimated);\n  }\n\n  /**\n   * Remove all the missiles\n   */\n  public removeMissiles(): void {\n    this.getActiveMissiles().map((missile: MissileClass) => {\n      missile.isDestroyed = true;\n      missile.isAnimated = false;\n    });\n  }\n\n  /**\n   * Fire the Prism Blast Missiles\n   */\n  private firePrismBlastMissiles(): void {\n    for (let index = 0; index < 128; index++) {\n      this.currentMissileRotation = (index + 1) * 5.625;\n\n      let missile = this.findUnusedMissile();\n      if (!missile) {\n        missile = new MissileClass(this.gameService, this.ctx, this.missiles.length);\n        this.missiles.push(missile);\n      }\n\n      missile.isDestroyed = false;\n      missile.isAnimated = false;\n      missile.move(this.currentMissilePosition);\n      missile.setMissileData({\n        rotation: this.currentMissileRotation,\n        position: this.currentMissilePosition\n      } as MissileLaunchModel);\n\n      // This required to keep it in front of the game component clearRect\n      setTimeout(() => {\n        missile.setMissileColor((index % 7) + 1);\n        missile.isAnimated = true;\n      }, (index + 1) * 25);\n    }\n  }\n\n  /**\n   * Animate the missiles\n   * @param now  the current time stamp\n   */\n  animate(now = 0): void {\n    if (!this.isGamePaused) {\n      this.missiles\n        .filter((missile: MissileClass) => missile.isAnimated)\n        .map((missile: MissileClass) => {\n          missile.animate(now);\n        });\n    }\n  }\n\n  /**\n   * Launch a Missile\n   * @param event The event\n   */\n  private launchMissile(event: ObservableModel): void {\n    if (this.canFire) {\n      for (let index = 0; index < 3; index++) {\n        this.currentMissileRotation = event.assetRotationData;\n\n        if (index === 1) {\n          this.currentMissileRotation += 135;\n        }\n        if (index === 2) {\n          this.currentMissileRotation -= 135;\n        }\n\n        let missile = this.findUnusedMissile();\n        if (!missile) {\n          missile = new MissileClass(this.gameService, this.ctx, this.missiles.length);\n          this.missiles.push(missile);\n        }\n        missile.isDestroyed = false;\n\n        missile.move(event.assetCoordinateData);\n        missile.setMissileData({\n          rotation: this.currentMissileRotation,\n          position: event.assetCoordinateData\n        } as MissileLaunchModel);\n        missile.isAnimated = true;\n\n        missile.unsetMissileColor();\n      }\n    }\n  }\n}\n","import { GameService } from '../service/game.service';\nimport { AssetClass } from '../asset/asset.class';\nimport { BLOCK_SIZE } from '../gameboard/gameboard-constants';\nimport { ImageLocationModel } from '../model/image/image-location.model';\n\n/**\n * The Character Class\n */\nexport abstract class CharacterClass extends AssetClass {\n  /**\n   * The current characters\n   */\n  protected characters: ImageLocationModel[];\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D) {\n    super(gameService, ctx, 0);\n    this.characters = [];\n  }\n\n  /**\n   * Draw evenything necessary\n   */\n  protected draw(): void {\n    let offset = 0;\n    if (this.isImageLoaded) {\n      this.characters.map((imageData: ImageLocationModel) => {\n        this.ctx.save();\n        this.ctx.translate(this.x + offset, this.y);\n        this.ctx.scale(this.assetScale.x, this.assetScale.y);\n        this.ctx.drawImage(imageData.imageSource, imageData.x, imageData.y);\n        this.ctx.restore();\n\n        offset += 2.5 * BLOCK_SIZE;\n      });\n    }\n  }\n\n  /**\n   * Animate the bomb\n   */\n  public animate(): void {\n    this.draw();\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { CharacterClass } from '../character.class';\n\n/**\n * The Number Class\n */\nexport class NumberClass extends CharacterClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D) {\n    super(gameService, ctx);\n\n    this.loadNumberImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Number Images\n   */\n  private loadNumberImages(): void {\n    const imagesToLoad = [\n      ImageLoadedEnum.number0,\n      ImageLoadedEnum.number1,\n      ImageLoadedEnum.number2,\n      ImageLoadedEnum.number3,\n      ImageLoadedEnum.number4,\n      ImageLoadedEnum.number5,\n      ImageLoadedEnum.number6,\n      ImageLoadedEnum.number7,\n      ImageLoadedEnum.number8,\n      ImageLoadedEnum.number9\n    ];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n\n  /**\n   * Draw the Number\n   * @param inputNumber the number to display\n   * @param padNumbers if the numbers should be padded\n   */\n  public setNumber(inputNumber: number, padNumbers = true): void {\n    const numbers = padNumbers ? this.padPoints(inputNumber) : inputNumber.toString();\n    this.characters = [];\n    for (const index of numbers) {\n      this.characters.push(this.images[Number(index)]);\n    }\n  }\n\n  /**\n   * Pad the points\n   *\n   * @param points The points to pad\n   */\n  private padPoints(points: number): string {\n    let stringPoints = points.toString();\n    if (points < 10) {\n      stringPoints = `000${points}`;\n    } else if (points < 100) {\n      stringPoints = `00${points}`;\n    } else if (points < 1000) {\n      stringPoints = `0${points}`;\n    }\n\n    return stringPoints;\n  }\n}\n","/**\n * The Text Type Enum\n */\nexport enum TextTypeEnum {\n  /**\n   * Score\n   */\n  score = 'score',\n  /**\n   * highScore\n   */\n  highScore = 'highScore',\n  /**\n   * level\n   */\n  level = 'level'\n}\n","import { GameService } from '../../service/game.service';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { CharacterClass } from '../character.class';\n\n/**\n * The Letter Class\n */\nexport class LetterClass extends CharacterClass {\n  /**\n   * The letter collection\n   */\n  private letterCollection: object;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param color The Color of the letters\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D) {\n    super(gameService, ctx);\n    this.letterCollection = {\n      L: 0,\n      P: 1\n    };\n    this.loadLetterImages();\n\n    this.assetScale = {\n      x: 0.1,\n      y: 0.1\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Letter Images\n   */\n  private loadLetterImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.letterl, ImageLoadedEnum.letterp];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n\n  /**\n   * Draw the Letter\n   * @param inputLetters the letter to display\n   */\n  setLetter(inputLetters: string): void {\n    this.characters.length = 0;\n    for (const index of inputLetters) {\n      /* eslint-disable-next-line */\n      this.characters.push(this.images[this.letterCollection[index]]);\n    }\n  }\n}\n","import { GameService } from './game.service';\nimport { NumberClass } from '../text/number/number.class';\nimport { IAsset } from '../interface/asset.interface';\nimport { TextLocationModel } from '../model/text-location.model';\nimport { TextTypeEnum } from '../enum/text-type.enum';\nimport { LetterClass } from '../text/letter/letter.class';\nimport { BLOCK_SIZE } from '../gameboard/gameboard-constants';\nimport { AssetScaleModel } from '../model/asset-scale.mode';\n\n/**\n * The text service\n */\nexport class TextService {\n  /**\n   * The score\n   */\n  private scoreClass: NumberClass;\n\n  /**\n   * The high score\n   */\n  private highScoreClass: NumberClass;\n\n  /**\n   * The level\n   */\n  private levelClass: LetterClass;\n\n  /**\n   * The level score\n   */\n  private levelScoreClass: NumberClass;\n\n  /**\n   * The constructor\n   */\n  constructor(private gameService: GameService, private ctx: CanvasRenderingContext2D) {\n    this.scoreClass = new NumberClass(this.gameService, this.ctx);\n\n    this.highScoreClass = new NumberClass(this.gameService, this.ctx);\n\n    this.levelScoreClass = new NumberClass(this.gameService, this.ctx);\n    this.levelScoreClass.assetScale = { x: 0.1, y: 0.1 } as AssetScaleModel;\n\n    this.levelClass = new LetterClass(this.gameService, this.ctx);\n\n    const textLocations = this.gameService.getTextPositions();\n    const scoreLocation = textLocations\n      .filter((textLocation: TextLocationModel) => textLocation.type === TextTypeEnum.score)\n      .pop();\n    this.scoreClass.move({\n      x: scoreLocation.position.x,\n      y: scoreLocation.position.y\n    } as IAsset);\n\n    const highScoreLocation = textLocations\n      .filter((textLocation: TextLocationModel) => textLocation.type === TextTypeEnum.highScore)\n      .pop();\n\n    this.highScoreClass.move({\n      x: highScoreLocation.position.x,\n      y: highScoreLocation.position.y\n    } as IAsset);\n\n    const levelLocation = textLocations\n      .filter((textLocation: TextLocationModel) => textLocation.type === TextTypeEnum.level)\n      .pop();\n\n    this.levelClass.move({\n      x: levelLocation.position.x,\n      y: levelLocation.position.y\n    } as IAsset);\n\n    this.levelScoreClass.move({\n      x: levelLocation.position.x + BLOCK_SIZE,\n      y: levelLocation.position.y\n    } as IAsset);\n\n    this.levelScoreClass.setNumber(1, false);\n\n    this.levelClass.setLetter('L');\n  }\n\n  /**\n   * Initialize the text\n   */\n  public animate(): void {\n    this.scoreClass.animate();\n    this.highScoreClass.animate();\n    this.levelClass.animate();\n    this.levelScoreClass.animate();\n  }\n\n  /**\n   * Set the Score number\n   * @param points The points to set\n   */\n  public setScore(points: number): void {\n    this.scoreClass.setNumber(points);\n  }\n\n  /**\n   * Set the high Score\n   * @param points The points to set\n   */\n  public setHighScore(points: number): void {\n    this.highScoreClass.setNumber(points);\n  }\n\n  /**\n   * Set the level\n   * @param level The level to set\n   */\n  public setLevel(level: number): void {\n    this.levelScoreClass.setNumber(level, false);\n  }\n}\n","/**\n * Columns\n */\nexport const COLS = 15;\n/**\n * Rows\n */\nexport const ROWS = 15;\n\n/**\n * The RED - 1 asset animation\n */\nconst ASSET_ANIMATION_RED_1 = [\n  [1, 0, 1, 0, 1],\n  [0, 1, 0, 1, 0],\n  [1, 0, 1, 0, 1],\n  [0, 1, 0, 1, 0],\n  [1, 0, 1, 0, 1]\n];\n\n/**\n * The RED - 2 asset animation\n */\nconst ASSET_ANIMATION_RED_2 = [\n  [0, 1, 0, 1, 0],\n  [1, 0, 1, 0, 1],\n  [0, 1, 0, 1, 0],\n  [1, 0, 1, 0, 1],\n  [0, 1, 0, 1, 0]\n];\n\n/**\n * The ORANGE - 1 asset animation\n */\nconst ASSET_ANIMATION_ORANGE_1 = [\n  [2, 0, 2, 0, 2],\n  [0, 2, 0, 2, 0],\n  [2, 0, 2, 0, 2],\n  [0, 2, 0, 2, 0],\n  [2, 0, 2, 0, 2]\n];\n\n/**\n * The ORANGE - 2 asset animation\n */\nconst ASSET_ANIMATION_ORANGE_2 = [\n  [0, 2, 0, 2, 0],\n  [2, 0, 2, 0, 2],\n  [0, 2, 0, 2, 0],\n  [2, 0, 2, 0, 2],\n  [0, 2, 0, 2, 0]\n];\n\n/**\n * The YELLOW - 1 asset animation\n */\nconst ASSET_ANIMATION_YELLOW_1 = [\n  [3, 0, 3, 0, 3],\n  [0, 3, 0, 3, 0],\n  [3, 0, 3, 0, 3],\n  [0, 3, 0, 3, 0],\n  [3, 0, 3, 0, 3]\n];\n\n/**\n * The YELLOW - 2 asset animation\n */\nconst ASSET_ANIMATION_YELLOW_2 = [\n  [0, 3, 0, 3, 0],\n  [3, 0, 3, 0, 3],\n  [0, 3, 0, 3, 0],\n  [3, 0, 3, 0, 3],\n  [0, 3, 0, 3, 0]\n];\n\n/**\n * The GREEN - 1 asset animation\n */\nconst ASSET_ANIMATION_GREEN_1 = [\n  [4, 0, 4, 0, 4],\n  [0, 4, 0, 4, 0],\n  [4, 0, 4, 0, 4],\n  [0, 4, 0, 4, 0],\n  [4, 0, 4, 0, 4]\n];\n\n/**\n * The GREEN - 2 asset animation\n */\nconst ASSET_ANIMATION_GREEN_2 = [\n  [0, 4, 0, 4, 0],\n  [4, 0, 4, 0, 4],\n  [0, 4, 0, 4, 0],\n  [4, 0, 4, 0, 4],\n  [0, 4, 0, 4, 0]\n];\n\n/**\n * The BLUE - 1 asset animation\n */\nconst ASSET_ANIMATION_BLUE_1 = [\n  [5, 0, 5, 0, 5],\n  [0, 5, 0, 5, 0],\n  [5, 0, 5, 0, 5],\n  [0, 5, 0, 5, 0],\n  [5, 0, 5, 0, 5]\n];\n\n/**\n * The BLUE - 2 asset animation\n */\nconst ASSET_ANIMATION_BLUE_2 = [\n  [0, 5, 0, 5, 0],\n  [5, 0, 5, 0, 5],\n  [0, 5, 0, 5, 0],\n  [5, 0, 5, 0, 5],\n  [0, 5, 0, 5, 0]\n];\n\n/**\n * The INDIGO - 1 asset animation\n */\nconst ASSET_ANIMATION_INDIGO_1 = [\n  [6, 0, 6, 0, 6],\n  [0, 6, 0, 6, 0],\n  [6, 0, 6, 0, 6],\n  [0, 6, 0, 6, 0],\n  [6, 0, 6, 0, 6]\n];\n\n/**\n * The INDIGO - 2 asset animation\n */\nconst ASSET_ANIMATION_INDIGO_2 = [\n  [0, 6, 0, 6, 0],\n  [6, 0, 6, 0, 6],\n  [0, 6, 0, 6, 0],\n  [6, 0, 6, 0, 6],\n  [0, 6, 0, 6, 0]\n];\n\n/**\n * The VIOLET - 1 asset animation\n */\nconst ASSET_ANIMATION_VIOLET_1 = [\n  [7, 0, 7, 0, 7],\n  [0, 7, 0, 7, 0],\n  [7, 0, 7, 0, 7],\n  [0, 7, 0, 7, 0],\n  [7, 0, 7, 0, 7]\n];\n\n/**\n * The VIOLET - 2 asset animation\n */\nconst ASSET_ANIMATION_VIOLET_2 = [\n  [0, 7, 0, 7, 0],\n  [7, 0, 7, 0, 7],\n  [0, 7, 0, 7, 0],\n  [7, 0, 7, 0, 7],\n  [0, 7, 0, 7, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [\n  ASSET_ANIMATION_RED_1,\n  ASSET_ANIMATION_RED_2,\n\n  ASSET_ANIMATION_ORANGE_1,\n  ASSET_ANIMATION_ORANGE_2,\n\n  ASSET_ANIMATION_YELLOW_1,\n  ASSET_ANIMATION_YELLOW_2,\n\n  ASSET_ANIMATION_GREEN_1,\n  ASSET_ANIMATION_GREEN_2,\n\n  ASSET_ANIMATION_BLUE_1,\n  ASSET_ANIMATION_BLUE_2,\n\n  ASSET_ANIMATION_INDIGO_1,\n  ASSET_ANIMATION_INDIGO_2,\n\n  ASSET_ANIMATION_VIOLET_1,\n  ASSET_ANIMATION_VIOLET_2\n];\n\n/**\n * The colors\n */\nexport const COLORS = [\n  'rgba(255, 255, 255)', // White\n  'rgba(255, 0, 0)', // Red\n  'rgba(255, 127, 0)', // Orange\n  'rgba(255, 255, 0)', // Yellow\n  'rgba(0, 255, 0)', // Green\n  'rgba(0, 0, 255)', // Blue\n  'rgba(46, 43, 95)', // Indigo\n  'rgba(139, 0, 255)' // Violet\n];\n","import { COLORS, ASSET_ANIMATION } from './prism-blast-constants';\nimport { GameService } from '../../service/game.service';\nimport { AssetClass } from '../../asset/asset.class';\n\n/**\n * The Prism Blast Class\n */\nexport class PrismBlastClass extends AssetClass {\n  /**\n   * The asset to animate\n   */\n  private assetAnimation: number[][];\n  /**\n   * Asset Animations\n   */\n  private assetAnimations: number[][][];\n  /**\n   * The angle of the blast\n   */\n  private angle: number;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the prism blast\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid);\n    this.isDestroyed = true;\n    this.assetAnimations = ASSET_ANIMATION;\n    this.assetAnimation = this.assetAnimations[0];\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x, this.y);\n    this.ctx.scale(1, 1);\n    this.ctx.rotate(this.angle);\n    this.drawPrismBlast();\n    this.ctx.restore();\n  }\n\n  /**\n   * Set the Blast Angle\n   * @param angle The angle of the blast\n   */\n  public setBlastAngle(angle: number): void {\n    this.angle = this.gameService.getRadians(angle);\n  }\n\n  /**\n   * Draw the base\n   */\n  private drawPrismBlast(): void {\n    this.assetAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (x === 0) {\n          this.ctx.globalAlpha = 0.4;\n          this.ctx.fillStyle = COLORS[0];\n          this.ctx.fillRect(x - 0.2, y, x + this.getAssetHeight() + 0.4, 1);\n        }\n\n        if (value > 0) {\n          this.ctx.globalAlpha = 1;\n          this.ctx.fillStyle = COLORS[value];\n          this.ctx.fillRect(x, y, 1, 1);\n        }\n      });\n    });\n  }\n\n  /**\n   * Animate the prism blast\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n\n    if (this.stopAnimation()) {\n      return;\n    }\n\n    if (this.assetTimer.elapsed > 100) {\n      this.assetTimer.start = now;\n      this.assetAnimation = this.assetAnimations[this.animationCounter++ % this.assetAnimations.length];\n    }\n\n    this.draw();\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { AssetClass } from '../../asset/asset.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { ImageLocationModel } from '../../model/image/image-location.model';\nimport { IAsset } from '../../interface/asset.interface';\n\n/**\n * The Prism Blast Icon Class\n */\nexport class PrismBlastIconClass extends AssetClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the prism blast\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D) {\n    super(gameService, ctx, 1);\n\n    this.loadIconImages();\n\n    this.assetScale = {\n      x: 0.1,\n      y: 0.1\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Letter Images\n   */\n  private loadIconImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.prismBlastIcon];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n\n  /**\n   * Position the icon\n   * @param position The position of the icon\n   * Load the Letter Images\n   */\n  public position(position: IAsset): void {\n    this.move(position);\n  }\n\n  /**\n   * Draw evenything necessary\n   */\n  protected draw(): void {\n    let offset = 0;\n    if (this.isImageLoaded) {\n      this.images.map((imageData: ImageLocationModel) => {\n        this.ctx.save();\n        this.ctx.translate(this.x + offset, this.y);\n        this.ctx.scale(this.assetScale.x, this.assetScale.y);\n        this.ctx.drawImage(imageData.imageSource, imageData.x, imageData.y);\n        this.ctx.restore();\n      });\n\n      offset += 25;\n    }\n  }\n\n  /**\n   * Animate the prism blast\n   */\n  public animate(): void {\n    if (this.isDestroyed) {\n      return;\n    }\n\n    this.draw();\n  }\n}\n","import { GameService } from './game.service';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { PrismBlastClass } from '../prism/prism-blast/prism-blast.class';\nimport { KEY, BLOCK_SIZE } from '../gameboard/gameboard-constants';\nimport { IAsset } from '../interface/asset.interface';\nimport { PrismBlastIconClass } from '../prism/prism-blast-icon/prism-blast-icon.class';\n\n/**\n * The Prism Blast service\n */\nexport class PrismBlastService {\n  /**\n   * The prism blasts\n   */\n  private prismBlasts: PrismBlastClass[];\n  /**\n   * The prism blast Icons\n   */\n  private prismBlastIcons: PrismBlastIconClass[];\n  /**\n   * The original prism blast Icons position\n   */\n  private prismBlastIconsPosition: IAsset;\n  /**\n   * The can fire\n   */\n  private canFire: boolean;\n  /**\n   * Total Blasts\n   */\n  private totalBlasts: number;\n  /**\n   * Blast Counter\n   */\n  private blastCounter: number;\n  /**\n   * Blast Angle\n   */\n  private blastAngle: number;\n\n  /**\n   * moves\n   */\n  private moves = {\n    [KEY.UP]: (asset: IAsset): IAsset => ({ ...asset, y: asset.y - BLOCK_SIZE }),\n    [KEY.RIGHT]: (asset: IAsset): IAsset => ({ ...asset, x: asset.x + BLOCK_SIZE })\n  };\n\n  /**\n   * The constructor\n   *\n   * @param gameService The GameService\n   * @param ctx The ctx\n   */\n  constructor(private gameService: GameService, private ctx: CanvasRenderingContext2D) {\n    const prismBlastCoordinates = this.gameService.getCoordinatesForPrismBlast();\n    this.prismBlastIconsPosition = this.gameService.getPrismBlastIconPosition();\n    this.totalBlasts = prismBlastCoordinates.distance;\n    this.blastAngle = prismBlastCoordinates.angle;\n    this.blastCounter = 0;\n    this.prismBlasts = [];\n    this.prismBlastIcons = [];\n\n    for (let index = 0; index < this.totalBlasts; index++) {\n      this.prismBlasts.push(new PrismBlastClass(this.gameService, this.ctx, 1));\n    }\n  }\n\n  /**\n   * If the Prism Blast can be fired\n   */\n  private canFirePrismBlast(): boolean {\n    return (\n      this.canFire &&\n      this.prismBlastIcons.filter((prismBlastIcon: PrismBlastIconClass) => prismBlastIcon.isDestroyed === false)\n        .length > 0\n    );\n  }\n\n  /**\n   * Remove used prism blasts\n   */\n  private removePrismBlast(): void {\n    this.prismBlastIcons\n      .filter((prismBlastIcon: PrismBlastIconClass) => prismBlastIcon.isDestroyed === false)\n      .slice(0)\n      .reverse()\n      .map((prismBlastIcon: PrismBlastIconClass, index: number) => {\n        prismBlastIcon.isDestroyed = index === 0;\n      });\n  }\n\n  /**\n   * Init the service with the listener\n   */\n  public init(): void {\n    this.gameService.getMasterObservable().subscribe((event: ObservableModel) => {\n      if (event.type === ObservableTypeEnum.gameOver) {\n        this.canFire = !event.booleanData;\n        if (!event.booleanData) {\n          this.prismBlastIcons.map((prismBlastIcon: PrismBlastIconClass, index: number) => {\n            prismBlastIcon.isDestroyed = index > 1;\n          });\n        }\n      } else if (event.type === ObservableTypeEnum.prismBlastLaunched) {\n        if (this.canFirePrismBlast()) {\n          this.removePrismBlast();\n          this.positionBlast(event);\n          this.launchPrismBlast();\n        }\n      }\n    });\n\n    this.addPrismBlast();\n    this.addPrismBlast();\n  }\n\n  /**\n   * Find any unused missiles\n   */\n  private findUnusedPrismBlastIcons(): PrismBlastIconClass {\n    return this.prismBlastIcons.filter((prismBlastIcon: PrismBlastIconClass) => prismBlastIcon.isDestroyed)[0];\n  }\n\n  /**\n   * Add A new Prism Blast Icon\n   */\n  public addPrismBlast(): void {\n    let prismBlastIcon = this.findUnusedPrismBlastIcons();\n\n    if (this.prismBlastIcons.length > 0) {\n      this.prismBlastIconsPosition = this.moves[KEY.RIGHT](this.prismBlastIconsPosition);\n    }\n\n    if (!prismBlastIcon) {\n      prismBlastIcon = new PrismBlastIconClass(this.gameService, this.ctx);\n      this.prismBlastIcons.push(prismBlastIcon);\n    }\n\n    prismBlastIcon.position(this.prismBlastIconsPosition);\n    prismBlastIcon.isDestroyed = false;\n  }\n\n  /**\n   * Position the blast\n   * @param event The event coordinates\n   */\n  private positionBlast(event: ObservableModel): void {\n    let nextMove = event.assetCoordinateData;\n    nextMove.y += BLOCK_SIZE / 2;\n    this.prismBlasts.map((prismBlast: PrismBlastClass) => {\n      nextMove = this.moves[KEY.UP](nextMove);\n      prismBlast.move(nextMove);\n      prismBlast.setBlastAngle(this.blastAngle);\n    });\n  }\n\n  /**\n   * Animate\n   * @param index The index of the blast\n   */\n  private startAnimation(index: number): void {\n    this.prismBlasts[index].isDestroyed = false;\n  }\n\n  /**\n   * Animate\n   * @param index The index of the blast\n   */\n  private stopAnimation(index: number): void {\n    this.prismBlasts[index].isDestroyed = true;\n  }\n\n  /**\n   * Animate\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.prismBlastIcons.map((prismBlastIcon: PrismBlastIconClass) => {\n      prismBlastIcon.animate();\n    });\n\n    this.prismBlasts.map((prismBlast: PrismBlastClass) => {\n      if (prismBlast.isDestroyed === false) {\n        prismBlast.animate(now);\n      }\n    });\n  }\n\n  /**\n   * Launch a Blast\n   */\n  private launchPrismBlast(): void {\n    while (this.blastCounter < this.totalBlasts) {\n      const index = this.blastCounter;\n      setTimeout(() => {\n        this.startAnimation(index);\n        if (index === this.totalBlasts - 1) {\n          this.gameService.emitMasterObservableEvent({\n            type: ObservableTypeEnum.prismBlastFire\n          } as ObservableModel);\n          setTimeout(() => {\n            this.defusePrismBlast();\n          }, 3500);\n        }\n      }, (this.blastCounter + 1) * 100);\n      this.blastCounter++;\n    }\n  }\n\n  /**\n   * Stop the blast\n   */\n  private defusePrismBlast(): void {\n    let counter = 0;\n    while (this.blastCounter > 0) {\n      const index = this.blastCounter - 1;\n      setTimeout(() => {\n        this.stopAnimation(index);\n        if (index === 0) {\n          this.gameService.emitMasterObservableEvent({\n            type: ObservableTypeEnum.prismBlastDefused,\n            booleanData: true\n          } as ObservableModel);\n        }\n      }, (counter += 1) * 100);\n      this.blastCounter--;\n    }\n  }\n}\n","import { GameService } from '../service/game.service';\nimport { AssetClass } from '../asset/asset.class';\nimport { ImageLocationModel } from '../model/image/image-location.model';\nimport { ImageLoadedEnum } from '../enum/image-loaded.enum';\nimport { GameAssetEnum } from '../enum/game-assets.enum';\n\n/**\n * The Scenery Class\n */\nexport abstract class SceneryClass extends AssetClass {\n  /**\n   * Scenery Type\n   */\n  protected type: GameAssetEnum;\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the scenery\n   * @param imageType The animation number of the scenery\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number, imageType: ImageLoadedEnum) {\n    super(gameService, ctx, guid, imageType);\n  }\n\n  /**\n   * Get the type\n   */\n  public getType(): GameAssetEnum {\n    return this.type;\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.images.map((imageData: ImageLocationModel) => {\n        this.ctx.save();\n        this.ctx.translate(this.x, this.y);\n        this.ctx.scale(this.assetScale.x, this.assetScale.y);\n        if (imageData.isRotate) {\n          this.ctx.rotate(this.gameService.getRadians(imageData.rotate));\n        }\n        this.ctx.drawImage(imageData.imageSource, imageData.x, imageData.y);\n        this.ctx.restore();\n      });\n    }\n  }\n\n  /**\n   * Animate the Scenery\n   */\n  public animate(): void {\n    this.draw();\n  }\n}\n","/**\n * The Game Assets Enum\n */\nexport enum GameAssetEnum {\n  /**\n   * Empty\n   */\n  empty = 0,\n  /**\n   * Blank\n   */\n  blank = 1,\n  /**\n   * Tree\n   */\n  tree = 2,\n  /**\n   * Rock\n   */\n  rock = 3,\n  /**\n   * Water\n   */\n  water = 4,\n  /**\n   * Grass\n   */\n  grass = 5,\n  /**\n   * Slime\n   */\n  slime = 6,\n  /**\n   * Lave\n   */\n  lava = 7,\n  /**\n   * Main Gunner\n   */\n  mainGunner = 8,\n  /**\n   * Alien Base\n   */\n  alienBase = 9,\n  /**\n   * Prism Base\n   */\n  prismBase = 10,\n  /**\n   * Score\n   */\n  score = 11,\n  /**\n   * High Score\n   */\n  highScore = 12,\n  /**\n   * Level\n   */\n  level = 13,\n  /**\n   * Prism Blast Icon\n   */\n  prismBlastIcon = 14,\n  /**\n   * Scenery Bridge\n   */\n  bridge = 15,\n  /**\n   * Scenery Path\n   */\n  path = 16\n}\n","import { GameService } from '../../service/game.service';\nimport { SceneryClass } from '../scenery.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { GameAssetEnum } from '../../enum/game-assets.enum';\nimport { ImageLocationModel } from '../../model/image/image-location.model';\nimport { TimerModel } from '../../model/timer.model';\n\n/**\n * The Wave model\n */\ninterface WaveModel {\n  /**\n   * Image Location Model\n   */\n  image: ImageLocationModel;\n  /**\n   * X position\n   */\n  x: number;\n  /**\n   * y position\n   */\n  y: number;\n  /**\n   * Scale\n   */\n  scale: number;\n}\n\n/**\n * The Water Class\n */\nexport class WaterClass extends SceneryClass {\n  /**\n   * The water waves image\n   */\n  private waveImages: WaveModel[];\n\n  /**\n   * The scale ranges\n   */\n  private scaleRanges: number[] = [0.014, 0.016, 0.021];\n\n  /**\n   * The animationTimer for the waves\n   */\n  private animationTimers: number[];\n  /**\n   * The assetTimes for the waves\n   */\n  private assetTimers: TimerModel[];\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   * @param imageType The type of water\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number, imageType: ImageLoadedEnum) {\n    super(gameService, ctx, guid, imageType);\n\n    this.type = GameAssetEnum.water;\n    this.waveImages = [];\n\n    this.animationTimers = [];\n    this.animationTimers.push(Math.random() * 750 + 250);\n    this.animationTimers.push(Math.random() * 1000 + 250);\n\n    this.assetTimers = [];\n    this.assetTimers.push({ start: performance.now(), elapsed: 0 } as TimerModel);\n    this.assetTimers.push({ start: performance.now(), elapsed: 0 } as TimerModel);\n\n    this.loadWaterImages(imageType);\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Get the wave scale\n   */\n  private getWaveScale(): number {\n    return Math.round((Math.random() * 1.25 + 1) * 10) / 1000;\n  }\n\n  /**\n   * Get the wave position based on the scale\n   * @param scale The scale of the wave\n   */\n  private getWavePosition(scale: number): number {\n    let multiplier = 85;\n    if (scale > 0 && scale < this.scaleRanges[0]) {\n      multiplier = 225;\n    } else if (scale >= this.scaleRanges[0] && scale < this.scaleRanges[1]) {\n      multiplier = 150;\n    } else if (scale >= this.scaleRanges[1] && scale < this.scaleRanges[2]) {\n      multiplier = 100;\n    }\n\n    return Math.random() * multiplier + 30;\n  }\n\n  /**\n   * Configure a wave\n   * @param wave The wave to configure\n   */\n  private waveConfiguration(wave: WaveModel): WaveModel {\n    const scale = this.getWaveScale();\n    wave.x = this.getWavePosition(scale);\n    wave.y = this.getWavePosition(scale);\n    wave.scale = scale;\n\n    return wave;\n  }\n\n  /**\n   * Load the Water Images\n   *\n   * @param waterImageType The water type\n   */\n  private loadWaterImages(waterImageType: ImageLoadedEnum): void {\n    this.images.push(this.gameService.getImage(waterImageType));\n\n    for (let wave = 0; wave < 4; wave++) {\n      this.waveImages.push(\n        this.waveConfiguration({\n          image: this.gameService.getImage(ImageLoadedEnum.waterWaves)\n        } as WaveModel)\n      );\n    }\n\n    this.isImageLoaded = true;\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.images.map((imageData: ImageLocationModel) => {\n        this.ctx.save();\n        this.ctx.translate(this.x, this.y);\n        this.ctx.scale(this.assetScale.x, this.assetScale.y);\n        if (imageData.isRotate) {\n          this.ctx.rotate(this.gameService.getRadians(imageData.rotate));\n        }\n        this.ctx.drawImage(imageData.imageSource, imageData.x, imageData.y);\n        this.ctx.restore();\n      });\n\n      this.waveImages.map((waveData: WaveModel) => {\n        this.ctx.save();\n        this.ctx.translate(this.x, this.y);\n        this.ctx.scale(waveData.scale, waveData.scale);\n        this.ctx.drawImage(\n          waveData.image.imageSource, // The image\n          waveData.x, // sx Start x clipping\n          waveData.y // sy Start y clipping\n        );\n        this.ctx.restore();\n      });\n    }\n  }\n\n  /**\n   * Add the wave scale\n   * @param wave The wave\n   */\n  private addWaveScale(wave: WaveModel): number {\n    wave.scale += 0.005;\n    return Math.round(wave.scale * 1000) / 1000;\n  }\n\n  /**\n   * Calculate the X Boundary\n   * @param waveData The wave model\n   */\n  private calculateXBoundary(waveData: WaveModel): boolean {\n    return waveData.scale * waveData.x + waveData.scale * waveData.image.width < 4;\n  }\n\n  /**\n   * Calculate the Y Boundary\n   * @param waveData The wave model\n   */\n  private calculateYBoundary(waveData: WaveModel): boolean {\n    return waveData.scale * waveData.y + waveData.scale * waveData.image.height < 4;\n  }\n\n  /**\n   * Validate The Timer\n   * @param now The current animation time\n   * @param index The current timer index\n   */\n  private validateTimer(now: number, index: number): void {\n    if (this.assetTimers[index].elapsed > this.animationTimers[index]) {\n      this.assetTimers[index].start = now;\n\n      const timerIndex = index * 2;\n      const timerIndexMax = timerIndex + 2;\n\n      for (let waveIndex = timerIndex; waveIndex < timerIndexMax; waveIndex++) {\n        const waveData = this.waveImages[waveIndex];\n\n        if (this.calculateXBoundary(waveData) && this.calculateYBoundary(waveData)) {\n          waveData.scale = this.addWaveScale(waveData);\n        } else {\n          this.waveConfiguration(waveData);\n        }\n      }\n    }\n  }\n\n  /**\n   * Animate the Scenery\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimers.map((timer: TimerModel, index: number) => {\n      timer.elapsed = now - timer.start;\n      this.validateTimer(now, index);\n    });\n\n    this.draw();\n  }\n}\n","/**\n * The Asset Type Enum\n */\nexport enum AssetTypeEnum {\n  /**\n   * Bridge\n   */\n  bridge = 'bridge',\n  /**\n   * Grass\n   */\n  grass = 'grass',\n  /**\n   * Lava\n   */\n  lava = 'lava',\n  /**\n   * Path\n   */\n  path = 'path',\n  /**\n   * Rock\n   */\n  rock = 'rock',\n  /**\n   * Slime\n   */\n  slime = 'slime',\n  /**\n   * Tree\n   */\n  tree = 'tree',\n  /**\n   * Water\n   */\n  water = 'water'\n}\n","import { GameService } from '../../service/game.service';\nimport { SceneryClass } from '../scenery.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { GameAssetEnum } from '../../enum/game-assets.enum';\n\n/**\n * The Tree Class\n */\nexport class TreeClass extends SceneryClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid, ImageLoadedEnum.tree);\n\n    this.type = GameAssetEnum.tree;\n\n    this.loadTreeImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Tree Images\n   */\n  private loadTreeImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.tree, ImageLoadedEnum.treeGround];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.ctx.save();\n      this.ctx.translate(this.x, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n      this.ctx.drawImage(this.images[1].imageSource, 0, 0);\n      this.ctx.drawImage(this.images[0].imageSource, -8, -15);\n      this.ctx.drawImage(this.images[0].imageSource, 5, -10);\n      this.ctx.drawImage(this.images[0].imageSource, -4, 0);\n      this.ctx.restore();\n    }\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { SceneryClass } from '../scenery.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { ImageLocationModel } from '../../model/image/image-location.model';\nimport { GameAssetEnum } from '../../enum/game-assets.enum';\n\n/**\n * The Lava Class\n */\nexport class LavaClass extends SceneryClass {\n  /**\n   * The animation position\n   */\n  private animationXPosition: number;\n  /**\n   * The animation position\n   */\n  private animationYPosition: number;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid, ImageLoadedEnum.lava);\n\n    this.type = GameAssetEnum.lava;\n\n    this.animationXPosition = 0;\n    this.animationYPosition = 0;\n\n    this.loadLavaImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Lava Images\n   */\n  private loadLavaImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.lava];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.images.map((imageData: ImageLocationModel) => {\n        this.ctx.save();\n        this.ctx.translate(this.x, this.y);\n        this.ctx.scale(this.assetScale.x, this.assetScale.y);\n        this.ctx.drawImage(\n          imageData.imageSource, // The image\n          this.animationXPosition, // sy Start y clipping\n          this.animationYPosition, // sy Start y clipping\n          imageData.width / 2, // swidth width of clipped image\n          imageData.height / 2, // swidth width of clipped image\n          0, // x The x coordinates\n          0, // x The x coordinates\n          imageData.width / 2, // width The width of the image\n          imageData.height / 2 // height the height of the image\n        );\n        this.ctx.restore();\n      });\n    }\n  }\n\n  /**\n   * Animate the lava\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n\n    if (this.assetTimer.elapsed > 500) {\n      this.assetTimer.start = now;\n      this.animationXPosition++;\n\n      if (this.animationXPosition % 2) {\n        this.animationYPosition++;\n      }\n\n      if (this.animationXPosition >= 25) {\n        this.animationXPosition = 0;\n        this.animationYPosition = 0;\n      }\n    }\n\n    this.draw();\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { SceneryClass } from '../scenery.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { GameAssetEnum } from '../../enum/game-assets.enum';\n\n/**\n * The Rock Class\n */\nexport class RockClass extends SceneryClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid, ImageLoadedEnum.rock);\n\n    this.type = GameAssetEnum.rock;\n\n    this.loadRockImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Rock Images\n   */\n  private loadRockImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.rock, ImageLoadedEnum.rockGround];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.ctx.save();\n      this.ctx.translate(this.x, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n      this.ctx.scale(0.5, 0.5);\n      this.ctx.drawImage(this.images[0].imageSource, 19, -12);\n      this.ctx.restore();\n\n      this.ctx.save();\n      this.ctx.translate(this.x, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n      // this.ctx.drawImage(this.images[1].imageSource, 0, 0);\n      this.ctx.scale(0.75, 0.75);\n      this.ctx.drawImage(this.images[0].imageSource, 12, -5);\n      this.ctx.drawImage(this.images[0].imageSource, -4, -10);\n      this.ctx.restore();\n\n      this.ctx.save();\n\n      this.ctx.translate(this.x, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n      this.ctx.scale(0.5, 0.5);\n      this.ctx.drawImage(this.images[0].imageSource, -6, 5);\n      this.ctx.drawImage(this.images[0].imageSource, 29, 18);\n      this.ctx.restore();\n\n      this.ctx.save();\n      this.ctx.translate(this.x, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n      this.ctx.drawImage(this.images[0].imageSource, -4, 2);\n      this.ctx.restore();\n    }\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { SceneryClass } from '../scenery.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { GameAssetEnum } from '../../enum/game-assets.enum';\n\n/**\n * The Grass Class\n */\nexport class GrassClass extends SceneryClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid, ImageLoadedEnum.grass);\n\n    this.type = GameAssetEnum.grass;\n\n    this.loadGrassImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Grass Images\n   */\n  private loadGrassImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.grass];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { SceneryClass } from '../scenery.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { ImageLocationModel } from '../../model/image/image-location.model';\nimport { GameAssetEnum } from '../../enum/game-assets.enum';\n\n/**\n * The Slime Class\n */\nexport class SlimeClass extends SceneryClass {\n  /**\n   * The slime Image\n   */\n  private slimeImage: ImageLocationModel;\n  /**\n   * The slime Ground Image\n   */\n  private slimeGroundImage: ImageLocationModel;\n  /**\n   * Slime Scale\n   */\n  private slimeScale: number;\n  /**\n   * Slime Max\n   */\n  private slimeMax: number;\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid, ImageLoadedEnum.slime);\n\n    this.type = GameAssetEnum.slime;\n\n    this.slimeMax = Math.random() + 0.25;\n\n    this.slimeScale = 0;\n\n    this.loadSlimeImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Slime Images\n   */\n  private loadSlimeImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.slime, ImageLoadedEnum.slime2, ImageLoadedEnum.slimeGround];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n\n    this.slimeImage = this.images[Math.random() < 0.5 ? 0 : 1];\n    this.slimeGroundImage = this.images[2];\n  }\n\n  /**\n   * Draw the slime ground\n   */\n  private drawSlimeGround(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x, this.y);\n    this.ctx.scale(this.assetScale.x, this.assetScale.y);\n    this.ctx.drawImage(this.slimeGroundImage.imageSource, this.slimeGroundImage.x, this.slimeGroundImage.y);\n    this.ctx.restore();\n  }\n\n  /**\n   * Draw the alien tractor beam\n   */\n  private drawSlime(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x, this.y);\n    this.ctx.scale(this.assetScale.x, this.assetScale.y);\n    this.ctx.rotate(this.gameService.getRadians(this.slimeImage.rotate));\n    this.ctx.drawImage(\n      this.slimeImage.imageSource,\n      this.slimeImage.x,\n      this.slimeImage.y,\n      this.slimeImage.width,\n      this.slimeImage.height * this.slimeScale\n    );\n    this.ctx.restore();\n    if (this.slimeScale < this.slimeMax) {\n      this.slimeScale += 0.005;\n    } else {\n      this.slimeScale = 0;\n    }\n  }\n\n  /**\n   * Animate the alien\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n\n    this.drawSlimeGround();\n\n    if (this.assetTimer.elapsed > 10) {\n      this.assetTimer.start = now;\n      this.drawSlime();\n    }\n  }\n}\n","import { GameService } from './game.service';\nimport { IAsset } from '../interface/asset.interface';\nimport { WaterClass } from '../scenery/water/water.class';\nimport { AssetLocationModel } from '../model/asset-location.model';\nimport { AssetTypeEnum } from '../enum/asset-type.enum';\nimport { TreeClass } from '../scenery/tree/tree.class';\nimport { LavaClass } from '../scenery/lava/lava.class';\nimport { SceneryClass } from '../scenery/scenery.class';\nimport { RockClass } from '../scenery/rock/rock.class';\nimport { GrassClass } from '../scenery/grass/grass.class';\nimport { SlimeClass } from '../scenery/slime/slime.class';\nimport { GameAssetEnum } from '../enum/game-assets.enum';\n\n/**\n * The scenery service\n */\nexport class SceneryService {\n  /**\n   * The scenery\n   */\n  private scenery: SceneryClass[];\n  /**\n   * The current level\n   */\n  private currentLevel: number;\n\n  /**\n   * The constructor\n   */\n  constructor(private gameService: GameService, private ctx: CanvasRenderingContext2D) {\n    this.scenery = [];\n    this.currentLevel = -1;\n  }\n\n  /**\n   * Add all the scenery\n   *\n   * @param level The current level\n   */\n  public addScenery(level: number): void {\n    if (this.currentLevel !== level) {\n      this.currentLevel = level;\n\n      this.scenery.map((scenery: SceneryClass) => {\n        scenery.isDestroyed = true;\n      });\n\n      const sceneryPositions = this.gameService.getSceneryPositions();\n      sceneryPositions.map((scenery: AssetLocationModel) => {\n        if (scenery.type === AssetTypeEnum.water) {\n          this.addWater(scenery);\n        } else if (scenery.type === AssetTypeEnum.slime) {\n          this.addSlime(scenery);\n        } else if (scenery.type === AssetTypeEnum.grass) {\n          this.addGrass(scenery);\n        } else if (scenery.type === AssetTypeEnum.rock) {\n          this.addRock(scenery);\n        } else if (scenery.type === AssetTypeEnum.lava) {\n          this.addLava(scenery);\n        } else {\n          this.addTree(scenery);\n        }\n      });\n    }\n  }\n\n  /**\n   * Find any unused scenery\n   */\n  private findUnusedScenery(type: GameAssetEnum): SceneryClass {\n    return this.scenery\n      .filter((scenery: SceneryClass) => {\n        return scenery.getType() === type && scenery.isDestroyed;\n      })\n      .shift();\n  }\n\n  /**\n   * Add the water scenery\n   *\n   * @param waterLocation The water location\n   */\n  private addWater(waterLocation: AssetLocationModel): void {\n    let water = this.findUnusedScenery(GameAssetEnum.water);\n\n    if (water) {\n      water.isDestroyed = false;\n    } else {\n      water = new WaterClass(this.gameService, this.ctx, this.scenery.length, waterLocation.imageType);\n      this.scenery.push(water);\n    }\n\n    water.move({\n      x: waterLocation.position.x,\n      y: waterLocation.position.y\n    } as IAsset);\n  }\n\n  /**\n   * Add the slime scenery\n   *\n   * @param slimeLocation The slime location\n   */\n  private addSlime(slimeLocation: AssetLocationModel): void {\n    let slime = this.findUnusedScenery(GameAssetEnum.slime);\n    if (slime) {\n      slime.isDestroyed = false;\n    } else {\n      slime = new SlimeClass(this.gameService, this.ctx, this.scenery.length);\n      this.scenery.push(slime);\n    }\n\n    slime.move({\n      x: slimeLocation.position.x,\n      y: slimeLocation.position.y\n    } as IAsset);\n  }\n\n  /**\n   * Add the grass scenery\n   *\n   * @param grassLocation The grass location\n   */\n  private addGrass(grassLocation: AssetLocationModel): void {\n    let grass = this.findUnusedScenery(GameAssetEnum.grass);\n    if (grass) {\n      grass.isDestroyed = false;\n    } else {\n      grass = new GrassClass(this.gameService, this.ctx, this.scenery.length);\n      this.scenery.push(grass);\n    }\n\n    grass.move({\n      x: grassLocation.position.x,\n      y: grassLocation.position.y\n    } as IAsset);\n  }\n\n  /**\n   * Add the rock scenery\n   *\n   * @param rockLocation The rock location\n   */\n  private addRock(rockLocation: AssetLocationModel): void {\n    let rock = this.findUnusedScenery(GameAssetEnum.rock);\n    if (rock) {\n      rock.isDestroyed = false;\n    } else {\n      rock = new RockClass(this.gameService, this.ctx, this.scenery.length);\n      this.scenery.push(rock);\n    }\n\n    rock.move({\n      x: rockLocation.position.x,\n      y: rockLocation.position.y\n    } as IAsset);\n  }\n\n  /**\n   * Add the lava scenery\n   *\n   * @param lavaLocation The lava location\n   */\n  private addLava(lavaLocation: AssetLocationModel): void {\n    let lava = this.findUnusedScenery(GameAssetEnum.lava);\n    if (lava) {\n      lava.isDestroyed = false;\n    } else {\n      lava = new LavaClass(this.gameService, this.ctx, this.scenery.length);\n      this.scenery.push(lava);\n    }\n\n    lava.move({\n      x: lavaLocation.position.x,\n      y: lavaLocation.position.y\n    } as IAsset);\n  }\n\n  /**\n   * Add the tree scenery\n   * @param treeLocation The tree location\n   */\n  private addTree(treeLocation: AssetLocationModel): void {\n    let tree = this.findUnusedScenery(GameAssetEnum.tree);\n\n    if (tree) {\n      tree.isDestroyed = false;\n    } else {\n      tree = new TreeClass(this.gameService, this.ctx, this.scenery.length);\n      this.scenery.push(tree);\n    }\n\n    tree.move({\n      x: treeLocation.position.x,\n      y: treeLocation.position.y\n    } as IAsset);\n  }\n\n  /**\n   * Initialize the scenery\n   */\n  public animate(): void {\n    this.scenery.map((scenary: SceneryClass) => {\n      scenary.animate();\n    });\n  }\n}\n","import { GameService } from '../service/game.service';\nimport { AssetClass } from '../asset/asset.class';\nimport { ImageLocationModel } from '../model/image/image-location.model';\nimport { ImageLoadedEnum } from '../enum/image-loaded.enum';\n\n/**\n * The Level Class\n */\nexport abstract class LevelClass extends AssetClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the level\n   * @param imageType The animation number of the level\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number, imageType: ImageLoadedEnum) {\n    super(gameService, ctx, guid, imageType);\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    if (this.isImageLoaded) {\n      this.ctx.save();\n      this.ctx.translate(this.x, this.y);\n      this.ctx.scale(this.assetScale.x, this.assetScale.y);\n      this.images.map((imageData: ImageLocationModel) => {\n        this.ctx.drawImage(imageData.imageSource, imageData.x, imageData.y);\n      });\n      this.ctx.restore();\n    }\n  }\n\n  /**\n   * Animate the Level\n   */\n  public animate(): void {\n    this.draw();\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { LevelClass } from '../level.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\n\n/**\n * The Bridge Class\n */\nexport class BridgeClass extends LevelClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid, ImageLoadedEnum.bridge);\n\n    this.loadBridgeImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Bridge Images\n   */\n  private loadBridgeImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.bridge];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { LevelClass } from '../level.class';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\n\n/**\n * The Level One Class\n */\nexport class LevelOneClass extends LevelClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param guid The guid of the alien\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, guid: number) {\n    super(gameService, ctx, guid, ImageLoadedEnum.levelOneMap);\n\n    this.loadLevelOneImages();\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Level One Images\n   */\n  private loadLevelOneImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.levelOneMap];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { AssetScaleModel } from '../../model/asset-scale.mode';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\nimport { IAsset } from '../../interface/asset.interface';\nimport { ImageLocationModel } from '../../model/image/image-location.model';\nimport { AssetClass } from '../../asset/asset.class';\n\n/**\n * The Path Class\n */\nexport class PathClass extends AssetClass {\n  /**\n   * The alien moves for debug\n   */\n  private allMoves: IAsset[];\n\n  /**\n   * The path image\n   */\n  private pathImage: ImageLocationModel;\n  /**\n   * the path direction image\n   */\n  // private pathDirectionImage: ImageLocationModel;\n\n  /**\n   * The position counter\n   */\n  private positionCounter = 0;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D) {\n    super(gameService, ctx, 1, ImageLoadedEnum.path);\n\n    this.loadPathImages();\n\n    this.positionCounter = 0;\n\n    this.allMoves = [];\n\n    this.assetScale = {\n      x: 0.2,\n      y: 0.2\n    } as AssetScaleModel;\n  }\n\n  /**\n   * Load the Path Images\n   */\n  private loadPathImages(): void {\n    const imagesToLoad = [ImageLoadedEnum.path, ImageLoadedEnum.pathDirection];\n\n    imagesToLoad.map((key: ImageLoadedEnum) => {\n      this.images.push(this.gameService.getImage(key));\n      this.isImageLoaded = true;\n    });\n\n    this.pathImage = this.images[0];\n    // this.pathDirectionImage = this.images[1];\n  }\n\n  /**\n   * Set the path\n   *\n   * @param moves All the moves of the path\n   */\n  public setPath(moves: IAsset[]): void {\n    this.allMoves = moves;\n    this.move(this.allMoves[0]);\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected drawPath(): void {\n    if (this.isImageLoaded) {\n      this.allMoves.map((position: IAsset) => {\n        this.ctx.save();\n        this.ctx.translate(position.x, position.y);\n        this.ctx.scale(this.assetScale.x, this.assetScale.y);\n        this.ctx.drawImage(this.pathImage.imageSource, 0, 0);\n        this.ctx.restore();\n      });\n    }\n  }\n\n  /**\n   * Draw the Path Direction\n   */\n  /*\n  protected drawPathDirection(path: IAsset): void {\n    this.ctx.save();\n    this.ctx.translate(path.x, path.y);\n    this.ctx.scale(this.assetScale.x, this.assetScale.y);\n    this.ctx.drawImage(this.pathDirectionImage.imageSource, 0, 0);\n    this.ctx.restore();\n  }\n  */\n\n  /**\n   * Animate the Level\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n\n    this.drawPath();\n\n    if (this.assetTimer.elapsed > 10) {\n      this.assetTimer.start = now;\n      /*\n      const offset = 25;\n      const moves = Math.floor(this.allMoves.length / offset);\n      for (let move = 0; move < moves; move++) {\n        this.drawPathDirection(this.allMoves[(this.animationCounter + move * offset) % this.allMoves.length]);\n      }\n      */\n\n      if (this.positionCounter++ % 4) {\n        /*\n        this.animationCounter++;\n        */\n      }\n    }\n  }\n}\n","import { GameService } from './game.service';\nimport { IAsset } from '../interface/asset.interface';\nimport { LevelClass } from '../level/level.class';\nimport { BridgeClass } from '../level/bridge/bridge.class';\nimport { AssetTypeEnum } from '../enum/asset-type.enum';\nimport { AssetLocationModel } from '../model/asset-location.model';\nimport { LevelOneClass } from '../level/level-one/level-one.class';\nimport { PathClass } from '../level/path/path.class';\nimport { PathService } from './path.service';\n\n/**\n * The gameboard service\n */\nexport class GameboardService {\n  /**\n   * The level\n   */\n  private level: LevelClass[];\n\n  /**\n   * The path\n   */\n  private path: PathClass;\n\n  /**\n   * The gameboard one\n   */\n  private levelOne: LevelOneClass;\n\n  /**\n   * The pathService\n   */\n  private pathService: PathService;\n\n  /**\n   * The constructor\n   */\n  constructor(private gameService: GameService, private ctx: CanvasRenderingContext2D) {\n    this.level = [];\n\n    const gameboardPositions = this.gameService.getLevelPositions();\n\n    this.levelOne = new LevelOneClass(this.gameService, this.ctx, 1);\n    this.pathService = new PathService();\n\n    this.path = new PathClass(this.gameService, this.ctx);\n    this.buildPaths();\n\n    this.addBridge(gameboardPositions.filter((position: AssetLocationModel) => position.type === AssetTypeEnum.bridge));\n  }\n\n  /**\n   * Build Paths\n   */\n  private buildPaths(): void {\n    /* eslint-disable-next-line */\n    this.gameService.getAlienBasePositions().map(() => {});\n  }\n\n  /**\n   * Set the paths\n   */\n  private setPath(): void {\n    const allPaths: IAsset[] = [];\n    /* eslint-disable-next-line */\n    const paths = {};\n    this.gameService.getAlienBasePositions().map((basePosition: IAsset) => {\n      this.pathService\n        .findShortestPath(\n          this.gameService.convertIAssetToGameboardIAsset(basePosition),\n          this.gameService.getGameBoard()\n        )\n        .map((position: IAsset) => {\n          if (!Object.prototype.hasOwnProperty.call(paths, position.x)) {\n            paths[position.x] = {};\n          }\n          /* eslint-disable-next-line */\n          paths[position.x][position.y] = true;\n        });\n    });\n\n    Object.keys(paths).map((xKey: string) => {\n      /* eslint-disable-next-line */\n      Object.keys(paths[xKey]).map((yKey: string) => {\n        allPaths.push({\n          x: Number(xKey),\n          y: Number(yKey)\n        } as IAsset);\n      });\n    });\n\n    this.path.setPath(allPaths);\n  }\n\n  /**\n   * Animate the path\n   *\n   */\n  public initPath(): void {\n    this.setPath();\n  }\n\n  /**\n   * Add the bridge gameboard\n   */\n  private addBridge(bridgePosition: AssetLocationModel[]): void {\n    bridgePosition.map((bridgeLocation: AssetLocationModel) => {\n      const bridge = new BridgeClass(this.gameService, this.ctx, this.level.length);\n      bridge.move({\n        x: bridgeLocation.position.x,\n        y: bridgeLocation.position.y\n      } as IAsset);\n\n      this.level.push(bridge);\n    });\n  }\n\n  /**\n   * Initialize the gameboard\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.levelOne.animate();\n\n    this.path.animate(now);\n\n    this.level.map((level: LevelClass) => {\n      level.animate();\n    });\n  }\n}\n","/**\n * Main Gunner Image\n */\nexport const MAIN_GUNNER_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Prism Base Image\n */\nexport const PRISM_BASE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAAAaCAYAAAAdQLrBAAAACXBIWXMAAAsSAAALEgHS3X78AAADfElEQVRYhd1ZW0hUURRd+3avM42vSQsreikhQUFaMGFIWKBFr4+CHgZpZEQalEZK3yWp/fTSjz6LoD4qwa8kKCoIHzSfFQmhItIbZhybh3N2HBmlKbUZ59zrY8FmOHfuXXufNefsve8ZYmaYjerqmhIhxDFN07yqXAWCwWstzbd7TQ/+L+gW+dnvcDiOJ6ckKyMMBgLFlVVnS6wWTbPKkRTLN+RTxpdks+Uuzsxor6w6u1oZaQywTDDME9EsFQzzQDSrclgUpGhe7xAMXZn7XAK6ASxRRTgZZkQwCSlWff0VlZSLm5tvq+SbEJZvybmOOSGYpmmw2WyzIJI5IljFhZsoLbs0CyJRIBgR6URkn8QcRLQoLMS0l8fWwu2APRXhoB87tu9KNNyEEXfSJ6IUAJnxiM3TFEzXDazbdRKPr1fD6czAgd116Oh8BZ9PXVsSL+JeYcw8BGBQvp2YHdzR85fh+diBb9++oqfnA3p6n+Pg3nKz3U6JaW1JZg5GRPOYFZiroBDhnDy0Pbgzfq217T5WZK5FdnaOWW7/i2nnMGYWzPwdwGcAQnVguUfOofNGNQKBwPg1IQReup/gzJ6a0co5E0i4cWXmYSIaiHTZdhVz2F92GqG+9+j58O6f716/eYmsjKUwDCNKTKugpNNn5hG5RWVFBOCM9bkNeXlITU2NjGjUlm/chK69lXC1tqCgsEiSAwzQ2Kdc0t8HsSXfBSI5Zvj8w+hyv7VEMqWvRsz8k4hkCcuKhXv5mpUwkh2RzKCBoeHXzx/YcLcew6whY0U2EBagEQFNSGNozFhAwPolOThI6/HA9wKfPINzUzBECsIfW9Qx1b3trW1R482uAnwZHEB/f99//TzSNLiqWvDM7UbH267EA48RpmTOSEGQxeBrrAXB6XQi+1wNDHtsaVAWgKtd91CaX5RouHHB1FIz3rMRhUV4at2Ky8phdHdgoK939L0xFut0dyMpScfh3fvMnEYUTD/eifRsJy7W1q1KT0/bMdl9C5ctA9tTcKjhFpiTQEKHFhzBAn8Iuj8IPRCCERqBnQUWAkghgWQIpFEI21bm4KHZE4nAkn+NxlBbW9eelp5WLIf+X37V52HyxyGlhBPA0u6vqamxxOPxtlvpUzUsb5ebGht2ejzep2ZwyxMTM3ijILfkTFhFxSnZxst8oNJk46ybNh9m/AZpB+RZ6UovDwAAAABJRU5ErkJggg==';\n","/**\n * Alien One Right Image\n */\nexport const ALIEN_ONE_RIGHT_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAACw0lEQVRIid2Wz2sTQRTH3+xsdpPNj9Y0Jm2sqZqa/kBqBRWxaRVRaKF4EgTRP0AEW/Dg1aPgQRSrIohXrTcP7erBQ5uDYqFBixZrf9LG/kjapOlus79mZA+C1GY3DdKDDwYW3nffh3lv3ptBlFLYDWN2hbKbILYU0c2u9riDkn4nMd5lMTfYNzj0aqegkmp0q7PtbjVRb1dl5U2yoTozIbesYDYpYS65yeCXDweHE/8EdOfCCTH6Y/X8h6P11MMyWR/vkHgp56/+muLWvQy/7hOWCiybzGMuqQN68kBMzG6NUVLqXLoWlyNepSGdEirnpAAAmAvGG4PA+gMpHlHiz2bi0e9L5z7GwhcBoHnHoBtdHZePLUrudFNkOTwyLfzpi40vA8By2PxW3RhGmvZrOoGp7eLYgjxEb+ckA1TssNSZGqLr5Kk43L2d3/Z4uw21FTkYTVWUoJ1WB5Qr5rMFOXWtba3erx+YmLeTAiBYLAt0vaujt3oqD3lvRdZMjZVNNgQAU/qsLJDfUFsBAdWA4ew2k8G89Egc7isL5NbVOONkFbopV9mBDFS8Ppagns54nVBQo6lYSI1+WbCEmEebUPSzLBAAXPPPy6DwgmRJAYCJyF7gEem10hTtI5+htQIDRCfEYwfaQDjXZzPviu7IrI8WcKqClPPagQzEWNanKMi8FnzrcmilNiTVfEtbBljb5wKgdLQskIOSbpVnYRK5CqPNYWW11lU0wGxFpc4D6bEDbVujPMNdwcFA5tIe9lPwzNnE67EZ95h37rQHkXoeSPTw7Ar8buAC4Nxjceiva2GrFb2PzKltDlQP1VsEFrdEAaa9hyKfa46ffH+vf+AUT7VmB6UxmaLC87dDB8sGbTVzHAUMpU1A9IgX46oIz08odXXpgamlmRdvRNvUlfXcMpvZ7DMG4Op9MdFYyj//2bsOAH4BKfcd5XMuK/IAAAAASUVORK5CYII=';\n","/**\n * Alien Two Animation West One Image\n */\nexport const ALIEN_2_ANIMATION_WEST_1_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAACo0lEQVRIie2WPUwTYRjHn/c+y/VoacFSsI2YIyZak9bBdKCKDkZDIDpAlBCiMejkADo4aEzcdGF10xhD0gQTNh2MkwzgohgJDIB8BD2+inDXT3r3mGssqfR6VDRM/Je7e97/+/zu/XryEkSE/RC1L5QD0L+IKbdv+FZzD3rYG7pAhYxvktan6DTKuJ79DGn92ejLD3NW/XcFha+fOYI+fkA5LzYFFCdkOA0m3HEIyo5ghtOCE+74ReendDsANFrl2XXqtKO29+IJRw4y5t3MQQzl34OyA+iAXQrfbn6yZ9Dpq029G6d4ya3aconNZMT9MQG0eq59zyC6jg/l/95KRrsg8lK4OxIpZbNcowrads6SUKAaEIHxO54DwLG/GlHHvc4+lmPc5YKm6xNgd4u+zgfdj8oGtd5sizgOO+8nk8mP5YISdh0WZxdH3FLN40tdLb1lgQhFLcRmVjk9nn3nHMsk+SXrwmu0e8c1QEWb2Zhbn2Ur2KGinKWqd8fday2KoryYbiUeIxG/mjX12WXMSg0NTF3ID5NDX37SLN012B99s9NXcjPMqz/OunwuT/UKwlqtBula1tS3GQDG/zWzrn7fdHECJ0SfDhRBwGozEIH2ToeysHZIK2XZlhJXGYfkgsYrAa6t5/JDM09uRISQGgDwFcTVSN8FT6HRqABsmoYtXss9DS1Vx2FBzEACk5V5X6XXGSoJQsRVQgjzGyYCQBVVQf44D0aN23lwj8fsRgtAFb0d40XetOZtrxEiygAgE0JsBpBKwDwASPn2fI0r1M5YbHxZVZeVYTNQ0RohYgoRpxJqatmsg5kwo6cmX4+9XRj5dnKwP3rHzGN5OTGKaq7eMSBqAlU0JXRCn4IUyrixFR19NWw6krJA/1MHt6C9CQB+AU+U+qkj64RSAAAAAElFTkSuQmCC';\n","/**\n * Prism Blast Icon Image\n */\nexport const PRISM_BLAST_ICON_IMAGE =\n  'data:image/png;base64,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';\n","import { Component, OnInit } from '@angular/core';\nimport { MAIN_GUNNER_IMAGE } from '../images/main-gunner/main-gunner.base64';\nimport { PRISM_BASE_IMAGE } from '../images/prism-base/prism-base.base64';\nimport { ALIEN_ONE_RIGHT_IMAGE } from '../images/alien/alien-1/alien-one-right.base64';\nimport { ALIEN_2_ANIMATION_WEST_1_IMAGE } from '../images/alien/alien-2/alien-2-animate-west-1.base64';\nimport { PRISM_BLAST_ICON_IMAGE } from '../images/prism-blast-icon/prism-blast-icon.base64';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n/**\n * Display the game instruction component for display\n */\n@Component({\n  selector: 'bp-prism-game-instruction',\n  templateUrl: './game-instruction.component.html',\n  styleUrls: ['./game-instruction.component.scss']\n})\nexport class GameInstructionComponent implements OnInit {\n  /**\n   * The main gunner image\n   */\n  mainGunnerImage: string;\n\n  /**\n   * The prism base image\n   */\n  prismBaseImage: string;\n\n  /**\n   * The alien 1\n   */\n  alien1Image: string;\n\n  /**\n   * The alien 2\n   */\n  alien2Image: string;\n\n  /**\n   * The prism blast icon\n   */\n  prismBlastIcon: string;\n\n  /**\n   * The GenericDialogComponent constructor\n   *\n   * @param dialogRef The Mat Dialog Ref from DI\n   */\n  constructor(private dialogRef: MatDialogRef<GameInstructionComponent>) {}\n\n  /**\n   * Close the dialog box\n   */\n  close(): void {\n    this.dialogRef.close();\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.mainGunnerImage = MAIN_GUNNER_IMAGE;\n    this.prismBaseImage = PRISM_BASE_IMAGE;\n    this.alien1Image = ALIEN_ONE_RIGHT_IMAGE;\n    this.alien2Image = ALIEN_2_ANIMATION_WEST_1_IMAGE;\n    this.prismBlastIcon = PRISM_BLAST_ICON_IMAGE;\n  }\n}\n","<div class=\"dialog-container\">\n  <h1 mat-dialog-title name=\"title\">The \"Prism Game\" Instructions</h1>\n  <div mat-dialog-content>\n    <div class=\"instructions\">\n      The \"Prism Game\" requires you to stop the alien creep from invading your base. Use the main cannon and your\n      <i>Prism Blast</i> to stop all the aliens.\n      <div class=\"asset-container\">\n        <div class=\"asset-image-container\">\n          <img [src]=\"mainGunnerImage\" />\n        </div>\n        <div class=\"asset-description-container\">Main prism gunner.</div>\n      </div>\n\n      <div class=\"asset-container\">\n        <div class=\"asset-image-container\">\n          <img class=\"asset-prism-base-image\" [src]=\"prismBaseImage\" />\n        </div>\n        <div class=\"asset-description-container\">Prism Base. Defend your base from the Alien Creep.</div>\n      </div>\n\n      <div class=\"asset-container\">\n        <div class=\"asset-image-container\">&#60;</div>\n        <div class=\"asset-description-container\">The \"Left Arrow Key\" spins the \"Main Prism Gunner\" to the left.</div>\n      </div>\n\n      <div class=\"asset-container\">\n        <div class=\"asset-image-container\">&#62;</div>\n        <div class=\"asset-description-container\">The \"Right Arrow Key\" spins the \"Main Prism Gunner\" to the right.</div>\n      </div>\n\n      <div class=\"asset-container\">\n        <div class=\"asset-image-container space-bar\">&lt;space&gt;</div>\n        <div class=\"asset-description-container\">The \"Space Bar\" fires the \"Main Prism Gunner\".</div>\n      </div>\n\n      <div class=\"asset-container\">\n        <div class=\"asset-image-container\">\n          <img class=\"asset-alien-image\" [src]=\"alien1Image\" />\n        </div>\n        <div class=\"asset-description-container\">Alien Creep 1. Stop this alien from reaching the Prism Base.</div>\n      </div>\n\n      <div class=\"asset-container\">\n        <div class=\"asset-image-container\">\n          <img class=\"asset-alien-image\" [src]=\"alien2Image\" />\n        </div>\n        <div class=\"asset-description-container\">Alien Creep 2. Stop this alien from reaching the Prism Base.</div>\n      </div>\n\n      <div class=\"asset-container\">\n        <div class=\"asset-image-container\">\n          <img class=\"asset-alien-image\" [src]=\"prismBlastIcon\" />\n        </div>\n        <div class=\"asset-description-container\">\n          The Prism Blast. The \"p\" key will launch a prism blast against the creep.\n        </div>\n      </div>\n\n      <div class=\"good-luck\">\n        <button (click)=\"close()\" class=\"close-button\">Good Luck!</button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { ImageLoadedEnum } from '../enum/image-loaded.enum';\n\n/**\n * The water service\n */\nexport class WaterService {\n  /**\n   * The constructor\n   */\n  constructor(private gameboard: number[][]) {}\n\n  /**\n   * Determine the water value\n   * @param dx The y coordinate of the water\n   * @param dy The x coordinate of the water\n   */\n  public determineWaterValue(dy: number, dx: number): ImageLoadedEnum {\n    let value = 0;\n    value += this.determineNorthWaterValue(dy, dx);\n    value += this.determineEastWaterValue(dy, dx);\n    value += this.determineWestWaterValue(dy, dx);\n    value += this.determineSouthWaterValue(dy, dx);\n\n    return ImageLoadedEnum[`water${value}`] as ImageLoadedEnum;\n  }\n\n  /**\n   * is the asset water\n   * @param value The value of the asset\n   */\n  private isWater(value: number, waterKey: number): number {\n    return value === 4 || value === 15 ? 0 : waterKey;\n  }\n\n  /**\n   * Determine the north water value\n   * @param dy The y coordinate of the water\n   * @param dx The x coordinate of the water\n   */\n  private determineNorthWaterValue(dy: number, dx: number): number {\n    dy--;\n    if (dy < 0) {\n      return 1;\n    }\n\n    return this.isWater(this.gameboard[dy][dx], 1);\n  }\n\n  /**\n   * Determine the east water value\n   * @param dy The y coordinate of the water\n   * @param dx The x coordinate of the water\n   */\n  private determineEastWaterValue(dy: number, dx: number): number {\n    dx++;\n    if (dy < 0 || dy >= this.gameboard.length || dx >= this.gameboard[dy].length) {\n      return 2;\n    }\n\n    return this.isWater(this.gameboard[dy][dx], 2);\n  }\n\n  /**\n   * Determine the west water value\n   * @param dy The y coordinate of the water\n   * @param dx The x coordinate of the water\n   */\n  private determineWestWaterValue(dy: number, dx: number): number {\n    dx--;\n    if (dx < 0 || dy >= this.gameboard.length || dy < 0) {\n      return 8;\n    }\n\n    return this.isWater(this.gameboard[dy][dx], 8);\n  }\n\n  /**\n   * Determine the south water value\n   * @param dy The y coordinate of the water\n   * @param dx The x coordinate of the water\n   */\n  private determineSouthWaterValue(dy: number, dx: number): number {\n    dy++;\n    if (dy >= this.gameboard.length) {\n      return 4;\n    }\n\n    return this.isWater(this.gameboard[dy][dx], 4);\n  }\n}\n","/**\n * Scenery Tree Image\n */\nexport const SCENERY_TREE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAADhElEQVRIib2WTWgTURDH/2+z26RJatOY2NZqrdBiwW9PSkVQBC+igh+I4BdYFATRg1K/SsQqVqjUj4OIoOBFvViP9SBeYhUttIoaNdaaWk1ta9I2n5vtPhnZ1DVudVXowGTfy3tvfvNmZidhnHNMhAgTQgEg/suh6ppyF4AFNA74Qw/MnDEdOs34Ok3X5iwPAejQNAqA4NGAP9RhGlRdU06e79cAhaa8+iHLszc2EzoCbf9LwHfRh9VMMXTrxhSiA/rFPIuAJZ4ilDvyGwF06tbu6vf9EZST7OaAP9RstQgEhMeah7WlU7BwkhOriz2pgD9Et58J4DyAFr0ds1U3pCXXR5NJotRSZBe3L53sgk0Y87VCc6xby+lPYvY9ourZkZ1sLJviW+l16yGIpuXq3xkwC/LpQ7jvhr87d0NSUeb8N2icl/IDfcQyGYQTSZQ67I4LW2sq/gtkJNG0HCYASYk9P7tjXNA/tSASlzUvnPtdaDi+WesKxiDGmIeagDaPamspigyAMOdcMTjboW9FX1NpeO226eM5lr0RGRygKABw6dYTFA7GWIBzPmBkgHIUyyhwSiLyRcvs8UDfc8Q5T3HOAwAeAfgIIEKFBMAOgG7jZIz9FOZ4RrHpc+SUJBrOuNd2bW9w8PUCQ1BWNGAQwAutnTzSQklJXswYq8gCHZKY0gHGpLPVv+nWnVtHGWOuz7HeGSPySOEvIB1QIeix4740gHdut7v94pVLU/VAFYJhIUXkd8uus8cbGq+ePXHo9OGWhgsNzfjTzwRjLF/LW+zy7cvHrB5LcueK2psH6+pmFfc+PCJxZV7umaRDxDkvUDKzAK5eFX1ejlPTatcYgo7Xn2ANJ30E8ZxpOrs0YY3tak08WeQudLBtxev3ROT+lVJH25ZE6IPNyMHBVfOfxSxi2llcgIw6CnlY5oYgxpibwtTY1FTzdPjJ6aez487RYAKiS0I8OAxbZSE293sx9W1w7IysqgjHk4ik0oim0q3hkVgrY8Jdf3sftSv+S5x31e6mvJUCKLBWs2VtLwad6hsVRTYBKUWFY64blriC+1URVDnLM/au0YwlLQvRwU+2np5PWTOrSDlX33POuwxzxBizAJhFoKP19SXTq8pKDW7MBUFQ6Rn72iPFo33Wrpev469ePS/Tbev2t3+5PjYjUK4CoJq1mtHKyirRyEauTswfSADfADvZkLuLP+oeAAAAAElFTkSuQmCC';\n","/**\n * Water Zero Image\n */\nexport const SCENERY_WATER_ZERO_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAACXBIWXMAAAsSAAALEgHS3X78AAAARklEQVRIiWM0D1kygYGBwYCB9mABC9QiezpYdoCJDpbAwahlo5aNWjZq2ahlo5aNWjZq2ahlQ9YyUCN1AagBSXObGBgOAADQAwYYoOFO/wAAAABJRU5ErkJggg==';\n","/**\n * Level one Image\n */\nexport const LEVEL_ONE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwgAAAO3CAYAAACHmWO3AAAACXBIWXMAAAsSAAALEgHS3X78AAAR7UlEQVR4nO3awQkCURAFwVnZwDYz4/JmHgZgGF9EaQxhwaoIhndrmG2tNQAAAG+XE9wAAACchEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAACyPx+3Y2YOkwAAwN+77984uP77EgAAgBcjAADgh0AAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIAIBAAAIAIBAACIQAAAACIQAACACAQAACACAQAAiEAAAAAiEAAAgAgEAAAgAgEAAIhAAAAAIhAAAIDsM3M3BwAA8G6Dba11gjsAAIAz8GIEAABEIAAAABEIAABABAIAABCBAAAARCAAAAARCAAAQAQCAAAQgQAAAEQgAAAAEQgAAEAEAgAAEIEAAABEIAAAABEIAABABAIAABCBAAAARCAAAAARCAAAQAQCAAAQgQAAAEQgAAAAEQgAAEAEAgAAEIEAAABEIAAAABEIAABABAIAABCBAAAARCAAAAARCAAAQAQCAAAQgQAAAEQgAAAAEQgAAEAEAgAAEIEAAABEIAAAABEIAABABAIAABCBAAAARCAAAAARCAAAQAQCAAAQgQAAAEQgAAAAEQgAAEAEAgAAEIEAAAB8zMwLXpgTZ4bGmdoAAAAASUVORK5CYII=';\n","/**\n * Main Gunner Support Image\n */\nexport const MAIN_GUNNER_SUPPORT_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Lava One Image\n */\nexport const SCENERY_LAVA_ONE_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Level Bridge Image\n */\nexport const LEVEL_BRIDGE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAACXBIWXMAAAsSAAALEgHS3X78AAACX0lEQVRIibWV3U9SYRzHvxxeHMIM2gKl1CBADBEs5gBbaW3etbxr2m0X/QP9S9pdW7eu7AZiLh34MggOlDNAqB1I3gwE2nkQgoNrIed8r86ec/Z89vs837NH9OrFS0+lWn4NACOS4T1ZQ5IFj6mIztWn56VZdkdJvj5mmbVSK4a7Mwi+f7dyoxDjkwVGM4cF9zKCn3yg6OpUfD8iQSadxh3XEzCUmjfQiVSHGfciMoljhBIaUOxi9LcekUAYSoUCCuN9VCAdGJRvyHHL7iHPh4E4vtfGmzA2/pwL+9t+6Kdt+KWcGBhW1VqguTlO9O0UXGSN6vwgnlTxopOrr5UumNOzjFSUHkhnS1+hWEQqliT6LoWJIMJmwonQwQHR+bMm7xvGiNVEX2jHj82UA88fGbG2ZOqFrW9F+t6cG/lQ04ZcKm4CKBHWt6K9MCGycQG6FLZ6MbIQkXTuubZkFnTKrskaaPBybv8F6/QrOEyIsNVf5Vb/wbRWkDNjq7/Brf7E6DV83D3mHdZ5NO02ClmMVgQ/s3/Cns5PCgbr+qnZ1pwXE8CwYuCNz+oUaSJbEF8wgSOm1DtZMvYBkwY9Dre90IlP+4aoykl8i4ThXHgIhn5DCsKCwNUY8L6Fze0kF6g0E77SRDJUUaQ/k/tszGSEaehr+10bdp3KwmpVkoszGfRCWet/qlbU1R+I7/qg0Wph0OV6YY5RGrfNU0Sfpnx0ZVArI8wXotM274JL5f8Lsyv2YL43N5A+bjp1mh0WolO8aLc+lslOnqHeQI4OQF3J8AJjI6+XEEvnUaOkKGYj+APdmeqjwOaeWgAAAABJRU5ErkJggg==';\n","/**\n * Scenery Rock Image\n */\nexport const SCENERY_ROCK_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAABr0lEQVRIie2WOUsDQRTH33NnV3ezMQFj1sKIheKBkBQioqly+AFioeAJCn4ELcTaSq0EbRULC3tNJ5YWIoqVF1hEjIIQN+7OriMjQVZJNAlitX94zPCO+c0ww/CQMQb/oZp/obggF+SCXFBRkUqSh5LJZVlWoqJIIoDoAcZeKLVO8nn96CCdXviptuxPlUOaW1rmbcsCwzDgzbZfiSAIhBDxzbYhFArlLUoPM/f3c1s7O7dVg1KpVMbr9WqmaeQS8YTq8/s/Y7quA6XWx/wp+5C7vrxaWt/cWHXWl3VH8VhssSEQ0ExKoaOt/QuES1EU8PnqQVUUUOt9at/gwMrM1NRsxSBZliN8pIbx3BMOl8wTRAKSJIHq8UBjMDhdEoSIrYgYQcQoIvYX5p2iKHbzeK0k/boxfrIPqCCoTv/3V3dXGOscBgIhXYVi72+gUvoCYozxG73hhohNAMDNX9GK5YC+QTMAkEHEOj2X2wbGhhVZlv8c5AC+AsAEt8mxsf3z09Noo6YpQU0rmn9xdgaWZT0+ZrPHTn9VXdD46EjUNGlvsdju3t5aMb/bblUnAHgHHnGKzmzOLIwAAAAASUVORK5CYII=';\n","/**\n * Scenery Grass Image\n */\nexport const SCENERY_GRASS_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Missile White Image\n */\nexport const MISSILE_WHITE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAQCAYAAAA1Qw7OAAAACXBIWXMAAAsSAAALEgHS3X78AAAAXklEQVQYlWP4//8/GO9QUBXYoaDqAOMzMTAwMOxUVBNgYGA4wMDAsH+nohqIZmAEye5UVFvAwMAQDxKAgkZm7xcX9b7ffT0DSZCBkYXRFGQeyFwMwMSAA4xQCQYGBgBTIzUUE3bmJAAAAABJRU5ErkJggg==';\n","/**\n * Missile Red Image\n */\nexport const MISSILE_RED_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAQCAYAAAA1Qw7OAAAACXBIWXMAAAsSAAALEgHS3X78AAAASklEQVQYlWP4//8/GDMwMAgwMDA4wPlIghcYGBhAnAPIEguggjDcwJAb6K6HJvifk5PzC+NbeRUHBgaG/QxogAldAAZGqAQDAwMAXjwkfGOC33sAAAAASUVORK5CYII=';\n","/**\n * Missile Blue Image\n */\nexport const MISSILE_BLUE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAQCAYAAAA1Qw7OAAAACXBIWXMAAAsSAAALEgHS3X78AAAASklEQVQYlWP4//8/GDMwMAgwMDA4wPlIghcYGBhAnAPIEguggjDcwBAQUOCOJvhfSEjoJ8uLr1K+FsFLGNAAGxO6CAyMUAkGBgYAM4UmDZmTY34AAAAASUVORK5CYII=';\n","/**\n * Missile Green Image\n */\nexport const MISSILE_GREEN_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAQCAYAAAA1Qw7OAAAACXBIWXMAAAsSAAALEgHS3X78AAAASklEQVQYlWP4//8/GDMwMAgwMDA4wPlIghcYGBhAnAPIEguggjDcwBCeWByMJvhfRET0F8tbXp6YzL2uDGiAlQldBAZGqAQDAwMAq1EllTMkGcAAAAAASUVORK5CYII=';\n","/**\n * Missile Indigo Image\n */\nexport const MISSILE_INDIGO_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAQCAYAAAA1Qw7OAAAACXBIWXMAAAsSAAALEgHS3X78AAAASklEQVQYlWP4//8/GDMwMAgwMDA4wPlIghcYGBhAnAPIEguggjDcwODnk2yNJvifl5fvO8vL92KmutrxDGiAgwldBAZGqAQDAwMAS+wlR+xw7gAAAAAASUVORK5CYII=';\n","/**\n * Missile ORANGE Image\n */\nexport const MISSILE_ORANGE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAQCAYAAAA1Qw7OAAAACXBIWXMAAAsSAAALEgHS3X78AAAASklEQVQYlWP4//8/GDMwMAgwMDA4wPlIghcYGBhAnAPIEguggjDcwFBVkpOBJvhfWlr6D4uW+Kesr/UKDGiAmQldBAZGqAQDAwMAi7smUfjEry4AAAAASUVORK5CYII=';\n","/**\n * Missile Yellow Image\n */\nexport const MISSILE_YELLOW_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAQCAYAAAA1Qw7OAAAACXBIWXMAAAsSAAALEgHS3X78AAAASklEQVQYlWP4//8/GDMwMAgwMDA4wPlIghcYGBhAnAPIEguggjDcwJBZWBSLJvhfUlLyN4uoLFPa5zeSDGiAhQldBAZGqAQDAwMAqy8lk4qYs2QAAAAASUVORK5CYII= ';\n","/**\n * Missile Violet Image\n */\nexport const MISSILE_VIOLET_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAQCAYAAAA1Qw7OAAAACXBIWXMAAAsSAAALEgHS3X78AAAASklEQVQYlWP4//8/GDMwMAgwMDA4wPlIghcYGBhAnAPIEguggjDcwBAQmKyHJvifk5PzC8tHJkchx2BHBjTAzYQuAgMjVIKBgQEAVkEkdRphsUoAAAAASUVORK5CYII=';\n","/**\n * Level Path Image\n */\nexport const LEVEL_PATH_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Scenery Slime Image\n */\nexport const SCENERY_SLIME_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAAC4klEQVRIiWP4//8/WVhFRZWJgYEBhFkYGBhYoTRYrKCwmBHdTLAAKUBVVY3tzp3bigwMDHzJTbEaLEL/ZRgEfqqBTWJk+Mf0nfUZw0/m2/c3vl22Y8e2vzCjWUiyhYGBQVlZheHOnds8sVu8l39ie6WMSx1fMcNkBgYGARifiVSLfPz8fzMwMLxl+8F8m4DSA8gcki3KyUr/r6Ki+ur3MZ6ZDAyMDHjwBoosAoGIyOjvi/qWXRX4xnWUlZGFAQdGsYjkxADXyMjIl9ufGcdg+H0yhhwD46aJ9vP8kcVITgwwkJyS9nVy4fQDU07Mu8vIwYSeKNajqycr6EBgzuyZoKT78tujb6tYmdgZ0PAGdPUoFq1YtZYxMjKaj5GRUYKRkVEKhuXk5MVSUtO5t+3YxYis3t3d82NZWM78H78/fX308cLL519uvP/17/u2VN2ID+gWocQRNDOaZcyM8vnP/VsCSd3/f8x/f30R+nZzmdv2PmQDjIyMmWz69MJf/H4ezvif8aMSt9bsduveI+gWocRRRGT0n5bmhu8gS96JfYrHEmIL0QXOnTv7j4GBYTkU4wQoQdfcVA/S9OzJhu+rWf8xf2VkYGJAwxhhTyzASAwFhcVvtq7Z8kbku/gRYRZ+BiT8caXrNrItwpqPGBkZFdJLcsyN46xXIAkvTNWNSKCajxggqen1zJ4pj/5++3P+y++3DD/+fAYJk+0bBlwZtri09BsDA8PFp98vFz39fKuNhYnl2Syn1RRZRHYRRCoguwgCgcKiErbn3x7rCGixGzEy/f/HwPX36zeZT7cXum05h66WIos+f/7MxMrFrPpO89VsmBjjf4ZNDAwM/uhqyS7rQMDRyfnnkknLHwp95tvJzsjGAMJsTGwYBSoDNeJIVVVNIbIgIUDWTqkfKiSIrawjuxUEwyWl5TwMDAzmpduzD+QfSFmOSx1VUl1pWQW4VO/u6sBpGN2SN0WJgWjAwMAAAIsafRU4GG0CAAAAAElFTkSuQmCC';\n","/**\n * Level Path Direction Image\n */\nexport const LEVEL_PATH_DIRECTION_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAABK0lEQVRIie2VPUsDQRCGn70YjbgXkLOQW1EItiIWYmGtWBrsRPAP+IcEQezE3n+gYmd9lRY5QfSK5M4cfiQreyR1JghB5KYchvfZeZeZUdZaJhHeRCglqAT9bdDe7o7S2q9o7Ve19qe09sdyQ1R80Gyqm7v7aWAeCIFFoO6AUpBoMwwEHaRxvLRw9IFtX7aSK+DJmDCNomikiPRFri7YN8HhVledgCI1QX4dJxdx/NwFvkcJSH12IN2w3vYwsYy3CdSkGlJQYU3NFsJFKArPxRtZCnLWdF4q9mGYyBWPgLOtLxGQ/pEDJbf559lKdWbVU/TPW2+nQLqxvtaTCIjvkZsfYA6YBXqDbvIsS0Ug8dBlWfrl1/0O8Oq6MyZ8l0IYp6PfRnkmStB/BQE/ppJZFAR9OJkAAAAASUVORK5CYII=';\n","/**\n * Alien One Left Image\n */\nexport const ALIEN_ONE_LEFT_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAACsElEQVRIid3WT0zTUBwH8N/r67qVrrB/gAg4RDGE04gxRAUSowSWqAcvKkdvilEvxqMcPJhgYjAa8KpeJKIJMYIhXnBc5ALOiDhK/DOwKPvL1nVd22fqkUzaNIaDv+v79ftp3nvJ+yFCCOxEUTui7CRE2/noYrj7mk9TQgWK7tEAjgxPRb7+E2gg3H3WratdnKaEnJoaOixkOYXH+nLTLjVN8CgAhG1BV8JdnQ6in+Q1JeRS1VC7mKtlJI2ILT6tVOVNCgcDhJOy7rboKhNpazhg5WfLQoTAI4+qBJy6xpXcfHqtLZDWi7Kn+f0qDZCs2RJQZQUqexkY0MeahGSFXB/80rgQ9zXNCQZSNoAnqt/YAVuQCmgkUcdiVlcZs4CWb7+gQNAdW5BxiyQXI9Ssi0x8v2fbACavAY2g0RZkVAE75nE84857Az/NQjAhpuf0VyiLHfN6QWXZCm7TLMSvFbnLfV0DtqDhqcgtcS+PXCWZN4P2LW2ADJQ9yKgSphcahO/U59aa7dr+FAtapW0oSzsjakquRB5/3FQCFLAN5Sj6rcwgR4WLUcyY+mLOeSncfc8W9GBy5mmilpPcUpZXOLwttFvIgKJDry3IqCKm5wOxNTrWXCeb9TII/LahjHFOmwrPeryiWa8LtKqrfZ3Bcmumz0QJUS83vfQNFgEqt55sYGG10iNLCEdTKiroQG4CwIWtfZZmhtvH2kW/m6PyiVS1O6VALFgNRaCEDMFRhcCb+3eHppdfPTvzaTF2YnYjVz86Md1qCxrsOTQVTOePjvPV6xwmL548nxhcGnt47sfc3PFoItORlworOR0Wc0DNGheoXIalFzaFnRFtj6/jenPd649xsXeo/3RHXtViScDvRiZn+q1kWJ0ZHqcLxfPjH4Q1RMgpKzPC1vrP5joA+A2fXhvGDQg37gAAAABJRU5ErkJggg==';\n","/**\n * Scenery Tree Land Image\n */\nexport const SCENERY_TREE_LAND_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Alien Dropship Image\n */\nexport const ALIEN_DROPSHIP_1_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Tractor Beam One Image\n */\nexport const TRACTOR_BEAM_1_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAADW0lEQVRoge2ab0gTYRzHv3fzNqfOhNI2JpSwrMQ/S6EELUeilEFF+Wf6JkYvBItIi1AQFQu0yEopwVf1RpGNTCw0X1j2DyIwjMQgBQ3blMA0/FPO/YkbI6x2N2+7k0Pu8+Zg9/A8z4ff8/vuboxwu93YLJCbxkSSETGSjFiRZMSKJCNWJBmxIsmIlY2QiQIw7L0KiuCvAFbrwiCALAAvtFqVQci1QoSc3GwZrfOKwHu9U1iQcFGo9QSrTGXNAF2F5z5umRrrsx8IsaYgMnklnXR/TALY4uP2DwCG3g7jMN/rCiJzMK9lcM3x8sUXAPpXvRfm+VyX955JP1Rd50eEZgeAbrpCfK7Na2VS084x9QkTze+H7vEWCLzJ6PWlbH3Chml4uI2XQOBNJi2jyl+fMOEJhKE3DUEHAi8y+4800X1SG8QUnkB49/RSUIEQdACk57cbyAh1MCLgKxCCqkx2eWugfcJE88DtsoADISiZk7fqAu0TNkzdFXUBBULAMqaukmD7hAlPINw/1cE5EAKSufb6MNfvE654AqE68xmnQOAcAA8/ZETtVXmaVUgCCgTOlRmdTBKiT5hoTtj5cd2BwElm6ZtWqD5hwxQeY11XIPiVKa+4LHvyuEdhuRmXE68eEfp4+cITCGEHrH4DgVGmsKiYspg7NQDi83KzktrPzDQqyF/yDdj8f7hAWUmsJiqNk6yB4DMA7ra2ERZzZyKA0wB2V6aQx+VTK3I3COF2zAIBh3ZsTjuSbEQs2zifMt9nZ+ldxwCIu3LWuCct9K0cSxts8A86uU27XBOnD6ufYDxujMeMIIho+tELQEpLxYmczGibPnZxXqVccGxoeeY18p92pWzMRbmrdGWjvWxjWQOgsKhYbjF3qgBsBbAdgPpYrkGTn6gy6CIWdXK7Q6Vxz22jT18o6VAoZlcprpslwt2wh1IrdmfIMkm4XHNU+Cc3iZllmfLliCv60bgzefpqfa1zXXOtN5qv32gix8Y+y75OTYX09/cpANBhEAFABoDy/sj3V0BUFhxV76JW1Ws/G1+lphssfRPelHIBcABYAGAvKDSuREZGOvX7Up3ny0o5P5rw8j7T1d1D2GzTf+b0M9yzYCCb9Yf0pwaxIsmIFUlGrEgyYkWSESUAfgNjaCT2XRQyvQAAAABJRU5ErkJggg==';\n","/**\n * Alien Base Image\n */\nexport const ALIEN_BASE_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Water Eleven Image\n */\nexport const SCENERY_WATER_ELEVEN_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAACXBIWXMAAAsSAAALEgHS3X78AAAA90lEQVRIib2UsRGCQBBFv9cAdIAlEJJJCSZEBFKCJVgKBkQklKAZoR1oCVgBzjp7zM3qDCKz+zO4Yd/9ZfdvxnGEldy/nKxo8qxo0iXffDijIsHj0Lfljd/HAOhsD+Ag6lwB1AC6vi2HWRgXo8LJktsKPQkI4NS35UMehm1MV4JIEbu+Z0VTiy79/89+EEE77pg6DOy0soKBB8oMtvsG22rR/D7KadRSPMGYXCnC8tDZkSdHVS4kK2oIna1Njjld3jAZKQo6+zC32LMpkJ0fSws55f1CGBYm2eiT3wIW+e5ZwCATRFuTM+09g3UbExoSKxgptYMB+QtMqzfzwHbIkwAAAABJRU5ErkJggg==';\n","/**\n * Water Three Image\n */\nexport const SCENERY_WATER_THREE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAACXBIWXMAAAsSAAALEgHS3X78AAAA80lEQVRIie2WsQ3CMBBFHxF92ICMQIc72AAKXKUgbMAGZAPYgCDhKg0jUKbMCGECMgKyFAONhVCSKxBfsmTJ8r3z3dm+wXR1zoASyIo8rulRARABe6BS2qRKm1FfuOBtHgI74K60yZQ2UdcwG8YrMPOsn4C0yOPKZ0BpMwHmgItI7UvJ8IMzazuUNjfg0uTWga3xrcfRqFn76mRttCnyOHvfH3SOeOmotEmkYDTApRTM6iAJG7trJAGjqU4xGD8LK8Vg7umSgN3cRAL2fMT/1dhGE0lYKAmzv/lcDOZCKQUTPdlCEmbzltjuynZBvTWmT0H1AHxuN/fI+7ykAAAAAElFTkSuQmCC';\n","/**\n * Water One Image\n */\nexport const SCENERY_WATER_ONE_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAACXBIWXMAAAsSAAALEgHS3X78AAAAyElEQVRIie2WsQ3CQAxFHxE9bEA2gI7rMgIpuCpFVmADMkJGSMFVaWADypTZgLABIyBLd1KEEqBIOn/JkvXP0vPZjRf74+UKtEDZ1NmLGWSsWwNpBEhyBjpjXWWsi6fEedAdiKOevwJy4OGhu4l4JbCVZDlSINDcWHcDiqbO2i+dS1Npz5JVVD6XFSXhYQwWdJAw1j39KFof+PEXoesPCVzWsenbv2BBm/DbP+uTITMaMueSwhSmMIUpTGEKU5iXHDwnfynNK+je7YAmjXeX5h0AAAAASUVORK5CYII=';\n","/**\n * Water Waves Image\n */\nexport const SCENERY_WATER_WAVES_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAAB1UlEQVRIib3W3YvMYRjG8Q9ZhrDrrV0kJ2uTkFKOcOKIA84cKH+Jv0s5oYQspU2tA0W0xGK9kzH7MnrqmprGzJhmxtw1/Wbm9/zu73Pf13U/M+vq9bpRxPqRULDhP+Q8ikk8xw68wJdhgy5gpSTGCWzG92GDruAVtuMhKqg2bg5Do6lcV3Ec1/O52rxoUNDptOkyxvEtlVVaFw7SukvYiWm8CWgMj1qrMUBFExF6ATexN5uezf2p1gf6ARU3XcU23MN5LGMLLmIGi4OATmU+PmIO93EmwDv4iaVA/4pejqDpXDfiAH5E7BoO4xaO4HU2sdAuSTczlAk/ljVF3N3Z/VqG8Ea+P5kTQCptG50qOptdl9Zuiru2xsp78CnrfmVAn+TIedcJ1K6iAtif5GUufifhaiz8NZUVLZ5Gq0o7S3cDTcRRtbyvpoLlwB7kXnHVrsyPf0G0tO4cDmJfky5Fj7cReDJGmO8keK8VzTTZt5b2LGY+ijGe4XYvu+8GqgTyMhWtRfCl6DIfsfuCNIPKPHyODmXw3qeCWs6vsV4E7wVUdv8hiYrTHif5eOAr/QIa0TpHDaeV17W0rJoq7w4T1Bzl8DyUX83ZTouGARpqjOzv1mhA+ANRXoMT0XAEcgAAAABJRU5ErkJggg==';\n","/**\n * Tractor Beam Two Image\n */\nexport const TRACTOR_BEAM_2_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAADU0lEQVRoge2ab0gTYRzHv7v9s3T+wTL/VCKpRWouyT+g5BJchZBBqOmrRkpgBmoJSYFiRmUZWhKECb4ScVBqkWmgKQSaZBKWoEKJpvViYpTZnLvFxgqj3W23u7ND7vPm2O7heZ4Pz/P7PndjEovFgo0CsWFMRBkBI8oIFVFGqIgyQkWUESqijFBZDxlfAKP2K6/wL0Oa20GaY21XnpHx6jE9Vgkg1f7Req0jQqOL+RqPt5czY8tNDYA+B7d0yryyZj7G5EVmURtnrY+PAHwc3P4KQOPbMzLK9bi8yLxK1L5Ys70cMQ1AnTDUs8jluJzXTJO2sBI+4XQiVkIBtCcAGi7H5nRlio7XUtUJFfUN7ec5CwTOZFIzH9DVCR26/o58TgKBM5nktKvO6oQKWyC87L3EOhA4kYlPKrWeJxUsurAFwvDgbVaBwDoAYmN0GpYi+B0IYBkIrFYmLrHY3Tqhon5kqM7tQGAlE59W7W6d0KEb7r3sViC4LZOU2ci2TqiwBcJgRwHjQHBL5mBBE9PzhCm2QBhoPM0oEBgHQEZVja9qB/h+nHcrEBivTF7zOT7qhIr6llN3XQ4ERjLFfel81QkdurpDz10KBKcyJaUXpE8edyqLaqPTPYMNvL8tOsAWCPkH+p0GAqVMdk6uXN/WGgQg8vCRtJjyW8vXZXKjgv+5/wtJyj4RxGp0cuRr2kBwGAAN9+5L9G2t0QBOANhdctb32F7/yf8iYidkYjxmDJHYTtfIocyCwSABEAAgrKxEtycl7JkCBh6n6gLqgDchS++C1Z5Rc5TbjXKbSSSSrdaz0fr4dac6Jz0lala9c9MX1Wbyp2Q9JQwyr2WTlJgkpZbyXanvn9K1pQ2A7Jxchb6tVQXAH8A2AIEZWk1QVpKfJsLve7gCq6oQj4Ut1rZKqVHpYVmWM54tAaxYPIwmi+IHATNpMKnGAXxeIj0G3i74P5oy75u/UlVhdqUrl6P5Rk0tMTk5IZ2dmZF1d3cpAVhryAuAFIDc/iPfX3V1MetoYITcFLj2uymTfP6avuuDPaVIAKsAvgFYyco+afT29jar98eZiwrPMH404eR95mF7p2Rubv5Pn06a2wZ0Z7LOEP/UIFREGaEiyggVUUaoiDKCBMAvCBkgcE7oGJ8AAAAASUVORK5CYII=';\n","/**\n * Tractor Beam 3 Image\n */\nexport const TRACTOR_BEAM_3_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAADU0lEQVRoge2ab0gTYRzHv7v9s3T+wTL/VCKpRWouyT+g5BJchZBBqOmrRkpgBmoJSYFiRmUZWhKECb4ScVBqkWmgKQSaZBKWoEKJpvViYpTZnLvFxgqj3W23u7ND7vPm2O7heZ4Pz/P7PndjEovFgo0CsWFMRBkBI8oIFVFGqIgyQkWUESqijFBZDxlfAKP2K6/wL0Oa20GaY21XnpHx6jE9Vgkg1f7Req0jQqOL+RqPt5czY8tNDYA+B7d0yryyZj7G5EVmURtnrY+PAHwc3P4KQOPbMzLK9bi8yLxK1L5Ys70cMQ1AnTDUs8jluJzXTJO2sBI+4XQiVkIBtCcAGi7H5nRlio7XUtUJFfUN7ec5CwTOZFIzH9DVCR26/o58TgKBM5nktKvO6oQKWyC87L3EOhA4kYlPKrWeJxUsurAFwvDgbVaBwDoAYmN0GpYi+B0IYBkIrFYmLrHY3Tqhon5kqM7tQGAlE59W7W6d0KEb7r3sViC4LZOU2ci2TqiwBcJgRwHjQHBL5mBBE9PzhCm2QBhoPM0oEBgHQEZVja9qB/h+nHcrEBivTF7zOT7qhIr6llN3XQ4ERjLFfel81QkdurpDz10KBKcyJaUXpE8edyqLaqPTPYMNvL8tOsAWCPkH+p0GAqVMdk6uXN/WGgQg8vCRtJjyW8vXZXKjgv+5/wtJyj4RxGp0cuRr2kBwGAAN9+5L9G2t0QBOANhdctb32F7/yf8iYidkYjxmDJHYTtfIocyCwSABEAAgrKxEtycl7JkCBh6n6gLqgDchS++C1Z5Rc5TbjXKbSSSSrdaz0fr4dac6Jz0lala9c9MX1Wbyp2Q9JQwyr2WTlJgkpZbyXanvn9K1pQ2A7Jxchb6tVQXAH8A2AIEZWk1QVpKfJsLve7gCq6oQj4Ut1rZKqVHpYVmWM54tAaxYPIwmi+IHATNpMKnGAXxeIj0G3i74P5oy75u/UlVhdqUrl6P5Rk0tMTk5IZ2dmZF1d3cpAVhryAuAFIDc/iPfX3V1MetoYITcFLj2uymTfP6avuuDPaVIAKsAvgFYyco+afT29jar98eZiwrPMH404eR95mF7p2Rubv5Pn06a2wZ0Z7LOEP/UIFREGaEiyggVUUaoiDKCBMAvCBkgcE7oGJ8AAAAASUVORK5CYII=';\n","/**\n * Scenery Rock Land Image\n */\nexport const SCENERY_ROCK_LAND_IMAGE =\n  'data:image/png;base64,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';\n","/**\n * Scenery Slime Ground Image\n */\nexport const SCENERY_SLIME_GROUND_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAAAOUlEQVRIie3NQRUAEAAFweUJxkkCZV1UEMlJhH/bKTBl7dmBQ1hNB5+RkZGRkZGRkVFUAy4wogvwAGHTA5wcaEiZAAAAAElFTkSuQmCC';\n","/**\n * Scenery Slime Two Image\n */\nexport const SCENERY_SLIME_TWO_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAAC10lEQVRIiWP8//8/Az0AEz47unsnMMvJyYsxMjLKMjIyqkGxKiMjo7S1ta3Q7LkLGIl1Iws+yb27d7E+fvxINXqb19pfLH/F0eX3/F+5KJUhIZ4Yi/D6KDI65icDA8NH3scCC7DJ/2f8v54YS0CAYBypqqoJaRhqWAinMq76y/ifG66RgeHTIpdN/MRahNdHIBARGf1xy+rNL2W/ae+Q59JiQMIbiLWEKIuam+r/MjAwPH995PNqeV4DBhiW4zUgOtjAABR0hHBySho7AwODSfPe5j2ZeyM+Vx0pvUeMPmSMN9XBwJzZM0GJ4qLADVHXW0qfnX78vnGOJN8Q6yMifQ2KBgEYNjQ04p08dQYzTJ5qJYOqqhqHhadxALf5Xw+wAOP/v5+Fvz1f6r61hoFQhiUFBAQG/e7p7nwW4e0R8pcJng02wowgmOqIBd1dHaDU+VHkndgaHiZuBiiGZwEUH02ZNpPxwvlzTHPnzGLJmB4t8FPyoz5I/B8Tw/9vS3j2q6tr/G1uqscZ1oGBwc+eb/m5wr7EA1wscbDwwi2Cx1FKajrz3DmzpBM2+Sz4yvHbEZtBjP8ZPzMwMPSvdNtej01+yrSZrKdOnmATjWXN/c366+ck+wX9GD568vgxKBhFfrP808Ll4v+M/3mZ/jEq4pLPyUr/zQDCDAwd6HLwOPLx8//DwMDwjvexwHxcBkG8xUBaiQDThpy8VVXVuLRNtax4E/5sQC5AEXYwfFrqupXoghQZoKS6iMjo7xuXb3wo/FlsOz8LLwMGZuLbTI4lGD4CCzAy8qWWZLgphSmtxlD9nyGowqyU8qBjQKQ+zamHF8xg5We3htvx//+nNL1IsoKNAVuGnTN7JijjvXx56ekqEP/L77cMf/79ZGD4y0B2sGG1CATc3T0/NmVX77357MDm4283M5x8sfbRx98vZlNiEc7SGBasgYHBjDA2JXhwtOuoBhgYGAAH5rwL2eL8JAAAAABJRU5ErkJggg==';\n","/**\n * Alien Two Animation East One Image\n */\nexport const ALIEN_2_ANIMATION_EAST_1_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAACfUlEQVRIie2Wz2sTQRTH3+wmu8luss2PYkJNLEIJ1EsCIoVqToqIVgRBjJW20IOoBy96sxTEP0BBEAQRPHooiPUmKloDEXuoWBBia9WkTSvtxsZskk12MjIpCdFkkzVKT/1ehp238z773rx5s4gQAtshZlsoO6B/kcnI2oGxcC/wzCXkNIUwj7yEZ/oIQiKr4CiTwVOxOy9vtfNhqOoOTB6Z+7HfEgyuSlDkMHx0KdAvixWbjApQ/KREUVI9//bhzNeOQQNj4QkYct/0ywK892Ya7BSY5UqQXsnFuXnlqB6s7R4RH39MD0JFo3NlLZANmAIAMKLnpyWI7o0gcAf1IFVV7ayTC3YE8u3a/cTFSy0h9bKaLYN/DTp3fWTS2ePYt9iTMwxCCEl0nWHQ0PjJQzaPdGNlKfUqJ5YNg/KF/IzgFi8fHz1x1hAIMUwCq6VFpgDxPfMI+LXWlUnt9g9FDZPys/X4d8yYmOUGn3rlTaPi7dbp/kjIkXj9GZaWv2mKFzU94Gq3CVQPgsBzNmPWTFcf3526/+c7up3h6YPpN8MTo0hJbkK5hDOpw1zbqihay9KGIoea2XSLgebZH97bJfq6YDP3E7WDUH0ZJAAi09fMVokIIdRNq7luPhu5NnzGLPGVh7ym2unoz3Lg2dhqPSUeg1llK2P9OaO9UBdECFlHqJJ/CrMBgMPqEGopIG4a0NZezvamf3NQ7XntVEsdIWSVEDILADEASKpy4cVaLFGoX5+wFRvc0RZkRA3FQAihzhcA4AJC6Mqpi6fvYUmLADCcoS9PY7nZvKFronYfSWwfFho3m82VF0CDLE6pc+8eRW93DPof2vkL6kwA8Avc1u9DWA4vzQAAAABJRU5ErkJggg==';\n","/**\n * Alien Two Animation East Two Image\n */\nexport const ALIEN_2_ANIMATION_EAST_2_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAACyElEQVRIiWP8//8/Az0AE11sGZkW+ab4yxNrGD61eBODR5TnQVYutrhXv98xMLAzZTIKshj8ZWeU+M/OpPKfkZGb+evfo0yf/q49MXl/P7L6zXM2PiTaosjq2LofH75rrZ+6JsK0zuXCB2MOff0XfAy/2P4yXBf6yqD5jhus7h3jD4Zft78eZXzyM1pOWFr717dfVRtnrLMhyiKvOO9waROFFc8vPLJ9/feDA4OPcLPsOy6GixKfMNSCLPzC9pvh/bNvt9iufHVTVVA+8OrWixW7lu+oJMpHSd1pd/7+/Pvi+veHDHJyYtbYLIEBkE9B8rJbf59UUJUXmVc6SwVdDc7E8PrmS2cWLhZ1YQ5evJaAAEyeRYjdGKQPmxqcFrFwsGY+v/38HdM/RryWIIPv37+fwpYQwObh0iSkJJLw8f8n8Ysq+H2DDH4z/r2NSw6rj0CJQURbXJyJiiUUVpOElEQTWfnYGeS0FRjkbzAxsL/EX/CC5Hkv//rD8Pf/RVxqMFJdaFGEl4yl/FZuGX642OND9xjuP33056sEI9ag/inCwvBTnJFB6NC3qyd79+kQtAhUhEibyO8S0ZdQQ1b0cO/tTyd0X/Ph9RYUCO/+OvXElP056OIoQSeiIrYR3RIQ+PjtM/FJj5sJIw8xwFIdIyOjhF+4r6eoiZQMNkXf//zkBdGyX9gYxN9Cip7f7H8ZWH8yg2nkfAYqC3FaxMDA8GbTys3bGVYyXA5OCykSUBX2kLCWE4Qp+i8M8hAkiM/Iv0cxAFbmEQJgi/7///+HgYHhBQgzMjKmMTAwSASlhdQJqgr7IFv4mOcXhnGgApZoi5DB////vzAwMNxhYGCIY2Rk5PHPCJr6l+9PBAMDExsxBjK9//sOmzhRjRPzeFt5cH3Ex6zylwszspm//bvD8Ifhy9/nPy+cXnl0AtkWUQOMtoLIAwwMDADm8RFaUWN9PQAAAABJRU5ErkJggg==';\n","/**\n * Alien Two Animation West Two Image\n */\nexport const ALIEN_2_ANIMATION_WEST_2_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAAC7ElEQVRIie2Wb0gTYRzHf7fbee62OZ1zTlM0zgKRyMAyM9iLsigLAy3rTfjC9SJ6kRHYS19mEBRYvpEIQ1EyTCwRjV4ZkkQq2f9lTkVvMrf8s5u7bffEM5xc83bONxLUF4577vl9n+fz/P1xBEIIdkKqHaH8e6CztRU5+Imno628aqXGviVfz6unA4W4XGyz1iIzVSMyqvA34RftpB9xyBMcA7/YbKaMEOCFVgCwyvUV89RduHnptcAL7fPehUGURbetFNClBSsGEBJC8Nnohf1c0kbZMOr/8a5hMO/8jYtNJEXqOhrbauICnb5cXq23GB503mk3FTWU2ZP26FnjaiKMW5Y3eTFwxsgDDHoazWJycyqbNsVNzNX1t/Xdk/pk96iv9WUnY9TOHredGlk6QMeEYOH6bDcDocyEKr3FcDcxhflGaajuaF/MPXLZFypIM/UFQIwJkcLYX3rWYEzJnBmePPHiUa8j2hPz1PW29Dh43vdGkSDtyCOCY+znHMXQZ2TjSo0DEJqNF/S9JAj0boY15aVd2zZouyIJFRjzzdpzVytrtwVC3tCQYVzw0U7lxIvjlk8ipGelA5VEg86sr4r2KGbvw/XH+hePaE7ijmhXUNaj5VCQzc1VZxRmg0pDhusCy3742jNhe/7wWcuWoOIr1tvucn294lTWdWjC5MkpYVMiIKzFD8752ZGpEnyoQGnpCIa0xAPBWvGuqqUQrNR96Rm7inIGIvkvfI8IgjABQJbEt3q0rswsbYgzAOUnIUCHwm8sZ6oXZnQC8MinlxtAgBcMSBSzAcARBiGEXARBqNdhOgBIVmmIvdJGOK9FX9x8txZHAJL/nM388LTTPel63N3UdStSt5EZEEIcAHAEQSRioIqHaQBgI3GcPKMVXScH2ASSANcAwF5ssy4AUHIrsklIENc+drzv677fVRnLo3i8D1aXXicz6EJQgy7EqPKi4yQv2mENcWgp0PH2ydCQ0mD+/wX95SAA+A1/bC5/OWnAYgAAAABJRU5ErkJggg==';\n","/**\n * Alien Two Animation North One Image\n */\nexport const ALIEN_2_ANIMATION_NORTH_1_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAACM0lEQVRIiWP8//8/Az0AE11sGbWIEsBCjF6fJF8bTgHuCC4hbgMmFiYemPj3998ufH37pX7znI0PCZlBMNUFZAWnKDqqzOaW4ccq/+7qqy+vr7+sW927vB+fOQSDTlBOKAeXJSAgpC3Go+Sm1hdZHVtHtkWgIBNQFtIn5BhWPnYGLmHuLLItYuflLMTnGxSDWJjFybLIN8VfnkeU148oW6AgtCjCi2SLRNXF9zIyMXwhxSJeSb5JIAcSbVFUTdwaNl6OvwyMjM9JsejHxx8XuEV4VxFt0f///y99evz+988vP1c8OnaXoAXvr79m+Pry09Xf338f/ffn71dsanDmo8DskBX////f81zgY/ofHmYTth//P7D8Z4Ir/vfzL+sPAUTmZX3+q0jkK28SIxOjD7YMzMjAwCAA8vX///9/oEu6RLlNe2fGlPlZkXABInLm10fhp+w+W+ZtPoJNHmSCAdhGRpCdDB9AljIwgBPBF7NUu0+fFXkJWgICvzgZ+XFZwgCNozdIfJDvJBgYGFRADuDi53QgyhZQvHIxMpjH22JNcWCL/v//f4WBgQHkkhtQS//AJP+x/Rch1iJQ8P778S8Qlzw48P///w8y/AUUg4IRFMksP5n+fSfWIr6rvxlOrzw6AaePsAn+////y////z8wfPn7jViLmL/iV0uwmjANty5glmQHJ5h/3Ewq/5kZ4Ema8S/DF6av/+78//b3BcPPf9NPLjyMs14abQUNcosYGBgAORzL1TCxeEoAAAAASUVORK5CYII=';\n","/**\n * Alien Two Animation North Two Image\n */\nexport const ALIEN_2_ANIMATION_NORTH_2_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsSAAALEgHS3X78AAACWUlEQVRIiWP8//8/Az0AE11sGbWIEsBCjF6fJF8bTgHuCC4hbgMmFiYemPj3998ufH37pX7znI0PCZlBMNUFZAWnKDqqzOaW4ccq/+7qqy/Pzj0u3DBt7Rx85hAMOkE5oRxcloCAkLYYj7q/zuzQ4shCsi3yivMOFzOU0ifkGFY+dgZeCd5ssi3ilxbMABlCDGBmZ1UmyyLfFH95Vi42e6JsgQJQoiHJIpAl0ibyu9h52P+SYpGYpuQCkF6iLeKV4O/99fkH87///9+SYtGvr7/u8MsIziTaov///196//Ddp68vP+94fu4JQQveX3/N8PXlp6tf33y58PnFJx5sanDmo7CSyH2/vv1a9oLzfelvYVY1jp8MH5n+Mf6Dyf/7+Zf1hwAi83I8+9Ms+I07cMu8TbpYLWJgYBBgYGD48v///z/okg4RzpvfOHH4/BRnJOgrvjt/fvNf+eewb/6uY9jkQUFnwMDAYMPIyOjAyMhowMjIqMHIyCjDyMjI80OegZUYS0DgkwoL6zf+P2m45EEWvUHig3wnwcDAoMLAwGDyn5eFpOT9R5QlBKdF////v8LAwHCCgYHhBrKlTomuae90WTlIseijDhu3ebxtDTY5cOn9////HwwMDC+gmAEcbBL/OkixBAYYJdiwZlpcyfvLDx5mc3Is+sPJpEK0Rabh1gWftFnJsYfhPxsT1jIPq0XMomwqLF/Jax2xvv79HZs4zgxrFmUTzsjDbMjIxSwBFmBnlPjLziiB4ahv/+4w/GH4AmL/ff7zwumVRyeQZBG1AX0aJwwMDABYacGSzdA8UQAAAABJRU5ErkJggg==';\n","/**\n * Number 0 Image\n */\nexport const NUMBER_0_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAn0lEQVRoge3awQmDMBxG8X+kAzhK19CTjmIH6Sq99aqbRSjeIxjhNbzfOaAPDHwHU845WtE1U2IMWFMxaVimPiKegHe57HGErH/e8eOdoTKGyjlDZQzVLQvg+/5spTPja67+3LsWQDpxpvpzvTNUxlC5AKiMoXIBnOACuMoYKhcAlZ8ZlQugxAVQgXeGyhgqFwCVMVT+B0DlnaEyBikidlykKUXeDUODAAAAAElFTkSuQmCC';\n","/**\n * Number 1 Image\n */\nexport const NUMBER_1_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAuUlEQVRoge3ZMQqDMBjF8Rfp6OAhPECvYSd7FHsQr9Ktaz1Cb5QuukhByFfhEf6/UUjwQUIeSco5qxZNNUkIY6yqMJfI4Nvj3km6/u93pNf8XErHhsKsQd7BOfZS6UD2jCvCuKLOuCKMqzRMY+QUbyX1P75/SvNGG8AZp3gEDUCEMUYDcMUyc8UdwIY7gGM0ABHGGA3AFcvMFQ1gQwM4RgMQYYzRAFyxzFzxCuDK8RWgGHvGFWEsSfoCAj8mV/BBSQQAAAAASUVORK5CYII=';\n","/**\n * Number 2 Image\n */\nexport const NUMBER_2_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAn0lEQVRoge3YwQmDQBQG4bfBAizFNuLJlKKF2EpuuSadrSApQNBlx2W+AmTn8ODHlHOOVjyaKTEGrKmY9JynPiIGwFtO6/4h35t37LwZKmOonDNUxlB1td41Lq/Ll0e1mBLLw5uhMobKBUBlDJX/AKi8GSpjqFwAVMZQFVkAn/X9q9FbagGki793iDdDZQyVC4DKGCr/AVB5M1TGIEXEBoFFHS/iE66cAAAAAElFTkSuQmCC';\n","/**\n * Number 3 Image\n */\nexport const NUMBER_3_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAj0lEQVRoge3YwQmAMBAAwYukAEuxDX1pKdqgpUUQ336MuIadCrKQg+NSKSVa0TVTYgxYUzFpXOc+IgbAWx7LV8j+846TM0NlDJXrDJUxVPmrd03bUn3z+Czmjc3DmaEyhsoNgMoYKm8AVM4MlTFUbgBUxlB5A6jEG8AdY6jcAKj8ZlTeAKi8AVAZQ9VOTEQcCIEagdlpUBsAAAAASUVORK5CYII=';\n","/**\n * Number 4 Image\n */\nexport const NUMBER_4_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAvklEQVRoge3YsQ3CMBSE4TNymYINaBiANUiVjAKDwCh0tDACGzlNkFAqhF/Eyfq/OnbeSbZ0ciqlqBWbZpIQxlhTYdLxNGwlHX7d4H65PaOG6c9j1Sx5XvyomCFVrF2qmoU744owrqgzrgjjigawQANYA2Fc0QBcccxcNdcAdpLG4H1fX3zTSdpH/jTPQa6Rm/4Ld8YVYVzRAFwRxlV2miviDcAJbwBvhHFFA3DFMXNFA1gLDeADd8YVYSxJmgAo3SWCJLfXzQAAAABJRU5ErkJggg==';\n","/**\n * Number 5 Image\n */\nexport const NUMBER_5_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAqElEQVRoge3YsQmCMQAF4Rf5SwuHcADX0EpH0UFcxc5WN4sgDiCYkDPcN0DIFYFHSq01s1hNU2IM2FQxZX8+bpLsAHf52fIJefx5x5tvhsoYKucMlTFUXRbA/Xp7jujttQBK4/O+4puhMobKBUBlDJV/AFS+GSpjqFwAVMZQLaPudbicmi+PYTE9lodvhsoYKhcAlTFUI/8A1km2LQ/0D4DKGKp5YpK8AD1hHV9oe+qtAAAAAElFTkSuQmCC';\n","/**\n * Number 6 Image\n */\nexport const NUMBER_6_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAwElEQVRoge3YsQ3CQBBE0TnkkIAOSCjAbUCES4FCTClkpKYEOjoSkxAh7yJ/nebF1t6N5JVGV2qtasWmmSQOA9ZUmHK8nHeS+qUDHuP9mXul5bo5yBSYUdYO8eGdoXIYKtcZKoehcgP44gbwDw5D5QZA5d+MqrkGsJc0JM99/fDNVtIh89BuDnLLHLoW7wyVw1C5AVA5DBXqDeB0HUJ3ob0BhO7inaFyGCo3ACqHoQo3gGShd4GMBoDhnaFyGCRJb9B5Jh7+7x5EAAAAAElFTkSuQmCC';\n","/**\n * Number 7 Image\n */\nexport const NUMBER_7_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAkUlEQVRoge3WwQmAMBAF0VUswFJsQ09aijZoaRHEczwYcQzzKshAFn6TUopatNWUGANWVUwzrnMfEQPgLY91V8j+846TN0NlDJVzhsoYqu6rd03bUnx5fBbzxvLwZqiMoXIBUBlD5QIoxAWQYwyVC4DKb0blAijBBXDDm6EyhsoFQGUMlQugEBdAjjFU9cRExAGJ1xqNX2cSVQAAAABJRU5ErkJggg==';\n","/**\n * Number 8 Image\n */\nexport const NUMBER_8_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAxUlEQVRoge3YsQkCQRSE4Vm50MAOTCzg2tDIK0UL0VLMLtUS7GhFOEFEQXxPGJb/y/fuDezC8EqtVa2YNZOEMMaaClPWu+1S0hD4xjVxnpBuCnJ0GSiCN+OKMK6oM64I4+reABaS+l/nGw+nS1a2zX4IzdJNh8+BGUrg7KvQLLwZV4RxRQNwRRhXGTuAd77ZC8wlrTJ/yg7AFWFc0QBccc1csQN4xg7gM3YAD4RxRQNwxTVzRQP4o9BeIKMB2ODNuCKMJUk322gml+BaxLYAAAAASUVORK5CYII=';\n","/**\n * Number 9 Image\n */\nexport const NUMBER_9_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAxUlEQVRoge3YsQlCQRCE4Tm50MAOTCzANjTylaKFaClmplqCHZ0ITxExEHeF4fi//N7bgTsYtrTW1ItJN0kIY6yrMGW13cwlDYFvXBPnCaljkIPLQBG8GVeEcUWdcUUYV/cGMJO0/HW+0/54ycq23g2hWep4+ByYoQTOvgvNwptxRRhXNABXhHGVsQP45Ju9wFTSIvOn7ABcEcYVDcAV18xVV2GqwQxPGTsAJ+wAHgjjigbgimvmigbwLzSAF7wZV4SxJOkGeSshg7UyVagAAAAASUVORK5CYII=';\n","/**\n * Letter L Image\n */\nexport const LETTER_L_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAsElEQVRoge3WwQmDMACF4RdxADfoCq7Rmx3FRXSU3ry2I3SjeLEg4kGMwUf4vwFCHiTwhxijSlEVs4QxxooaE55910hqzx4wDe/vtVc6r16GfBLOCHeP+OPPuGKMK3LGFWNcUQAbFEAOjHFFAbjimbmiANYogEz4M64Y44oCcMUYVxTABgWQA2NcUQCueGauiiuAh6RXwhm/C++z62hl1MuQMfeFEh2qDP6MK8ZYkjQDYmwo6lTL/wEAAAAASUVORK5CYII=';\n","/**\n * Letter P Image\n */\nexport const LETTER_P_IMAGE =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAACXBIWXMAAAsSAAALEgHS3X78AAAAv0lEQVRoge3YsQ3CMBSE4TPKAGzACqxBKjIKDAKjpKOFEdjIKFIqRGEl+HFY/1cnfr7C8skp56xWbJpJQhhjTYVJh9NxJ2lYscbzi/v56HYZHyXfdXOQa+0NrZRKfufMuCKMK+qMK8K4mhrAVtJ+6f5Kbuf+PFSfobkBTEPuSwcV3s4RMzgztgjjigbgijCueAP4ARrAXyOMKxqAK8K4CnkDiBL1BhCCM+OKMK5oAK4I44oG8IYGUANhXLUTRtIL3xouy1aEpUsAAAAASUVORK5CYII=';\n","/**\n * Alien Dropship 2 Image\n */\nexport const ALIEN_DROPSHIP_2_IMAGE =\n  'data:image/png;base64,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';\n","import { Injectable } from '@angular/core';\nimport { ImageLoadedEnum } from '../enum/image-loaded.enum';\nimport { SCENERY_TREE_IMAGE } from '../images/scenery/tree/tree.base64';\nimport { ImageDataModel } from '../model/image/image-data.model';\nimport { ImageLocationModel } from '../model/image/image-location.model';\nimport { SCENERY_WATER_ZERO_IMAGE } from '../images/scenery/water/water-zero.base64';\nimport { LEVEL_ONE_IMAGE } from '../images/levels/level-one.base64';\nimport { MAIN_GUNNER_SUPPORT_IMAGE } from '../images/main-gunner/main-gunner-support.base64';\nimport { MAIN_GUNNER_IMAGE } from '../images/main-gunner/main-gunner.base64';\nimport { SCENERY_LAVA_ONE_IMAGE } from '../images/scenery/lava/lava-one.base64';\nimport { LEVEL_BRIDGE_IMAGE } from '../images/levels/bridge.base64';\nimport { SCENERY_ROCK_IMAGE } from '../images/scenery/rock/rock.base64';\nimport { SCENERY_GRASS_IMAGE } from '../images/scenery/grass.base64';\nimport { MISSILE_WHITE_IMAGE } from '../images/main-gunner/missiles/missile.base64';\nimport { MISSILE_RED_IMAGE } from '../images/main-gunner/missiles/missile-red.base64';\nimport { MISSILE_BLUE_IMAGE } from '../images/main-gunner/missiles/missile-blue.base64';\nimport { MISSILE_GREEN_IMAGE } from '../images/main-gunner/missiles/missile-green.base64';\nimport { MISSILE_INDIGO_IMAGE } from '../images/main-gunner/missiles/missile-indigo.base64';\nimport { MISSILE_ORANGE_IMAGE } from '../images/main-gunner/missiles/missile-orange.base64';\nimport { MISSILE_YELLOW_IMAGE } from '../images/main-gunner/missiles/missile-yellow.base64';\nimport { MISSILE_VIOLET_IMAGE } from '../images/main-gunner/missiles/missile-violet.base64';\nimport { LEVEL_PATH_IMAGE } from '../images/levels/path.base64';\nimport { SCENERY_SLIME_IMAGE } from '../images/scenery/slime/slime.base64';\nimport { LEVEL_PATH_DIRECTION_IMAGE } from '../images/levels/path-direction.base64';\nimport { ALIEN_ONE_RIGHT_IMAGE } from '../images/alien/alien-1/alien-one-right.base64';\nimport { ALIEN_ONE_LEFT_IMAGE } from '../images/alien/alien-1/alien-one-left.base64';\nimport { SCENERY_TREE_LAND_IMAGE } from '../images/scenery/tree/tree-land.base64';\nimport { Subject } from 'rxjs';\nimport { ALIEN_DROPSHIP_1_IMAGE } from '../images/alien/alien-dropship/alien-dropship-1.base64';\nimport { TRACTOR_BEAM_1_IMAGE } from '../images/alien/alien-dropship/tractor-beam/tractor-beam-1.base64';\nimport { ALIEN_BASE_IMAGE } from '../images/alien/alien-base.base64';\nimport { PRISM_BASE_IMAGE } from '../images/prism-base/prism-base.base64';\nimport { SCENERY_WATER_ELEVEN_IMAGE } from '../images/scenery/water/water-eleven.base64';\nimport { SCENERY_WATER_THREE_IMAGE } from '../images/scenery/water/water-three.base64';\nimport { SCENERY_WATER_ONE_IMAGE } from '../images/scenery/water/water-one.base64';\nimport { SCENERY_WATER_WAVES_IMAGE } from '../images/scenery/water/water-waves.base64';\nimport { TRACTOR_BEAM_2_IMAGE } from '../images/alien/alien-dropship/tractor-beam/tractor-beam-2.base64';\nimport { TRACTOR_BEAM_3_IMAGE } from '../images/alien/alien-dropship/tractor-beam/tractor-beam-3.base64';\nimport { SCENERY_ROCK_LAND_IMAGE } from '../images/scenery/rock/rock-land.base64';\nimport { SCENERY_SLIME_GROUND_IMAGE } from '../images/scenery/slime/slime-ground.base64';\nimport { SCENERY_SLIME_TWO_IMAGE } from '../images/scenery/slime/slime-two.base64';\nimport { ALIEN_2_ANIMATION_EAST_1_IMAGE } from '../images/alien/alien-2/alien-2-animate-east-1.base64';\nimport { ALIEN_2_ANIMATION_EAST_2_IMAGE } from '../images/alien/alien-2/alien-2-animate-east-2.base64';\nimport { ALIEN_2_ANIMATION_WEST_1_IMAGE } from '../images/alien/alien-2/alien-2-animate-west-1.base64';\nimport { ALIEN_2_ANIMATION_WEST_2_IMAGE } from '../images/alien/alien-2/alien-2-animate-west-2.base64';\nimport { ALIEN_2_ANIMATION_NORTH_1_IMAGE } from '../images/alien/alien-2/alien-2-animate-north-1.base64';\nimport { ALIEN_2_ANIMATION_NORTH_2_IMAGE } from '../images/alien/alien-2/alien-2-animate-north-2.base64';\nimport { NUMBER_0_IMAGE } from '../images/number/number-0.base64';\nimport { NUMBER_1_IMAGE } from '../images/number/number-1.base64';\nimport { NUMBER_2_IMAGE } from '../images/number/number-2.base64';\nimport { NUMBER_3_IMAGE } from '../images/number/number-3.base64';\nimport { NUMBER_4_IMAGE } from '../images/number/number-4.base64';\nimport { NUMBER_5_IMAGE } from '../images/number/number-5.base64';\nimport { NUMBER_6_IMAGE } from '../images/number/number-6.base64';\nimport { NUMBER_7_IMAGE } from '../images/number/number-7.base64';\nimport { NUMBER_8_IMAGE } from '../images/number/number-8.base64';\nimport { NUMBER_9_IMAGE } from '../images/number/number-9.base64';\nimport { LETTER_L_IMAGE } from '../images/letter/letter-l.base64';\nimport { LETTER_P_IMAGE } from '../images/letter/letter-p.base64';\nimport { PRISM_BLAST_ICON_IMAGE } from '../images/prism-blast-icon/prism-blast-icon.base64';\nimport { ALIEN_DROPSHIP_2_IMAGE } from '../images/alien/alien-dropship/alien-dropship-2.base64';\n\n/**\n * The image service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ImageService {\n  /**\n   *  Images Loaded Observable Subject$\n   */\n  private imagesLoadedSubject$ = new Subject<boolean>();\n\n  /**\n   * imageLoaded\n   */\n  private imagesLoaded: object;\n\n  /**\n   * The images\n   */\n  protected images: object;\n\n  /**\n   * The constructor\n   */\n  constructor() {\n    this.resetLoadedImages();\n\n    this.images = {};\n  }\n\n  /**\n   * Reset the loaded Images\n   */\n  resetLoadedImages(): void {\n    this.imagesLoaded = {\n      alienBase: false,\n      alienDropship1: false,\n      alienDropship2: false,\n      alienOneRight: false,\n      alienOneLeft: false,\n      alien2AnimationEast1: false,\n      alien2AnimationEast2: false,\n      alien2AnimationNorth1: false,\n      alien2AnimationNorth2: false,\n      alien2AnimationWest1: false,\n      alien2AnimationWest2: false,\n      bridge: false,\n      grass: false,\n      lava: false,\n      levelOneMap: false,\n      mainGunner: false,\n      missileBlue: false,\n      missileGreen: false,\n      missileIndigo: false,\n      missileOrange: false,\n      missileRed: false,\n      missileViolet: false,\n      missileYellow: false,\n      missileWhite: false,\n      number0: false,\n      number1: false,\n      number2: false,\n      number3: false,\n      number4: false,\n      number5: false,\n      number6: false,\n      number7: false,\n      number8: false,\n      number9: false,\n      letterl: false,\n      letterp: false,\n      path: false,\n      pathDirection: false,\n      prismBase: false,\n      prismBlastIcon: false,\n      rock: false,\n      rockGround: false,\n      slime: false,\n      slime2: false,\n      slimeGround: false,\n      tractorBeam1: false,\n      tractorBeam2: false,\n      tractorBeam3: false,\n      tree: false,\n      treeGround: false,\n      water0: false,\n      water1: false,\n      water2: false,\n      water3: false,\n      water4: false,\n      water5: false,\n      water6: false,\n      water7: false,\n      water8: false,\n      water9: false,\n      water10: false,\n      water11: false,\n      water12: false,\n      water13: false,\n      water14: false,\n      water15: false,\n      waterWaves: false\n    };\n  }\n\n  /**\n   * Get image\n   * @param imageType The image type to get\n   */\n  public getImage(imageType: ImageLoadedEnum): ImageLocationModel {\n    return this.images[imageType] as ImageLocationModel;\n  }\n\n  /**\n   * Set all the images loaded\n   * @param imageType The image type\n   */\n  private setImageLoaded(imageType: ImageLoadedEnum): void {\n    this.imagesLoaded[imageType] = true;\n\n    let allLoaded = true;\n    Object.keys(this.imagesLoaded).map((key: string) => {\n      allLoaded = allLoaded && this.imagesLoaded[key] as boolean;\n    });\n\n    if (allLoaded) {\n      this.imagesLoadedSubject$.next(true);\n    }\n  }\n\n  /**\n   * Load the game images\n   */\n  public loadImages(): Subject<boolean> {\n    this.resetLoadedImages();\n    this.loadAlienImages();\n    this.loadLevelImages();\n    this.loadLetterImages();\n    this.loadMissileImages();\n    this.loadNumberImages();\n    this.loadPrismBaseImages();\n    this.loadPrismBlastImages();\n    this.loadSceneryImages();\n    this.loadSceneryWaterImages();\n\n    return this.imagesLoadedSubject$;\n  }\n\n  /**\n   * Load the game images\n   */\n  private loadImageGroups(imagesToLoad: ImageDataModel[]): Subject<boolean> {\n    imagesToLoad.map((imageData: ImageDataModel) => {\n      const baseImage = new Image();\n      baseImage.src = imageData.image;\n      baseImage.onload = () => {\n        this.setImageLoaded(imageData.key);\n      };\n      this.images[imageData.key] = {\n        x: imageData.x,\n        y: imageData.y,\n        height: baseImage.height,\n        width: baseImage.width,\n        imageSource: baseImage,\n        isRotate: imageData.isRotate,\n        rotate: imageData.rotate\n      } as ImageLocationModel;\n    });\n\n    return this.imagesLoadedSubject$;\n  }\n  /**\n   * Load the alien images\n   */\n  private loadAlienImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.alienBase,\n        image: ALIEN_BASE_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alienDropship1,\n        image: ALIEN_DROPSHIP_1_IMAGE,\n        x: -12.5,\n        y: -5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alienDropship2,\n        image: ALIEN_DROPSHIP_2_IMAGE,\n        x: -12.5,\n        y: -5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alienOneLeft,\n        image: ALIEN_ONE_LEFT_IMAGE,\n        x: -12.5,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alienOneRight,\n        image: ALIEN_ONE_RIGHT_IMAGE,\n        x: -12.5,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alien2AnimationEast1,\n        image: ALIEN_2_ANIMATION_EAST_1_IMAGE,\n        x: -12.5,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alien2AnimationEast2,\n        image: ALIEN_2_ANIMATION_EAST_2_IMAGE,\n        x: -12.5,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alien2AnimationNorth1,\n        image: ALIEN_2_ANIMATION_NORTH_1_IMAGE,\n        x: -12.5,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alien2AnimationNorth2,\n        image: ALIEN_2_ANIMATION_NORTH_2_IMAGE,\n        x: -12.5,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alien2AnimationWest1,\n        image: ALIEN_2_ANIMATION_WEST_1_IMAGE,\n        x: -12.5,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.alien2AnimationWest2,\n        image: ALIEN_2_ANIMATION_WEST_2_IMAGE,\n        x: -12.5,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.tractorBeam1,\n        image: TRACTOR_BEAM_1_IMAGE,\n        x: -12.5,\n        y: -10,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.tractorBeam2,\n        image: TRACTOR_BEAM_2_IMAGE,\n        x: -12.5,\n        y: -10,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.tractorBeam3,\n        image: TRACTOR_BEAM_3_IMAGE,\n        x: -12.5,\n        y: -10,\n        isRotate: false\n      } as ImageDataModel\n    ];\n\n    this.loadImageGroups(imagesToLoad);\n  }\n\n  /**\n   * Load the scenery images\n   */\n  private loadSceneryImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.bridge,\n        image: LEVEL_BRIDGE_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.grass,\n        image: SCENERY_GRASS_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.lava,\n        image: SCENERY_LAVA_ONE_IMAGE,\n        x: 0,\n        y: 0,\n        width: 25,\n        height: 25,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.rock,\n        image: SCENERY_ROCK_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.rockGround,\n        image: SCENERY_ROCK_LAND_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.slime,\n        image: SCENERY_SLIME_IMAGE,\n        x: -27,\n        y: -20,\n        isRotate: true,\n        rotate: 180\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.slime2,\n        image: SCENERY_SLIME_TWO_IMAGE,\n        x: -26,\n        y: -20,\n        isRotate: true,\n        rotate: 180\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.slimeGround,\n        image: SCENERY_SLIME_GROUND_IMAGE,\n        x: -1,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.tree,\n        image: SCENERY_TREE_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.treeGround,\n        image: SCENERY_TREE_LAND_IMAGE,\n        x: -1,\n        y: -1,\n        isRotate: false\n      } as ImageDataModel\n    ];\n\n    this.loadImageGroups(imagesToLoad);\n  }\n  /**\n   * Load the scenery water images\n   */\n  private loadSceneryWaterImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.water0,\n        image: SCENERY_WATER_ZERO_IMAGE,\n        x: -0.5,\n        y: -0.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water1,\n        image: SCENERY_WATER_ONE_IMAGE,\n        x: -0.5,\n        y: -0.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water2,\n        image: SCENERY_WATER_ONE_IMAGE,\n        x: -0.5,\n        y: -25.5,\n        isRotate: true,\n        rotate: 90\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water3,\n        image: SCENERY_WATER_THREE_IMAGE,\n        x: -0.5,\n        y: -0.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water4,\n        image: SCENERY_WATER_ONE_IMAGE,\n        x: -25.5,\n        y: -25.5,\n        isRotate: true,\n        rotate: 180\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water5,\n        image: SCENERY_WATER_ZERO_IMAGE,\n        x: -0.5,\n        y: -0.5,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water6,\n        image: SCENERY_WATER_THREE_IMAGE,\n        x: -0.5,\n        y: -25.5,\n        isRotate: true,\n        rotate: 90\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water7,\n        image: SCENERY_WATER_ELEVEN_IMAGE,\n        x: -0.5,\n        y: -25.5,\n        isRotate: true,\n        rotate: 90\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water8,\n        image: SCENERY_WATER_ONE_IMAGE,\n        x: -25.5,\n        y: -0.5,\n        isRotate: true,\n        rotate: -90\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water9,\n        image: SCENERY_WATER_THREE_IMAGE,\n        x: -26,\n        y: 0,\n        isRotate: true,\n        rotate: -90\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water10,\n        image: SCENERY_WATER_ZERO_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water11,\n        image: SCENERY_WATER_ELEVEN_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water12,\n        image: SCENERY_WATER_THREE_IMAGE,\n        x: -26,\n        y: -26,\n        isRotate: true,\n        rotate: 180\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water13,\n        image: SCENERY_WATER_ELEVEN_IMAGE,\n        x: -25.5,\n        y: -0.5,\n        isRotate: true,\n        rotate: -90\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water14,\n        image: SCENERY_WATER_ELEVEN_IMAGE,\n        x: -25.5,\n        y: -25.5,\n        isRotate: true,\n        rotate: 180\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.water15,\n        image: SCENERY_WATER_ZERO_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.waterWaves,\n        image: SCENERY_WATER_WAVES_IMAGE,\n        x: -0.5,\n        y: -0.5,\n        isRotate: false\n      } as ImageDataModel\n    ];\n\n    this.loadImageGroups(imagesToLoad);\n  }\n\n  /**\n   * Load the missile images\n   */\n  private loadMissileImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.missileBlue,\n        image: MISSILE_BLUE_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: true\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.missileGreen,\n        image: MISSILE_GREEN_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: true\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.missileIndigo,\n        image: MISSILE_INDIGO_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: true\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.missileOrange,\n        image: MISSILE_ORANGE_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: true\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.missileRed,\n        image: MISSILE_RED_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: true\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.missileViolet,\n        image: MISSILE_VIOLET_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: true\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.missileWhite,\n        image: MISSILE_WHITE_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: true\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.missileYellow,\n        image: MISSILE_YELLOW_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: true\n      } as ImageDataModel\n    ];\n\n    this.loadImageGroups(imagesToLoad);\n  }\n\n  /**\n   * Load the prism bases\n   */\n  private loadPrismBaseImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.mainGunner,\n        image: MAIN_GUNNER_IMAGE,\n        x: -27,\n        y: -27,\n        isRotate: true\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.mainGunnerSupport,\n        image: MAIN_GUNNER_SUPPORT_IMAGE,\n        x: -36,\n        y: -50,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.prismBase,\n        image: PRISM_BASE_IMAGE,\n        x: -25,\n        y: -12.5,\n        isRotate: false\n      } as ImageDataModel\n    ];\n\n    this.loadImageGroups(imagesToLoad);\n  }\n\n  /**\n   * Load the prism blast icon\n   */\n  private loadPrismBlastImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.prismBlastIcon,\n        image: PRISM_BLAST_ICON_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel\n    ];\n\n    this.loadImageGroups(imagesToLoad);\n  }\n\n  /**\n   * Load the level images\n   */\n  private loadLevelImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.levelOneMap,\n        image: LEVEL_ONE_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.path,\n        image: LEVEL_PATH_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.pathDirection,\n        image: LEVEL_PATH_DIRECTION_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel\n    ];\n\n    this.loadImageGroups(imagesToLoad);\n  }\n\n  /**\n   * Load the letter images\n   */\n  private loadLetterImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.letterl,\n        image: LETTER_L_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.letterp,\n        image: LETTER_P_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel\n    ];\n    this.loadImageGroups(imagesToLoad);\n  }\n\n  /**\n   * Load the number images\n   */\n  private loadNumberImages(): void {\n    const imagesToLoad = [\n      {\n        key: ImageLoadedEnum.number0,\n        image: NUMBER_0_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number1,\n        image: NUMBER_1_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number2,\n        image: NUMBER_2_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number3,\n        image: NUMBER_3_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number4,\n        image: NUMBER_4_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number5,\n        image: NUMBER_5_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number6,\n        image: NUMBER_6_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number7,\n        image: NUMBER_7_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number8,\n        image: NUMBER_8_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel,\n      {\n        key: ImageLoadedEnum.number9,\n        image: NUMBER_9_IMAGE,\n        x: 0,\n        y: 0,\n        isRotate: false\n      } as ImageDataModel\n    ];\n    this.loadImageGroups(imagesToLoad);\n  }\n}\n","import { Injectable, ElementRef } from '@angular/core';\nimport { IAsset } from '../interface/asset.interface';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { ObservableModel } from '../model/observable.model';\nimport { BoundaryModel } from '../model/boundary.model';\nimport { AlienPathEnum } from '../enum/alien-path.enum';\nimport { BLOCK_SIZE } from '../gameboard/gameboard-constants';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { BoardModel } from '../model/board.model';\nimport { TextTypeEnum } from '../enum/text-type.enum';\nimport { GameAssetEnum } from '../enum/game-assets.enum';\nimport { TextLocationModel } from '../model/text-location.model';\nimport { PrismBlastCoordinatesModel } from '../model/prism-blast-coordinates.model';\nimport { AssetLocationModel } from '../model/asset-location.model';\nimport { AssetTypeEnum } from '../enum/asset-type.enum';\nimport { ImageLoadedEnum } from '../enum/image-loaded.enum';\nimport { ImageLocationModel } from '../model/image/image-location.model';\nimport { ImageService } from './image.service';\nimport { WaterService } from './water.service';\nimport { PathService } from './path.service';\n\n/**\n * The game service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GameService {\n  /**\n   *  Master Observable Subject$\n   */\n  private masterSubject$ = new Subject<ObservableModel>();\n\n  /**\n   * The base position\n   */\n  private basePosition: IAsset;\n\n  /**\n   * The gunner position\n   */\n  private gunnerPosition: IAsset;\n\n  /**\n   * The prism blast icon position\n   */\n  private prismBlastIconPosition: IAsset;\n\n  /**\n   * The water positions\n   */\n  private sceneryPositions: AssetLocationModel[];\n\n  /**\n   * The level positions\n   */\n  private levelPositions: AssetLocationModel[];\n\n  /**\n   * The alien base positions\n   */\n  private alienBasePositions: IAsset[];\n\n  /**\n   * The game board\n   */\n  private gameBoard: AlienPathEnum[][];\n\n  /**\n   * The text positions\n   */\n  private textPositions: TextLocationModel[];\n\n  /**\n   * The board\n   */\n  private boardsize: BoardModel;\n\n  /**\n   * The add extra scenery\n   */\n  private addExtraScenery: boolean;\n\n  /**\n   * The constructor\n   * @param imageService The imageService from DI\n   */\n  constructor(private imageService: ImageService) {\n    this.addExtraScenery = false;\n    this.alienBasePositions = [];\n    this.textPositions = [];\n    this.sceneryPositions = [];\n    this.levelPositions = [];\n  }\n\n  /**\n   * Initialize the board\n   *\n   * @param canvas The canvas element\n   * @param rows The number of rows\n   * @param columns The number of Columns\n   * @param blockSize The block size\n   * @param gameboard The gameboard\n   *\n   *\n   */\n  initBoard(\n    canvas: ElementRef<HTMLCanvasElement>,\n    rows: number,\n    columns: number,\n    blockSize: number,\n    gameboard: number[][],\n    isAddExtraScenery = false\n  ): CanvasRenderingContext2D {\n    this.addExtraScenery = isAddExtraScenery;\n    const ctx = canvas.nativeElement.getContext('2d');\n\n    // Calculate size of canvas from constants.\n    ctx.canvas.width = columns * blockSize + 1;\n    ctx.canvas.height = rows * blockSize + 1;\n\n    // Scale so we don't need to give size on every draw.\n    ctx.scale(blockSize, blockSize);\n\n    this.boardsize = {\n      x: 0,\n      y: 0,\n      height: rows,\n      width: columns\n    } as BoardModel;\n\n    this.setGameBoard(gameboard);\n\n    this.imageService.loadImages().subscribe((event: boolean) => {\n      if (event === true) {\n        this.emitMasterObservableEvent({\n          type: ObservableTypeEnum.imagesLoaded,\n          booleanData: true\n        } as ObservableModel);\n      }\n    });\n\n    return ctx;\n  }\n\n  /**\n   * set the board\n   *\n   * @param gameboard The gameboard\n   *\n   *\n   * The Game board\n   * 1 - Blank\n   * 2 - Trees\n   * 3 - Rocks\n   * 4 - Water\n   * 5 - Grass\n   * 6 - Slime\n   * 7 - Lava\n   * 8 - Main Gunner\n   * 9 - Alien Base\n   * 10 - Prism Base\n   * 11 - Score\n   * 12 - High Score\n   * 13 - Level\n   * 14 - PrismBlastIcon\n   * 15 - Bridge\n   * 16 - Path\n   */\n  setGameBoard(inputGameboard: number[][]): void {\n    const gameboard = JSON.parse(JSON.stringify(inputGameboard)) as number[][];\n    /* eslint-disable-next-line */\n    this.gameBoard = Array.from({ length: gameboard.length }, () =>\n    /* eslint-disable-next-line */\n      Array(gameboard[0].length).fill(AlienPathEnum.empty)\n    );\n\n    this.alienBasePositions.length = 0;\n    this.sceneryPositions.length = 0;\n    this.levelPositions.length = 0;\n    this.textPositions.length = 0;\n\n    gameboard.map((row: number[], dy: number) => {\n      row.map((value: number, dx: number) => {\n        if (value === GameAssetEnum.prismBase) {\n          this.basePosition = {\n            x: dx * BLOCK_SIZE,\n            y: dy * BLOCK_SIZE\n          } as IAsset;\n          this.gameBoard[dy][dx] = AlienPathEnum.goal;\n        } else if (\n          value === GameAssetEnum.slime ||\n          value === GameAssetEnum.grass ||\n          value === GameAssetEnum.tree ||\n          value === GameAssetEnum.lava ||\n          value === GameAssetEnum.water ||\n          value === GameAssetEnum.rock\n        ) {\n          this.gameBoard[dy][dx] = AlienPathEnum.obstacle;\n        } else if (value === GameAssetEnum.bridge) {\n          this.levelPositions.push({\n            type: AssetTypeEnum.bridge,\n            imageType: ImageLoadedEnum.bridge,\n            position: {\n              x: dx * BLOCK_SIZE,\n              y: dy * BLOCK_SIZE\n            } as IAsset\n          } as AssetLocationModel);\n        } else if (value === GameAssetEnum.alienBase) {\n          this.alienBasePositions.push({\n            x: dx * BLOCK_SIZE,\n            y: dy * BLOCK_SIZE\n          } as IAsset);\n          this.gameBoard[dy][dx] = AlienPathEnum.alientBase;\n        } else if (value === GameAssetEnum.prismBlastIcon) {\n          this.prismBlastIconPosition = {\n            x: dx * BLOCK_SIZE,\n            y: dy * BLOCK_SIZE\n          } as IAsset;\n          this.gameBoard[dy][dx] = AlienPathEnum.obstacle;\n        } else if (value === GameAssetEnum.mainGunner) {\n          this.gunnerPosition = {\n            x: dx * BLOCK_SIZE,\n            y: dy * BLOCK_SIZE\n          } as IAsset;\n          this.gameBoard[dy][dx] = AlienPathEnum.gunner;\n        } else if (value === GameAssetEnum.score) {\n          this.textPositions.push({\n            type: TextTypeEnum.score,\n            position: {\n              x: dx * BLOCK_SIZE,\n              y: dy * BLOCK_SIZE\n            } as IAsset\n          } as TextLocationModel);\n          this.gameBoard[dy][dx] = AlienPathEnum.obstacle;\n        } else if (value === GameAssetEnum.highScore) {\n          this.textPositions.push({\n            type: TextTypeEnum.highScore,\n            position: {\n              x: dx * BLOCK_SIZE,\n              y: dy * BLOCK_SIZE\n            } as IAsset\n          } as TextLocationModel);\n          this.gameBoard[dy][dx] = AlienPathEnum.obstacle;\n        } else if (value === GameAssetEnum.level) {\n          this.textPositions.push({\n            type: TextTypeEnum.level,\n            position: {\n              x: dx * BLOCK_SIZE,\n              y: dy * BLOCK_SIZE\n            } as IAsset\n          } as TextLocationModel);\n          this.gameBoard[dy][dx] = AlienPathEnum.obstacle;\n        } else if (value > 0) {\n          this.gameBoard[dy][dx] = AlienPathEnum.obstacle;\n        }\n      });\n    });\n\n    this.addScenery(gameboard);\n  }\n\n  /**\n   * Add a scenery position\n   *\n   * @param dx The x position\n   * @param dy The y position\n   * @param type The Asset Type\n   * @param imageType The Image Type\n   */\n  private addNewScenery(dx: number, dy: number, type: AssetTypeEnum, imageType: ImageLoadedEnum): void {\n    this.sceneryPositions.push({\n      type,\n      imageType,\n      position: {\n        x: dx * BLOCK_SIZE,\n        y: dy * BLOCK_SIZE\n      } as IAsset\n    } as AssetLocationModel);\n  }\n\n  /**\n   * add the scenery\n   *\n   * @param sceneryGameboard The gameboard\n   *\n   * The Game board\n   * 1 - Blank\n   * 2 - Trees\n   * 3 - Rocks\n   * 4 - Water\n   * 5 - Grass\n   * 6 - Slime\n   * 7 - Lava\n   * 8 - Main Gunner\n   * 9 - Alien Base\n   * 10 - Prism Base\n   * 11 - Score\n   * 12 - High Score\n   * 13 - Level\n   * 14 - PrismBlastIcon\n   * 15 - Bridge\n   * 16 - Path\n   */\n  private addScenery(gameboard: number[][]): void {\n    const sceneryGameboard = JSON.parse(JSON.stringify(gameboard)) as number[][];\n\n    if (this.addExtraScenery) {\n      const pathService = new PathService();\n      this.getAlienBasePositions().map((alienBasePosition: IAsset) => {\n        const alienPosition = this.convertIAssetToGameboardIAsset(alienBasePosition);\n        sceneryGameboard[alienPosition.y][alienPosition.x] = GameAssetEnum.path;\n        sceneryGameboard[alienPosition.y][alienPosition.x + 1] = GameAssetEnum.path;\n\n        pathService\n          .findShortestPath(this.convertIAssetToGameboardIAsset(alienBasePosition), this.gameBoard)\n          .map((position: IAsset) => {\n            position = this.convertIAssetToGameboardIAsset(position);\n            if (sceneryGameboard[position.y][position.x] !== GameAssetEnum.bridge) {\n              sceneryGameboard[position.y][position.x] = GameAssetEnum.path;\n            }\n          });\n      });\n    }\n\n    const waterService = new WaterService(sceneryGameboard);\n    sceneryGameboard.map((row: number[], dy: number) => {\n      row.map((value: number, dx: number) => {\n        if (value === GameAssetEnum.slime) {\n          this.addNewScenery(dx, dy, AssetTypeEnum.slime, ImageLoadedEnum.slime);\n        } else if (value === GameAssetEnum.rock) {\n          this.addNewScenery(dx, dy, AssetTypeEnum.rock, ImageLoadedEnum.rock);\n        } else if (value === GameAssetEnum.grass) {\n          this.addNewScenery(dx, dy, AssetTypeEnum.grass, ImageLoadedEnum.grass);\n        } else if (value === GameAssetEnum.tree) {\n          this.addNewScenery(dx, dy, AssetTypeEnum.tree, ImageLoadedEnum.tree);\n        } else if (value === GameAssetEnum.lava) {\n          this.addNewScenery(dx, dy, AssetTypeEnum.lava, ImageLoadedEnum.lava);\n        } else if (value === GameAssetEnum.water) {\n          this.addNewScenery(dx, dy, AssetTypeEnum.water, waterService.determineWaterValue(dy, dx));\n        } else if (value === GameAssetEnum.empty && this.addExtraScenery) {\n          const randomTreeNumber = Math.floor(Math.random() * 5);\n          const addNewTree = randomTreeNumber === 0 || randomTreeNumber === 2;\n\n          if (addNewTree) {\n            this.addNewScenery(dx, dy, AssetTypeEnum.tree, ImageLoadedEnum.tree);\n          } else {\n            const randomRockNumber = Math.floor(Math.random() * 2);\n            const addRock = randomRockNumber === 0;\n            if (addRock) {\n              this.addNewScenery(dx, dy, AssetTypeEnum.rock, ImageLoadedEnum.rock);\n            } else {\n              this.addNewScenery(dx, dy, AssetTypeEnum.grass, ImageLoadedEnum.grass);\n            }\n          }\n        }\n      });\n    });\n  }\n\n  /**\n   * Get image\n   * @param imageType The image type to get\n   */\n  public getImage(imageType: ImageLoadedEnum): ImageLocationModel {\n    return this.imageService.getImage(imageType);\n  }\n\n  /**\n   * Ge the gameboard\n   */\n  public getGameBoard(): AlienPathEnum[][] {\n    return this.gameBoard;\n  }\n\n  /**\n   * Return the coordinates for the prism blast\n   */\n  public getCoordinatesForPrismBlast(): PrismBlastCoordinatesModel {\n    const position2 = this.getGunnerPosition();\n    const position1 = this.getBasePosition();\n    const xDistance = position2.x - position1.x;\n    const xDistanceSquared = Math.pow(xDistance, 2);\n    const yDistance = position2.y - position1.y;\n    const yDistanceSquared = Math.pow(yDistance, 2);\n    return {\n      distance: Math.round(Math.pow(xDistanceSquared + yDistanceSquared, 0.5) / BLOCK_SIZE) - 1,\n      angle: 90 - (Math.atan2(yDistanceSquared, xDistanceSquared) * 180) / Math.PI\n    } as PrismBlastCoordinatesModel;\n  }\n\n  /**\n   * Get the board size\n   */\n  getBoardSize(): BoardModel {\n    return this.boardsize;\n  }\n\n  /**\n   * Valid the Asset\n   * @param asset The asset\n   */\n  valid(asset: IAsset): boolean {\n    return this.gameBoard.every((row: AlienPathEnum[]) => {\n      return row.every(() => {\n        return this.insideWalls(asset.x) && this.aboveFloor(asset.y) && this.belowCeiling(asset.y);\n      });\n    });\n  }\n\n  /**\n   * Convert degress to radians\n   * @param degrees The degress to conver\n   */\n  public getRadians(degrees): number {\n    return Math.round((((degrees % 360) * Math.PI) / 180) * 100000) / 100000;\n  }\n\n  /**\n   * If the shape has value\n   * @param value value of the shape\n   */\n  /*\n  private isEmpty(asset: IAsset): boolean {\n    const row = this.gameBoard[asset.y];\n    if (row) {\n      return this.gameBoard[asset.y][asset.x] === AlienPathEnum.empty;\n    } else {\n      return false;\n    }\n  }\n  */\n\n  /**\n   * Is the piece within the gameboard walls\n   * @param x The x position\n   * @param boundary The boundary object\n   */\n  private insideWalls(x: number): boolean {\n    return x >= 0 && x <= this.boardsize.width;\n  }\n\n  /**\n   * Is the piece within the gameboard floor\n   * @param y The y position\n   */\n  private belowCeiling(y: number): boolean {\n    return y >= 0;\n  }\n\n  /**\n   * Is the piece within the gameboard floor\n   * @param y The y position\n   */\n  private aboveFloor(y: number): boolean {\n    return y < this.boardsize.height;\n  }\n\n  /**\n   * Is the Base Destroyed\n   * @param alienPosition The position of the alien\n   */\n  public isBaseDestroy(alienPosition: IAsset): boolean {\n    if (alienPosition.x === this.basePosition.x && alienPosition.y === this.basePosition.y) {\n      this.emitMasterObservableEvent({\n        type: ObservableTypeEnum.prismBaseDestroyed,\n        booleanData: true\n      } as ObservableModel);\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Get the text positions\n   */\n  public getTextPositions(): TextLocationModel[] {\n    return this.textPositions;\n  }\n\n  /**\n   * Get the base position\n   */\n  public getBasePosition(): IAsset {\n    return this.basePosition;\n  }\n\n  /**\n   * Get the prism blast icon\n   */\n  public getPrismBlastIconPosition(): IAsset {\n    return this.prismBlastIconPosition;\n  }\n\n  /**\n   * Get the gunner position\n   */\n  public getGunnerPosition(): IAsset {\n    return this.gunnerPosition;\n  }\n\n  /**\n   * Get the scenery positions\n   */\n  public getSceneryPositions(): AssetLocationModel[] {\n    return this.sceneryPositions;\n  }\n\n  /**\n   * Get the level positions\n   */\n  public getLevelPositions(): AssetLocationModel[] {\n    return this.levelPositions;\n  }\n\n  /**\n   * Get the alien base positions\n   */\n  public getAlienBasePositions(): IAsset[] {\n    return this.alienBasePositions;\n  }\n\n  /**\n   * convert IAsset to gameboard IAsset\n   */\n  public convertIAssetToGameboardIAsset(asset: IAsset): IAsset {\n    return {\n      x: Math.round(asset.x / BLOCK_SIZE),\n      y: Math.round(asset.y / BLOCK_SIZE)\n    } as IAsset;\n  }\n\n  /**\n   * Get the boundary\n   */\n  public getBoundary(): BoundaryModel {\n    return {\n      left: 0,\n      right: this.boardsize.width,\n      ceiling: 0,\n      floor: this.boardsize.height\n    } as BoundaryModel;\n  }\n\n  /**\n   * Determine if an asset has collided with another asset\n   * @param asset The asset receiving the damage\n   * @param damageAsset The asset giving the damage\n   */\n  isHit(asset: IAsset, damageAsset: IAsset): boolean {\n    asset = this.convertIAssetToGameboardIAsset(asset);\n    damageAsset = this.convertIAssetToGameboardIAsset(damageAsset);\n    return (\n      asset.x <= damageAsset.x &&\n      damageAsset.x <= asset.x + 1 &&\n      asset.y <= damageAsset.y &&\n      damageAsset.y <= asset.y + 1\n    );\n  }\n\n  /**\n   * Provide the outline\n   *\n   * @param ctx The Canvas Rendering Context 2D\n   * @param columns The number of Columns\n   * @param rows The number of rows\n   * @param offset The offset for the grid\n   */\n  addOutlines(ctx: CanvasRenderingContext2D, offset: number, width: number): void {\n    ctx.fillStyle = 'grey';\n\n    let lastIndex = 0;\n    // vertical lines\n    for (let index = 0; index < ctx.canvas.width; index += offset) {\n      ctx.fillRect(index, 0, width, ctx.canvas.height);\n      lastIndex = index;\n    }\n\n    ctx.fillRect(lastIndex + 1, 0, width, ctx.canvas.height);\n\n    // horizontal lines\n    for (let index = 0; index < ctx.canvas.height; index += offset) {\n      ctx.fillRect(0, index, ctx.canvas.width, width);\n      lastIndex = index;\n    }\n\n    ctx.fillRect(0, lastIndex + 1, ctx.canvas.width, width);\n\n    ctx.fillStyle = 'red';\n    ctx.fillRect(ctx.canvas.width / (BLOCK_SIZE * 2), 0, width, ctx.canvas.height);\n    ctx.fillRect(0, ctx.canvas.height / (BLOCK_SIZE * 2), ctx.canvas.width, width);\n  }\n\n  /**\n   * Get the master observable\n   */\n  getMasterObservable(): Observable<ObservableModel> {\n    return this.masterSubject$;\n  }\n\n  /**\n   * Get the master observable\n   */\n  emitMasterObservableEvent(data: ObservableModel): void {\n    this.masterSubject$.next(data);\n  }\n}\n","import { Component, ViewChild, ElementRef, OnInit, HostListener, Inject, OnDestroy } from '@angular/core';\nimport { COLS, BLOCK_SIZE, ROWS, GAMEBOARDS, LEVELWAVES, LEVELCREEP, LEVELSPEED } from './gameboard-constants';\nimport { GameService } from '../service/game.service';\nimport { PrismBaseClass } from '../base/prism-base/prism-base.class';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { InvasionService } from '../service/invasion.service';\nimport { MainGunnerClass } from '../gunner/main-gunner/main-gunner.class';\nimport { MissileService } from '../service/missile.service';\nimport { MissileClass } from '../missile/missile.class';\nimport { AlienClass } from '../aliens/alien/alien.class';\nimport { InvasionSetupModel } from '../model/invasion-setup.model';\nimport { TextService } from '../service/text.service';\nimport { BoardModel } from '../model/board.model';\nimport { PrismBlastService } from '../service/prism-blast.service';\nimport { SceneryService } from '../service/scenery.service';\nimport { GameboardService } from '../service/gameboard.service';\nimport { GameCookieService } from '../service/game-cookie.service';\nimport { GameDataModel } from '../model/game-data.model';\nimport { DisplayDialogService } from '../service/display-dialog.service';\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\nimport { DisplayDialogComponent } from '../text/display-dialog/display-dialog.component';\nimport { GameConfigurationModel } from '../model/game-configuration.model';\nimport { GameInstructionComponent } from '../game-instruction/game-instruction.component';\nimport { Subscription } from 'rxjs';\n\n/**\n * The Gameboard Component\n */\n@Component({\n  selector: 'bp-prism-gameboard',\n  templateUrl: './gameboard.component.html',\n  styleUrls: ['./gameboard.component.scss', '../fonts/press-start-2p.scss']\n})\nexport class GameboardComponent implements OnInit, OnDestroy {\n  /**\n   * Display Grid\n   */\n  // private isDisplayGrid: boolean;\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n  /**\n   * The Subscription\n   */\n  private subscription: Subscription;\n  /**\n   * Canvas Rendering Context 2D\n   */\n  private ctx: CanvasRenderingContext2D;\n  /**\n   * The animation request id\n   */\n  private requestId: number;\n  /**\n   * The points\n   */\n  private points: number;\n  /**\n   * The highscore\n   */\n  private highScore: number;\n  /**\n   * The high level\n   */\n  private highLevel: number;\n  /**\n   * Paused\n   */\n  private isGamePaused: boolean;\n  /**\n   * Game Started;\n   */\n  public gameStarted: boolean;\n  /**\n   * Scenery Service\n   */\n  private sceneryService: SceneryService;\n  /**\n   * Invasion Service\n   */\n  private invasionService: InvasionService;\n  /**\n   * Prism Base\n   */\n  private prismBase: PrismBaseClass;\n  /**\n   * Main Gunner\n   */\n  private mainGunner: MainGunnerClass;\n  /**\n   * Missile Service\n   */\n  private missileService: MissileService;\n  /**\n   * Gameboard Service\n   */\n  private gameboardService: GameboardService;\n  /**\n   * Game Level\n   */\n  private gameLevel: number;\n  /**\n   * The displayLevel\n   */\n  private displayLevel: number;\n  /**\n   * Text Service\n   */\n  private textService: TextService;\n  /**\n   * Board Size\n   */\n  private boardSize: BoardModel;\n  /**\n   * Prism Blast Service\n   */\n  private prismBlastService: PrismBlastService;\n  /**\n   * The Constructor\n   *\n   * @param dialog The MatDialog from DI\n   * @param displayDialogService The Display Dialog Service from DI\n   * @param gameConfigurationService The Game Configuration Data from DI\n   * @param gameCookieService The Game Cookie Service from DI\n   * @param gameService The Game Service from DI\n   */\n  constructor(\n    private dialog: MatDialog,\n    private displayDialogService: DisplayDialogService,\n    @Inject('GameConfigurationData') private gameConfiguration: GameConfigurationModel,\n    private gameCookieService: GameCookieService,\n    private gameService: GameService\n  ) {\n    // this.isDisplayGrid = false;\n\n    const gameData = this.gameCookieService.getGameData();\n    this.highScore = gameData.highScore;\n    this.highLevel = gameData.level;\n    this.gameStarted = false;\n\n    this.dialog.open(GameInstructionComponent, {\n      panelClass: 'game-instruction-container',\n      position: {\n        top: '75px'\n      }\n    });\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.ctx = this.gameService.initBoard(\n      this.canvas,\n      ROWS,\n      COLS,\n      BLOCK_SIZE,\n      GAMEBOARDS[0],\n      this.gameConfiguration.addExtraScenery\n    );\n\n    this.boardSize = this.gameService.getBoardSize();\n\n    this.textService = new TextService(this.gameService, this.ctx);\n\n    this.subscription = this.gameService.getMasterObservable().subscribe((result: ObservableModel) => {\n      if (result.type === ObservableTypeEnum.prismBaseDestroyed) {\n        this.gameOver();\n      } else if (result.type === ObservableTypeEnum.levelCompleted && result.booleanData === true) {\n        this.nextLevel();\n      } else if (result.type === ObservableTypeEnum.imagesLoaded && result.booleanData === true) {\n        this.setUpGameBoard();\n        setTimeout(() => {\n          this.startAllAnimation();\n        });\n      }\n    });\n  }\n\n  /**\n   * On Destroy\n   */\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n  }\n\n  /**\n   * Setup the game board\n   */\n  private setUpGameBoard(): void {\n    this.prismBase = new PrismBaseClass(this.gameService, this.ctx, 1);\n    this.prismBase.move(this.gameService.getBasePosition());\n\n    this.mainGunner = new MainGunnerClass(this.gameService, this.ctx, 1);\n\n    this.invasionService = new InvasionService(this.gameService, this.ctx);\n\n    this.sceneryService = new SceneryService(this.gameService, this.ctx);\n\n    this.gameboardService = new GameboardService(this.gameService, this.ctx);\n\n    this.missileService = new MissileService(this.gameService, this.ctx);\n    this.missileService.init();\n\n    this.prismBlastService = new PrismBlastService(this.gameService, this.ctx);\n    this.prismBlastService.init();\n\n    this.resetGame();\n  }\n\n  /**\n   * Add a new prism blast every 1000 points\n   */\n  private addNewPrismBlast(): void {\n    if (this.points % 1000 === 0) {\n      this.prismBlastService.addPrismBlast();\n    }\n  }\n\n  /**\n   * Evaluate high Score\n   */\n  private calculateScore(): void {\n    this.points += 5;\n    if (this.points > this.highScore) {\n      this.highScore = this.points;\n      this.textService.setHighScore(this.highScore);\n    }\n    this.textService.setScore(this.points);\n  }\n\n  /**\n   * Evaluate any damage\n   */\n  private evaluateDamage(): void {\n    this.missileService.getActiveMissiles().map((missile: MissileClass) => {\n      this.invasionService.getActiveAliens().map((alien: AlienClass) => {\n        if (\n          missile.isDestroyed === false &&\n          alien.isDestroyed === false &&\n          alien.isAnimated === true &&\n          this.gameService.isHit(alien, missile)\n        ) {\n          this.calculateScore();\n          this.addNewPrismBlast();\n          alien.isDestroyed = true;\n          missile.isDestroyed = true;\n          this.gameService.emitMasterObservableEvent({\n            type: ObservableTypeEnum.alienDestroyed,\n            booleanData: true,\n            numberData: alien.uid\n          } as ObservableModel);\n        }\n      });\n    });\n  }\n\n  /**\n   * Start All the animation in one place\n   */\n  private startAllAnimation(): void {\n    this.draw();\n\n    this.gameboardService.animate(0);\n    this.invasionService.animate(0);\n    this.mainGunner.animate(0);\n    this.sceneryService.animate();\n    this.prismBase.animate();\n    this.textService.animate();\n    this.prismBlastService.animate(0);\n  }\n\n  /**\n   * Animate\n   *\n   * @param now The current animation time\n   */\n  private animate(now = 0): void {\n    this.evaluateDamage();\n\n    this.draw();\n\n    this.gameboardService.animate(now);\n    this.invasionService.animate(now);\n    this.mainGunner.animate(now);\n    this.sceneryService.animate();\n    this.prismBase.animate();\n    this.prismBlastService.animate(now);\n    this.missileService.animate(now);\n    this.invasionService.animateDropships(now);\n    this.textService.animate();\n\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * Determine if the game is over\n   *\n   */\n  gameOver(): void {\n    if (this.points >= this.highScore) {\n      this.highScore = this.points;\n      this.highLevel = this.displayLevel;\n      this.gameCookieService.setGameData({\n        highScore: this.highScore,\n        level: this.highLevel\n      } as GameDataModel);\n    }\n\n    this.textService.setHighScore(this.highScore);\n\n    setTimeout(() => {\n      this.missileService.removeMissiles();\n      this.gameStarted = false;\n      this.gameService.emitMasterObservableEvent({\n        type: ObservableTypeEnum.gameOver,\n        booleanData: true\n      } as ObservableModel);\n      this.displayDialogService.displayGameOver({\n        highScore: this.highScore,\n        level: this.highLevel\n      } as GameDataModel);\n    }, 250);\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.boardSize.width, this.boardSize.height);\n\n    // if (this.isDisplayGrid) {\n    // this.gameService.addOutlines(this.ctx, BLOCK_SIZE, 0.2);\n    // }\n  }\n\n  /**\n   * Play the game\n   */\n  play() {\n    this.gameStarted = true;\n    this.resetGame();\n\n    // If we have an old game running a game then cancel the old\n    if (this.requestId) {\n      cancelAnimationFrame(this.requestId);\n    }\n\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.gameOver,\n      booleanData: false\n    } as ObservableModel);\n\n    this.animate(0);\n  }\n  /**\n   * Reset the Game\n   */\n  resetGame() {\n    this.gameLevel = 0;\n    this.displayLevel = 1;\n    this.points = 0;\n    this.isGamePaused = false;\n\n    this.textService.setScore(this.points);\n    this.textService.setHighScore(this.highScore);\n\n    this.newLevelSetup();\n  }\n\n  /**\n   * New Level Set-up\n   */\n  private newLevelSetup(): void {\n    this.gameService.setGameBoard(GAMEBOARDS[this.gameLevel]);\n\n    this.sceneryService.addScenery(this.gameLevel);\n\n    this.mainGunner.resetRotation();\n    this.missileService.removeMissiles();\n\n    this.textService.setLevel(this.displayLevel);\n    this.gameboardService.initPath();\n    this.invasionService.initInvasion({\n      alienPerWave: LEVELCREEP[this.gameLevel] as number,\n      waves: LEVELWAVES[this.gameLevel] as number,\n      alienSpeed: LEVELSPEED[this.gameLevel] as number\n    } as InvasionSetupModel);\n  }\n\n  /**\n   * next level\n   */\n  private nextLevel(): void {\n    this.displayLevel++;\n\n    const displayDialogServiceRef = this.pauseGame(true);\n\n    if (this.gameLevel < 7) {\n      this.gameLevel++;\n    }\n\n    setTimeout(() => {\n      this.newLevelSetup();\n      displayDialogServiceRef.close();\n      this.pauseGame();\n    }, 2000);\n  }\n\n  /**\n   * Pause the game\n   *\n   * @param isNextLevel If you should display the next level dialog\n   */\n  private pauseGame(isNextLevel = false): MatDialogRef<DisplayDialogComponent> {\n    let displayDialogServiceRef: MatDialogRef<DisplayDialogComponent>;\n    if (this.gameStarted) {\n      this.isGamePaused = !this.isGamePaused;\n      if (this.isGamePaused) {\n        displayDialogServiceRef = isNextLevel\n          ? this.displayDialogService.displayNextLevel({\n              highScore: this.highScore,\n              level: this.displayLevel\n            } as GameDataModel)\n          : this.displayDialogService.displayGamePaused();\n\n        if (!isNextLevel) {\n          displayDialogServiceRef.afterClosed().subscribe(() => {\n            this.pauseGame(isNextLevel);\n          });\n        }\n      }\n\n      this.gameService.emitMasterObservableEvent({\n        type: ObservableTypeEnum.gamePaused,\n        booleanData: this.isGamePaused\n      } as ObservableModel);\n    }\n\n    return displayDialogServiceRef;\n  }\n\n  /**\n   * Pause the game\n   */\n  pause() {\n    this.pauseGame();\n  }\n\n  /**\n   * Abstract event handlers\n   * @param type The input type\n   * @param code The key code\n   */\n  private handleEventListeners(type: ObservableTypeEnum, code: string): void {\n    if (this.gameStarted && !this.isGamePaused) {\n      this.gameService.emitMasterObservableEvent({\n        type,\n        stringData: code\n      } as ObservableModel);\n    }\n  }\n\n  /**\n   * The keyEvent down listener\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keydown', ['$event'])\n  keyDownEvent(event: KeyboardEvent) {\n    event.preventDefault();\n    this.handleEventListeners(ObservableTypeEnum.keyDownEvent, event.code);\n  }\n\n  /**\n   * The keyEvent uplistener\n   *\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keyup', ['$event'])\n  keyUpEvent(event: KeyboardEvent) {\n    event.preventDefault();\n    this.handleEventListeners(ObservableTypeEnum.keyUpEvent, event.code);\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <div>\n      <button (click)=\"play()\" class=\"play-button button\" *ngIf=\"!gameStarted\">Play</button>\n      <button (click)=\"gameOver()\" class=\"reset-button button\" *ngIf=\"gameStarted\">Reset</button>\n    </div>\n    <div>\n      <button (click)=\"pause()\" class=\"pause-button button\" [class.button-disabled]=\"!gameStarted\">Pause</button>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { GameService } from '../../../service/game.service';\nimport { AssetConfigurationModel } from '../../../model/asset-configuration.model';\nimport { AlienClass } from '../alien.class';\nimport { Alien1Class } from '../../alien-1/alien-1.class';\nimport { IAsset } from '../../../interface/asset.interface';\nimport { BLOCK_SIZE } from '../../../gameboard/gameboard-constants';\nimport { PathService } from '../../../service/path.service';\nimport { Alien2Class } from '../../alien-2/alien-2.class';\nimport { AlienDropshipClass } from '../../alien-dropship/alien-dropship.class';\nimport { AssetScaleModel } from '../../../model/asset-scale.mode';\n\n/**\n * The Alien Component\n */\n@Component({\n  selector: 'bp-prism-alien',\n  templateUrl: './alien.component.html',\n  styleUrls: ['./alien.component.scss']\n})\nexport class AlienComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * aliens\n   */\n  private aliens: AlienClass[];\n\n  /**\n   * The alien\n   */\n  private alien: AlienClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n  /**\n   * Gameboard\n   */\n  private gameBoard: number[][];\n\n  /**\n   * path service\n   */\n  private pathService: PathService;\n\n  /**\n   * Animate Once\n   */\n  private isAnimateOnce: boolean;\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {\n    this.isAnimateOnce = true;\n    this.pathService = new PathService();\n    this.assets = [\n      {\n        key: 'alien1',\n        name: 'A-1'\n      } as AssetConfigurationModel,\n      {\n        key: 'alien2',\n        name: 'A-2'\n      } as AssetConfigurationModel,\n      {\n        key: 'alien3',\n        name: 'AD-1'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 100;\n    const columns = 100;\n    this.gameBoard = Array.from({ length: rows }, () => Array(columns).fill(0) as number[]);\n    this.gameBoard[9][5] = 10;\n\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, BLOCK_SIZE, this.gameBoard);\n\n    this.addAliens();\n    this.animate(0);\n  }\n\n  /**\n   * Add the aliens\n   */\n  private addAliens(): void {\n    this.aliens = [];\n\n    const alien1 = new Alien1Class(this.gameService, this.ctx, 1);\n    alien1.assetScale = { x: 1, y: 1 } as AssetScaleModel;\n    alien1.setCreepPath(this.pathService.findShortestPath({ x: 10, y: 10 } as IAsset, this.gameService.getGameBoard()));\n    alien1.isDestroyed = false;\n    this.aliens.push(alien1);\n\n    const alien2 = new Alien2Class(this.gameService, this.ctx, 1);\n    this.aliens.push(alien2);\n\n    const alien3 = new AlienDropshipClass(this.gameService, this.ctx, 1);\n    this.aliens.push(alien3);\n\n    this.alien = this.aliens[0];\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(now = 0): void {\n    this.alien.assetScale = { x: 1, y: 1 } as AssetScaleModel;\n    this.alien.setCreepPath(\n      this.pathService.findShortestPath({ x: 10, y: 10 } as IAsset, this.gameService.getGameBoard())\n    );\n    this.isAnimateOnce = !this.isAnimateOnce;\n    this.alien.isDestroyed = false;\n    cancelAnimationFrame(this.requestId);\n    this.animate(now);\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 5, 0.1);\n  }\n\n  /**\n   * Animate\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.draw();\n    this.alien.animate(now);\n    if (!this.isAnimateOnce) {\n      this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n    }\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.alien.isDestroyed = true;\n    this.draw();\n    let index = 0;\n    this.aliens.map((alien: AlienClass) => {\n      alien.isDestroyed = true;\n    });\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        index = $index;\n      }\n    });\n\n    this.alien = this.aliens[index];\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Alien</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { GameService } from '../../../service/game.service';\nimport { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';\nimport { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';\nimport { AssetConfigurationModel } from '../../../model/asset-configuration.model';\nimport { LetterClass } from '../letter.class';\nimport { AssetScaleModel } from '../../../model/asset-scale.mode';\n\n/**\n * The Letter Component\n */\n@Component({\n  selector: 'bp-prism-letter',\n  templateUrl: './letter.component.html',\n  styleUrls: ['./letter.component.scss']\n})\nexport class LetterComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * The letter\n   */\n  private letter: LetterClass;\n\n  /**\n   * The scale\n   */\n  private fullScale: boolean;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {\n    this.assets = [\n      {\n        key: 'L',\n        name: 'L'\n      } as AssetConfigurationModel,\n      {\n        key: 'P',\n        name: 'P'\n      } as AssetConfigurationModel\n    ];\n\n    this.fullScale = true;\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 20;\n    const columns = 22;\n    const gameBoard = Array.from({ length: rows }, () => Array(columns).fill(0) as number[]);\n\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, 25, gameBoard);\n    this.addLetter();\n    this.animate();\n  }\n\n  /**\n   * Add the letters\n   */\n  private addLetter(): void {\n    const letterClass = new LetterClass(this.gameService, this.ctx);\n    letterClass.move(letterClass.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    letterClass.setLetter('L');\n    letterClass.isDestroyed = true;\n\n    this.letter = letterClass;\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.letter.isDestroyed = false;\n    this.letter.move(this.letter.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.025);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.letter.animate();\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * toggleScale\n   *\n   */\n  toggleScale(): void {\n    this.fullScale = !this.fullScale;\n    this.draw();\n    this.letter.assetScale = {\n      x: this.fullScale ? 0.1 : 0.2,\n      y: this.fullScale ? 0.1 : 0.2\n    } as AssetScaleModel;\n    this.animateAsset();\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.draw();\n    this.assets.map((asset: AssetConfigurationModel) => {\n      if (key === asset.key) {\n        this.letter.setLetter(key);\n      }\n    });\n\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Letters</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <button (click)=\"toggleScale()\" class=\"animation-button button\">Scale</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","/**\n * The First asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 1, 0, 0, 0, 0],\n  [0, 0, 0, 1, 0, 1, 0, 0, 0],\n  [0, 0, 1, 0, 0, 0, 1, 0, 0],\n  [0, 1, 0, 0, 0, 0, 0, 1, 0],\n  [1, 1, 1, 1, 1, 1, 1, 1, 1]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n\n/**\n * Columns\n */\nexport const COLS = 25;\n/**\n * Rows\n */\nexport const ROWS = 20;\n\n/**\n * The colors\n */\nexport const COLORS = [\n  'rgba(101, 67, 33)', // Brown\n  'rgba(0, 0, 0)' // Black\n];\n","import { Component, OnInit, ElementRef, ViewChild, HostListener } from '@angular/core';\nimport { GameService } from '../../service/game.service';\nimport { AssetConfigurationModel } from '../../model/asset-configuration.model';\nimport { MainGunnerClass } from '../main-gunner/main-gunner.class';\nimport { GunnerClass } from '../gunner.class';\nimport { ObservableModel } from '../../model/observable.model';\nimport { ObservableTypeEnum } from '../../enum/observable-type.enum';\nimport { ROWS, COLS } from '../main-gunner/main-gunner-constants';\nimport { BLOCK_SIZE } from '../../gameboard/gameboard-constants';\n\n/**\n * The Main Gunner Component\n */\n@Component({\n  selector: 'bp-prism-main-gunner',\n  templateUrl: './main-gunner.component.html',\n  styleUrls: ['./main-gunner.component.scss']\n})\nexport class MainGunnerComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * Bases\n   */\n  private gunners: GunnerClass[];\n\n  /**\n   * The Base\n   */\n  private gunner: GunnerClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n  /**\n   * Gameboard\n   */\n  private gameBoard: number[][];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {\n    this.assets = [\n      {\n        key: 'mainGunner',\n        name: 'M-1'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.gameBoard = Array.from({ length: ROWS }, () => Array(COLS).fill(0) as number[]);\n    this.gameBoard[2][2] = 8;\n\n    this.ctx = this.gameService.initBoard(this.canvas, ROWS, COLS, BLOCK_SIZE * 5, this.gameBoard);\n\n    this.addGunners();\n    this.animate();\n    this.gunner.animate();\n  }\n\n  /**\n   * Add the gunners\n   */\n  private addGunners(): void {\n    this.gunners = [];\n\n    const gunner1 = new MainGunnerClass(this.gameService, this.ctx, 1);\n    this.gunners.push(gunner1);\n\n    this.gunner = this.gunners[0];\n    this.gunner.move();\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.gunner.isDestroyed = false;\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.1);\n  }\n\n  /**\n   * Animate\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.draw();\n    this.gunner.animate(now);\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * The keyEvent down listener\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keydown', ['$event'])\n  keyDownEvent(event: KeyboardEvent) {\n    event.preventDefault();\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.keyDownEvent,\n      stringData: event.code\n    } as ObservableModel);\n  }\n\n  /**\n   * The keyEvent up listener\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keyup', ['$event'])\n  keyUpEvent(event: KeyboardEvent) {\n    event.preventDefault();\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.keyUpEvent,\n      stringData: event.code\n    } as ObservableModel);\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.gunner.isDestroyed = true;\n    this.draw();\n    let index = 0;\n    this.gunners.map((gunner: MainGunnerClass) => {\n      gunner.isDestroyed = true;\n    });\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        index = $index;\n      }\n    });\n\n    this.gunner = this.gunners[index];\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Main Gunner</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { GameService } from '../../service/game.service';\nimport { AssetAlignEnum } from '../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../asset/enum/asset-align-vertical.enum';\nimport { MissileClass } from '../missile.class';\nimport { MissileLaunchModel } from '../model/missile-launch.model';\nimport { IAsset } from '../../interface/asset.interface';\n\n/**\n * The Missile Component\n */\n@Component({\n  selector: 'bp-prism-missile',\n  templateUrl: './missile.component.html',\n  styleUrls: ['./missile.component.scss']\n})\nexport class MissileComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * The missile\n   */\n  private missile: MissileClass;\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {}\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 30;\n    const columns = 40;\n    const gameBoard = Array.from({ length: rows }, () => Array(columns).fill(0) as number[]);\n\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, 25, gameBoard);\n    this.missile = new MissileClass(this.gameService, this.ctx, 0);\n    this.missile.move(this.missile.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.animate();\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.missile.setMissileData({\n      rotation: 0,\n      position: {\n        x: 1,\n        y: 1\n      } as IAsset\n    } as MissileLaunchModel);\n    this.missile.isDestroyed = false;\n    this.missile.move(this.missile.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.025);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.missile.animate();\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Missile</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { GameService } from '../../../service/game.service';\nimport { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';\nimport { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';\nimport { AssetConfigurationModel } from '../../../model/asset-configuration.model';\nimport { NumberClass } from '../number.class';\n\n/**\n * The Alien Component\n */\n@Component({\n  selector: 'bp-prism-number',\n  templateUrl: './number.component.html',\n  styleUrls: ['./number.component.scss']\n})\nexport class NumberComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * The letter\n   */\n  private number: NumberClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {\n    this.assets = [\n      {\n        key: 'zero',\n        name: '0'\n      } as AssetConfigurationModel,\n      {\n        key: 'one',\n        name: '1'\n      } as AssetConfigurationModel,\n      {\n        key: 'two',\n        name: '2'\n      } as AssetConfigurationModel,\n      {\n        key: 'three',\n        name: '3'\n      } as AssetConfigurationModel,\n      {\n        key: 'four',\n        name: '4'\n      } as AssetConfigurationModel,\n      {\n        key: 'five',\n        name: '5'\n      } as AssetConfigurationModel,\n      {\n        key: 'six',\n        name: '6'\n      } as AssetConfigurationModel,\n      {\n        key: 'seven',\n        name: '7'\n      } as AssetConfigurationModel,\n      {\n        key: 'eight',\n        name: '8'\n      } as AssetConfigurationModel,\n      {\n        key: 'nine',\n        name: '9'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 31;\n    const cols = 31;\n    const gameBoard = Array.from({ length: rows }, () => Array(cols).fill(0) as number[]);\n\n    this.ctx = this.gameService.initBoard(this.canvas, rows, cols, 25, gameBoard);\n    this.addNumber();\n    this.animate();\n  }\n\n  /**\n   * Add the letters\n   */\n  private addNumber(): void {\n    const numberClass = new NumberClass(this.gameService, this.ctx);\n    numberClass.move(numberClass.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    numberClass.setNumber(0, false);\n    numberClass.isDestroyed = true;\n\n    this.number = numberClass;\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.number.isDestroyed = false;\n    this.number.move(this.number.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.025);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.number.animate();\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.draw();\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        this.number.setNumber($index, false);\n      }\n    });\n\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Numbers</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\nimport { GameService } from '../../service/game.service';\nimport { AssetConfigurationModel } from '../../model/asset-configuration.model';\nimport { PrismBaseClass } from '../prism-base/prism-base.class';\nimport { AlienBaseClass } from '../alien-base/alien-base.class';\nimport { BaseClass } from '../base.class';\nimport { BLOCK_SIZE } from '../../gameboard/gameboard-constants';\nimport { AssetAlignEnum } from '../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../asset/enum/asset-align-vertical.enum';\n\n/**\n * The Prism Base Component\n */\n@Component({\n  selector: 'bp-prism-base',\n  templateUrl: './base.component.html',\n  styleUrls: ['./base.component.scss']\n})\nexport class BaseComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * Bases\n   */\n  private bases: BaseClass[];\n\n  /**\n   * The Base\n   */\n  private base: BaseClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n  /**\n   * Gameboard\n   */\n  private gameBoard: number[][];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {\n    this.assets = [\n      {\n        key: 'prismBase1',\n        name: 'B-1'\n      } as AssetConfigurationModel,\n      {\n        key: 'alienBase1',\n        name: 'A-1'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 31;\n    const columns = 31;\n    this.gameBoard = Array.from({ length: rows }, () => Array(columns).fill(0) as number[]);\n\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, BLOCK_SIZE * 5, this.gameBoard);\n\n    this.addPrismBases();\n    this.animate();\n    this.base.animate();\n  }\n\n  /**\n   * Add the prismBases\n   */\n  private addPrismBases(): void {\n    this.bases = [];\n\n    const prismBase1 = new PrismBaseClass(this.gameService, this.ctx, 1);\n    prismBase1.isDestroyed = true;\n    this.bases.push(prismBase1);\n\n    const prismBase2 = new AlienBaseClass(this.gameService, this.ctx, 1);\n    prismBase2.isDestroyed = true;\n    this.bases.push(prismBase2);\n\n    this.base = this.bases[0];\n    this.base.isDestroyed = false;\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.base.move(this.base.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.base.isDestroyed = false;\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.1);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.base.animate();\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.base.isDestroyed = true;\n    this.draw();\n    let index = 0;\n    this.bases.map((prismBase: PrismBaseClass) => {\n      prismBase.isDestroyed = true;\n    });\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        index = $index;\n      }\n    });\n\n    this.base = this.bases[index];\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Prism Base</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { ROWS, COLS } from '../prism-blast-constants';\nimport { GameService } from '../../../service/game.service';\nimport { AssetConfigurationModel } from '../../../model/asset-configuration.model';\nimport { PrismBlastClass } from '../prism-blast.class';\nimport { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';\nimport { BLOCK_SIZE } from '../../../gameboard/gameboard-constants';\n\n/**\n * The Prism Blast Component\n */\n@Component({\n  selector: 'bp-prism-blast',\n  templateUrl: './prism-blast.component.html',\n  styleUrls: ['./prism-blast.component.scss']\n})\nexport class PrismBlastComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * prismBlasts\n   */\n  private prismBlasts: PrismBlastClass[];\n\n  /**\n   * The prismBlast\n   */\n  private prismBlast: PrismBlastClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {\n    this.assets = [\n      {\n        key: 'prismBlast',\n        name: 'Blast'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    /* eslint-disable-next-line */\n    const gameBoard = Array.from({ length: ROWS }, () => Array(COLS).fill(0));\n\n    /* eslint-disable-next-line */\n    this.ctx = this.gameService.initBoard(this.canvas, ROWS, COLS, BLOCK_SIZE * 5, gameBoard);\n\n    this.addPrismBlasts();\n    this.animate();\n    this.prismBlast.animate();\n  }\n\n  /**\n   * Add the aliens\n   */\n  private addPrismBlasts(): void {\n    this.prismBlasts = [];\n\n    const prismBlast = new PrismBlastClass(this.gameService, this.ctx, 1);\n    prismBlast.move(prismBlast.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.prismBlasts.push(prismBlast);\n\n    this.prismBlast = this.prismBlasts[0];\n    this.prismBlast.isDestroyed = false;\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.prismBlast.isDestroyed = false;\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.1);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.prismBlast.animate();\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.prismBlast.isDestroyed = true;\n    this.draw();\n    let index = 0;\n    this.prismBlasts.map((prismBlast: PrismBlastClass) => {\n      prismBlast.isDestroyed = true;\n    });\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        index = $index;\n      }\n    });\n\n    this.prismBlast = this.prismBlasts[index];\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Prism Blast</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { GameService } from '../../../service/game.service';\nimport { AssetConfigurationModel } from '../../../model/asset-configuration.model';\nimport { PrismBlastIconClass } from '../prism-blast-icon.class';\nimport { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';\n\n/**\n * The Prism Blast Icon Component\n */\n@Component({\n  selector: 'bp-prism-blast-icon',\n  templateUrl: './prism-blast-icon.component.html',\n  styleUrls: ['./prism-blast-icon.component.scss']\n})\nexport class PrismBlastIconComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * The prismBlast\n   */\n  private prismBlast: PrismBlastIconClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {\n    this.assets = [\n      {\n        key: 'prismBlast',\n        name: 'Blast'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 20;\n    const columns = 20;\n    const gameBoard = Array.from({ length: rows }, () => Array(columns).fill(0) as number[]);\n    gameBoard[1][1] = 14;\n\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, 25, gameBoard);\n\n    this.addPrismBlasts();\n    this.animate();\n  }\n\n  /**\n   * Add the aliens\n   */\n  private addPrismBlasts(): void {\n    this.prismBlast = new PrismBlastIconClass(this.gameService, this.ctx);\n    this.prismBlast.isDestroyed = false;\n    this.prismBlast.move(this.prismBlast.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.prismBlast.move(this.prismBlast.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.prismBlast.isDestroyed = false;\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.1);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.prismBlast.animate();\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Prism Blast Icon</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\nimport { GameService } from '../../service/game.service';\nimport { AssetConfigurationModel } from '../../model/asset-configuration.model';\nimport { WaterClass } from '../water/water.class';\nimport { SceneryClass } from '../scenery.class';\nimport { BLOCK_SIZE } from '../../gameboard/gameboard-constants';\nimport { AssetAlignEnum } from '../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../asset/enum/asset-align-vertical.enum';\nimport { TreeClass } from '../tree/tree.class';\nimport { RockClass } from '../rock/rock.class';\nimport { GrassClass } from '../grass/grass.class';\nimport { SlimeClass } from '../slime/slime.class';\nimport { LavaClass } from '../lava/lava.class';\nimport { IAsset } from '../../interface/asset.interface';\nimport { ImageLoadedEnum } from '../../enum/image-loaded.enum';\n\n/**\n * The Scenery Component\n */\n@Component({\n  selector: 'bp-prism-scenery',\n  templateUrl: './scenery.component.html',\n  styleUrls: ['./scenery.component.scss']\n})\nexport class SceneryComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * Bases\n   */\n  private sceneries: SceneryClass[];\n\n  /**\n   * The Base\n   */\n  private scenery: SceneryClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n  /**\n   * Gameboard\n   */\n  private gameBoard: number[][];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {\n    this.assets = [\n      {\n        key: 'grass',\n        name: 'Grass'\n      } as AssetConfigurationModel,\n      {\n        key: 'lava',\n        name: 'Lava'\n      } as AssetConfigurationModel,\n      {\n        key: 'rock',\n        name: 'Rock'\n      } as AssetConfigurationModel,\n      {\n        key: 'slime',\n        name: 'Slime'\n      } as AssetConfigurationModel,\n      {\n        key: 'tree',\n        name: 'Tree'\n      } as AssetConfigurationModel,\n      {\n        key: 'water',\n        name: 'Water'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 25;\n    const columns = 25;\n    this.gameBoard = Array.from({ length: rows }, () => Array(columns).fill(0) as number[]);\n\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, BLOCK_SIZE * 5, this.gameBoard);\n\n    this.addScenery();\n    this.animate();\n  }\n\n  /**\n   * Calculate the center posision\n   */\n  private calculatePosition(): IAsset {\n    const position = this.scenery.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle);\n    (position.x -= BLOCK_SIZE / 2), (position.y -= BLOCK_SIZE / 2);\n    return position;\n  }\n\n  /**\n   * Add the prismBases\n   */\n  private addScenery(): void {\n    this.sceneries = [];\n\n    const grass = new GrassClass(this.gameService, this.ctx, 1);\n    this.sceneries.push(grass);\n\n    const lava = new LavaClass(this.gameService, this.ctx, 1);\n    this.sceneries.push(lava);\n\n    const rock = new RockClass(this.gameService, this.ctx, 1);\n    this.sceneries.push(rock);\n\n    const slime = new SlimeClass(this.gameService, this.ctx, 1);\n    this.sceneries.push(slime);\n\n    const tree = new TreeClass(this.gameService, this.ctx, 1);\n    this.sceneries.push(tree);\n\n    const water = new WaterClass(this.gameService, this.ctx, 1, ImageLoadedEnum.water0);\n    this.sceneries.push(water);\n\n    this.scenery = this.sceneries[5];\n    this.scenery.move(this.calculatePosition());\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.scenery.move(this.calculatePosition());\n    this.scenery.isDestroyed = false;\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.ctx.fillStyle = 'red';\n    const position = this.calculatePosition();\n    const lineSize = 0.1;\n    // Top\n    this.ctx.fillRect(position.x - lineSize, position.y - lineSize, BLOCK_SIZE + lineSize * 2, lineSize);\n    // Left\n    this.ctx.fillRect(position.x - lineSize, position.y - lineSize, lineSize, BLOCK_SIZE + lineSize * 2);\n    // Right\n    this.ctx.fillRect(position.x + BLOCK_SIZE + lineSize, position.y - lineSize, lineSize, BLOCK_SIZE + lineSize * 2);\n    // Bottom\n    this.ctx.fillRect(position.x - lineSize, position.y + BLOCK_SIZE + lineSize, BLOCK_SIZE + lineSize * 2, lineSize);\n    this.gameService.addOutlines(this.ctx, 1, lineSize);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.scenery.animate();\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.scenery.isDestroyed = true;\n    this.draw();\n    let index = 0;\n    this.sceneries.map((prismBase: WaterClass) => {\n      prismBase.isDestroyed = true;\n    });\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        index = $index;\n      }\n    });\n\n    this.scenery = this.sceneries[index];\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Scenery</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { GameConfigurationModel } from '../model/game-configuration.model';\nimport { DebugAssetsModel } from '../model/debug-assets.model';\nimport { AssetConfigurationModel } from '../model/asset-configuration.model';\nimport { DisplayDialogService } from '../service/display-dialog.service';\nimport { GameDataModel } from '../model/game-data.model';\nimport { GameCookieService } from '../service/game-cookie.service';\n\n/**\n * The prism component\n */\n@Component({\n  selector: 'bp-prism-game',\n  templateUrl: './prism.component.html',\n  styleUrls: ['./prism.component.scss', '../fonts/press-start-2p.scss']\n})\nexport class PrismComponent implements OnInit {\n  /**\n   * The debug variable\n   */\n  isDebug: boolean;\n  /**\n   * Debug Assets\n   */\n  debugAssets: DebugAssetsModel;\n  /**\n   * Debug Assets\n   */\n  assets: AssetConfigurationModel[];\n\n  /**\n   * Constructor\n   *\n   * @param displayDialogService The MatDialog from DI\n   * @param gameConfiguration The Game Configuration\n   * @param gameCookie The Game Cookie Service\n   */\n  constructor(\n    private displayDialogService: DisplayDialogService,\n    @Inject('GameConfigurationData') gameConfiguration: GameConfigurationModel,\n    private gameCookieService: GameCookieService\n  ) {\n    this.isDebug = gameConfiguration.isDebug;\n\n    this.debugAssets = {\n      alien: true,\n      letter: false,\n      mainGunner: false,\n      missile: false,\n      number: false,\n      prismBase: false,\n      prismBlast: false,\n      prismBlastIcon: false,\n      scenery: false\n    } as DebugAssetsModel;\n\n    this.assets = [\n      {\n        key: 'alien',\n        name: 'Alien'\n      } as AssetConfigurationModel,\n      {\n        key: 'letter',\n        name: 'Letter'\n      } as AssetConfigurationModel,\n      {\n        key: 'mainGunner',\n        name: 'Main Gunner'\n      } as AssetConfigurationModel,\n      {\n        key: 'missile',\n        name: 'Missile'\n      } as AssetConfigurationModel,\n      {\n        key: 'number',\n        name: 'Numbers'\n      } as AssetConfigurationModel,\n      {\n        key: 'prismBase',\n        name: 'Base'\n      } as AssetConfigurationModel,\n      {\n        key: 'prismBlast',\n        name: 'P-Blast'\n      } as AssetConfigurationModel,\n      {\n        key: 'prismBlastIcon',\n        name: 'Icon'\n      } as AssetConfigurationModel,\n      {\n        key: 'scenery',\n        name: 'Scenery'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.toggleAssets(this.gameCookieService.getDebugData());\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param asset The asset to display\n   */\n  toggleAssets(asset: string): void {\n    Object.keys(this.debugAssets).map((key: string) => {\n      if (key === asset) {\n        this.debugAssets[key] = true;\n        this.gameCookieService.setDebugData(key);\n      } else {\n        this.debugAssets[key] = false;\n      }\n    });\n  }\n\n  /**\n   * Open the game over dialog\n   */\n  openDisplayGameOverDialog(): void {\n    this.displayDialogService.displayGameOver({\n      highScore: 100,\n      level: 4\n    } as GameDataModel);\n  }\n\n  /**\n   * Open the next level dialog\n   */\n  openDisplayNextLevelDialog(): void {\n    this.displayDialogService.displayNextLevel({\n      highScore: 100,\n      level: 400\n    } as GameDataModel);\n  }\n\n  /**\n   * Open the game paused\n   */\n  openDisplayGamePausedDialog(): void {\n    this.displayDialogService.displayGamePaused();\n  }\n}\n","<div class=\"game-container\" [class.debug]=\"isDebug\">\n  <div *ngIf=\"!isDebug\">\n    <bp-prism-gameboard></bp-prism-gameboard>\n  </div>\n  <div *ngIf=\"isDebug\" class=\"debug-container\">\n    <div *ngIf=\"debugAssets.alien\">\n      <bp-prism-alien></bp-prism-alien>\n    </div>\n    <div *ngIf=\"debugAssets.letter\">\n      <bp-prism-letter></bp-prism-letter>\n    </div>\n    <div *ngIf=\"debugAssets.mainGunner\">\n      <bp-prism-main-gunner></bp-prism-main-gunner>\n    </div>\n    <div *ngIf=\"debugAssets.missile\">\n      <bp-prism-missile></bp-prism-missile>\n    </div>\n    <div *ngIf=\"debugAssets.number\">\n      <bp-prism-number></bp-prism-number>\n    </div>\n    <div *ngIf=\"debugAssets.prismBase\">\n      <bp-prism-base></bp-prism-base>\n    </div>\n    <div *ngIf=\"debugAssets.prismBlast\">\n      <bp-prism-blast></bp-prism-blast>\n    </div>\n    <div *ngIf=\"debugAssets.prismBlastIcon\">\n      <bp-prism-blast-icon></bp-prism-blast-icon>\n    </div>\n    <div *ngIf=\"debugAssets.scenery\">\n      <bp-prism-scenery></bp-prism-scenery>\n    </div>\n    <div class=\"button-container\">\n      <div *ngFor=\"let asset of assets\">\n        <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n          {{ asset.name }}\n        </button>\n      </div>\n      <div>\n        <button (click)=\"openDisplayGameOverDialog()\" class=\"animation-button button\">Game Over</button>\n      </div>\n      <div>\n        <button (click)=\"openDisplayGamePausedDialog()\" class=\"animation-button button\">Game Paused</button>\n      </div>\n      <div>\n        <button (click)=\"openDisplayNextLevelDialog()\" class=\"animation-button button\">Next Level</button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { GameConfigurationModel } from './model/game-configuration.model';\nimport { GameboardComponent } from './gameboard/gameboard.component';\nimport { CommonModule } from '@angular/common';\nimport { PrismComponent } from './prism/prism.component';\nimport { AlienComponent } from './aliens/alien/test-component/alien.component';\nimport { BaseComponent } from './base/test-component/base.component';\nimport { MainGunnerComponent } from './gunner/test-component/main-gunner.component';\nimport { MissileComponent } from './missile/test-component/missile.component';\nimport { NumberComponent } from './text/number/test-component/number.component';\nimport { LetterComponent } from './text/letter/test-component/letter.component';\nimport { PrismBlastComponent } from './prism/prism-blast/test-component/prism-blast.component';\nimport { PrismBlastIconComponent } from './prism/prism-blast-icon/test-component/prism-blast-icon.component';\nimport { SceneryComponent } from './scenery/test-component/scenery.component';\nimport { DisplayDialogComponent } from './text/display-dialog/display-dialog.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { GameInstructionComponent } from './game-instruction/game-instruction.component';\nimport { GameCookieService } from './service/game-cookie.service';\nimport { CookieService } from 'ngx-cookie-service';\nimport { DisplayDialogService } from './service/display-dialog.service';\nimport { GameService } from './service/game.service';\nimport { ImageService } from './service/image.service';\nimport { PathService } from './service/path.service';\n\n@NgModule({\n  declarations: [\n    AlienComponent,\n    DisplayDialogComponent,\n    GameboardComponent,\n    GameInstructionComponent,\n    LetterComponent,\n    MainGunnerComponent,\n    MissileComponent,\n    NumberComponent,\n    BaseComponent,\n    PrismBlastComponent,\n    PrismBlastIconComponent,\n    PrismComponent,\n    SceneryComponent\n  ],\n  imports: [CommonModule, MatDialogModule],\n  exports: [PrismComponent],\n  providers: [CookieService, DisplayDialogService, GameCookieService, GameService, ImageService, PathService]\n})\nexport class PrismGameModule {\n  static forRoot(gameConfiguration: GameConfigurationModel): ModuleWithProviders<PrismGameModule> {\n    return {\n      ngModule: PrismGameModule,\n      providers: [\n        {\n          provide: 'GameConfigurationData',\n          useValue: gameConfiguration\n        }\n      ]\n    };\n  }\n}\n","/*\n * Public API Surface of prism\n */\n\nexport * from './lib/prism/prism.component';\nexport * from './lib/prism.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","COLS","ROWS","ASSET_ANIMATION","COLORS","Subject","i1.ImageService","i3.GameCookieService","i4.GameService","i5","i1.GameService","i2.GameCookieService","i3.GameboardComponent","i4.AlienComponent","i5.LetterComponent","i6.MainGunnerComponent","i7.MissileComponent","i8.NumberComponent","i9.BaseComponent","i10.PrismBlastComponent","i11.PrismBlastIconComponent","i12.SceneryComponent","i13"],"mappings":"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G,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,EAAE,EAAE,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;AAC3H,IAAA,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,EAAE,EAAE,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC;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"}