UNPKG

@obliczeniowo/elementary

Version:
1 lines 48.6 kB
{"version":3,"file":"obliczeniowo-elementary-chess.mjs","sources":["../../../../projects/components/chess/enums/enums.ts","../../../../projects/components/chess/components/chess-field/chess-field.component.ts","../../../../projects/components/chess/components/chess-field/chess-field.component.html","../../../../projects/components/chess/classes/chess.ts","../../../../projects/components/chess/components/chess-pawn/chess-pawn.component.ts","../../../../projects/components/chess/components/chess-pawn/chess-pawn.component.html","../../../../projects/components/chess/classes/address.ts","../../../../projects/components/chess/classes/piece.ts","../../../../projects/components/chess/classes/chess-abstract-model.ts","../../../../projects/components/chess/components/chess/chess.component.ts","../../../../projects/components/chess/components/chess/chess.component.html","../../../../projects/components/chess/chess.module.ts","../../../../projects/components/chess/obliczeniowo-elementary-chess.ts"],"sourcesContent":["export enum ChessEnum {\r\n whiteKing = '♔',\r\n whiteQueen = '♕',\r\n whiteRook = '♖',\r\n whiteBishop = '♗',\r\n whiteKnight = '♘',\r\n whitePawn = '♙',\r\n\r\n blackKing = '♚',\r\n blackQueen = '♛',\r\n blackRook = '♜',\r\n blackBishop = '♝',\r\n blackKnight = '♞',\r\n blackPawn = '♟',\r\n\r\n nonePiece = ''\r\n}\r\n\r\nexport enum ChessColor {\r\n white,\r\n black\r\n}\r\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { ChessEnum } from '../../enums/enums';\r\n\r\n@Component({\r\n selector: 'obl-chess-field',\r\n templateUrl: './chess-field.component.html',\r\n styleUrls: ['./chess-field.component.scss'],\r\n standalone: false\r\n})\r\nexport class ChessFieldComponent {\r\n ChessEnum = ChessEnum;\r\n\r\n @Input() row!: number;\r\n @Input() column!: string;\r\n\r\n @HostBinding('class.chess-field') chessField = true;\r\n\r\n @HostBinding('class.white-field') get whiteField(): boolean {\r\n return this.row !== undefined && this.column !== undefined && this.isWhite;\r\n }\r\n\r\n @HostBinding('class.black-field') get blackField(): boolean {\r\n return this.row !== undefined && this.column !== undefined && this.isBlack;\r\n }\r\n\r\n get columnIndex(): number {\r\n return this.column.charCodeAt(0) - 'a'.charCodeAt(0) + 1;\r\n }\r\n\r\n get isBlack(): boolean {\r\n return ((this.row) + (this.columnIndex) % 2) % 2 === 0;\r\n }\r\n\r\n get isWhite(): boolean {\r\n return !this.isBlack;\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n","import { ChessEnum } from './../enums/enums';\r\n\r\nexport class Chess {\r\n static isWhite(piece: ChessEnum | undefined): boolean {\r\n switch (piece) {\r\n case ChessEnum.whiteBishop:\r\n case ChessEnum.whiteQueen:\r\n case ChessEnum.whiteRook:\r\n case ChessEnum.whiteKnight:\r\n case ChessEnum.whitePawn:\r\n case ChessEnum.whiteKing:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n static isBlack(piece: ChessEnum | undefined): boolean {\r\n return !Chess.isWhite(piece) && piece !== ChessEnum.nonePiece;\r\n }\r\n}\r\n","import { AfterViewInit, Component, ElementRef, Input, OnDestroy } from '@angular/core';\r\nimport { ChessEnum } from '../../enums/enums';\r\nimport { Chess } from '../../classes/chess';\r\n\r\n@Component({\r\n selector: 'obl-chess-pawn',\r\n templateUrl: './chess-pawn.component.html',\r\n styleUrls: ['./chess-pawn.component.scss'],\r\n standalone: false\r\n})\r\nexport class ChessPawnComponent implements OnDestroy, AfterViewInit {\r\n @Input() row!: number;\r\n @Input() column!: string;\r\n\r\n @Input() pawnType!: ChessEnum;\r\n\r\n dragstart = (event: any) => {\r\n event.dataTransfer.setData('text/plain', null);\r\n }\r\n\r\n constructor(private readonly elementRef: ElementRef<HTMLElement>) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.elementRef.nativeElement.setAttribute('draggable', 'true');\r\n this.elementRef.nativeElement.addEventListener('dragstart', this.dragstart, false);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.elementRef.nativeElement.removeEventListener('dragstart', this.dragstart);\r\n }\r\n\r\n isBlack(): boolean {\r\n return Chess.isBlack(this.pawnType);\r\n }\r\n}\r\n","<div\r\n [class]=\"'pawn-field ' + column + row\"\r\n (dragstart)=\"dragstart($event)\"\r\n draggable=\"true\"\r\n>\r\n {{ pawnType }}\r\n</div>\r\n","export type ChessColumn = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h';\r\nexport type ChessRow = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\r\n\r\nexport const columns: ChessColumn[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];\r\nexport const rows: ChessRow[] = [1, 2, 3, 4, 5, 6, 7, 8];\r\n\r\nexport class Address {\r\n column!: ChessColumn;\r\n row!: ChessRow;\r\n\r\n constructor(address: string) {\r\n if (address.length === 2) {\r\n if (columns.includes(address.charAt(0) as ChessColumn)) {\r\n this.column = address.charAt(0) as ChessColumn;\r\n } else {\r\n throw new Error(`This column not exist ${address.charAt(0)}`);\r\n }\r\n const row = parseInt(address.charAt(1), 10);\r\n if (rows.includes(row as ChessRow)) {\r\n this.row = row as ChessRow;\r\n } else {\r\n throw new Error(`This row not exist: ${row}`);\r\n }\r\n }\r\n }\r\n\r\n offset(row: number, column: number): Address | undefined {\r\n const columnIndex = columns.findIndex(columnI => columnI === this.column) + column;\r\n\r\n if (columnIndex < 0 || columnIndex > 7) {\r\n return undefined;\r\n }\r\n\r\n const rowPos = row + this.row;\r\n\r\n if (rowPos > 8 || rowPos < 1) {\r\n return undefined;\r\n }\r\n\r\n return new Address(columns[columnIndex] + rowPos);\r\n }\r\n\r\n toString(): string {\r\n return `${this.column}${this.row}`;\r\n }\r\n}\r\n","import { Address } from './address';\r\nimport { QueryList } from '@angular/core';\r\nimport { ChessPawnComponent } from '../components/chess-pawn/chess-pawn.component';\r\nimport { ChessEnum } from './../enums/enums';\r\nimport { Chess } from './chess';\r\n\r\nexport type ChessPiece = ChessEnum.whiteKing |\r\n ChessEnum.whiteQueen |\r\n ChessEnum.whiteRook |\r\n ChessEnum.whiteBishop |\r\n ChessEnum.whiteKnight |\r\n ChessEnum.whitePawn |\r\n ChessEnum.blackKing |\r\n ChessEnum.blackQueen |\r\n ChessEnum.blackRook |\r\n ChessEnum.blackBishop |\r\n ChessEnum.blackKnight |\r\n ChessEnum.blackPawn;\r\n\r\nexport abstract class AbstractPiece {\r\n protected _type!: ChessPiece;\r\n public get type(): ChessPiece {\r\n return this._type;\r\n }\r\n\r\n protected _address!: Address | undefined;\r\n public get address(): Address | undefined {\r\n return this._address;\r\n }\r\n\r\n constructor(type: ChessPiece, address: Address | undefined) {\r\n this._type = type;\r\n this._address = address;\r\n }\r\n\r\n abstract moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[];\r\n\r\n protected isEmpty(address: Address | undefined, chessPieces: QueryList<ChessPawnComponent>): boolean {\r\n return address !== undefined &&\r\n chessPieces.find(\r\n piece => piece.column === address.column && piece.row === address.row\r\n )?.pawnType === ChessEnum.nonePiece;\r\n }\r\n\r\n protected isOppositePiece(address: Address | undefined, chessPieces: QueryList<ChessPawnComponent>): boolean {\r\n if (address) {\r\n if (Chess.isWhite(this._type)) {\r\n return Chess.isBlack(chessPieces.find(piece => piece.column === address.column && piece.row === address.row)?.pawnType);\r\n } else {\r\n return Chess.isWhite(chessPieces.find(piece => piece.column === address.column && piece.row === address.row)?.pawnType);\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nexport class Pawn extends AbstractPiece {\r\n moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n if (!this.address) {\r\n return [];\r\n }\r\n\r\n const fields: string[] = [];\r\n const vector: [number, number] = Chess.isWhite(this._type) ? [1, 0] : [-1, 0];\r\n const start: number = Chess.isWhite(this._type) ? 2 : 7;\r\n\r\n const oneFieldUp = this.address.offset(vector[0], vector[1]);\r\n if (this.isEmpty(oneFieldUp, chessPieces) && oneFieldUp) {\r\n fields.push(oneFieldUp.toString());\r\n const twoFieldUp = this.address.offset(vector[0] * 2, vector[1]);\r\n if (this.address.row === start) {\r\n if (this.isEmpty(twoFieldUp, chessPieces) && twoFieldUp) {\r\n fields.push(twoFieldUp.toString());\r\n }\r\n }\r\n }\r\n\r\n const leftField = this.address.offset(vector[0], -1);\r\n const rightField = this.address.offset(vector[0], 1);\r\n\r\n if (leftField && this.isOppositePiece(leftField, chessPieces)) {\r\n fields.push(leftField.toString());\r\n }\r\n\r\n if (rightField && this.isOppositePiece(rightField, chessPieces)) {\r\n fields.push(rightField.toString());\r\n }\r\n\r\n return fields;\r\n }\r\n}\r\n\r\nexport class Knight extends AbstractPiece {\r\n moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n if (!this.address) {\r\n return [];\r\n }\r\n\r\n const fields: string[] = [];\r\n\r\n const offsets: [number, number][] = [\r\n [2, -1],\r\n [2, 1],\r\n [1, 2],\r\n [-1, 2],\r\n [-2, 1],\r\n [-2, -1],\r\n [-1, -2],\r\n [1, -2]\r\n ];\r\n\r\n offsets.forEach(\r\n offset => {\r\n const field = this.address?.offset(offset[0], offset[1]);\r\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\r\n if (field && (this.isEmpty(field, chessPieces) || this.isOppositePiece(field, chessPieces))) {\r\n fields.push(field.toString());\r\n }\r\n }\r\n );\r\n\r\n return fields;\r\n }\r\n}\r\n\r\nexport class Bishop extends AbstractPiece {\r\n moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n if (!this.address) {\r\n return [];\r\n }\r\n\r\n const fields: string[] = [];\r\n\r\n const offsets: [number, number][] = [\r\n [1, -1],\r\n [1, 1],\r\n [-1, 1],\r\n [-1, -1]\r\n ];\r\n\r\n offsets.forEach(\r\n offset => {\r\n for (let k = 1; k < 9; k++) {\r\n const field = this.address?.offset(offset[0] * k, offset[1] * k);\r\n const empty = this.isEmpty(field, chessPieces);\r\n if (field && (empty || this.isOppositePiece(field, chessPieces))) {\r\n fields.push(field.toString());\r\n }\r\n if (!empty || !field) {\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n\r\n return fields;\r\n }\r\n}\r\n\r\nexport class Rook extends AbstractPiece {\r\n moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n if (!this.address) {\r\n return [];\r\n }\r\n\r\n const fields: string[] = [];\r\n\r\n const offsets: [number, number][] = [\r\n [1, 0],\r\n [-1, 0],\r\n [0, 1],\r\n [0, -1]\r\n ];\r\n\r\n offsets.forEach(\r\n offset => {\r\n for (let k = 1; k < 9; k++) {\r\n const field = this.address?.offset(offset[0] * k, offset[1] * k);\r\n const empty = this.isEmpty(field, chessPieces);\r\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\r\n if (field && (empty || this.isOppositePiece(field, chessPieces))) {\r\n fields.push(field.toString());\r\n }\r\n if (!empty || !field) {\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n\r\n return fields;\r\n }\r\n}\r\n\r\nexport class Queen extends AbstractPiece {\r\n moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n if (!this.address) {\r\n return [];\r\n }\r\n\r\n const fields: string[] = [];\r\n\r\n const offsets: [number, number][] = [\r\n [1, -1],\r\n [1, 0],\r\n [1, 1],\r\n [0, 1],\r\n [0, -1],\r\n [-1, 1],\r\n [-1, 0],\r\n [-1, -1]\r\n ];\r\n\r\n offsets.forEach(\r\n offset => {\r\n for (let k = 1; k < 9; k++) {\r\n const field = this.address?.offset(offset[0] * k, offset[1] * k);\r\n const empty = this.isEmpty(field, chessPieces);\r\n if (field && (empty || this.isOppositePiece(field, chessPieces))) {\r\n fields.push(field.toString());\r\n }\r\n if (!empty || !field) {\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n\r\n return fields;\r\n }\r\n}\r\n\r\nexport class King extends AbstractPiece {\r\n moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n if (!this.address) {\r\n return [];\r\n }\r\n\r\n const fields: string[] = [];\r\n\r\n const offsets: [number, number][] = [\r\n [1, -1],\r\n [1, 0],\r\n [1, 1],\r\n [0, 1],\r\n [0, -1],\r\n [-1, 1],\r\n [-1, 0],\r\n [-1, -1]\r\n ];\r\n\r\n offsets.forEach(\r\n offset => {\r\n const field = this.address?.offset(offset[0], offset[1]);\r\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\r\n if (field && (this.isEmpty(field, chessPieces) || this.isOppositePiece(field, chessPieces))) {\r\n fields.push(field.toString());\r\n }\r\n }\r\n );\r\n\r\n return fields;\r\n }\r\n}\r\n\r\nexport class AbstractPieceFactory {\r\n static getPiece(type: ChessPiece, address: Address | undefined): AbstractPiece | undefined {\r\n switch (type) {\r\n case ChessEnum.blackBishop:\r\n case ChessEnum.whiteBishop:\r\n return new Bishop(type, address);\r\n case ChessEnum.whiteKing:\r\n case ChessEnum.blackKing:\r\n return new King(type, address);\r\n case ChessEnum.whitePawn:\r\n case ChessEnum.blackPawn:\r\n return new Pawn(type, address);\r\n case ChessEnum.whiteQueen:\r\n case ChessEnum.blackQueen:\r\n return new Queen(type, address);\r\n case ChessEnum.whiteRook:\r\n case ChessEnum.blackRook:\r\n return new Rook(type, address);\r\n case ChessEnum.whiteKnight:\r\n case ChessEnum.blackKnight:\r\n return new Knight(type, address);\r\n }\r\n return undefined;\r\n }\r\n}\r\n","import { ChessColor } from './../enums/enums';\r\nimport { QueryList } from '@angular/core';\r\nimport { ChessPawnComponent } from '../components/chess-pawn/chess-pawn.component';\r\nimport { ChessEnum } from '../enums/enums';\r\nimport { Address } from './address';\r\nimport { AbstractPiece, AbstractPieceFactory } from './piece';\r\nimport { Chess } from './chess';\r\n\r\nexport interface AddressPiece {\r\n address: string | undefined;\r\n piece: ChessEnum;\r\n chessPieces: QueryList<ChessPawnComponent>;\r\n}\r\n\r\nexport abstract class ChessAbstractModel {\r\n stopSetOnDrop = false;\r\n display: { add: boolean } = {\r\n add: true\r\n };\r\n\r\n /**\r\n * Triggered on dragged\r\n * @param dragged describe dragged field\r\n */\r\n abstract onDragged(dragged: AddressPiece): void;\r\n\r\n /**\r\n * Triggered on drop\r\n * @param dropped Describe dropped field\r\n * @returns true when dropped is done, false when dropped fail\r\n */\r\n abstract onDropped(dropped: AddressPiece): boolean;\r\n}\r\n\r\nexport class ChessDragAndDropModel extends ChessAbstractModel {\r\n onDragged(dragged: AddressPiece): void {\r\n }\r\n\r\n onDropped(dropped: AddressPiece): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class ChessPieceMoveModel extends ChessAbstractModel {\r\n protected draggedPiece: AbstractPiece | undefined;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.stopSetOnDrop = true;\r\n this.display = {\r\n add: false\r\n };\r\n }\r\n\r\n onDragged(dragged: AddressPiece): void {\r\n if (dragged.piece !== ChessEnum.nonePiece) {\r\n this.draggedPiece = AbstractPieceFactory.getPiece(\r\n dragged.piece,\r\n dragged.address && new Address(dragged.address) || undefined\r\n );\r\n } else {\r\n this.draggedPiece = undefined;\r\n }\r\n }\r\n\r\n onDropped(dropped: AddressPiece): boolean {\r\n if (this.draggedPiece) {\r\n const list = this.draggedPiece.moveFieldsList(dropped.chessPieces);\r\n\r\n const droppedField = dropped.chessPieces.find(piece => piece.column + piece.row === dropped.address);\r\n const draggedToField = dropped.chessPieces.find(\r\n piece => piece.column + piece.row === (this.draggedPiece?.address?.toString()));\r\n if (dropped.address && droppedField) {\r\n if (this.draggedPiece.address) {\r\n if (list.includes(dropped.address)) {\r\n droppedField.pawnType = this.pawnPromote(this.draggedPiece.type, new Address(dropped.address));\r\n if (draggedToField) {\r\n draggedToField.pawnType = ChessEnum.nonePiece;\r\n }\r\n return true;\r\n }\r\n } else {\r\n droppedField.pawnType = this.draggedPiece.type;\r\n return true;\r\n }\r\n } else if (draggedToField) {\r\n draggedToField.pawnType = this.draggedPiece.type;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected pawnPromote(type: ChessEnum, address: Address): ChessEnum {\r\n if (type === ChessEnum.whitePawn && address.row === 8) {\r\n return ChessEnum.whiteQueen;\r\n }\r\n if (type === ChessEnum.blackPawn && address.row === 1) {\r\n return ChessEnum.blackQueen;\r\n }\r\n\r\n return type;\r\n }\r\n}\r\n\r\nexport class PlayChessModel extends ChessPieceMoveModel {\r\n protected moveTurn: ChessColor = ChessColor.white;\r\n\r\n onDragged(dragged: AddressPiece): void {\r\n if (\r\n this.moveTurn === ChessColor.white && Chess.isBlack(dragged.piece) ||\r\n this.moveTurn === ChessColor.black && Chess.isWhite(dragged.piece)\r\n ) {\r\n return;\r\n }\r\n super.onDragged(dragged);\r\n }\r\n\r\n onDropped(dropped: AddressPiece): boolean {\r\n if (super.onDropped(dropped)) {\r\n this.moveTurn = this.moveTurn === ChessColor.black ? ChessColor.white : ChessColor.black;\r\n this.draggedPiece = undefined;\r\n return true;\r\n }\r\n this.draggedPiece = undefined;\r\n return false;\r\n }\r\n}\r\n","import { ChessDragAndDropModel } from './../../classes/chess-abstract-model';\r\nimport { AfterViewInit, Component, ElementRef, Input, OnDestroy, QueryList, ViewChildren } from '@angular/core';\r\nimport { ChessColumn, ChessRow, columns, rows } from '../../classes/address';\r\nimport { ChessAbstractModel } from '../../classes/chess-abstract-model';\r\nimport { ChessEnum } from '../../enums/enums';\r\nimport { ChessPawnComponent } from '../chess-pawn/chess-pawn.component';\r\n\r\n@Component({\r\n selector: 'obl-chess',\r\n templateUrl: './chess.component.html',\r\n styleUrls: ['./chess.component.scss'],\r\n standalone: false\r\n})\r\nexport class ChessComponent implements AfterViewInit, OnDestroy {\r\n ChessEnum = ChessEnum;\r\n\r\n dragged!: HTMLElement;\r\n\r\n @ViewChildren(ChessPawnComponent) chessPieces!: QueryList<ChessPawnComponent>;\r\n\r\n @Input() chessPawnsMap: Map<string, ChessEnum> = new Map<string, ChessEnum>();\r\n @Input() chessModel: ChessAbstractModel = new ChessDragAndDropModel();\r\n\r\n public get stopSetOnDrop(): boolean {\r\n return this.chessModel.stopSetOnDrop;\r\n }\r\n\r\n private _reverse = false;\r\n public get reverse(): boolean {\r\n return this._reverse;\r\n }\r\n\r\n @Input()\r\n public set reverse(value) {\r\n this._reverse = value;\r\n if (value) {\r\n this.rows = rows.reverse();\r\n this.columns = columns.reverse();\r\n } else {\r\n this.rows = rows;\r\n this.columns = columns;\r\n }\r\n }\r\n\r\n private readonly chessPawnsMapComponent: Map<string, ChessPawnComponent> = new Map<string, ChessPawnComponent>();\r\n\r\n rows: ChessRow[] = rows.reverse();\r\n columns: ChessColumn[] = columns;\r\n\r\n private get hostHtml(): HTMLElement {\r\n return this.elementRef.nativeElement;\r\n }\r\n\r\n dragstart = (event: any) => {\r\n this.dragged = event.target;\r\n event.target.style.opacity = 0.5;\r\n this.chessModel.onDragged(\r\n {\r\n address: Array.from(this.dragged.classList).filter(className => className.length === 2)[0],\r\n piece: this.dragged.innerText as any,\r\n chessPieces: this.chessPieces\r\n }\r\n );\r\n }\r\n\r\n dragend = (event: any) => {\r\n event.target.style.opacity = '';\r\n }\r\n\r\n drag = (event: any) => {\r\n }\r\n\r\n dragover = (event: any) => {\r\n event.preventDefault();\r\n }\r\n\r\n dragenter = (event: any) => {\r\n if (event.target.className === 'dropzone') {\r\n event.target.style.background = 'purple';\r\n }\r\n }\r\n\r\n dragleave = (event: any) => {\r\n if (event.target.className === 'dropzone') {\r\n event.target.style.background = '';\r\n }\r\n }\r\n\r\n drop = (event: any) => {\r\n event.preventDefault();\r\n const target: HTMLElement = event.target.classList.contains('pawn-field') ? event.target.parentElement : event.target;\r\n if (target) {\r\n const pawn: ChessPawnComponent | undefined = this.chessPawnsMapComponent.get(target.className);\r\n // get name of class that is an address of field\r\n const name = Array.from(this.dragged.classList).filter(className => className.length === 2)[0];\r\n const pawnFrom: ChessPawnComponent | undefined = this.chessPawnsMapComponent.get(name);\r\n if (!this.stopSetOnDrop) {\r\n if (pawnFrom) {\r\n pawnFrom.pawnType = ChessEnum.nonePiece;\r\n }\r\n if (pawn && (this.dragged.innerText as ChessEnum) !== ChessEnum.nonePiece) {\r\n pawn.pawnType = this.dragged.innerText as ChessEnum;\r\n }\r\n }\r\n this.chessModel.onDropped(\r\n {\r\n address: target.className,\r\n piece: this.dragged.innerText as any,\r\n chessPieces: this.chessPieces\r\n }\r\n );\r\n }\r\n }\r\n\r\n constructor(private readonly elementRef: ElementRef<HTMLElement>) { }\r\n\r\n ngAfterViewInit(): void {\r\n this.chessPieces.forEach((pawn: any) => {\r\n if (pawn.column && pawn.row) {\r\n this.chessPawnsMapComponent.set(pawn.column + pawn.row, pawn);\r\n }\r\n });\r\n\r\n this.hostHtml.addEventListener('drag', this.drag, false);\r\n\r\n this.hostHtml.addEventListener('dragstart', this.dragstart, false);\r\n this.hostHtml.addEventListener('dragend', this.dragend, false);\r\n this.hostHtml.addEventListener('dragover', this.dragover, false);\r\n this.hostHtml.addEventListener('dragenter', this.dragenter, false);\r\n this.hostHtml.addEventListener('dragleave', this.dragleave, false);\r\n this.hostHtml.addEventListener('drop', this.drop, false);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.hostHtml.removeEventListener('drag', this.drag);\r\n this.hostHtml.removeEventListener('dragstart', this.dragstart);\r\n this.hostHtml.removeEventListener('dragend', this.dragend);\r\n this.hostHtml.removeEventListener('dragover', this.dragover);\r\n this.hostHtml.removeEventListener('dragenter', this.dragenter);\r\n this.hostHtml.removeEventListener('dragleave', this.dragleave);\r\n this.hostHtml.removeEventListener('drop', this.drop);\r\n }\r\n\r\n setChessPawn(column: string, row: number, pawn: ChessEnum): void {\r\n this.chessPawnsMap.set(column + row, pawn);\r\n }\r\n\r\n moveChessPawn(startColumn: string, startRow: number, endColumn: string, endRow: number): void {\r\n const chessPawn: ChessEnum = this.getChessPawn(startColumn + startRow);\r\n if (chessPawn === ChessEnum.nonePiece) {\r\n return;\r\n }\r\n this.setChessPawn(endColumn, endRow, chessPawn);\r\n }\r\n\r\n getChessPawn(address: string): ChessEnum {\r\n const pawn: ChessEnum = this.chessPawnsMap.get(address) as ChessEnum;\r\n return pawn || ChessEnum.nonePiece;\r\n }\r\n}\r\n","<div class=\"columns-header\">\r\n @for (column of columns; track column) {\r\n <div class=\"column-header\">{{ column }}</div>\r\n }\r\n</div>\r\n\r\n<div class=\"pawns-and-board\">\r\n @if (chessModel.display.add) {\r\n <div class=\"white-pawns\">\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.whiteKing\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.whiteQueen\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.whiteRook\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.whiteBishop\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.whiteKnight\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.whitePawn\"></obl-chess-pawn>\r\n </div>\r\n }\r\n\r\n <div>\r\n @for (row of rows; track $index) {\r\n <div class=\"row-fields\">\r\n <div class=\"row-header\">\r\n <div>{{ row }}</div>\r\n </div>\r\n\r\n @for (column of columns; track $index) {\r\n <obl-chess-field\r\n class=\"dropzone\"\r\n [row]=\"row\"\r\n [column]=\"column\"\r\n [id]=\"column + row\"\r\n >\r\n <obl-chess-pawn\r\n [ngClass]=\"column + row\"\r\n [row]=\"row\"\r\n [column]=\"column\"\r\n [pawnType]=\"getChessPawn(column + row)\"\r\n draggable=\"true\"\r\n >\r\n </obl-chess-pawn>\r\n </obl-chess-field>\r\n }\r\n\r\n <div class=\"row-header\">\r\n <div>{{ row }}</div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (chessModel.display.add) {\r\n <div class=\"black-pawns\">\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.blackKing\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.blackQueen\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.blackRook\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.blackBishop\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.blackKnight\"></obl-chess-pawn>\r\n <obl-chess-pawn [pawnType]=\"ChessEnum.blackPawn\"></obl-chess-pawn>\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"columns-header\">\r\n @for (column of columns; track column) {\r\n <div class=\"column-header\">{{ column }}</div>\r\n }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChessFieldComponent } from './components/chess-field/chess-field.component';\r\nimport { ChessPawnComponent } from './components/chess-pawn/chess-pawn.component';\r\nimport { ChessComponent } from './components/chess/chess.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n ChessComponent,\r\n ChessFieldComponent,\r\n ChessPawnComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n ChessComponent,\r\n ChessFieldComponent,\r\n ChessPawnComponent\r\n ]\r\n})\r\nexport class ChessModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.ChessFieldComponent","i3.ChessPawnComponent"],"mappings":"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"}