diff options
| author | Maks Jopek <maksymilian.jopek@prym-soft.pl> | 2021-04-25 12:07:36 +0200 |
|---|---|---|
| committer | Maks Jopek <maksymilian.jopek@prym-soft.pl> | 2021-04-25 12:07:36 +0200 |
| commit | 013319d7a4651d1708280f556e39c2f03839426a (patch) | |
| tree | 704e51c6d4d96360611819628be3c78edec2f9d8 /frontend/ts/logic.ts | |
| parent | 13dcc2c8fc1d11e3b94432fffc4c4f186bd94d29 (diff) | |
| download | fia-013319d7a4651d1708280f556e39c2f03839426a.tar.gz fia-013319d7a4651d1708280f556e39c2f03839426a.tar.zst fia-013319d7a4651d1708280f556e39c2f03839426a.zip | |
Almost going in a circle
Diffstat (limited to 'frontend/ts/logic.ts')
| -rw-r--r-- | frontend/ts/logic.ts | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/frontend/ts/logic.ts b/frontend/ts/logic.ts new file mode 100644 index 0000000..b677307 --- /dev/null +++ b/frontend/ts/logic.ts @@ -0,0 +1,118 @@ +import { Coordinates, GameBoard, HomesOrBases, Square, tColors } from "../../helpers/helpersBack"; + +export default class Logic { + static moveFromBase(gameBoard: GameBoard, color: tColors,) { + let start: Square, i: number; + + gameBoard.map.forEach((square, j) => { + if (square.start === color) { + start = square; + i = j; + } + }) + + gameBoard.bases[color as keyof HomesOrBases].forEach((chequer, j) => { + if (chequer.chequer > -1) { + chequer.ghost = { + where: { + from: "base", oldIndex: j, + to: "map", newIndex: i + }, + color: color, + coords: { x: start.x, y: start.y } + }; + } + }) + + return gameBoard; + } + static moveInMap(gameBoard: GameBoard, color: tColors, number: number) { + gameBoard.map.forEach((square, i) => { + if (square.chequers.length > 0 && square.chequers[0].color === color) { + + for (let chequer of square.chequers) { + let x: number | undefined, y: number | undefined, coords: Coordinates | undefined, inMap: boolean, + homeIndex: number | undefined, befStart: number | undefined; + + gameBoard.map.forEach((square, i) => { + if (square.start === color) + befStart = i - 1; + }); + if (befStart === undefined) + throw new Error("before start doesnt exist"); + + let range = (start: number, end: number) => Array.from(Array(end + 1).keys()).slice(start); + // if(i >= befStart && i + number <= befStart) { + if (range(i, i + number).includes(befStart)) { + // homeIndex = gameBoard.map.length - i - 1 - number - 1; + homeIndex = number - befStart + i; + inMap = false; + + if (homeIndex < gameBoard.homes[0].length) { + x = gameBoard.homes[color as keyof HomesOrBases][homeIndex].x; + y = gameBoard.homes[color as keyof HomesOrBases][homeIndex].y; + } + else { + x = y = undefined; + } + } else { + if(i + number >= gameBoard.map.length) + number += i - gameBoard.map.length - 1 - number; //* -$number 'cause adding $number on 62 && 63 + // i += number - gameBoard.map.length - 1 - number; //* -$number 'cause adding $number on 62 && 63 + console.log("newIndex: ", i + number) + x = gameBoard.map[i + number].x; + y = gameBoard.map[i + number].y; + inMap = true; + } + + if (x === undefined || y === undefined) + coords = undefined; + else + coords = { x, y }; + + chequer.ghost = { + where: { + from: "map", oldIndex: i, + to: (inMap === true ? "map" : "home"), newIndex: homeIndex || i + number + }, + color: color, + coords, + } + } + } + }) + + return gameBoard; + } + static moveInHome(gameBoard: GameBoard, color: tColors, number: number) { + let home = gameBoard.homes[color as keyof HomesOrBases]; + + home.forEach((chequer, i) => { + if (chequer.chequer > -1) { + let x: number | undefined, y: number | undefined, coords: Coordinates | undefined; + if (home[i + number] !== undefined) { + x = home[i + number].x; + y = home[i + number].y; + } else { + x = y = undefined; + } + + if (x === undefined || y === undefined) + coords = undefined; + else + coords = { x, y }; + + chequer.ghost = { + where: { + from: "home", oldIndex: i, + to: "home", newIndex: i + number + }, + color: color, + coords, + }; + } + }); + + return gameBoard; + } +}
\ No newline at end of file |
