Skip to content

Commit

Permalink
Improved piece abstraction
Browse files Browse the repository at this point in the history
  • Loading branch information
Ido-Barnea committed Mar 29, 2024
1 parent 0acb641 commit d4311fa
Show file tree
Hide file tree
Showing 21 changed files with 90 additions and 90 deletions.
20 changes: 10 additions & 10 deletions core/development/Game.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { Bishop } from './logic/pieces/Bishop';
import { King } from './logic/pieces/King';
import { Knight } from './logic/pieces/Knight';
import { Pawn } from './logic/pieces/Pawn';
import { Piece } from './logic/pieces/Piece';
import { Queen } from './logic/pieces/Queen';
import { Rook } from './logic/pieces/Rook';
import { RulesManager } from './logic/rules/RulesManager';
Expand All @@ -22,14 +21,15 @@ import { addItemToShop } from './ui/ShopUI';
import { Shop } from './logic/items/Shop';
import { PlayerColor } from './logic/players/types/PlayerColor';
import { PlayerInventory } from './logic/inventory/PlayerInventory';
import { BasePiece } from './logic/pieces/abstract/BasePiece';

export const shop = new Shop();

let rulesManager: RulesManager;
const whitePlayer = new Player(PlayerColor.WHITE, new PlayerInventory());
const blackPlayer = new Player(PlayerColor.BLACK, new PlayerInventory());
const players: Array<Player> = [whitePlayer, blackPlayer];
let pieces: Array<Piece> = [
let pieces: Array<BasePiece> = [
new Rook(blackPlayer, { coordinates: [0, 0], boardId: OVERWORLD_BOARD_ID }),
new Knight(blackPlayer, { coordinates: [1, 0], boardId: OVERWORLD_BOARD_ID }),
new Bishop(blackPlayer, { coordinates: [2, 0], boardId: OVERWORLD_BOARD_ID }),
Expand Down Expand Up @@ -70,9 +70,9 @@ let roundCounter = 1;
let deathCounter = 0;
let isCastling = false;
let isFriendlyFire = false;
let killerPiece: Piece | undefined = undefined;
let killerPiece: BasePiece | undefined = undefined;
let wasItemPlacedThisTurn = false;
let fellOffTheBoardPiece: Piece | undefined;
let fellOffTheBoardPiece: BasePiece | undefined;
let movesLeft = 0;

function initializeGame() {
Expand Down Expand Up @@ -180,11 +180,11 @@ function getPlayers(): Array<Player> {
return players;
}

function getPieces(): Array<Piece> {
function getPieces(): Array<BasePiece> {
return pieces;
}

function setPieces(updatedPieces: Array<Piece>) {
function setPieces(updatedPieces: Array<BasePiece>) {
pieces = updatedPieces;
}

Expand Down Expand Up @@ -232,19 +232,19 @@ function setIsFriendlyFire(_isFriendlyFire: boolean) {
isFriendlyFire = _isFriendlyFire;
}

function getKillerPiece(): Piece | undefined {
function getKillerPiece(): BasePiece | undefined {
return killerPiece;
}

function setKillerPiece(_killerPiece: Piece) {
function setKillerPiece(_killerPiece: BasePiece) {
killerPiece = _killerPiece;
}

function getFellOffTheBoardPiece(): Piece | undefined {
function getFellOffTheBoardPiece(): BasePiece | undefined {
return fellOffTheBoardPiece;
}

function setFellOffTheBoardPiece(_fellOffTheBoardPiece: Piece | undefined) {
function setFellOffTheBoardPiece(_fellOffTheBoardPiece: BasePiece | undefined) {
fellOffTheBoardPiece = _fellOffTheBoardPiece;
}

Expand Down
18 changes: 9 additions & 9 deletions core/development/LogicAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
getPieceByPosition,
} from './logic/Utilities';
import { BaseItem } from './logic/items/abstract/Item';
import { Piece } from './logic/pieces/Piece';
import { Position, Square } from './logic/pieces/PiecesUtilities';
import {
destroyElementOnBoard,
Expand All @@ -37,12 +36,13 @@ import { Trap } from './logic/items/Trap';
import { HEAVEN_BOARD_ID, HELL_BOARD_ID } from './Constants';
import { showUpgradeablePiecesElements } from './ui/UpgradeUI';
import { PlayerColor } from './logic/players/types/PlayerColor';
import { BasePiece } from './logic/pieces/abstract/BasePiece';

export function renderScreen() {
renderPlayersInformation();
}

function findPieceAtPosition(position: Position): Piece | undefined {
function findPieceAtPosition(position: Position): BasePiece | undefined {
return game
.getPieces()
.find((piece) => comparePositions(piece.position, position));
Expand Down Expand Up @@ -118,7 +118,7 @@ export function onFellOffTheBoardTriggered(
onPieceFellOffTheBoard(draggedPiece);
}

function highlightLegalMoves(piece: Piece, boardId: string) {
function highlightLegalMoves(piece: BasePiece, boardId: string) {
// Remove all highlights
const allSquareElements = getAllSquareElements(boardId);
for (const squareElement of allSquareElements) {
Expand Down Expand Up @@ -155,7 +155,7 @@ export function onPieceSelected(pieceElement: HTMLElement, boardId: string) {
highlightLegalMoves(piece, boardId);
}

export function upgradePiece(upgradeablePiece: Piece, upgradedPiece: Piece) {
export function upgradePiece(upgradeablePiece: BasePiece, upgradedPiece: BasePiece) {
const currentPlayer = game.getCurrentPlayer();
if (currentPlayer.xp < upgradedPiece.price) return;
currentPlayer.xp -= upgradedPiece.price;
Expand All @@ -177,7 +177,7 @@ export function upgradePiece(upgradeablePiece: Piece, upgradedPiece: Piece) {
}

export function movePieceOnBoard(
draggedPiece: Piece,
draggedPiece: BasePiece,
targetPosition: Position,
) {
if (!draggedPiece.position) return;
Expand Down Expand Up @@ -207,7 +207,7 @@ export function movePieceOnBoard(
);
}

export function destroyPieceOnBoard(piece: Piece, originBoardId?: string) {
export function destroyPieceOnBoard(piece: BasePiece, originBoardId?: string) {
if (!piece.position) return;

originBoardId = originBoardId || piece.position.boardId;
Expand Down Expand Up @@ -241,7 +241,7 @@ export function destroyItemOnBoard(item: BaseItem) {
destroyElementOnBoard(squareId, item.position.boardId);
}

export function destroyItemOnPiece(piece: Piece) {
export function destroyItemOnPiece(piece: BasePiece) {
if (!piece.position || !piece.isEquipedItem) return;

const pieceCoordinates = piece.position.coordinates;
Expand All @@ -251,7 +251,7 @@ export function destroyItemOnPiece(piece: Piece) {
destroyElementOnPiece(squareId, piece.position.boardId);
}

export function spawnPieceOnBoard(piece: Piece) {
export function spawnPieceOnBoard(piece: BasePiece) {
const pieceCoordinates = piece.position?.coordinates;
const squareId = pieceCoordinates?.join(',');

Expand All @@ -277,7 +277,7 @@ export function spawnItemOnPiece(item: BaseItem) {
spawnItemOnChildElement(item, squareId, true);
}

export function changePieceToAnotherPlayer(piece: Piece) {
export function changePieceToAnotherPlayer(piece: BasePiece) {
const squareId = piece.position?.coordinates.join(',');
const boardId = piece.position?.boardId;
if (!boardId || !squareId) return;
Expand Down
46 changes: 23 additions & 23 deletions core/development/logic/PieceLogic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ import { BaseItem } from './items/abstract/Item';
import { Trap } from './items/Trap';
import { King } from './pieces/King';
import { Pawn } from './pieces/Pawn';
import { Piece } from './pieces/Piece';
import { Position, Square } from './pieces/PiecesUtilities';
import { Player } from './players/Player';
import { Knight } from './pieces/Knight';
import { KillLog, Log, MovementLog } from '../ui/logs/Log';
import { BasePiece } from './pieces/abstract/BasePiece';

function validatePlayerAction(
draggedPiece: Piece,
target: Piece | Square | BaseItem,
draggedPiece: BasePiece,
target: BasePiece | Square | BaseItem,
): boolean {
if (!isPlayerAllowedToAct(draggedPiece.player)) return false;
if (draggedPiece === target) return false;
Expand Down Expand Up @@ -62,7 +62,7 @@ function getPathPositions(start: Position, end: Position): Array<Position> {
return path;
}

function simulatePath(piece: Piece, targetPosition: Position) {
function simulatePath(piece: BasePiece, targetPosition: Position) {
const currentPosition = piece.position;
if (!currentPosition) return;
const pathPositions: Array<Position> =
Expand All @@ -81,12 +81,12 @@ function simulatePath(piece: Piece, targetPosition: Position) {
});
}

function revertPieceMoveOnBoard(piece: Piece) {
function revertPieceMoveOnBoard(piece: BasePiece) {
if (!piece.position) return;
movePieceOnBoard(piece, piece.position);
}

export function onPieceFellOffTheBoard(draggedPiece: Piece) {
export function onPieceFellOffTheBoard(draggedPiece: BasePiece) {
if (!draggedPiece.position) return;
draggedPiece.position.boardId = VOID_BOARD_ID;
killPieceByGame(draggedPiece, 'the void');
Expand All @@ -95,8 +95,8 @@ export function onPieceFellOffTheBoard(draggedPiece: Piece) {
}

export function onPlayerAction(
draggedPiece: Piece,
target: Piece | Square | BaseItem,
draggedPiece: BasePiece,
target: BasePiece | Square | BaseItem,
) {
if (!validatePlayerAction(draggedPiece, target) || !target.position) {
revertPieceMoveOnBoard(draggedPiece);
Expand All @@ -114,7 +114,7 @@ export function onPlayerAction(
// If it did, return.
if (pieceBoard !== newPieceBoard) return;

if (target instanceof Piece) {
if (target instanceof BasePiece) {
onActionAttackMove(draggedPiece, target);
} else {
const targetSquare =
Expand All @@ -126,7 +126,7 @@ export function onPlayerAction(
}
}

function onActionAttackMove(draggedPiece: Piece, targetPiece: Piece) {
function onActionAttackMove(draggedPiece: BasePiece, targetPiece: BasePiece) {
if (!targetPiece.position) return;
game.setIsFriendlyFire(targetPiece.player === draggedPiece.player);
const isSuccessfulKill = killPieceByAnotherPiece(targetPiece, draggedPiece);
Expand All @@ -136,7 +136,7 @@ function onActionAttackMove(draggedPiece: Piece, targetPiece: Piece) {
move(draggedPiece, targetSquare.position);
}

function onActionNonAttackMove(draggedPiece: Piece, targetSquare: Square) {
function onActionNonAttackMove(draggedPiece: BasePiece, targetSquare: Square) {
if (draggedPiece instanceof Pawn) {
draggedPiece.checkInitialDoubleStep(targetSquare.position);

Expand Down Expand Up @@ -210,7 +210,7 @@ export function isPlayerAllowedToAct(player: Player) {
}

function move(
draggedPiece: Piece,
draggedPiece: BasePiece,
targetPosition: Position,
shouldEndTurn = true,
) {
Expand All @@ -227,7 +227,7 @@ function move(
if (shouldEndTurn) game.endMove();
}

function failToKillPiece(draggedPiece: Piece, targetPiece: Piece) {
function failToKillPiece(draggedPiece: BasePiece, targetPiece: BasePiece) {
if (!targetPiece.position || !draggedPiece.position) return;
destroyItemOnPiece(targetPiece);

Expand Down Expand Up @@ -259,8 +259,8 @@ function failToKillPiece(draggedPiece: Piece, targetPiece: Piece) {
}

function killPieceByAnotherPiece(
targetPiece: Piece,
draggedPiece: Piece,
targetPiece: BasePiece,
draggedPiece: BasePiece,
): boolean {
targetPiece.health--;
if (targetPiece.health > 0) {
Expand All @@ -279,12 +279,12 @@ function killPieceByAnotherPiece(
return true;
}

function killPieceByGame(targetPiece: Piece, killCause: string) {
function killPieceByGame(targetPiece: BasePiece, killCause: string) {
killPiece(targetPiece);
new KillLog(targetPiece, killCause).addToQueue();
}

function killPiece(targetPiece: Piece) {
function killPiece(targetPiece: BasePiece) {
const originBoardId = targetPiece.position?.boardId;

if (targetPiece.position?.boardId === OVERWORLD_BOARD_ID) {
Expand All @@ -298,7 +298,7 @@ function killPiece(targetPiece: Piece) {
return true;
}

function handleOverworldKill(targetPiece: Piece) {
function handleOverworldKill(targetPiece: BasePiece) {
if (!targetPiece.position) return;
destroyPieceOnBoard(targetPiece);

Expand All @@ -312,7 +312,7 @@ function handleOverworldKill(targetPiece: Piece) {
handlePieceSpawning(targetPiece);
}

export function permanentlyKillPiece(targetPiece: Piece) {
export function permanentlyKillPiece(targetPiece: BasePiece) {
if (!targetPiece.position) return;
game.increaseDeathCounter();

Expand All @@ -322,7 +322,7 @@ export function permanentlyKillPiece(targetPiece: Piece) {
if (targetPiece instanceof King) endGame();
}

function handlePieceSpawning(spawningPiece: Piece) {
function handlePieceSpawning(spawningPiece: BasePiece) {
game.getPieces().forEach((piece) => {
const areOnTheSamePosition = comparePositions(
spawningPiece.position,
Expand All @@ -344,7 +344,7 @@ function handlePieceSpawning(spawningPiece: Piece) {
spawnPieceOnBoard(spawningPiece);
}

function onActionPieceToItem(piece: Piece, item: BaseItem) {
function onActionPieceToItem(piece: BasePiece, item: BaseItem) {
switch (item.name) {
case 'piggy bank': {
pieceMovedOnPiggyBank(piece, item as PiggyBank);
Expand All @@ -357,7 +357,7 @@ function onActionPieceToItem(piece: Piece, item: BaseItem) {
}
}

function pieceMovedOnTrap(draggedPiece: Piece, trap: Trap) {
function pieceMovedOnTrap(draggedPiece: BasePiece, trap: Trap) {
if (!trap.position) return;

move(draggedPiece, trap.position, false);
Expand All @@ -371,7 +371,7 @@ function pieceMovedOnTrap(draggedPiece: Piece, trap: Trap) {
}

export function pieceMovedOnPiggyBank(
draggedPiece: Piece,
draggedPiece: BasePiece,
piggyBank: PiggyBank,
) {
if (!draggedPiece.position) return;
Expand Down
4 changes: 2 additions & 2 deletions core/development/logic/Utilities.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { game } from '../Game';
import { Piece } from './pieces/Piece';
import { Position } from './pieces/PiecesUtilities';
import { BasePiece } from './pieces/abstract/BasePiece';

export function comparePositions(
firstPosition: Position | undefined,
Expand All @@ -16,7 +16,7 @@ export function comparePositions(
return areBoardsEqual && arePositionsEqual;
}

export function getPieceByPosition(position: Position): Piece | undefined {
export function getPieceByPosition(position: Position): BasePiece | undefined {
return game.getPieces().find((piece) => {
return comparePositions(position, piece.position);
});
Expand Down
4 changes: 2 additions & 2 deletions core/development/logic/pieces/Bishop.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { bishopResource } from '../../ui/Resources';
import { Piece } from './Piece';
import { Player } from '../players/Player';
import { Position } from './PiecesUtilities';
import { getPieceByPosition } from '../Utilities';
import { PlayerColor } from '../players/types/PlayerColor';
import { BasePiece } from './abstract/BasePiece';

export class Bishop extends Piece {
export class Bishop extends BasePiece {
constructor(player: Player, position?: Position) {
const icon = player.color === PlayerColor.WHITE ? '♗' : '♝';
super(bishopResource, icon, 'Bishop', player, position);
Expand Down
4 changes: 2 additions & 2 deletions core/development/logic/pieces/DoubleQueen.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { doubleQueenResource } from '../../ui/Resources';
import { Piece } from './Piece';
import { Player } from '../players/Player';
import { Position } from './PiecesUtilities';
import { getPieceByPosition } from '../Utilities';
import { PlayerColor } from '../players/types/PlayerColor';
import { BasePiece } from './abstract/BasePiece';

export class DoubleQueen extends Piece {
export class DoubleQueen extends BasePiece {
constructor(player: Player, position?: Position) {
const icon = player.color === PlayerColor.WHITE ? '♕x2' : '♛x2';
super(doubleQueenResource, icon, 'Double Queen', player, position);
Expand Down
4 changes: 2 additions & 2 deletions core/development/logic/pieces/Golem.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { golemResource } from '../../ui/Resources';
import { Piece } from './Piece';
import { Player } from '../players/Player';
import { Position } from './PiecesUtilities';
import { getPieceByPosition } from '../Utilities';
import { BasePiece } from './abstract/BasePiece';

export class Golem extends Piece {
export class Golem extends BasePiece {
constructor(player: Player, position?: Position) {
super(golemResource, '🗿', 'Golem', player, position);

Expand Down
Loading

0 comments on commit d4311fa

Please sign in to comment.