From 7b5d80f4d3129bc3d87cfa0e6e14a7e8443e6336 Mon Sep 17 00:00:00 2001
From: MasterPyo <olivier.pillods@gmail.com>
Date: Thu, 27 Apr 2023 16:15:47 +0200
Subject: [PATCH] rook works, both sides, from king And from rook. promotion
 works, queen only

---
 .../src/main/java/controller/Main.java        |   2 +-
 .../MavenChess/src/main/java/model/Board.java |  24 ++-
 .../MavenChess/src/main/java/model/Piece.java |   2 +-
 .../src/main/java/view/BoardView.java         | 180 ++++++++++++------
 .../src/main/java/view/CustomMaterial.java    |   4 +-
 .../src/main/java/view/PieceView.java         |   2 +-
 .../target/classes/controller/Main.class      | Bin 4707 -> 4781 bytes
 .../target/classes/model/Board.class          | Bin 3363 -> 3787 bytes
 .../target/classes/model/Piece.class          | Bin 1094 -> 1180 bytes
 .../target/classes/view/BoardView.class       | Bin 7567 -> 8275 bytes
 .../target/classes/view/CustomMaterial.class  | Bin 1725 -> 1730 bytes
 .../target/classes/view/PieceView.class       | Bin 1123 -> 1209 bytes
 12 files changed, 141 insertions(+), 73 deletions(-)

diff --git a/MavenChess/MavenChess/src/main/java/controller/Main.java b/MavenChess/MavenChess/src/main/java/controller/Main.java
index 0637b74..0725fe2 100644
--- a/MavenChess/MavenChess/src/main/java/controller/Main.java
+++ b/MavenChess/MavenChess/src/main/java/controller/Main.java
@@ -65,7 +65,7 @@ public class Main extends Application {
 		// event - click on (visual) "colored tiles" to move the selected piece there
 		for(int n = 0 ; n < 64 ; n++) {
 			TileView tile = boardView.getTile(n);
-			tile.getObj().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> boardView.clickTile(material, tile, board));
+			tile.getObj().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> boardView.clickTile(material, model, tile, board));
 		}
 
 		// start --------------------------------------------------------------
diff --git a/MavenChess/MavenChess/src/main/java/model/Board.java b/MavenChess/MavenChess/src/main/java/model/Board.java
index 7a0e838..6abb931 100644
--- a/MavenChess/MavenChess/src/main/java/model/Board.java
+++ b/MavenChess/MavenChess/src/main/java/model/Board.java
@@ -18,14 +18,12 @@ public class Board {
 		int y;
 		for(int color = Piece.WHITE ; color == Piece.WHITE || color == Piece.BLACK ; color++) {
 			// placement of pawns
-			if(color == Piece.WHITE) { y = 2; }
-			else { y = 7; }
+			if(color == Piece.WHITE) { y = 2; } else { y = 7; }
 			for(int x = A ; x <= H ; x++) {
 				createPiece(x, y, color, PAWN); // fills line 2 and line 7 with pawns
 			}
 			// placement of rook, knight, bishop, queen, king - line 1 and line 8
-			if(color == Piece.WHITE) { y = 1; }
-			else { y = 8; }
+			if(color == Piece.WHITE) { y = 1; } else { y = 8; }
 			createPiece(A, y, color, ROOK);
 			createPiece(B, y, color, KNIGHT);
 			createPiece(C, y, color, BISHOP);
@@ -48,6 +46,7 @@ public class Board {
 	public Piece getPiece(int id) {
 		return pieces[id];
 	}
+
 	public void createPiece(int x, int y, int color, int type) {
 		Position p = new Position(x, y);
 		switch(type) {
@@ -64,8 +63,12 @@ public class Board {
 		return selected;
 	}
 
+	public Piece getSelectedPiece() {
+		return getPiece(selected.getID());
+	}
+
 	public void setSelected(Position p) {
-		selected = p;
+		selected = new Position(p.getX(), p.getY()); // creates a new copy, to avoid using reference
 	}
 
 	public void movePiece(Position origin, Position arrival) {
@@ -75,6 +78,16 @@ public class Board {
 		pieces[origin.getID()] = null; // removes the origin ID piece on the pieces list
 	}
 
+	public void mutationOfSelectedPiece(int type) {
+		int color = getSelectedPiece().getColor();
+		switch(type) {
+			case ROOK -> setPiece(new Rook(selected, color));
+			case KNIGHT -> setPiece(new Knight(selected, color));
+			case BISHOP -> setPiece(new Bishop(selected, color));
+			default -> setPiece(new Queen(selected, color));
+		}
+	}
+
 	public boolean isFree(Position p) {
 		return (p.isCorrect()
 				&& getPiece(p) == null);
@@ -85,6 +98,7 @@ public class Board {
 				&& !isFree(arrival)
 				&& getPiece(arrival).getColor() != getPiece(origin).getColor() );
 	}
+
 	public boolean isKing(Position p) {
 		return (p.isCorrect()
 				&& !isFree(p)
diff --git a/MavenChess/MavenChess/src/main/java/model/Piece.java b/MavenChess/MavenChess/src/main/java/model/Piece.java
index d26f9f4..4053281 100644
--- a/MavenChess/MavenChess/src/main/java/model/Piece.java
+++ b/MavenChess/MavenChess/src/main/java/model/Piece.java
@@ -34,7 +34,7 @@ public abstract class Piece {
 	}
 
 	public void setPosition(Position p) {
-		this.p = p;
+		this.p = new Position(p.getX(), p.getY()); // creates a new copy, to avoid using reference
 		hasBeenMoved = true;
 	}
 }
diff --git a/MavenChess/MavenChess/src/main/java/view/BoardView.java b/MavenChess/MavenChess/src/main/java/view/BoardView.java
index a0579b8..978fecf 100644
--- a/MavenChess/MavenChess/src/main/java/view/BoardView.java
+++ b/MavenChess/MavenChess/src/main/java/view/BoardView.java
@@ -2,14 +2,7 @@ package view;
 
 import javafx.scene.Group;
 import javafx.scene.shape.*;
-import model.Board;
-import model.Rook;
-import model.Knight;
-import model.Bishop;
-import model.Queen;
-import model.King;
-import model.Piece;
-import model.Position;
+import model.*;
 
 import java.util.ArrayList;
 
@@ -52,28 +45,31 @@ public class BoardView {
 		white_death_count = 0;
 	}
 
-	public void updatePiece(Position position) { // updates the piece(i, j), visually, to the right position
-		int id = position.getID();
-		if(getPiece(id) != null) {
-			getPieceObj(id).setTranslateX((position.getX()-1) * BOARD_SIZE + CENTERED_ORIGIN);
-			getPieceObj(id).setTranslateZ((position.getY()-1) * BOARD_SIZE + CENTERED_ORIGIN);
-		}
+	public TileView getTile(int id) {
+		return tiles[id];
 	}
 
-	public void updateGraveyardPiece(PieceView piece) { // updates position (visual) of a dead piece
-		int x = piece.getPosition().getX();
-		int y = piece.getPosition().getY();
-		if(x == Position.WHITE_GRAVEYARD) {
-			piece.getObj().setTranslateX(-2 * BOARD_SIZE + CENTERED_ORIGIN);
-			piece.getObj().setTranslateZ(y * BOARD_SIZE*0.65f - BOARD_SIZE*4);
-		} else { // x == Position.BLACK_GRAVEYARD
-			piece.getObj().setTranslateX(9 * BOARD_SIZE + CENTERED_ORIGIN);
-			piece.getObj().setTranslateZ(-y * BOARD_SIZE*0.65f + BOARD_SIZE*4);
-		}
-		piece.getObj().setTranslateY(GRAVEYARD_HEIGHT); // place at right height (Y axis) on table
+	public Box getTileObj(int id) {
+		return tiles[id].getObj();
 	}
 
-	public void createTile(Position position) {
+	public void setTile(TileView tile) {
+		tiles[tile.getPosition().getID()] = tile;
+	}
+
+	public PieceView getPiece(int id) {
+		return pieces[id];
+	}
+
+	public MeshView getPieceObj(int id) {
+		return pieces[id].getObj();
+	}
+
+	public void setPiece(PieceView piece) {
+		pieces[piece.getPosition().getID()] = piece;
+	}
+
+	private void createTile(Position position) {
 		// creates a tile and with the right size and position
 		Box box = new Box(BOARD_SIZE, (double) BOARD_SIZE / 2, BOARD_SIZE);
 		box.setTranslateX((position.getX()-1) * BOARD_SIZE + CENTERED_ORIGIN);
@@ -106,31 +102,28 @@ public class BoardView {
 		updatePiece(position);
 	}
 
-	public TileView getTile(int id) {
-		return tiles[id];
-	}
-
-	public Box getTileObj(int id) {
-		return tiles[id].getObj();
-	}
-
-	public void setTile(TileView tile) {
-		tiles[tile.getPosition().getID()] = tile;
-	}
-
-	public PieceView getPiece(int id) {
-		return pieces[id];
-	}
-
-	public MeshView getPieceObj(int id) {
-		return pieces[id].getObj();
+	private void updatePiece(Position position) { // updates the piece(i, j), visually, to the right position
+		int id = position.getID();
+		if(getPiece(id) != null) {
+			getPieceObj(id).setTranslateX((position.getX()-1) * BOARD_SIZE + CENTERED_ORIGIN);
+			getPieceObj(id).setTranslateZ((position.getY()-1) * BOARD_SIZE + CENTERED_ORIGIN);
+		}
 	}
 
-	public void setPiece(PieceView piece) {
-		pieces[piece.getPosition().getID()] = piece;
+	private void updateGraveyardPiece(PieceView piece) { // updates position (visual) of a dead piece
+		int x = piece.getPosition().getX();
+		int y = piece.getPosition().getY();
+		if(x == Position.WHITE_GRAVEYARD) {
+			piece.getObj().setTranslateX(-2 * BOARD_SIZE + CENTERED_ORIGIN);
+			piece.getObj().setTranslateZ(y * BOARD_SIZE*0.65f - BOARD_SIZE*4);
+		} else { // x == Position.BLACK_GRAVEYARD
+			piece.getObj().setTranslateX(9 * BOARD_SIZE + CENTERED_ORIGIN);
+			piece.getObj().setTranslateZ(-y * BOARD_SIZE*0.65f + BOARD_SIZE*4);
+		}
+		piece.getObj().setTranslateY(GRAVEYARD_HEIGHT); // place at right height (Y axis) on table
 	}
 
-	public void resetColor(CustomMaterial material) {
+	private void resetColor(CustomMaterial material) {
 		for(int n = 0, j = 1 ; j <= 8 ; j++) {
 			for (int i = 1; i <= 8; i++, n++) {
 				// resets board with black and white - bottom left (first case) is black, then alternates
@@ -144,7 +137,7 @@ public class BoardView {
 		}
 	}
 
-	public void setColor(CustomMaterial material, Position position, int type) {
+	private void setColor(CustomMaterial material, Position position, int type) {
 		int id = position.getID();
 		// set the new color-type (visually)
 		getTileObj(id).setMaterial(material.get(type));
@@ -159,48 +152,101 @@ public class BoardView {
 	}
 
 	public void clickPiece(CustomMaterial material, PieceView clickedPiece, Board board) {
+		// clicking a piece will ask her available moves
 		Position position = clickedPiece.getPosition();
 		board.setSelected(position);
 		resetColor(material);
 		setColor(material, position, CustomMaterial.SELECTED_TILE);
 		ArrayList<Position> moves = board.getPiece(position).getAvailableMoves(board);
+
+		// shows all available moves on the tiles, with colors, each tile-color having a meaning
 		for (Position move : moves) {
 			if(board.isFree(move)) {
 				setColor(material, move, CustomMaterial.MOVABLE_TILE);
 			} else if(board.isEnemy(move, position)) {
 				setColor(material, move, CustomMaterial.ATTACK_TILE);
 			} else {
-				setColor(material, move, CustomMaterial.SPECIAL_TILE);
+				setColor(material, move, CustomMaterial.SPECIAL_TILE); // any special move
 			}
-			// promotion
+			// PROMOTION (attacking or not)
 			if(board.isPawn(position) && (move.getY() == 8 || move.getY() == 1)) {
 				setColor(material, move, CustomMaterial.SPECIAL_TILE);
 			}
 		}
 	}
 
-	public void clickTile(CustomMaterial material, TileView clickedTile, Board board) {
+	public void clickTile(CustomMaterial material, Custom3dModel model, TileView clickedTile, Board board) {
 		int state = clickedTile.getState();
 		Position selected = board.getSelected();
 		Position arrival = clickedTile.getPosition();
 		if(state != TileView.NORMAL && state != TileView.SELECTED) {
-			if(state == TileView.ATTACK) {
-				killPiece(getPiece(arrival.getID()));
-			}
+			// --- ALL SPECIAL MOVES ---
 			if(state == TileView.SPECIAL) {
-				// promotion can be done while attacking too
-				if(!board.isFree(arrival)) {
-					killPiece(getPiece(arrival.getID()));
+				if(board.isPawn(selected)) {
+					// --- PROMOTION ---
+					if(arrival.getY() == 8 || arrival.getY() == 1) {
+						// --- ATTACK (while doing promotion) ---
+						if (!board.isFree(arrival)) {
+							killPiece(arrival); // place piece on graveyard (visual)
+						}
+						// Promotion to Queen (by default, Queen for now)
+						board.mutationOfSelectedPiece(Board.QUEEN); // (on model)
+						mutationPiece(model, selected, Custom3dModel.QUEEN); // (on view)
+					}
+					// --- PRISE EN PASSANT ---
+					else {
+						// PRE : if it's not a promotion, then it's "prise en passant", because of pawn rules
+						// we don't need to test y-position
+					}
+				}
+				// --- CASTLING (from king) ---
+				if(board.isKing(selected)) {
+					// PRE (1) : the arrival piece CAN ONLY BE ROOK, because of king rules
+					// PRE (2) : we don't need to test if rook !hasBeenMoved(), because of king rules
+					// PRE (3) : we don't need to test if king !hasBeenMoved(), because of king rules
+					int x = Board.D; // king x arrival, for west-rook
+					if(arrival.getX() == Board.H) {
+						x = Board.F; // king x arrival, for east-rook
+					}
+					Position kingArrival = new Position(x, selected.getY());
+					board.movePiece(selected, kingArrival); // move king (on model)
+					movePiece(selected, kingArrival); // move king (on 3d view)
+					board.movePiece(arrival, selected); // move rook (on model)
+					movePiece(arrival, selected); // move rook (on 3d view)
+				}
+				// --- CASTLING (from rook) ---
+				else if(board.isRook(selected)) {
+					// PRE (1) : the arrival piece CAN ONLY BE KING, because of rook rules
+					// PRE (2) : we don't need to test if king !hasBeenMoved(), because of rook rules
+					// PRE (3) : we don't need to test if rook !hasBeenMoved(), because of rook rules
+					int x = Board.D; // king x arrival, for west-rook
+					if (selected.getX() == Board.H) {
+						x = Board.F; // king x arrival, for east-rook
+					}
+					Position kingArrival = new Position(x, arrival.getY());
+					board.movePiece(arrival, kingArrival); // move king (on model)
+					movePiece(arrival, kingArrival); // move king (on 3d view)
+					board.movePiece(selected, arrival); // move rook (on model)
+					movePiece(selected, arrival); // move rook (on 3d view)
+				}
+			}
+			// --- STANDARD MOVES ---
+			else {
+				// --- ATTACK ---
+				if(state == TileView.ATTACK) {
+					killPiece(arrival); // place piece on graveyard (visual)
 				}
-				// promotion + rook , to implement
+				// --- MOVE ---
+				board.movePiece(selected, arrival); // move piece (on model)
+				movePiece(selected, arrival); // move piece (on 3d view)
 			}
-			board.movePiece(selected, arrival); // move piece (on model)
-			movePiece(selected, arrival); // move piece (on 3d view)
-			resetColor(material);
+
 		}
+		// --- Resets board coloring, doing any action or not ---
+		resetColor(material);
 	}
 
-	public void movePiece(Position origin, Position arrival) {
+	private void movePiece(Position origin, Position arrival) {
 		PieceView piece = getPiece(origin.getID());
 		piece.setPosition(arrival); // changes position to arrival
 		setPiece(piece); // copies the piece from origin ID to arrival ID
@@ -208,7 +254,8 @@ public class BoardView {
 		updatePiece(arrival); // updates 3d model position (visual)
 	}
 
-	public void killPiece(PieceView piece) { // graveyards are specified as negative x
+	private void killPiece(Position p) { // graveyards are specified as negative x
+		PieceView piece = getPiece(p.getID());
 		if(piece.getColor() == Piece.WHITE){
 			white_death_count++;
 			piece.setPosition(new Position(Position.WHITE_GRAVEYARD, white_death_count));
@@ -219,6 +266,13 @@ public class BoardView {
 		updateGraveyardPiece(piece);
 	}
 
+	private void mutationPiece(Custom3dModel model, Position selected, int type) {
+		// for view side, we can't "overwrite" the piece, we need to "edit" it,
+		// otherwise the old 3d model would stay on the scene
+		MeshView obj = getPieceObj(selected.getID());
+		obj.setMesh(model.get(type));
+	}
+
 	public void addAllToScene(Group group) {
 		for(int n = 0 ; n < 64 ; n++) {
 			if(getTile(n) != null) {
diff --git a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
index 0302968..8a31a02 100644
--- a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
+++ b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
@@ -15,9 +15,9 @@ public class CustomMaterial {
 	public CustomMaterial() {
 		material = new PhongMaterial[MATERIAL_LENGTH];
 		material[BLACK] = new PhongMaterial();
-		material[BLACK].setDiffuseColor(Color.BLACK);
+		material[BLACK].setDiffuseColor(Color.rgb(20,20,20));
 		material[WHITE] = new PhongMaterial();
-		material[WHITE].setDiffuseColor(Color.WHITE);
+		material[WHITE].setDiffuseColor(Color.rgb(240,240,240));
 		material[SELECTED_TILE] = new PhongMaterial();
 		material[SELECTED_TILE].setDiffuseColor(Color.rgb(50,200,100));
 		material[MOVABLE_TILE] = new PhongMaterial();
diff --git a/MavenChess/MavenChess/src/main/java/view/PieceView.java b/MavenChess/MavenChess/src/main/java/view/PieceView.java
index 2652f21..3e6cb14 100644
--- a/MavenChess/MavenChess/src/main/java/view/PieceView.java
+++ b/MavenChess/MavenChess/src/main/java/view/PieceView.java
@@ -27,7 +27,7 @@ public class PieceView {
 	}
 
 	public void setPosition(Position arrival) {
-		position = arrival;
+		position = new Position(arrival.getX(), arrival.getY()); // creates a new copy, to avoid using reference
 	}
 
 	public int getColor() {
diff --git a/MavenChess/MavenChess/target/classes/controller/Main.class b/MavenChess/MavenChess/target/classes/controller/Main.class
index 1021ecf5800bb5235d0702489ee5928b761d82ea..26a5078555bb03c979e9421431ca6b3186969f9e 100644
GIT binary patch
delta 389
zcmYk1J1hiI6o$V$vpZ{NX6;H?xw;J!S?duJg-s+xAylFlniUcW5|MaBqflvXqV;Ij
zYdv-uZxtGqkf>A|l}4gbaCbCraq|D?{^$SCd8^6Q9*$aKN{v}5)oPZjRqNg8sZ*V1
zTs4|f)5=0Vv}TBze~P$jbE*rc_J$cACqx89R1KHDBvaC^a6Bg4UFmvE=gCN024zUP
zGJL@-cq}YABKz~ChN5$kZ@Pq_SJ?E4QuQ89ELO424la*0lVuC1Xw3$j=%>*xdk7?7
z<k-g`!3PH%V$#AZN8|~R=9vP=1nK616P;->z!j&Q>17AC>YNKo7}u_sx*uj9#WgqB
zYB`n`P3kt*Ka$b&mJYR(^{ECK@K`z0%wSDdOYeYoU)QzcPvy^RitT3?|7}0f@KNz9
S(?`X`fRFCDC#WXMK7Ron^H*2^

delta 306
zcmXYrJ1j$C7>1w!96fE%In|yf%0C#IAdR>rV$z9pViJ27iA2O;u(-rxmdHQ5E_Ext
zDQ&e2AvPppkXS4RgTZ2|U*a3Syl>tw@AGB5-@9_NmPo5Xr%zq`+f~Kasot!TF`Q7N
zW~|uo*9<ZJpT>$0_Kg{w!y*JCq_$dL61~!HbIL4?xY8}NSYSrl(kERRtg-}UR@WVo
zX+Ep%@N(#fF`A5v029JhJ(2iY2ZtQt^2h)g4sia8*<&9)S{-wOK=MtNQw-vKaz+l5
zAzsN-poJt)6e-~&#XaYmX)#5W3oh}K*7p_d0?e~ZjVpqzut}W;wz`cZMZYq<Np<Ii
cqZ@fmHQ3SH(pX5T4=--&7nK{8s_uRL0un+_xc~qF

diff --git a/MavenChess/MavenChess/target/classes/model/Board.class b/MavenChess/MavenChess/target/classes/model/Board.class
index 1407815545854fd1dd5a89e16d2f19e127a9ecb9..68dda59d7a6c6d20e35581e29bb7e67234456bc5 100644
GIT binary patch
literal 3787
zcma)8`%fI#75?r%m}MDYy@1_#7stlbUe>|TIB{ZwF%N^;fB^$u2ghzZtT)Tp`=Gmv
zV>d~grcT>5eJ1oNRf$?Dma0T*r3Ool+FvX6=l&n<uZ`Tg-?=k8OmHoMba&>QIrlrS
z@7&AZ|NG~^0vN$BqX-~qAY>wpCWY7y>y|Z8w918n`PCcwTwS4Q*e=`k5rtr?FWZa=
znhiuvw7^toDOIlLiv!~ot9o4_Qp*>)CC}H`tn+1|QnTxJr95Py%`;!H^SQhr#Z2r$
zoG#WyQ&VVrsj*KKLs8mvn&`q_?#)&6Rz0uxDj2B@|N62~wBidUp1^)u6!P_kKZSUz
zuYuKwA&Mlr4ID7>Bo5Nq=R;Ho6CiU=Cz=u49x2LU>glX6Yv79tQD@I$rE)WhUK|yR
zltO1}r!O5_1Zfk;@RTl1-3>kF+3Fkx__%`U0MC@|!dg9wejGLMB~LwW*VZcQQ4EUu
z8LyBRH}d&%6emRcoEO}TT`oj%Qk17X<%0DJEl=U7)bxzW)}LimQZb2w4NGObdbzbv
zV$8(2R4PQf7o{TSOiVTuD}r=hkfs%$^pa{6dnZ~eUNA9(Sq5M8_o?I2o$P7^b0+4o
zz`*Ex$>o(BYx{O<-B4SxXktkslawYZ#Y$Dey<{Sb%L>hQZK6`GYC4m}R|J2>#1*_m
z?%B1eYMvGNKY`FNfNLhcjIX%JMXN@db})eLL75Qc5UaE>c6m-gWfWQ`D&<<;D%Z1C
zaU&n(sDa-X=jUhSUD4~zT;}}rvPc0+<C&%D`2~@Jq}#<ylaq5Igt%!YGk0Fz!$cnA
z8t0neB2U#M*OYwZ<SK1t@MT&w5pJE}a4NLV+U5M*Mrk!)UA9(>)Wl~iIjfkps<z0k
zQrX;khwC;Y$Vml>P+zl|ZmUafJ?2cbb*XOUZeFm~-L2tuheHiJ-6q;a)?G3v1Z*A(
zq57S5x>xJYtTwvpFk)M3E>&(d=KSy@?ASSIeOcD8Qnd?qna6@vt=hM&qQbt?M%|K=
zXa3~|vdf+jna(|iU7IZDOU!r|KCWn<$YALg8GrpEQ^gTms%%tq`6*k98`V`hF7&`5
z@+`n+#CSk`6&5+LN-2OG<?B8<Px)n^T%f$>lWod3eDY1oMW0-vT=vO=SMkY$x9*b#
z?`u9;@Txvp@M=D}PI<#8-=h4APri+~9OODT-V1!TGgn?H{JlfIzsvU!wI8SNL#5Rx
zFw(Knzo7LKv<HV1vC-cmmi`mk6Kd(MQuiMID|99qdLNNw_yfF_41It|c=#TgV#aW2
zq&pV*9rmQV6UpEfI_?H({!eWZ(k7ANbSRMw@l!gSNQULvlt?zo(?}!@c}5b+h&*GB
z4>5kxmN9;kt#<=NedCV|IEb(F_X_s%w}mN~Xhs_oZO48#^$?#&(ZTb#3!}7|#y%|Y
zndR3U61d4DsD^I5iUasI@0@pV5S!ff8}#5q?)!*0$g4yiVWB!HzotuinqFVmZ{yT{
zgKt5i7hPQ+k-kZt(CTBnfp78oCf5L39@0Eu$mHWQ#Q($EtLEm1wB-FBQPe)*$@3XH
zngjo4s7fv-r$3mY3ju7CE*#s!zAYq<ElB|ax&U$vf~mG5r32pUSiA1Ik3roPe{vbP
zm?N~2T~QY^@$?@&JmCfCUy^sQq8?ThZ?Vh{)>#*8$i*@=OCA9l@BtYfkb&>$Dk}N^
z!2wdenv}rir%0|OlJ{}wbhs<@dxinr=8~|&T!*=y;hN;iauw2_qIczqaQA&2*+Snv
zT%w}iQ4DCsIVuJn#nW1Gf{GK4;#sZeq2i>YcwQ^^P;tsp3{kPow<Ba3$f_2`Fo<U{
z#>;#W&yiElqs}}0Eu6-C81}fse7vkTHDe@?P0bi-!KP-6+zOlcE^87Z^4s_x%N*9+
zX@l_qg9ef@`D<kr-X??f=#p2`3RZ=sH+FXLtPVlCC1rESsN~vqH=ktR<eQn6-6Yi(
zhIe92_%KWl<NKI(F=mM@Np!MW$rX}wlxu>W<0-O}q31b7(>^kEdS&U<=}Ic^;0G>p
zjjRt5Iguvf)Lj2lTgasQ*@*^Ym2U+0YF^B6QfFDc3!MHr)@WWkOFJ;0vjl#qDNJbm
zh;ISz>e3?;r0XB!CvE`$Af|MsoZiBPEnGa4aG1DEos><!CAf}rjWPY+6)7WG>u~TC
zRs9W>!@?s}4K`E`4?Czj(NGB!w|RB|29XzeNiFdtS|-CT;RW*j8ZM)R6`k8bCqgf`
zvStwPc3xP{IrJtmq6j}guZqXxa`5y2DmTNc?%;N@!ppxxyRP)#V1(`=6#R%AoddQ_
zJGn~QU*j2e)z`r;&vBRAL2*Y$bc{+fe~NcqPp=a~>XmXl^@yhze~taxBWs&xcc=J#
z{}JbL-93xWS9yu$c+6S8%u`+fDcwuyOG@`Qpl64n9MPe?=OtZolkRasNxGqQx}jW+
zpZxGKK@=Fo8iTNTNfdll=<$N+`Fs@)YS){)cisCq*Co0x({+WeOS^adv)#Ks^*Glx
Ux~|jp23^;7@A~KLL;%0|A9f*!+yDRo

literal 3363
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
NwQ%Uq*@*zI{Rgt`F600J

diff --git a/MavenChess/MavenChess/target/classes/model/Piece.class b/MavenChess/MavenChess/target/classes/model/Piece.class
index c70cfe3367e1cb27e247905ca4d730e0342c589f..5ea10cd77ba3e51ecf0a9c9952be710ffc479667 100644
GIT binary patch
delta 567
zcmZutJx{_=6g{s{5UkaTAVpD73$&>C{WZ9=7#ED}5<{YPkXd#&gQM{mI7lLzXyWLg
zi9gABUPT~;p||gyd(L_Ho{yosQ26ub^&P-I_HM$r2SLOH^mF&5a#lEWFRQhxdl5zy
zaSbLC0{+uV?O4E<vx^d*){y*%%MzH?pduxp=88r8sCl0ijW2O+r!fYBIliM{o=yur
zcMAddsmhR%ZCoi<K1W`R2%xhwiV)d43`8&vn`jC?)(JSsH@+3KzKA9IW{GXlL*ZW$
zkFr8K1&D#8NoDM>E0w%S#xe@*uXyKGp4O0Hm0l8;O4WJ7$b(1d+L@l6<`L>@+fQH}
z8w1qA{$Y|m>aI9~%>iPg|LJtU*yU`3t8cf}B}OMhFr7C<%lT(a@|$|WObbEB--6NX
dETel#T1+;BIJfR*WOgz#F$}q=z>cTe{RL8uGvfdN

delta 460
zcmZut%TmHX5bWI~poyX>BpSn036P+2vq}$MEx(E%@M6WIpWs2N;Nk&q9Q+o(!J=mg
zgtEBI^z8KX?DWUs;=uj=`<?@M!syL?pDg>zwg$;d=Ihs_hEpg6>}s4N#Kle>q68Zb
zF3E_pg^pD{Tk2@sAiE8V@eED0m<4$_B2Ul>H8gP>9p;E{_pCItR$mfPXDk_Z4WbsT
zyIVDlD_pbRHSCzEhd!fdjUEVOk&{kw{An14UTE~zKXGzBg#i+o&VH<5TyPtExmBc_
zO*@PH|BE_%hljYyho5<pob08;8Oo_WgFlhKKAPhz#=e;5_Tcig!US(?f|pyWaBGgd
FTLJu)Ai)3t

diff --git a/MavenChess/MavenChess/target/classes/view/BoardView.class b/MavenChess/MavenChess/target/classes/view/BoardView.class
index 658950bedb33ff474e89419b3e918501d22fd96f..4e3204d077c098470e984565f8b0fada87995e72 100644
GIT binary patch
literal 8275
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

delta 3800
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
HhlKtIANhsr

diff --git a/MavenChess/MavenChess/target/classes/view/CustomMaterial.class b/MavenChess/MavenChess/target/classes/view/CustomMaterial.class
index 716c4af3b9b45177c2e298edd4a74ae7fb2c8078..06ac3d5e95495a07bff9fe1ddba2c69a20ed8c70 100644
GIT binary patch
delta 729
zcmYk4%TLr$6vn^PX*;%-Sa6(2I~^W^GgX|?5l{!j8AcEUUqPd+&<G(hBtt;s#)O6J
zwYdxTY}^sWWWZ;POB3}EaBoa>!Op~m<7tP)=C-%zcTUea_kQ=jYx&rsfBO6SJ%C|c
z_4EzWy;rW7rJRUTN!QT|+dvwQcuc+2F5Z%p=p<-`2esN<{_fI(jtmYOP|z)QD6Jkc
zkVQ_kNqzal296*_Fjwa9O)t&gxxaXOxmsJSEo)r#sDV5R1m(u~#I;d^<#{o$q3&VN
z$W)~|`EpizM61Ve9E2h-PQnSKIORY0G53dffca#IPcfekafx{_#6!$yLOjfTHpFG5
z22cq(Mqr^D;&Z$xUM^IgM*;c?nLVJ2cq%)t8S}?B%sS$m*ekz*HnW9&)4pA7#ZL3#
zxcDMFWQt#MnrBV%?X2RYck@g&lxV6&v%C#U+)`|^#6u-Hn3-wo*g{twJ&_^X)Yf5f
z1G{L>`6KA=t`R+Jd}nv0xQX66+!w581Y_c>l2~=IpH+-u0tav%aV#K#6(q67YCPc$
zufxU$pZ^Cq_{>NB4ej`W4*W(Z$>^dux+#MmD)6@-St=uk^ISg;iISW%9tg&waEA-*
zpXAqs)Zm~LMf4^Cf4Dqh3KyF?qQok)j!=W0JZDS7n9m#sU#Z>lfu~v2k6j8H5iSS+
GU-<_sux{=E

delta 742
zcmYk3yH6BR6o<bv?Ci4Z;0_22`xs=A_acuKQ4v8{L0;lxHA-n*G%+MgP-0<0h_)7F
z{s0pjI~7a-HBwj^V`FJzVP$MBY%IjHgT~2Z&b{Bc=bZby=e(<UTM_y2`}GbmM1C#u
zOu}og+Jolk%t&t9?J*p;Tn1BNDoI+Ts1eMo6O)(6BI>EPI7q|V*N*Z^8Z8dd<jzW`
zw7B=hscjR&-S>*cLf7rZTM?S+urSHE&m|Q+Y|%xx`$_uZy%t&Gf_-QHZhmq8#`41T
zrCf2Lxb*Uh@jzCpIfBrq>I{w&R|WsMU-_7ik1L<>@qqG49}g;@^6`-Ju#ZnGkN9|$
zct1Ix;|vMLd_1nAv>yc3o(1_rKs`v-eH3tH!(9)=(i<c;iEXgYd_#C{i)g;I&)V5a
z-rI$39QQ{cC62q_bkufwcFIgR>AfsF<V&+drL1kz?y6b0(mYqyx<&gYon?bbJN$%%
zR!(N^Lg~}OoAf*sdAj>e-DO!%N6)%8vWy9}H}$a)RmC=z&a#dw9pC}Fsb+v0#))x_
zS_*oytg);5c9$fNbp-1;?5t4FN1gv?8u(6{pEOE{CW+E44Z60_D!sHZsn^6XB&<nO
zUh}j;Of#eYbNbsDyLxDZ2nqbs^1>|V_gbn_j8aPpdT)E7JHwM7B%{$}{*^C<{4HAA
NUGOdvE_w-<{s87<Y{~!t

diff --git a/MavenChess/MavenChess/target/classes/view/PieceView.class b/MavenChess/MavenChess/target/classes/view/PieceView.class
index 3c6a4b6876b721f6d4664abc0a04f078c07ac0ac..861779ea1eb44cd71c28a9393b6864abf3cf04a9 100644
GIT binary patch
delta 589
zcmZutO-{l<7=2S{E43gf6a@hVf&Qq7KU?-B#;6OGoePN}QCY~IGm!2*feT4Qqb44}
zGr02x9>Dm`6rn*fX{LGe{_?(NUP9W(&+9vY8uofx|5$~=5V>w&G_NX$?b}wT)xOb?
zz@m;Nq!@yi&CVG^z_jWdUe=NMgBu*k>5#F)Ae;5Nb;3|Jd*_+{XOy|$>{MO_L*6}*
zicWzd4Wa_G2tr2)VMORGU=C}9+Jpje6j5^Tq(Zk0lWPg9(9P(U?MJ8&^do_rDFU1q
zV%;NfF}*NYWao)%#FjYQb_P)UBef<_UMMLX439N*0AdRD<hBeB*14H`6fnBu;MCOM
z4QvjB_sN<E$L%*H8qO1v^rfGX9UweeBTFmfd^N-hq~&{55EU)9kOJ%e8zgp5EdL<+
jslBS$9`+g!k{%#7*`!3R%f2ScXb^=u#=SvyMC9%-@-a2w

delta 426
zcmdnV`Iv+2)W2Q(7#JAr7_=sGZDe6&Fw~fsAiG(MQGk(!SwquvvISElt0)5_gV^M0
zOsb6HllL%5^Gg6VXfdz=Nf8D~2C2!<n3UP28Dzk!1enFt#ep(xKpq2w5Ccdp517pg
zQVZlUGRQK>fz|pli`RqHaxpLgNihai263=@F)*JEsvcw(H`okD26+YrkWQd#eIO08
zfmLe@1MdbPg9)e^W~~%fYZV!kpqlM~szFw=Y1wOUW#HWi*A8)s9MC25I9#I4AON;m
ug+Uc$*kl71WdAB*wOEZo9jrE&McfqOUp1gD>Nso>28Jxie;QzyX#xN#jUWU7

-- 
GitLab