From ffb82fd569fdbe05e46d6d96aad3364bdea28101 Mon Sep 17 00:00:00 2001
From: MasterPyo <olivier.pillods@gmail.com>
Date: Thu, 27 Apr 2023 14:01:12 +0200
Subject: [PATCH] pawn fixed, king and rock both can detect casteling

---
 MavenChess/.idea/misc.xml                     |   2 +-
 .../src/main/java/controller/Main.java        |  24 +---
 .../src/main/java/model/Bishop.java           |  57 ++++----
 .../MavenChess/src/main/java/model/Board.java |  79 ++++++-----
 .../MavenChess/src/main/java/model/King.java  |  62 ++++++---
 .../src/main/java/model/Knight.java           |  34 +++--
 .../MavenChess/src/main/java/model/Pawn.java  |  60 +++-----
 .../MavenChess/src/main/java/model/Piece.java |   7 +
 .../src/main/java/model/Position.java         |   9 +-
 .../MavenChess/src/main/java/model/Queen.java |  72 +++++-----
 .../MavenChess/src/main/java/model/Rook.java  |  56 ++++----
 .../src/main/java/view/BoardView.java         | 128 ++++++++----------
 .../src/main/java/view/Custom3dModel.java     |  24 ++--
 .../src/main/java/view/CustomCamera.java      |  10 +-
 .../src/main/java/view/CustomLight.java       |   6 +-
 .../src/main/java/view/CustomMaterial.java    |  28 ++--
 .../src/main/java/view/CustomScene.java       |   2 +-
 .../MavenChess/src/main/java/view/Desk.java   |   4 +-
 .../src/main/java/view/TileView.java          |   4 +-
 .../target/classes/controller/Main.class      | Bin 4704 -> 4707 bytes
 .../target/classes/model/Bishop.class         | Bin 1688 -> 1483 bytes
 .../target/classes/model/Board.class          | Bin 3248 -> 3363 bytes
 .../target/classes/model/King.class           | Bin 1571 -> 1807 bytes
 .../target/classes/model/Knight.class         | Bin 2110 -> 1389 bytes
 .../target/classes/model/Pawn.class           | Bin 1628 -> 1341 bytes
 .../target/classes/model/Piece.class          | Bin 972 -> 1094 bytes
 .../target/classes/model/Position.class       | Bin 1476 -> 1390 bytes
 .../target/classes/model/Queen.class          | Bin 2115 -> 1518 bytes
 .../target/classes/model/Rook.class           | Bin 1769 -> 1633 bytes
 .../target/classes/view/BoardView.class       | Bin 7879 -> 7567 bytes
 .../target/classes/view/Custom3dModel.class   | Bin 4229 -> 4276 bytes
 .../target/classes/view/CustomCamera.class    | Bin 4141 -> 4044 bytes
 .../target/classes/view/CustomLight.class     | Bin 1485 -> 1343 bytes
 .../target/classes/view/CustomMaterial.class  | Bin 1705 -> 1725 bytes
 .../target/classes/view/CustomScene.class     | Bin 1009 -> 1009 bytes
 .../MavenChess/target/classes/view/Desk.class | Bin 1157 -> 1157 bytes
 .../target/classes/view/TileView.class        | Bin 1022 -> 1022 bytes
 37 files changed, 339 insertions(+), 329 deletions(-)

diff --git a/MavenChess/.idea/misc.xml b/MavenChess/.idea/misc.xml
index 0a5c358..abcc7fd 100644
--- a/MavenChess/.idea/misc.xml
+++ b/MavenChess/.idea/misc.xml
@@ -8,7 +8,7 @@
       </list>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_X" default="true" project-jdk-name="openjdk-20" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_20" default="true" project-jdk-name="openjdk-20" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>
\ No newline at end of file
diff --git a/MavenChess/MavenChess/src/main/java/controller/Main.java b/MavenChess/MavenChess/src/main/java/controller/Main.java
index 5ac2f19..0637b74 100644
--- a/MavenChess/MavenChess/src/main/java/controller/Main.java
+++ b/MavenChess/MavenChess/src/main/java/controller/Main.java
@@ -2,16 +2,12 @@ package controller;
 
 import javafx.application.Application;
 import javafx.scene.*;
-import javafx.scene.input.KeyEvent;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.input.ScrollEvent;
 import javafx.stage.Stage;
 import model.Board;
-import model.Position;
 import view.*;
 
-import java.util.ArrayList;
-
 public class Main extends Application {
 	@Override
 	public void start(Stage stage) {
@@ -43,39 +39,33 @@ public class Main extends Application {
 		Desk desk = new Desk(material);
 		desk.addAllToScene(group); // adds the desk to scene
 
-		// init - creates a (visual) chessboard of 8x8, and all (visual) 3d pieces
-		BoardView boardView = new BoardView(model, material);
-		boardView.addAllToScene(group); // adds the board and the pieces to scene
-
 		// init - creates a (model) list of all pieces
 		Board board = new Board();
 
+		// init - creates a (visual) chessboard of 8x8, and all (visual) 3d pieces
+		BoardView boardView = new BoardView(model, material, board);
+		boardView.addAllToScene(group); // adds the board and the pieces to scene
+
 		// event --------------------------------------------------------------
 
 		// event - camera rotation (mouse dragging)
 		camera.initMouseControl(scene.get()); // allow user to move camera with mouse, with some constraints
 
 		// event - camera zoom (mouse scroll)
-		stage.addEventHandler(ScrollEvent.SCROLL, event -> {
-			camera.scrollCamera(event.getDeltaY());
-		});
+		stage.addEventHandler(ScrollEvent.SCROLL, event -> camera.scrollCamera(event.getDeltaY()));
 
 		// event - click on (visual) pieces to show (visually) available movements. (asked from model rules)
 		for(int n = 0 ; n < 64 ; n++) {
 			PieceView piece = boardView.getPiece(n);
 			if(piece != null) {
-				piece.getObj().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
-					boardView.clickPiece(material, piece, board);
-				});
+				piece.getObj().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> boardView.clickPiece(material, piece, board));
 			}
 		}
 
 		// 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, tile, board));
 		}
 
 		// start --------------------------------------------------------------
diff --git a/MavenChess/MavenChess/src/main/java/model/Bishop.java b/MavenChess/MavenChess/src/main/java/model/Bishop.java
index 2f52dea..cd2e356 100644
--- a/MavenChess/MavenChess/src/main/java/model/Bishop.java
+++ b/MavenChess/MavenChess/src/main/java/model/Bishop.java
@@ -8,81 +8,84 @@ public class Bishop extends Piece {
         super(p, color);
     }
 
-
     public ArrayList<Position> getAvailableMoves(Board b) {
 
         // creates a dynamic list of available moves
-        ArrayList<Position> moves = new ArrayList<Position>();
-
+        ArrayList<Position> moves = new ArrayList<>();
         Position arrival;
 
-        Position Cursor = new Position(p.getX(), p.getY());
+        // list of the 4 bishop directions
+        int[] all_x = {1, 1, -1, -1};
+        int[] all_y = {1, -1, -1, 1};
+
+        for(int n = 0 ; n < all_x.length ; n++) { // for each direction
+            int x = all_x[n];
+            int y = all_y[n];
+            boolean blocked = false;
+            int i = 1;
+            while (i < 8 && !blocked) { // continues "as a ray" in that direction until blocked
+                arrival = new Position(p.getX() + (x * i), p.getY() + (y * i));
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
+                    moves.add(arrival);
+                }
+                if (!b.isFree(arrival)) {
+                    blocked = true;
+                }
+                i++;
+            }
+        }
 
+        // Full wrote version : --------------------------------------------
+        /*
+        Position Cursor = new Position(p.getX(), p.getY());
         int i = 1;
         boolean leftTop = false;
         boolean rightTop = false;
         boolean leftDown = false;
         boolean rightDown = false;
-
         while (i < 8) {
-
             //left diagonal
-
             arrival = new Position(p.getX() + i, p.getY() + i);
-
             if (!leftTop) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
-
             if (!b.isFree(arrival)) {
                 leftTop = true;
             }
-
-
-
-
-
             //right diagonal
             arrival = new Position(p.getX() - i, p.getY() + i);
             if (!rightTop) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 rightTop = true;
             }
-
-
-
             arrival = new Position(p.getX() + i, p.getY() - i);
             if (!leftDown) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 leftDown = true;
             }
-
-
-
             arrival = new Position(p.getX() - i, p.getY() - i);
             if (!rightDown) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 rightDown = true;
             }
-
-
             i++;
         }
-
+        */
+        // -----------------------------------------------------------
 
         return moves;
     }
diff --git a/MavenChess/MavenChess/src/main/java/model/Board.java b/MavenChess/MavenChess/src/main/java/model/Board.java
index d458d60..7a0e838 100644
--- a/MavenChess/MavenChess/src/main/java/model/Board.java
+++ b/MavenChess/MavenChess/src/main/java/model/Board.java
@@ -3,36 +3,37 @@ package model;
 public class Board {
 
 	public static final int PAWN = 0, ROOK = 1, KNIGHT = 2, BISHOP = 3, QUEEN = 4, KING = 5;
+	public static final int A = 1, B = 2, C = 3, D = 4, E = 5, F = 6, G = 7, H = 8;
 
-	private Piece[] pieces;
+	private final Piece[] pieces;
 	private Position selected;
 
 	public Board() {
 		selected = null;
-		pieces = new Piece[64];
 		// initialisation of the list of pieces
+		pieces = new Piece[64];
 		for(int i = 0 ; i < 64 ; i++) {
 			pieces[i] = null;
 		}
-		int y = 0;
+		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; }
-			for(int x = Position.a ; x <= Position.h ; x++) {
+			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; }
-			createPiece(Position.a, y, color, ROOK);
-			createPiece(Position.b, y, color, KNIGHT);
-			createPiece(Position.c, y, color, BISHOP);
-			createPiece(Position.d, y, color, QUEEN);
-			createPiece(Position.e, y, color, KING);
-			createPiece(Position.f, y, color, BISHOP);
-			createPiece(Position.g, y, color, KNIGHT);
-			createPiece(Position.h, y, color, ROOK);
+			createPiece(A, y, color, ROOK);
+			createPiece(B, y, color, KNIGHT);
+			createPiece(C, y, color, BISHOP);
+			createPiece(D, y, color, QUEEN);
+			createPiece(E, y, color, KING);
+			createPiece(F, y, color, BISHOP);
+			createPiece(G, y, color, KNIGHT);
+			createPiece(H, y, color, ROOK);
 		}
 	}
 
@@ -43,23 +44,25 @@ public class Board {
 	public Piece getPiece(Position position) {
 		return pieces[position.getID()];
 	}
+
+	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) {
-			case ROOK -> setPiece(new Rook(new Position(x, y), color));
-			case KNIGHT -> setPiece(new Knight(new Position(x, y), color));
-			case BISHOP -> setPiece(new Bishop(new Position(x, y), color));
-			case QUEEN -> setPiece(new Queen(new Position(x, y), color));
-			case KING -> setPiece(new King(new Position(x, y), color));
-			default -> setPiece(new Pawn(new Position(x, y), color));
+			case ROOK -> setPiece(new Rook(p, color));
+			case KNIGHT -> setPiece(new Knight(p, color));
+			case BISHOP -> setPiece(new Bishop(p, color));
+			case QUEEN -> setPiece(new Queen(p, color));
+			case KING -> setPiece(new King(p, color));
+			default -> setPiece(new Pawn(p, color));
 		}
 	}
 
 	public Position getSelected() {
 		return selected;
 	}
-	public Piece getSelectedPiece() {
-		return getPiece(selected);
-	}
 
 	public void setSelected(Position p) {
 		selected = p;
@@ -68,29 +71,35 @@ public class Board {
 	public void movePiece(Position origin, Position arrival) {
 		Piece piece = getPiece(origin);
 		piece.setPosition(arrival); // changes position to arrival
-		setPiece(piece); // copies the piece from origin ID to arrival ID
-		pieces[origin.getID()] = null; // removes the origin ID piece
+		setPiece(piece); // copies the piece (from origin ID) to arrival ID on the pieces list
+		pieces[origin.getID()] = null; // removes the origin ID piece on the pieces list
 	}
 
 	public boolean isFree(Position p) {
-		return (Position.isCorrect(p) && pieces[p.getID()] == null);
-	}
-	public boolean isBlack(Position p) {
-		return (!isFree(p) && pieces[p.getID()].getColor() == Piece.BLACK);
-	}
-
-	public boolean isWhite(Position p) {
-		return (!isFree(p) && pieces[p.getID()].getColor() == Piece.WHITE);
+		return (p.isCorrect()
+				&& getPiece(p) == null);
 	}
 
-	public boolean isEnnemy(Position p, Position origin) {
-		return (Position.isCorrect(p) &&  !isFree(p) && pieces[p.getID()].getColor() != pieces[origin.getID()].getColor() );
+	public boolean isEnemy(Position arrival, Position origin) {
+		return (arrival.isCorrect()
+				&& !isFree(arrival)
+				&& getPiece(arrival).getColor() != getPiece(origin).getColor() );
 	}
 	public boolean isKing(Position p) {
-		return (!isFree(p) && pieces[p.getID()].getClass() == King.class);
+		return (p.isCorrect()
+				&& !isFree(p)
+				&& getPiece(p).getClass() == King.class);
+	}
+
+	public boolean isRook(Position p) {
+		return (p.isCorrect()
+				&& !isFree(p)
+				&& getPiece(p).getClass() == Rook.class);
 	}
 
 	public boolean isPawn(Position p) {
-		return (!isFree(p) && pieces[p.getID()].getClass() == Pawn.class);
+		return (p.isCorrect()
+				&& !isFree(p)
+				&& getPiece(p).getClass() == Pawn.class);
 	}
 }
diff --git a/MavenChess/MavenChess/src/main/java/model/King.java b/MavenChess/MavenChess/src/main/java/model/King.java
index e1ec772..6bb57ca 100644
--- a/MavenChess/MavenChess/src/main/java/model/King.java
+++ b/MavenChess/MavenChess/src/main/java/model/King.java
@@ -5,58 +5,84 @@ import java.util.ArrayList;
 
 public class King extends Piece {
 
-	private boolean Casteling = true;
-	private final Position original;
-
 	public King(Position p, int color) {
 		super(p, color);
-		this.original = p;
 	}
 
-
 	public ArrayList<Position> getAvailableMoves(Board b) {
 
 		// creates a dynamic list of available moves
-		ArrayList<Position> moves = new ArrayList<Position>();
-
+		ArrayList<Position> moves = new ArrayList<>();
 		Position arrival;
 
+		// list of the 8 king movements
+		int[] all_x = {0, 1, 1, 1, 0, -1, -1, -1};
+		int[] all_y = {1, 1, 0, -1, -1, -1, 0, 1};
+
+		for(int n = 0 ; n < all_x.length ; n++) { // for each direction
+			int x = all_x[n];
+			int y = all_y[n];
+			arrival = new Position(p.getX() + x, p.getY() + y);
+			if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
+				moves.add(arrival);
+			}
+		}
+
+		// Castling
+		if(!hasBeenMoved) {
+			Position rookWest = new Position(1, p.getY());
+			if(	b.isRook(rookWest) && !b.getPiece(rookWest).hasBeenMoved()
+					&& b.isFree(new Position(2, p.getY()))
+					&& b.isFree(new Position(3, p.getY()))
+					&& b.isFree(new Position(4, p.getY())) ) {
+				moves.add(rookWest);
+			}
+			Position rookEast = new Position(8, p.getY());
+			if(	b.isRook(rookEast) && !b.getPiece(rookEast).hasBeenMoved()
+					&& b.isFree(new Position(7, p.getY()))
+					&& b.isFree(new Position(6, p.getY())) ) {
+				moves.add(rookEast);
+			}
+		}
+
+		// Full wrote version : --------------------------------------------
+		/*
 		// up
 		arrival = new Position(p.getX(), p.getY() + 1);
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
 
 		//down
 		arrival = new Position(p.getX(), p.getY() - 1);
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
 
 		//left
 		arrival = new Position(p.getX()+1, p.getY());
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
 
 		//right
 		arrival = new Position(p.getX()-1, p.getY());
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
 
 		//up left
 		arrival = new Position(p.getX()-1, p.getY() + 1);
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
 
 		//up right
 		arrival = new Position(p.getX()+1, p.getY() + 1);
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
 
 		//down left
 		arrival = new Position(p.getX()-1, p.getY() -1);
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
 
 		//down right
 		arrival = new Position(p.getX()+1, p.getY() - 1);
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
 
 		arrival = new Position(p.getX(), p.getY() + 1);
-		if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
-
-
+		if(b.isEnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); }
+		*/
+		// ---------------------------------------------------------------
 
 		return moves;
 	}
diff --git a/MavenChess/MavenChess/src/main/java/model/Knight.java b/MavenChess/MavenChess/src/main/java/model/Knight.java
index 7a731d0..b65fb00 100644
--- a/MavenChess/MavenChess/src/main/java/model/Knight.java
+++ b/MavenChess/MavenChess/src/main/java/model/Knight.java
@@ -13,47 +13,60 @@ public class Knight extends Piece {
     public ArrayList<Position> getAvailableMoves(Board b) {
 
         // creates a dynamic list of available moves
-        ArrayList<Position> moves = new ArrayList<Position>();
-
+        ArrayList<Position> moves = new ArrayList<>();
         Position arrival;
 
+        // list of the 8 knight specific movements
+        int[] all_x = {1, 2, 2, 1, -1, -2, -2, -1};
+        int[] all_y = {2, 1, -1, -2, -2, -1, 1, 2};
+
+        for(int n = 0 ; n < all_x.length ; n++) { // for each direction
+            int x = all_x[n];
+            int y = all_y[n];
+            arrival = new Position(p.getX() + x, p.getY() + y);
+            if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
+                moves.add(arrival);
+            }
+        }
 
+        // Full wrote version : --------------------------
+        /*
         arrival = new Position(p.getX() - 1, p.getY() + 2);
-        if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+        if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
             moves.add(arrival);
         }
 
         // up right
         arrival = new Position(p.getX() + 1, p.getY() + 2);
-        if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+        if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
             moves.add(arrival);
         }
 
         // down left
         arrival = new Position(p.getX() - 1, p.getY() - 2);
-        if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+        if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
             moves.add(arrival);
         }
 
         //down right
         arrival = new Position(p.getX() + 1, p.getY() - 2);
-        if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+        if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
             moves.add(arrival);
         }
 
         arrival = new Position(p.getX() - 2, p.getY() + 1);
-        if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+        if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
             moves.add(arrival);
         }
 
         // up right
         arrival = new Position(p.getX() + 2, p.getY() + 1);
-        if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+        if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
             moves.add(arrival);
         }
         // down left
         arrival = new Position(p.getX() - 2, p.getY() - 1);
-        if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+        if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
             moves.add(arrival);
         }
 
@@ -61,7 +74,8 @@ public class Knight extends Piece {
         arrival = new Position(p.getX() + 2, p.getY() - 1);
         if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
             moves.add(arrival);
-        }
+        }*/
+        // -----------------------------------------------
 
         return moves;
     }
diff --git a/MavenChess/MavenChess/src/main/java/model/Pawn.java b/MavenChess/MavenChess/src/main/java/model/Pawn.java
index 0861484..226e685 100644
--- a/MavenChess/MavenChess/src/main/java/model/Pawn.java
+++ b/MavenChess/MavenChess/src/main/java/model/Pawn.java
@@ -3,62 +3,40 @@ package model;
 import java.util.ArrayList;
 
 public class Pawn extends Piece {
-	private final Position original;
 	public Pawn(Position p, int color) {
 		super(p, color);
-		this.original = p;
 	}
 
-
 	public ArrayList<Position> getAvailableMoves(Board b) {
 
 		// creates a dynamic list of available moves
-		ArrayList<Position> moves = new ArrayList<Position>();
-
+		ArrayList<Position> moves = new ArrayList<>();
 		Position arrival;
-		if(color == Piece.WHITE) { // black and white have an opposite direction behavior
-
-			if(this.p.getID() == this.original.getID()){
-			//	up, free movement first time
-						arrival = new Position(p.getX(), p.getY() + 2);
-				if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); }
-
-			}
-
-			// up, free movement
-			arrival = new Position(p.getX(), p.getY() + 1);
-			if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); }
-
-			// up right, attack movement
-			arrival = new Position(p.getX() + 1, p.getY() + 1);
-			if(Position.isCorrect(arrival) && b.isBlack(arrival)) { moves.add(arrival); }
-
-			// up left, attack movement
-			arrival = new Position(p.getX() - 1, p.getY() + 1);
-			if(Position.isCorrect(arrival) && b.isBlack(arrival)) { moves.add(arrival); }
 
+		int y = -1;
+		if(color == Piece.WHITE) { // black and white have an opposite direction behavior
+			y = 1;
 		}
-		else {
 
-			if(this.p.getID() == this.original.getID()){
-				//	up, free movement first time
-				arrival = new Position(p.getX(), p.getY() - 2);
-				if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); }
+		// forward
+		arrival = new Position(p.getX(), p.getY() + y);
+		if(b.isFree(arrival)) {
+			moves.add(arrival);
+			// forward twice, only if it's first move
+			if(!hasBeenMoved){
+				arrival = new Position(p.getX(), p.getY() + y + y);
+				if(b.isFree(arrival)) { moves.add(arrival); }
 			}
+		}
 
-			// down, free movement
-			arrival = new Position(p.getX(), p.getY() - 1);
-			if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); }
-
-			// down right, attack movement
-			arrival = new Position(p.getX() + 1, p.getY() - 1);
-			if(Position.isCorrect(arrival) && b.isWhite(arrival)) { moves.add(arrival); }
+		// forward + east, attack-only movement
+		arrival = new Position(p.getX() + 1, p.getY() + y);
+		if(b.isEnemy(arrival, p)) { moves.add(arrival); }
 
-			// down left, attack movement
-			arrival = new Position(p.getX() - 1, p.getY() - 1);
-			if(Position.isCorrect(arrival) && b.isWhite(arrival)) { moves.add(arrival); }
+		// forward + west, attack-only movement
+		arrival = new Position(p.getX() - 1, p.getY() + y);
+		if(b.isEnemy(arrival, p)) { moves.add(arrival); }
 
-		}
 		return moves;
 	}
 }
diff --git a/MavenChess/MavenChess/src/main/java/model/Piece.java b/MavenChess/MavenChess/src/main/java/model/Piece.java
index 72d2d8d..d26f9f4 100644
--- a/MavenChess/MavenChess/src/main/java/model/Piece.java
+++ b/MavenChess/MavenChess/src/main/java/model/Piece.java
@@ -7,12 +7,14 @@ import java.util.ArrayList;
 public abstract class Piece {
 	protected Position p;
 	protected int color;
+	protected boolean hasBeenMoved;
 
 	public static final int WHITE = 1, BLACK = 2;
 
 	protected Piece(Position p, int color) {
 		this.p = p;
 		this.color = color;
+		hasBeenMoved = false;
 	}
 
 	public ArrayList<Position> getAvailableMoves(Board b) {
@@ -27,7 +29,12 @@ public abstract class Piece {
 		return p;
 	}
 
+	public boolean hasBeenMoved() {
+		return hasBeenMoved;
+	}
+
 	public void setPosition(Position p) {
 		this.p = p;
+		hasBeenMoved = true;
 	}
 }
diff --git a/MavenChess/MavenChess/src/main/java/model/Position.java b/MavenChess/MavenChess/src/main/java/model/Position.java
index 7a29479..b1562dc 100644
--- a/MavenChess/MavenChess/src/main/java/model/Position.java
+++ b/MavenChess/MavenChess/src/main/java/model/Position.java
@@ -3,7 +3,6 @@ package model;
 public class Position {
 	private int x; // x horizontal -> use static Position.a to Position.h
 	private int y; // y vertical -> use 1 to 8
-	public static final int a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7, h = 8;
 
 	// PS : graveyards are specified as negative 'x', and we use 'y' to pile dead pieces from 1 to n
 	public static final int WHITE_GRAVEYARD = -1, BLACK_GRAVEYARD = -2;
@@ -40,7 +39,11 @@ public class Position {
 		this.y = y;
 	}
 
-	public static boolean isCorrect(Position arrival) {
-		return (arrival.getX() >= 1 && arrival.getX() <= 8 && arrival.getY() >= 1 && arrival.getY() <= 8);
+	public boolean isCorrect() {
+		return (x >= 1 && x <= 8 && y >= 1 && y <= 8);
+	}
+
+	public boolean equals(Position p) {
+		return (x == p.getX() && y == p.getY());
 	}
 }
diff --git a/MavenChess/MavenChess/src/main/java/model/Queen.java b/MavenChess/MavenChess/src/main/java/model/Queen.java
index 0d740f1..08f4ae3 100644
--- a/MavenChess/MavenChess/src/main/java/model/Queen.java
+++ b/MavenChess/MavenChess/src/main/java/model/Queen.java
@@ -11,11 +11,32 @@ public class Queen extends Piece{
     public ArrayList<Position> getAvailableMoves(Board b) {
 
         // creates a dynamic list of available moves
-        ArrayList<Position> moves = new ArrayList<Position>();
-
+        ArrayList<Position> moves = new ArrayList<>();
         Position arrival;
 
+        // list of the 8 queen directions
+        int[] all_x = {0, 1, 1, 1, 0, -1, -1, -1};
+        int[] all_y = {1, 1, 0, -1, -1, -1, 0, 1};
+
+        for(int n = 0 ; n < all_x.length ; n++) { // for each direction
+            int x = all_x[n];
+            int y = all_y[n];
+            boolean blocked = false;
+            int i = 1;
+            while (i < 8 && !blocked) { // continues "as a ray" in that direction until blocked
+                arrival = new Position(p.getX() + (x * i), p.getY() + (y * i));
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
+                    moves.add(arrival);
+                }
+                if (!b.isFree(arrival)) {
+                    blocked = true;
+                }
+                i++;
+            }
+        }
 
+        // Full wrote version : --------------------------------------------
+        /*
         int i = 1;
         boolean left = false;
         boolean right = false;
@@ -29,111 +50,84 @@ public class Queen extends Piece{
         while (i < 8) {
             // Bishop moves
             arrival = new Position(p.getX() + i, p.getY() + i);
-
             if (!leftTop) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
-
             if (!b.isFree(arrival)) {
                 leftTop = true;
             }
-
-
-
-
-
             //right diagonal
             arrival = new Position(p.getX() - i, p.getY() + i);
             if (!rightTop) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 rightTop = true;
             }
-
-
-
             arrival = new Position(p.getX() + i, p.getY() - i);
             if (!leftDown) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 leftDown = true;
             }
-
-
-
             arrival = new Position(p.getX() - i, p.getY() - i);
             if (!rightDown) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 rightDown = true;
             }
-
-
             // RooK moves
-
             arrival = new Position(p.getX() +i, p.getY());
-
             if (!left) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
-
             if (!b.isFree(arrival)) {
                 left = true;
             }
-
-
-
             //right diagonal
             arrival = new Position(p.getX()- i , p.getY() );
             if (!right) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 right = true;
             }
-
-
-
             arrival = new Position(p.getX(), p.getY() + i);
             if (!top) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 top = true;
             }
-
-
-
             arrival = new Position(p.getX(), p.getY() - i);
             if (!down) {
-                if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                     moves.add(arrival);
                 }
             }
             if (!b.isFree(arrival)) {
                 down = true;
             }
-
-
             i++;
         }
+        */
+        // ------------------------------------------------------------
 
         return moves;
     }
diff --git a/MavenChess/MavenChess/src/main/java/model/Rook.java b/MavenChess/MavenChess/src/main/java/model/Rook.java
index 859120d..a04763e 100644
--- a/MavenChess/MavenChess/src/main/java/model/Rook.java
+++ b/MavenChess/MavenChess/src/main/java/model/Rook.java
@@ -4,43 +4,59 @@ import java.util.ArrayList;
 
 public class Rook extends Piece {
 
-
-    private final Position original;
-
     public Rook(Position p, int color) {
         super(p, color);
-        this.original = p;
     }
 
-
     public ArrayList<Position> getAvailableMoves(Board b) {
 
         // creates a dynamic list of available moves
-        ArrayList<Position> moves = new ArrayList<Position>();
-
+        ArrayList<Position> moves = new ArrayList<>();
         Position arrival;
 
+        // list of the 4 rook directions
+        int[] all_x = {0, 1, 0, -1};
+        int[] all_y = {1, 0, -1, 0};
+
+        for(int n = 0 ; n < all_x.length ; n++) { // for each direction
+            int x = all_x[n];
+            int y = all_y[n];
+            boolean blocked = false;
+            int i = 1;
+            while (i < 8 && !blocked) { // continues "as a ray" in that direction until blocked
+                arrival = new Position(p.getX() + (x * i), p.getY() + (y * i));
+                if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
+                    moves.add(arrival);
+                }
+                if(b.isKing(arrival) && !b.getPiece(arrival).hasBeenMoved() && !hasBeenMoved) { // Castling
+                    moves.add(arrival);
+                }
+                if (!b.isFree(arrival)) {
+                    blocked = true;
+                }
+                i++;
+            }
+        }
+
+        // Full explicit directions version : ----------------------------
+        /*
         int i = 1;
         boolean left = false;
         boolean right = false;
         boolean top = false;
         boolean down = false;
 
-
         while (i < 8) {
 
             //left
-
             arrival = new Position(p.getX() + i, p.getY());
             if (Position.isCorrect(arrival)) {
                 if (!left) {
-                    if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                    if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                         moves.add(arrival);
                     }
-
                     if (b.isKing(arrival)) {
                         moves.add(arrival);
-
                     }
                 }
                 if (!b.isFree(arrival)) {
@@ -52,51 +68,45 @@ public class Rook extends Piece {
             arrival = new Position(p.getX() - i, p.getY());
             if (Position.isCorrect(arrival)) {
                 if (!right) {
-                    if (b.isEnnemy(arrival, p) || b.isFree(arrival)) {
+                    if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                         moves.add(arrival);
                     }
                     if (b.isKing(arrival)) {
                         moves.add(arrival);
                     }
                 }
-
                 if (!b.isFree(arrival)) {
-
                     right = true;
                 }
             }
 
-
             arrival = new Position(p.getX(), p.getY() + i);
             if (Position.isCorrect(arrival)) {
                 if (!top) {
-                    if (b.isEnnemy(arrival, p)|| b.isFree(arrival)) {
+                    if (b.isEnemy(arrival, p)|| b.isFree(arrival)) {
                         moves.add(arrival);
                     }
                 }
-
                 if (!b.isFree(arrival)) {
-
                     top = true;
                 }
             }
 
-
             arrival = new Position(p.getX(), p.getY() - i);
             if(Position.isCorrect(arrival)||b.isFree(arrival)) {
                 if (!down) {
-                    if (b.isEnnemy(arrival, p)) {
+                    if (b.isEnemy(arrival, p)) {
                         moves.add(arrival);
                     }
                 }
                 if (!b.isFree(arrival)) {
-
                     down = true;
                 }
             }
-
             i++;
         }
+        */
+        // ------------------------------------------------------------
 
         return moves;
     }
diff --git a/MavenChess/MavenChess/src/main/java/view/BoardView.java b/MavenChess/MavenChess/src/main/java/view/BoardView.java
index 2f5def4..a0579b8 100644
--- a/MavenChess/MavenChess/src/main/java/view/BoardView.java
+++ b/MavenChess/MavenChess/src/main/java/view/BoardView.java
@@ -3,7 +3,11 @@ package view;
 import javafx.scene.Group;
 import javafx.scene.shape.*;
 import model.Board;
-import model.Pawn;
+import model.Rook;
+import model.Knight;
+import model.Bishop;
+import model.Queen;
+import model.King;
 import model.Piece;
 import model.Position;
 
@@ -11,58 +15,43 @@ import java.util.ArrayList;
 
 public class BoardView {
 
-	public static final int BOARD_SIZE = 16, CENTERED_ORIGIN = -BOARD_SIZE*7/2;
+	public static final int BOARD_SIZE = 16, CENTERED_ORIGIN = -BOARD_SIZE*7/2, BOARD_HEIGHT = -5, GRAVEYARD_HEIGHT = -1;
 
-	private TileView[] tiles; // contains all the squares/tiles of the board (visual)
-	private PieceView[] pieces; // contains all the 3d pieces (visual)
+	private final TileView[] tiles; // contains all the squares/tiles of the board (visual)
+	private final PieceView[] pieces; // contains all the 3d pieces (visual)
 	private int black_death_count, white_death_count; // graveyard counter
 
-	public BoardView(Custom3dModel model, CustomMaterial material) {
+
+	public BoardView(Custom3dModel model, CustomMaterial material, Board board) {
 		// creates the board squares, and position them properly
 		tiles = new TileView[64];
 		for(int j = 1 ; j <= 8 ; j++) {
-			for (int i = 1 ; i <= 8; i++) {
-				createTile(i, j);
+			for(int i = 1 ; i <= 8 ; i++){
+				createTile(new Position(i, j));
 			}
 		}
 		resetColor(material); // init/reset the board squares with black and white
 
-		// creates the 3d pieces
+		// creates the 3d pieces (from the board list)
 		pieces = new PieceView[64];
 		for(int n = 0 ; n < 64 ; n++) {
 			pieces[n] = null;
-		}
-		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; }
-			for(int x = Position.a ; x <= Position.h ; x++) {
-				createPiece(x, y, model.get(Custom3dModel.PAWN), color, material);
+			Piece piece = board.getPiece(n);
+			if(piece != null) {
+				int type = Custom3dModel.PAWN; // we can't do switch statement on ".getClass()"
+				if (piece.getClass() == Rook.class) { type = Custom3dModel.ROOK; }
+				if (piece.getClass() == Knight.class) { type = Custom3dModel.KNIGHT; }
+				if (piece.getClass() == Bishop.class) { type = Custom3dModel.BISHOP; }
+				if (piece.getClass() == Queen.class) { type = Custom3dModel.QUEEN; }
+				if (piece.getClass() == King.class) { type = Custom3dModel.KING; }
+				createPiece(piece.getPosition(), piece.getColor(), type, material, model);
 			}
-			// placement of rook, knight, bishop, queen, king
-			if(color == Piece.WHITE) { y = 1; } else { y = 8; }
-			createPiece(Position.a, y, model.get(Custom3dModel.ROOK), color, material);
-			createPiece(Position.b, y, model.get(Custom3dModel.KNIGHT), color, material);
-			createPiece(Position.c, y, model.get(Custom3dModel.BISHOP), color, material);
-			createPiece(Position.d, y, model.get(Custom3dModel.QUEEN), color, material);
-			createPiece(Position.e, y, model.get(Custom3dModel.KING), color, material);
-			createPiece(Position.f, y, model.get(Custom3dModel.BISHOP), color, material);
-			createPiece(Position.g, y, model.get(Custom3dModel.KNIGHT), color, material);
-			createPiece(Position.h, y, model.get(Custom3dModel.ROOK), color, material);
 		}
-		// init graveyard empty
+		// init graveyards as empty
 		black_death_count = 0;
 		white_death_count = 0;
 	}
 
-	public void updateAllPieces() { // updates all the pieces, visually, to the right position
-		for(int j = 1 ; j <= 8 ; j++) {
-			for (int i = 1; i <= 8; i++) {
-				updatePiece(new Position(i, j));
-			}
-		}
-	}
-
 	public void updatePiece(Position position) { // updates the piece(i, j), visually, to the right position
 		int id = position.getID();
 		if(getPiece(id) != null) {
@@ -81,21 +70,21 @@ public class BoardView {
 			piece.getObj().setTranslateX(9 * BOARD_SIZE + CENTERED_ORIGIN);
 			piece.getObj().setTranslateZ(-y * BOARD_SIZE*0.65f + BOARD_SIZE*4);
 		}
-		piece.getObj().setTranslateY(-1); // place at right height (Y axis) on table
+		piece.getObj().setTranslateY(GRAVEYARD_HEIGHT); // place at right height (Y axis) on table
 	}
 
-	public void createTile(int x, int y) {
-		// creates a tile and inits the right size and position
-		Box box = new Box(BOARD_SIZE, BOARD_SIZE / 2, BOARD_SIZE);
-		box.setTranslateX((x-1) * BOARD_SIZE + CENTERED_ORIGIN);
-		box.setTranslateZ((y-1) * BOARD_SIZE + CENTERED_ORIGIN);
+	public 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);
+		box.setTranslateZ((position.getY()-1) * BOARD_SIZE + CENTERED_ORIGIN);
 		// sets the tile on the list
-		setTile(new TileView(box, new Position(x, y)));
+		setTile(new TileView(box, position));
 	}
 
-	private void createPiece(int x, int y, TriangleMesh mesh, int color, CustomMaterial material) {
-		// creates a piece, and inits materials, drawmode, scale, and the right height (Y axis)
-		MeshView obj = new MeshView(mesh);
+	private void createPiece(Position position, int color, int type, CustomMaterial material, Custom3dModel model) {
+		// creates a piece, 3d-model, materials, draw-mode, scale, and the right height (Y-axis)
+		MeshView obj = new MeshView(model.get(type));
 		obj.setDrawMode(DrawMode.FILL);
 		if(color == Piece.WHITE)
 			obj.setMaterial(material.get(CustomMaterial.WHITE));
@@ -103,25 +92,20 @@ public class BoardView {
 			obj.setMaterial(material.get(CustomMaterial.BLACK));
 		int scale = 16; // scales the 3d models to a wanted size, to fit a board tile
 		obj.setScaleX(scale);
-		obj.setScaleY(-scale); // Y axis is down (not up) in javaFX, so we need to reverse object
-		obj.setScaleZ(-scale); // we reverse Z axis too, "to keep the orientation of the 3-axis vectors", (reversing Y and Z is equivalent of 180° rotation of X axis)
-		obj.setTranslateY(-5); // place at right height (Y axis) on board
+		obj.setScaleY(-scale); // Y-axis is down (not up) in javaFX, so we need to reverse object
+		obj.setScaleZ(-scale); // we reverse Z-axis too, "to keep the orientation of the 3-axis vectors", (reversing Y and Z is equivalent of 180° rotation of X-axis)
+		obj.setTranslateY(BOARD_HEIGHT); // place at right 3d height (Y-axis) on board
 		// if color is black we rotate
 		if(color == Piece.BLACK) {
 			obj.setScaleX(-obj.getScaleX());
 			obj.setScaleZ(-obj.getScaleZ());
 		}
 		// sets the piece on the list
-		Position position = new Position(x, y);
 		setPiece(new PieceView(obj, position, color));
-		// updates the right board-tile position x, y (corresponding to X axis and Z axis placements)
+		// updates piece on the right visual position (corresponding to X-axis and Z-axis placements in 3d)
 		updatePiece(position);
 	}
 
-	public TileView[] getTiles() {
-		return tiles;
-	}
-
 	public TileView getTile(int id) {
 		return tiles[id];
 	}
@@ -134,10 +118,6 @@ public class BoardView {
 		tiles[tile.getPosition().getID()] = tile;
 	}
 
-	public PieceView[] getPieces() {
-		return pieces;
-	}
-
 	public PieceView getPiece(int id) {
 		return pieces[id];
 	}
@@ -155,24 +135,26 @@ public class BoardView {
 			for (int i = 1; i <= 8; i++, n++) {
 				// resets board with black and white - bottom left (first case) is black, then alternates
 				if((i + j) % 2 == 0) {
-					getTileObj(n).setMaterial(material.get(CustomMaterial.BOARDBLACK));
-					getTile(n).setState(TileView.NORMAL);
+					getTileObj(n).setMaterial(material.get(CustomMaterial.BLACK_TILE)); // (visually)
 				} else {
-					getTileObj(n).setMaterial(material.get(CustomMaterial.BOARDWHITE));
-					getTile(n).setState(TileView.NORMAL);
+					getTileObj(n).setMaterial(material.get(CustomMaterial.WHITE_TILE)); // (visually)
 				}
+				getTile(n).setState(TileView.NORMAL); // (on 'state' attribute)
 			}
 		}
 	}
 
 	public void setColor(CustomMaterial material, Position position, int type) {
-		getTileObj(position.getID()).setMaterial(material.get(type));
+		int id = position.getID();
+		// set the new color-type (visually)
+		getTileObj(id).setMaterial(material.get(type));
+		// save color-type in the "state" attribute of that tile
 		switch(type) {
-			case CustomMaterial.SELECTED -> getTile(position.getID()).setState(TileView.SELECTED);
-			case CustomMaterial.MOVABLE -> getTile(position.getID()).setState(TileView.MOVABLE);
-			case CustomMaterial.ATTACK -> getTile(position.getID()).setState(TileView.ATTACK);
-			case CustomMaterial.SPECIAL -> getTile(position.getID()).setState(TileView.SPECIAL);
-			default -> getTile(position.getID()).setState(TileView.NORMAL);
+			case CustomMaterial.SELECTED_TILE -> getTile(id).setState(TileView.SELECTED);
+			case CustomMaterial.MOVABLE_TILE -> getTile(id).setState(TileView.MOVABLE);
+			case CustomMaterial.ATTACK_TILE -> getTile(id).setState(TileView.ATTACK);
+			case CustomMaterial.SPECIAL_TILE -> getTile(id).setState(TileView.SPECIAL);
+			default -> getTile(id).setState(TileView.NORMAL);
 		}
 	}
 
@@ -180,19 +162,19 @@ public class BoardView {
 		Position position = clickedPiece.getPosition();
 		board.setSelected(position);
 		resetColor(material);
-		setColor(material, position, CustomMaterial.SELECTED);
+		setColor(material, position, CustomMaterial.SELECTED_TILE);
 		ArrayList<Position> moves = board.getPiece(position).getAvailableMoves(board);
 		for (Position move : moves) {
 			if(board.isFree(move)) {
-				setColor(material, move, CustomMaterial.MOVABLE);
-			} else if(board.isEnnemy(move, position)) {
-				setColor(material, move, CustomMaterial.ATTACK);
+				setColor(material, move, CustomMaterial.MOVABLE_TILE);
+			} else if(board.isEnemy(move, position)) {
+				setColor(material, move, CustomMaterial.ATTACK_TILE);
 			} else {
-				setColor(material, move, CustomMaterial.SPECIAL);
+				setColor(material, move, CustomMaterial.SPECIAL_TILE);
 			}
 			// promotion
 			if(board.isPawn(position) && (move.getY() == 8 || move.getY() == 1)) {
-				setColor(material, move, CustomMaterial.SPECIAL);
+				setColor(material, move, CustomMaterial.SPECIAL_TILE);
 			}
 		}
 	}
diff --git a/MavenChess/MavenChess/src/main/java/view/Custom3dModel.java b/MavenChess/MavenChess/src/main/java/view/Custom3dModel.java
index 7ec0d34..d27fa5a 100644
--- a/MavenChess/MavenChess/src/main/java/view/Custom3dModel.java
+++ b/MavenChess/MavenChess/src/main/java/view/Custom3dModel.java
@@ -10,7 +10,7 @@ import java.util.Scanner;
 
 public class Custom3dModel {
 
-	private TriangleMesh[] model;
+	private final TriangleMesh[] model;
 
 	public static final int PAWN = 0, ROOK = 1, KNIGHT = 2, BISHOP = 3, QUEEN = 4, KING = 5;
 
@@ -37,8 +37,8 @@ public class Custom3dModel {
 		TriangleMesh mesh = new TriangleMesh();
 		mesh.getTexCoords().addAll(0,0,0,0); // setup empty texture UV , we import without texture
 		mesh.getPoints().addAll(0,0,0); // adds a vertex 0 (because files .obj start from vertex 1)
-		float min = 0, max = 0, y;
-		ArrayList<Float> vdata = new ArrayList<Float>();
+		float max = 0, y;
+		ArrayList<Float> vertexData = new ArrayList<>();
 		try {
 			URL url = this.getClass().getResource(filename);
 			File myObj = new File(url.getPath().replaceAll("%20", " "));
@@ -51,9 +51,9 @@ public class Custom3dModel {
 					if(y > max) {
 						max = y;
 					}
-					vdata.add(Float.parseFloat(data[1]+"f"));
-					vdata.add(y);
-					vdata.add(Float.parseFloat(data[3]+"f"));
+					vertexData.add(Float.parseFloat(data[1]+"f"));
+					vertexData.add(y);
+					vertexData.add(Float.parseFloat(data[3]+"f"));
 				} else if(data[0].equals("f")) {
 					mesh.getFaces().addAll(
 							Integer.parseInt(data[1].split("/")[0]), 0,
@@ -63,17 +63,19 @@ public class Custom3dModel {
 				}
 			}
 			myReader.close();
-		} catch (FileNotFoundException e) {
+		} catch (FileNotFoundException | NullPointerException e) {
 			System.out.println("Error while importing .obj file");
 			e.printStackTrace();
 		}
+		// replaces height (Y-axis) properly,
+		// it seems that javaFX tries to modify height to center models, so, we counter it for alignment purposes
 		int n = 0;
-		for(float v : vdata) {
-			if(n == 1) {
-				mesh.getPoints().addAll(v+max);
+		for(float vertex : vertexData) {
+			if(n == 1) { // only for Y (in 'X Y Z', as '0 1 2')
+				mesh.getPoints().addAll(vertex + max);
 			}
 			else {
-				mesh.getPoints().addAll(v);
+				mesh.getPoints().addAll(vertex);
 			}
 			n = (n + 1) % 3;
 		}
diff --git a/MavenChess/MavenChess/src/main/java/view/CustomCamera.java b/MavenChess/MavenChess/src/main/java/view/CustomCamera.java
index f4eba9f..6aef910 100644
--- a/MavenChess/MavenChess/src/main/java/view/CustomCamera.java
+++ b/MavenChess/MavenChess/src/main/java/view/CustomCamera.java
@@ -10,12 +10,12 @@ import javafx.scene.transform.Translate;
 
 public class CustomCamera {
 
-	private PerspectiveCamera camera;
-	private Group group; // used to rotate camera from 0,0,0 and not from camera x,y,z
+	private final PerspectiveCamera camera;
+	private final Group group; // used to rotate camera from 0,0,0 and not from camera x,y,z
 	private double anchorX, anchorY, anchorAngleX, anchorAngleY;
 
 	private final static double SCROLL_SPEED = 10;
-	private DoubleProperty angleX, angleY;
+	private final DoubleProperty angleX, angleY;
 	public CustomCamera(int nearClip, int farClip, int fov) {
 		camera = new PerspectiveCamera(true);
 		camera.setFieldOfView(fov);
@@ -29,10 +29,6 @@ public class CustomCamera {
 		angleY = new SimpleDoubleProperty(8);
 	}
 
-	public Group getGroup() {
-		return group;
-	}
-
 	public PerspectiveCamera getCamera() {
 		return camera;
 	}
diff --git a/MavenChess/MavenChess/src/main/java/view/CustomLight.java b/MavenChess/MavenChess/src/main/java/view/CustomLight.java
index ab79cb2..dddfbf4 100644
--- a/MavenChess/MavenChess/src/main/java/view/CustomLight.java
+++ b/MavenChess/MavenChess/src/main/java/view/CustomLight.java
@@ -3,14 +3,12 @@ package view;
 import javafx.scene.AmbientLight;
 import javafx.scene.Group;
 import javafx.scene.PointLight;
-import javafx.scene.SpotLight;
 import javafx.scene.paint.Color;
 import javafx.scene.transform.Translate;
 
 public class CustomLight {
 	AmbientLight ambient;
 	PointLight[] light;
-	SpotLight spot;
 	public CustomLight() {
 		ambient = new AmbientLight(Color.rgb(35, 35, 35));
 		light = new PointLight[3];
@@ -20,12 +18,10 @@ public class CustomLight {
 		light[0].getTransforms().add(new Translate(-100, -50, 100));
 		light[1].getTransforms().add(new Translate(0, -60, -100));
 		light[2].getTransforms().add(new Translate(100, -50, 100));
-		spot = new SpotLight(Color.rgb(255,0,0));
-		spot.getTransforms().add(new Translate(0, -50, 0));
 	}
 
 	public void addAllToScene(Group group) {
-		// PS : javaFX have max HARDCAP of 3 pointlight/spotlights, and 1 ambient
+		// PS : javaFX have max HARD cap of 3 point-light/spot-light, and 1 ambient
 		group.getChildren().addAll(light[0], light[1], light[2], ambient);
 	}
 }
diff --git a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
index 8acfa80..0302968 100644
--- a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
+++ b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
@@ -8,8 +8,8 @@ public class CustomMaterial {
 
 	private static PhongMaterial[] material;
 	public static final int
-			BLACK = 0, WHITE = 1, SELECTED = 2, MOVABLE = 3,
-			ATTACK = 4, SPECIAL = 5, BOARDBLACK = 6, BOARDWHITE = 7, WOOD = 8;
+			BLACK = 0, WHITE = 1, SELECTED_TILE = 2, MOVABLE_TILE = 3,
+			ATTACK_TILE = 4, SPECIAL_TILE = 5, BLACK_TILE = 6, WHITE_TILE = 7, WOOD = 8;
 	private static final int MATERIAL_LENGTH = 9;
 
 	public CustomMaterial() {
@@ -18,18 +18,18 @@ public class CustomMaterial {
 		material[BLACK].setDiffuseColor(Color.BLACK);
 		material[WHITE] = new PhongMaterial();
 		material[WHITE].setDiffuseColor(Color.WHITE);
-		material[SELECTED] = new PhongMaterial();
-		material[SELECTED].setDiffuseColor(Color.rgb(50,200,100));
-		material[MOVABLE] = new PhongMaterial();
-		material[MOVABLE].setDiffuseColor(Color.rgb(50,240,0));
-		material[ATTACK] = new PhongMaterial();
-		material[ATTACK].setDiffuseColor(Color.rgb(200,50,50));
-		material[SPECIAL] = new PhongMaterial();
-		material[SPECIAL].setDiffuseColor(Color.rgb(120,20,255));
-		material[BOARDBLACK] = new PhongMaterial();
-		material[BOARDBLACK].setDiffuseColor(Color.grayRgb(64));
-		material[BOARDWHITE] = new PhongMaterial();
-		material[BOARDWHITE].setDiffuseColor(Color.grayRgb(200));
+		material[SELECTED_TILE] = new PhongMaterial();
+		material[SELECTED_TILE].setDiffuseColor(Color.rgb(50,200,100));
+		material[MOVABLE_TILE] = new PhongMaterial();
+		material[MOVABLE_TILE].setDiffuseColor(Color.rgb(50,240,0));
+		material[ATTACK_TILE] = new PhongMaterial();
+		material[ATTACK_TILE].setDiffuseColor(Color.rgb(200,50,50));
+		material[SPECIAL_TILE] = new PhongMaterial();
+		material[SPECIAL_TILE].setDiffuseColor(Color.rgb(120,20,255));
+		material[BLACK_TILE] = new PhongMaterial();
+		material[BLACK_TILE].setDiffuseColor(Color.grayRgb(64));
+		material[WHITE_TILE] = new PhongMaterial();
+		material[WHITE_TILE].setDiffuseColor(Color.grayRgb(200));
 		material[WOOD] = new PhongMaterial();
 		material[WOOD].setDiffuseMap(new Image("/wood.jpg"));
 
diff --git a/MavenChess/MavenChess/src/main/java/view/CustomScene.java b/MavenChess/MavenChess/src/main/java/view/CustomScene.java
index 974c03e..30def40 100644
--- a/MavenChess/MavenChess/src/main/java/view/CustomScene.java
+++ b/MavenChess/MavenChess/src/main/java/view/CustomScene.java
@@ -7,7 +7,7 @@ import javafx.scene.SceneAntialiasing;
 import javafx.scene.paint.Color;
 
 public class CustomScene {
-	private Scene scene;
+	private final Scene scene;
 	public CustomScene(Group group, PerspectiveCamera camera, SceneAntialiasing antialiasing) {
 		scene = new Scene(group, 800, 500, true, antialiasing); // create scene
 		scene.setFill(Color.rgb(50, 50, 50)); // background default color
diff --git a/MavenChess/MavenChess/src/main/java/view/Desk.java b/MavenChess/MavenChess/src/main/java/view/Desk.java
index 78565b7..06def99 100644
--- a/MavenChess/MavenChess/src/main/java/view/Desk.java
+++ b/MavenChess/MavenChess/src/main/java/view/Desk.java
@@ -4,11 +4,11 @@ import javafx.scene.Group;
 import javafx.scene.shape.Box;
 
 public class Desk {
-	private Box desk;
+	private final Box desk;
 	public Desk(CustomMaterial material) {
 		int table_size = BoardView.BOARD_SIZE*12;
 		desk = new Box(table_size*2, BoardView.BOARD_SIZE, table_size);
-		desk.translateYProperty().set(BoardView.BOARD_SIZE/2);
+		desk.translateYProperty().set((double) BoardView.BOARD_SIZE /2);
 		desk.setMaterial(material.get(CustomMaterial.WOOD));
 	}
 
diff --git a/MavenChess/MavenChess/src/main/java/view/TileView.java b/MavenChess/MavenChess/src/main/java/view/TileView.java
index 31a1646..d92276e 100644
--- a/MavenChess/MavenChess/src/main/java/view/TileView.java
+++ b/MavenChess/MavenChess/src/main/java/view/TileView.java
@@ -5,8 +5,8 @@ import model.Position;
 
 public class TileView {
 
-	private Box obj;
-	private Position position;
+	private final Box obj;
+	private final Position position;
 	private int state;
 
 	public static final int NORMAL = 0, SELECTED = 1, MOVABLE = 2, ATTACK = 3, SPECIAL = 4;
diff --git a/MavenChess/MavenChess/target/classes/controller/Main.class b/MavenChess/MavenChess/target/classes/controller/Main.class
index 7e602f090202b3207e258b6d0ef9a9e73c90bf9e..1021ecf5800bb5235d0702489ee5928b761d82ea 100644
GIT binary patch
delta 786
zcmZXRO-NKx6vuyeX5P%a5696`e2SPdQ0bItqBN5<jkYn#pb&~FDl`f+DX2Dq5blDY
z-X;*rgfcVpV`?n5T4~uLDp~|BN?NpO(V|Ulrt@YtV(-Dd=UmSJ<DBy?@;x&B*VAbB
z5A^h&txpb|xX@$JiZ{R>Md;F*-pl#NZix&Mv{`7hD|R}i-r9|wYhdxM-EKic`lz={
zsYH6xmvpaRTAy4_D$ps(c%aHtqMdYA6a{P1&XQh}&gxO0GM#9sO7Fu@0jL7!Q0R2|
z9J^!s0*S+Rz}9Sij%3WRjcpnBI-f$-`;8JaLn>z3)-n~gmErg-r))z?EnA<b4>Ft^
zGSyi2y|>vcF~f;bYV92Ayo<_kaSgy}E36wVmNqwFQi?5qHRUu?Nt{izOV&YzgKXv)
zTj-&VeztRkdalyMHCnhuj8UncU>DOe&Nq_3BgtplSQUmp5@+d9LG~$&PDVg5g;HP1
zJ?>)-GRzLfcpw&5DPx?6SbPwf{F@AhyCNZ<L=!whiOt_k@)(a8{K=FEd&Tq@W|+k%
zW<HYUiMu^kcq$X|OAGVN@r-~pGR1Srg3`(e3zRLQOGh_&!AlHYiB2<GmSJZoTqElo
z3&*uC!5wgZgsU2k2)`yJ!P>g0Eam!)#2)U*=@(y!;)tA0`5Kqfi5FE2F0d#L1;rA}
z_`(LSWl)OS^0tog=6c4~^^AgXncNOt#b9oXo?P_5&I)f){+v*&^R=ivkhj_5_=;2i
E0Jn6a3;+NC

delta 761
zcmZ9JO-NK>6o#KWGuP|AbDbFjYi>3T6Bgx6*&k8bkj{*onhLT6LnK2Z`#}uKrEMdK
z=mSX?{Xzd}>eRK=YL&GRY8A9Ha2K>`Q4mO-JGPKn-0z(4eD68$`<}Z{^Q~s=k8e%r
zQcrh(U8cA5LRYI~7HJx7bec3$D&?<@ZEE#u+YE9V!SlUc-RG9j7Fqm-GycPxmM%;M
zGG18J&q`1|MqVzi5%;MdX1q#2=}p(D$S-Rzm{wgt3#&b$xY<J)6`%!GXXtd)F&ur8
zef6eeZg$B`lWm)%x!zI>p+wBA3c9q{+m1a;wPU-SnBbISI=W*!mP&-3Xc5upAzUsl
ze>@US4y+Vss|d0hhZqUgvR%#wYRIvk{cNO#BpsyaqK-bc($5Yqvzse|8l;gsH1U`W
zqhfzn?sL-hg#*l!=eOjG9M#G=rdhNK7H$$2e2n`%z#d>o#y#YbNSG%o4^Oc9#Fqax
zSpj#sCv9H#lxJun^d}=i=M$mddCnMq5&e~MCJ2bA&lGqewsL&nC9bTpg;z|<XNZvz
zUNc3xSQ%!T=nST~xyl>fV)0IRcA@`eNU6v=Evwu}gWe{6$JMV$e4s<->jEjSO{U~e
zTpO3%$89++iEvPmhl(b5F5!e>M(Wa0)T9+N&!dMfFOvF;*?U=CAYzH)kK*u_)JnK+
x2$#BEX;d#U<%FrZlu3<NR{O<>nyYj+G|5&x7PB_#GUzf~Dt503NGoGS`#)umnb`mU

diff --git a/MavenChess/MavenChess/target/classes/model/Bishop.class b/MavenChess/MavenChess/target/classes/model/Bishop.class
index 398d50bd457f077c36e29485a75dfac67ee15440..832b9497d29b38de2956a0abe0267ae57755b1ad 100644
GIT binary patch
delta 632
zcmY+BO-~b16o#Lf&dlvhE220`tpr1G;|CZLN3EY#K#@o>#>Jop6>20_@gp%37j?nH
zt(lmpJBW!%R|JhDV)y~N;aBK?aAAF0O~uLFd(U~#d!Ku5?(0q8GJC%M`n(35WHi7g
zWpJ{%covy^v(x2D|M*OKs{FF|hht_Q4}EC2LM#8&!kV)%w<@z!cgxetCNyR=?k7EV
z)ZyN&R3>GzuZ~zWler|ZFN<AFzT4|nACHXATwcY*EBF`9mmp3#rP$GM?NaR7rGnEE
zB{W5+RB%&~7kW8oZILHAC-nLvlXDwOIu-d&6of&0dXX!k|CaGpvhm)Jw0&Y*Xu{ym
zjXz0e=%*Xm3i+{Q!Rf8~^MUogUYqwczu3Q|z8nr{9%hT?HqvaRiw*_|Il*=Y*}*8C
zjFICKJGoAtD!WMJdP6r0?B*Rk)Z|}cf<93m=)P6<aY&q$2)BvEGvZ8EIjk@(+%=AH
z6kpJog0w*PXB<=H39(E+2eme$<7&jxo|>NRlwPfiSDdD(#s_%L8AUE<<;=ERgK`Z?
zd5EbCYYdwW-9{}uG7RgtpstH#{uTb}mcB-<xS?jq{#SK_x=!2xZ83jJKc{nT&a0P^
HW^~~<{d8fT

delta 743
zcmZvaO;1xn6o#L3d%s$1A;Bt!n1({70r}ACMS=R!f+7Z#)Q`YMO$u6rEh!pITy(8F
z(}l*ka^sdn1BoOgZgru5Kuz5E4_q1QDYe!bCpR-^<~;Mh=g!QBUC(xRzu$hl1)O9u
zfPv4!3}RsmfxCt5!qVWSo2&UJvG10fTbaneZk4c<(?(*{PTw!C6pDi61ZQbs@!sXa
zvd-oOx0t(iyEb*JiSfc}Uhwa%R^##`BUAore7gQojRGK7HgV=Q@K0|Noa=o<Xq`Q^
zp?!mn5!3W6pJ)3#$LF~|&mXp0-Ivn&7aX>3{N^>%Ei+;JIS0zaW_Q$X!m|HhP91Za
zu!dT8N6oEcZWGo}t6}~ccCcj0tL-m`*7R6S`n7*dRQncO+K3R=*<NDoBThSg>}P-u
zj%j9=POfV94qYtM!viHAGQ?93^MWI+kzgH<Erxl=7@tY<O|R|;r}#-qOw!^oS&}Z!
zOPnbg<AS7^ktr_9G#SZoP0e6Y&wW-5HEqLJy#WT*Mw>>Sit8mRf1DHgBqHK5qMS)o
z5{zmY7BLx8`y@7T>DL01IP^)cmXXw-EDcBxr#19*Mm2+f<Wee^)|Gie6|E!S(Bcqr
obhATHstqb?(MafeBV`4S*1t;i>HKdy;}BAt2{k>dRtD#O0m@c;M*si-

diff --git a/MavenChess/MavenChess/target/classes/model/Board.class b/MavenChess/MavenChess/target/classes/model/Board.class
index 50215dddae1418b33ede47485b465cdb3d5f4022..1407815545854fd1dd5a89e16d2f19e127a9ecb9 100644
GIT binary patch
literal 3363
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
NwQ%Uq*@*zI{Rgt`F600J

literal 3248
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
Y?6zpEJ1fN6yByZ#m1Dh2LS1<8KV1ti&j0`b

diff --git a/MavenChess/MavenChess/target/classes/model/King.class b/MavenChess/MavenChess/target/classes/model/King.class
index 2b7365022be2e1d12fc9d6144b60ef72220043f0..d65b114ff0c54a6ee0ff7a82f114683e338e82a4 100644
GIT binary patch
literal 1807
zcma)6O-~zF6g|%#&$G=CoPd+Kp#=&_Y|K|b;-;9;LISNDgA+(FCQ_ThjL49|L&pY%
zRaL3m{(!J+H(6C`qzI&>%C4I(y6z9?pJ-H-o;S9MFsW3`yt(h(`_BD*^V>hqUjmrK
zaufjsB{Tye=mKq<?waL{-m<N-C7@5(6}vVm(3Q+L6mHe7*={A9OD#!+1v)p(9dmTM
zW;>%(o@egn?P@IwiKrrM69^`iVY|So;{*|OASQ9zz!`K3MC;m{c4b{aYzf3#9Y$dw
zZs07=325t9ZQ19}DL7%^ttMPjK(})Kwm>MEW1La+pjV>Lz`N)_N^#mXy)^-8S7$2L
z=B_~hi5y!)NUbQUiv}*?GK*tZXFZEm>O65!8A_xK3?j`i%{4lTC-Z)(9J8`MT3Fq%
z%C&52MU`RLzz9YKj0a|Q+OjHh?vBL+!uR%`f%hBU7F_qC3gANnSCA11vkHwy^_&c$
z8NBLbR(1KRa`UlYwH21|IvXv}k+&<>{PyOm<=rt?9U^D)ZrOB}OwU&P2B_5@*i}Z@
zAXRP3vb<&2aXm(w6FALarglu*QKwV}G#_Y2<<~l!su$q+tdK@L;==|=)AQ^d)8Ved
z>^!Dhw5qj+IAbbNtO~R@qNuYnjLo{c_<!(+Ovm|(J_7d`r@x`Iv&Yli-D;+K`AsYn
z&1yEsf0A*xFV@WR!#Q)yFOtN(KxENgub8!MkA=+qkL=&b8(nm_y|OiHt9C?Gtw+@4
zppUZ>;H?E$CIX%7ICnV&`2*x&y88g)sc(?ws=5wDXc)x=rQW(3uJPilKdJ5>NtE;n
zKJ{s*FwHk<1Aov(1Q6f8fGiy#G8YT~5-kOTg_5QfN+CWvAIW_<P$<Q8wa7qWT&vqr
z=i5=QRMa%=2*jjT7!L(AdR$LvFMq^bLW}Do8JP&FSNH{t(%>_k+DBJh-mgpN<Kg=U
zxG<j{uJ7O3LtA=y9|MmO8R9!x{7x574xdsxw1?jnh1NL9W8-={q3>htF_wMdgMECo
zhkRO@g<hNabQvGjThLw~l`Uv=NYN&XiYFF+tsIx>g!KL0@P)d+t3F4pm87o@w|XQu
zDU!vZpV=S{s-a)v9M=wn*|srsVVR%9GO-Pu$Ja>UdwvIhzy&-Z{uA5%j5G5qzj}Y7
zAFnVVVz?-}aY^(eDXt(T?qX0l{6sy%koX2ge@M2_M!svf&Vi6*&EN*5Fu8j%L%%`X
z!vbcB>EwQn&xq+{`vRX+l4@X@14b!FoEKQ^;wJJOtTAyLbC_p7%OZsWr4Vj0C*#QK
zHmw$jl%OBdm6Yg^=#gZWSmZy)^^k!?j&KR1p%K*mh0vk88%OHKG2m}()ASWN?~p!#
LyL7qaOT~WyZ*zWb

delta 602
zcmZvayGjFL5QV?l?7A_82pUBpMg;}U#ap8Bekm+0Y$6JF3N}KpNWjLzMl2QFRz&dy
z6f_Y7K7d$=_!Pc_;_%1FiZZZscFvsnchCGMk*jd%>GR<cm}BuWBu;Rrw6yC*WdGDU
z_8zQE(A_E)clNdlr-4;(Jy1GGY40)t4R905SOvLJXpz=uNHYX!ppijE-L*D`7}hrx
z&`b+r&<La2Eo8`Q*0I(Z4mQYJ6?daT<4TqAM&g!8nP@Gw+uohs75%5a?Un7gpRhN-
zC4Y!*AJOU?W!DLF$S<Zo%P?*KYRm`xqJBh%YVoQ3KXZ_}Ry%BCU!JJqCN(gs*0nN4
zJ9#=N5aW<e&b3;mhZlNzr%!D9CC-3Mkdi!UDKIQYjK~EUxhE^HOqew!YPQzbAa9H@
zuGR<TnYElYS#--Sle(LL9tz=aGRL%XGg^t!{6W^mbqPC36KSUwNrzeOu=ENE^9C(^
E0hNkt^Z)<=

diff --git a/MavenChess/MavenChess/target/classes/model/Knight.class b/MavenChess/MavenChess/target/classes/model/Knight.class
index 09ed6279d228976b0614f6977c88b26d6efd00ac..a2fb5a72f9b96f88fa01675125be2b18fe9d8c6b 100644
GIT binary patch
literal 1389
zcma)5U2hvj6g^|_?)YQVxJ}&FG|=zX&X*xTfH<V2r70Fp9W_;pOQd$=tlTM^-Dtgz
z$RiSeppWo~gm~bEsHl-B^at>dcxgDZ>sU%!BxKL*+<VVG_ujL!f4}<UC4dEdkwXe;
z3B!g7OCY})Y`9)^MY(NPz?xUSiWUS$%Z+{@=&DEseyv`)Cy@~tdE#t4)n25$>S7o=
zI}O#1a*)Vr!n{Dbtbs!U#|{%@F^q!5aT_NvB48)cFMZW{90`amfx^*}IoK%LIEhmN
zM#qi5irMShU9$1kfxD$0W4ip?0%p0+PIEYma}wumT)@S_kk<nz+z^ned((F}cLXlJ
zHs#S4Di1W(WgAy;mGY?WQs`2rk=GJ6P@-aE920EQ*<hh!xe<%yIew?wTz}%Wqgv$w
zXSqSm1%?~ScW?JL*WK{0v+mJzq7k$m@17GXZTFo<^jLK%XTP;Xu^K0B2VM|Ty1Kw|
zs<XK5C{O1t2iq<aE*<n3k6o)Iy&QgVq!Hh8Q48sWq1tvlT0Ymhz)-(plFx#h332g1
zm`um>9+EBfH9Lw8(w;m#($3bwSXbY~GJjP61$H>J8aeH6mYuCw5D8w-?5gVcPSgu2
z+U)<B^NqZ@)u0!)-6f@^&nLQ0>lcReysIgGF5u2lU~!+MRY#gXK#ot0?Lq9ufGO_!
zqXM!7<}l6ExdetP-lfF^ed$S}Pw!zSrhOkD@JU+n7fWOrd-ejdwTJ9-A@gUhl{T6!
z!)&%pE{kWGYPK?kSIt(zig(&`MuH^5Ai^Xfj!6y3&?@M}f;5|RW_s2tS|#J<PgpJ)
zMQeIimQ4M~ynx*r{~gDkW3(tAC8yKH%%eS=xjiwJ*zf#^{KV9AT>1goNj}T>zqiCM
z`@56Bv26odf@$Qr7m&dy2P|R@r_jM^_$Z;rkM$|e;Af2CSNeCc63ev4v3-1s51Ao}
zn&oeX3{NTGM-(iLhq!}}>9e#v1391J6U<T04B2X!r;IcBjywzOWexXnjVBYIF~=UD
z7Kyq}&kBrv(n^V8iL;V*C2sJ~m$Q$X$PWAxc0VE*`v>N}z6pbHKaGr^bETLnuoRze
F{R?vYBZU9}

literal 2110
zcmcgt&2JM|5dY2Y+8aBY5J<vjfY7AHb`l&Qd^#i~fdmUD4GK+3)B`W}HaysPqxB|;
z1HDvSI3V>_IKe4MTv`c8)ksK4oamvKp1E=BA5c|o)p_1^K7dL%hiav_@6FC{<~K8M
zW?%pF^9uld7>PrJZo;q-L6i`ma|^bU9v3%@glMlUO23cLl*om0w<LY(7Bku8q=_0r
z<8`qp(hI(H(gU6+ZslajkHbV<*{db!iR5Gqb*MM7#X<wN60E?~#iE?O<`W`$*Ks`p
zWlb~^YC}iT&f6xM3H2L2D`Pt>?8GjH%o7^kWfn&h_E>1aUV<@e`&Y^&vP!()LTg1l
zr39ZSmTk--k>!At<Wmcu;UFO<OGB>b*?DHz_+IqM={S-|ndq?4snkQ(gRbxj1XGp<
z9g)AGlnz-)D~+fu4STk&a&y?i5gcV&qQJ_{iCj5{jwsHiKcBhIE;Gq#=03!gAZ*FW
zqCK`SH)DI3#f-y}Z8<kDoJrwHbq<Awe@&J+Sz$JU<Yow4IRgWWLOM!!)Lpb$sl5_U
znQkT-_}^GVhML0j<f3pm&ohL&&~kv`l+6Xkn*Rg6eIv_T^A)BCKLqG~w~BpCpl-tF
zB#w&tFvi$~oGl7}!Q&(x|A-hqXf!_IE_iu+SgKUk26;N93V;KAvovlB@XGNa%4-jw
zve5Yf%v49qGU&&$!ZBV|>i{uUjN>@(S_3tlz)3zaK;2R{qIP`q%VtmEG{4!b@t9p0
zfPQBM=F~D`qp7E`jED4M1x-`D-~JrCjY6>57rDBO17lr3q5VE~b#y&P;sI*ayX!t;
zo&4_pay{(o=3uMd3Y+s*6)aNmW>ghhq!L?|uvKr>kzDn*2BY6L7Jyy_1z4h$^);wC
zjI1F)rgWQxRe1g{7iFz<RmHYhSS7Y9D_#Yx^9OEH1FEU-p^euD)S!{q9Y}E#k6;f3
z|53idetgeu{)}~gMLT}y!5&3|+R#B~&`HxslaFrtj;H$*^w2LjO>fbwY3SEla8^5o
zA#DQZw0VqZcX2^m!bR;RMzuE>*Z#mIy&0GFG``StxT1fJDg9e~RURxoJStN32pJwH
zJc;x>2uBR>dU1wFOpSh<f9Czr=q)`A_0Dn}*6Ozb9y^09IgHl7F<`<p(G=-k|NM!X
VztH`jID#RDX*kEG&X;$?{{o8V;CKK4

diff --git a/MavenChess/MavenChess/target/classes/model/Pawn.class b/MavenChess/MavenChess/target/classes/model/Pawn.class
index a9d05b2520252001c47ac6dc5354e655d8b2eb69..f60f87c4bf81c0cdab3eaea62436f853ed6b9dc8 100644
GIT binary patch
literal 1341
zcma)5+fEZv6kP{~4lPseMHEz^AT1Q?1wkoR0YRG-B*B32#G#$QV3{G)0mCPl_yg#R
zpP-3>L=sJWGJF)ePA|j)Ml;E|?6dY|tv&nX^y@bONjwjr3e`F^12ymo)NMOiGZ$a5
z%#11Eo3L!lOA53`(xnF{Z+VtuCsNTR9kl{2TXIjvcRec?pLAWhpSJQ|06GFHV4Xm9
zB)a5B5cN753^bxiAW#Y=-`D~*87Jqs0wSfOMWDVijq(f`Xu}mEb_5#Fmk~fSt{S+8
z4gqb$^j;M*rj+@*fg5G>iZXPmlDe5Pl4A7%gwd;`&%iD8pAnyOq?;viD?jU+RG{So
z@#w0e7d0?|K_-(~!b6dCL57^PH{vhWx6F)}h_0&QhYSoOE?{iR{FG_hbIzVg2f-j=
z+%a$$_XKn+KVzHQ`vTz$>CO|5u9E09n<UVXwrq2LcYED*U&{3yEzM~sBXdjAwbZ?2
z)VxhA&kD+sD0@PniDFIeNh_z2swzTy%h?MmB%(!9mA$2_SQiMEq7{+Ubh{WL^cNpp
zx~{b+bMz+7w#qv9cgnT)U*<khuDty3C0Rsp(UY0ib8@G|(!XeJ*wWi|DZ}W0@VGQ+
zVA0uiGv=(N#PlyvsbSSubhDFHoELB<SNOP&@RmX~KR_QC>^y?_TmanXs-}u&0&6kK
zQ&$m&F+AW+z3`W25Ov~A6v95lICq8>@0g;7ZzsplSB~JHs~Xh?zQE8v!l#XD$7o*R
zwe=9~#jP`>tsUX!{NT_bdJZri;~rV&TkJiCE=5;5_=^sIAhosgk&E}+2e<^B{TDd)
ziEK0|Ws+#%8l*0bs3Y?h4rUv_IQ1AqJ05YCpP~b6=!8w--=YT}(1$~g=}$xoYK|1u
zIaBil2~1GUTKu4Yk}AgO^OzB<nd3X2Fpq{w<~7bxQ$$VE(gp1lZ94lPeqk9kI)XaF
Vyz6LYe_}CKquM@0&)LH1*>5MjBC!Af

literal 1628
zcmb7EO>Yxd6g|(GFt#(!2Z@0O3Mmc2i4&V7G!z_Cl0b-C$DpPPgjHVbA-pj0MB}j$
z;!m*Yf>qg6NL{s3OHh$mu|h~)bq7D8e*mGX=Xu7eLP8W|>AgGmoqOK>IM1*C{qqHY
zDHP*~pv8n?p%n)N+BV#>?PRYjyJQO-m{b+zPYLv-3gLlURlag7x%}W#3{k{P#4WVJ
z5{QQgd9NZ6bv?DFD$)_?{4mr+yFmB4tjlc8S59`?^W^=4s`_yx(5VyY5@<;U7j#?b
zK~kW#<T|b=AoBX!!xoO{JH=)ky*O&(n1#=AT%dh>nv7es{ru$yUtVMTEPSDX2K_g+
z<4X(uO~<l!4Co9_GcuKDk=iq8VF+n~n5xdYo@bYQ=D(vOgSX-sLB>SZ!Wj(@dpYAu
zugqSm>YQiWy2ddJ<2cKlWSIxaRH4xeM^@Id*H+g_p9{DqES%FsrmD_3vUFGTpSN%!
z^xe3ld=AN&<;Vm&3aVlkYa6S!_k&z@=s8$$OVU}Ap3>i;)9~-8s({rT3a6D5=wdgf
z>ry!yx!~4qLi(E(HVViM23c;O7(-3zd8)1lEmj2*A#V`FCT;{|$&W-I+MeV6&1Rmb
zcMF(oX5Ccb6cb1+`s~eu+zcy>EvmJO^lKhlFtLvsb|sB3x;3w4&nex=*mZU(qlZN8
zMEPI<!Ii3~6`{?i!!^gR@6o~^U=5{@Z9xpB|A6^h12xIDy>S*LI>zWYF4ET*;Q1E6
z;TI#dvdN|`D!;*h3DexkA9={T3|{}_ITFiT=vWx~9S4oa_>23Yr}&JU$?Y-DJV)<x
z;5-p*CtFvxaH=@+45>%xN{>9n@FT>AxsTr12{!fxHdaFJ9q_Mq<2K5>z~Aar2>&}s
z<q2K~puKA;e@ZR;0{>sjhw!iWuI1zK;a@pM1A6pJ93{|6`E+wlQb>n!o}(`Ef9p1m
z;{iQC;v{~-DZIo0-XM*CFd|x!5xp1_V;C1#F(D+*i8?NbhscSaDH<)Id6?u%Vuq4w
zAzMAL7~AwwFinBcn#E-bEGmA&70e+*?phdom26sk!Pz`Tm#60_qVG{Ok$8_`6TO*t
U7`+&p8GK7X1m7{J(6AQ%12k7=K>z>%

diff --git a/MavenChess/MavenChess/target/classes/model/Piece.class b/MavenChess/MavenChess/target/classes/model/Piece.class
index be225fd85e4b2c272930d7561313f34ff749d8fc..c70cfe3367e1cb27e247905ca4d730e0342c589f 100644
GIT binary patch
delta 591
zcmZutyG{Z@6g{&K9=i*=fUB#Zpn|Zdbe0x2R3_GR8cD3QFu`);Cm4UjLJ~J77M2#q
z#6L2gnc46P&D_V_bMCq4C;OFizW+Wx0i2@u<UG{!$f4w+jEaDFb9sL@9NwPajfU3(
zVlaNZ5SH2Q44!{QKel1Pg-5J~6|AaA9Ak(z)&c=@1M93eX6g_bB5Z7OVv7@3oG}?I
z(K|%cO^}VM2?~*!z#l7yD&K$zps04`$ySWvQ)US@w(FVz+t^`6DkV&)OiDAjs*VPu
zTzJCDU^K+5d?D#G?18c+TcCd@YzB6*$Nzmb-DK9n0b;Gb$5KM==naJzH8JH26`!XE
zQa*t;I_yX#v*7HanA%cs8IcCZb7+5Ybz>>Ii^FtvpGQg)T<y3uXLeEf*`(zyIJ|Z0
QiaT+|cT<xEj?~%5|E7K_ng9R*

delta 468
zcmZvYyD|h}5QV>g%!RSD!@8`s%Z@uEkg1YvCYO2=;XH$qdjf%}vZYEO6ey1)R?go$
zmO|3k)2C1O%j{c{zJ5GC10%}o^s2tSa5wMnyb1}Kr=><n&Vqc8MR`X@aln%D<sbP9
zk&qFqLUe_=6lO*~FCTH`@tC9>jLB*nUX$$z4w-D5Ijv}mtfxw0V^z*NeWhYB9nK=J
zB+!Nd8}fe7sj@&maQEKgsbkeJg-DNer)&Y64An0Ty`^ZI9a+zHBJU@o@}VNTGsHJv
z*W|S(h=$Lx%iiB<lHX$b{|@hS&<u|x(+iF5RW)Z{x1?4c>a&GWOzw%N_r%S29EYa&
F=o3<M9p?Z5

diff --git a/MavenChess/MavenChess/target/classes/model/Position.class b/MavenChess/MavenChess/target/classes/model/Position.class
index f1a4edbd041caca66d157e1c11b2ed2df615a826..bf4b97164c8118351d4b88aa50f9425eaff273f9 100644
GIT binary patch
literal 1390
zcmZ`(+fEZv6kVsC-Y=9^D$ptv6{bb0K4XYbQ5)+GNVOUxLpy=N(qcO`@;4YCeDTFZ
zH1WX?@T1VRr(>xENSJfZK6|gV_gW|Yef;wmfF;}t!vk*sS`<F`6%xC~d!yJiTHD1Z
zTf1i6R`B1pT9&<};MMch5P}E=5RM{(s6u?N-7uTQr|qs~TkV#D`oRCPWW}QxkrZ_h
z=4mvFBvK06wrRg`pvn>+iz59mTvHf%{-C_E`sV)Ha&@(~ymnV1R%*Apw$ZYyMzd#n
z|L~7#E0yKa!;>@#A1nCuayefmM~O`_t75gx$GyERv$J7rH5o}(+I6E@H9D4@-JoXg
zSX~ZY`G1r};<48<dkAz*d*wiOn(h#ItOiG5lo5V8k1XszWOYmJPREgrYQ1Ft>$XvU
z`^eaL+5G0ap3x*<N<U2~>1tmgyx#70>gGL5T8{mbc0r6mj+%LBoW?H=;Lal|bDh9N
zt_tH$Y=Y;>p>qad-uaN__YyN|;yTxn!VjoI<_Lj8_6V`BPVr@alcWHPG}43!6h{nG
zj7;~-xaN2wfYXL@cG8H41T#pvG>gs|7%hB5Olu^9JKO{|wZ<0~cpyZ6rUD5ET>57+
z`r!0y0953S-1(&bba85^*f%KVyJCq9J6s$)U7S9%_zJGN#VrmjiWdr*L~vh(%195K
zrAfgGHSV=d33C^d-H?cBDh~P(L<VEjev0knIkgCx?xVWx5+BzbzZ7N%E<Iz8xD+|d
zp}2E3O^O_SnsGq;?nDNlk%2oA=b4B*bA!>A2rr}g9rzRP<tG8m^0B3pR{aB1zl*A%
zpN%ynK_6?5So%3w@@mA~JSFJ+^_u*O9q1yo_7OQ*6Twdy=O)HLLRJX`w9nAIVySoN
zG0i(n{l}!cUC%Se2hZ#sp}LM6F4Zenf~-)?e@EgFNdf2f!r?ja#i2p615vVApb-i#
N(WFCEB&!EE{{nFWtw#U=

literal 1476
zcmZ`(*-{fh6g@qeEM$SOg8|tDlM#vg2BK_gO5A{oVwELB5@9eTR5DQVIhGH;_+pi4
zl@ES^ABCRV32~q>sdS%nr|;?RbMNH$;m=<Hrg1L}1HK^4DEtU0#JB7{J6*I(8|i23
zTZNpf5SVgGjytX3OQy0-2%#y6a1;?l6`Hrp`9d-Myj*o$r(9A{ANb42s^%zKWQp1j
zleI?ChIR#Wqu{>MQW*(%M$vT?UgcU_AvRYoRb9K}X6@o`!N*f7K3ErE5aa~-2=W3<
z0=>ph@J=GUgW3=fB-j)XQfPVkD6_Kg_Tkb@c42j9Y2NpTABJZaXXYLs4<9P{lbK8^
z%d^h$a$L3OlnPIGx7Q1m6??tNNZVpLXBV?}#SvZ)n(n4krGbmbEt#Yq@0^)e2v!U3
z?7ko~sW&j3Jgs1q5svglCi>9iROiZ-inhN!c~UX;np$?H;_TT)`nBxZx%W@(o%%V#
z%jMlluJFK-lg5rJGa+@w5G^-oNt7e&M`TEmIQOEPvqF!K^^%|Q@C13Ehxe18_3#1m
zK@T4yANKGO@^c<ON<QY{=gE^Eo+7tA`~sSIHb2HWUgQZ^rD-|0SU;ew!~ud<-vMG@
z_2DNtw!!2W;TUCV49)ze85yjl;Sw&BQ9#?EG!i2WZg2(d^=&3K2U@Lfh?)6#Xp<ng
zX6C;z!GLTO;8HHo;^Lp+nmF5}A(ZA5dFGe=lgS;PWPc->uLV=&vfkv_$>i=+lds}h
zJ-NgSOT{fK5fAN%Q3*K%?^2{;)+({NCSjtOAdiV%bR0;qXZp~IehjeYDUM=fS538H
zq=oCcUJ5rFReHfSQl-dg6>8RxhPcHr!Whw_wdzC~qLD^*BDzhbIyW0vo2I;6EuiK9
z)n5M5fKe)sd5#)rs0Qk)3b#(z@>o#QN>VHJA1&z`zOcBBJ9W$7aDORw()y0L`4K}h
w$3vgcL(suMTxJOb&Cf7>Qc|C%na1@_wPs3UQg`YU*Z5(K-IqSPOJZR9F9xQsA^-pY

diff --git a/MavenChess/MavenChess/target/classes/model/Queen.class b/MavenChess/MavenChess/target/classes/model/Queen.class
index ce7f8807817995cd62883140b43a974c44646d23..10479f12d5926eab2359e138d32913df50571a05 100644
GIT binary patch
delta 633
zcmY+A&1(};6vcn@`6iQ4N88cHC{=OgM_U9(jh|6lZ9yZ5(6K_TRk0e>s;I?91ha6T
zoy$T{Ton|HRCM7&a3Nhu{tDOPCZ43F*2lYd?mg$sdH21q(XZ@$)^g4C!=ZPP)ngT&
zT3E9d=33?6)SVmG)m>IhEAG~}+ex=KS*c7&WRH(nbeh?E!@lSkO7-9NkE%U@PZnq{
zV$uaN=c3?Km^w~5b=`96DSU-dAK2wI^4rPS<)XW+6W7s+Z&PAcbOIvdmW!T~__3dN
zKhN<v@5X+AV)9=56F5o69ZbSFjDk5X#hF)JSR|M3dQaB}dSVlYx2`TXy>ZZP7ATyr
zPr5s+nObPQZoRGf$}jiKYkHTx%EPQz?jm3VgLE@S%oH2B%_e5(<q>(Fu$dPWXt0Hk
zY~>4md}ABm*};<ZKdI3#m-~8^2D{lWA4d*1N!W*x&qS32Dg)VF;UI^|$TX!WEM%N#
z99HGaqRD{9Xs;$mIEtlzmN>?7Y~gP>K}my;@tl*YJWffOTUDKwYDmZorX^crSZC-n
x8sULqSlfb@E|UF6tl*Ybn=7s147vYUFKp?=HKwbce}tdWxi)7t%Sfjh{R>D6V?+P|

delta 1014
zcmZvbO-L0{6vuz(&Wtnf&C8UYX^N;>RFaihV;@tdrfH9Ck$qTHF8t{AX(a_wJ+LB(
zHsP*Ciy~UI5sF+ys|Z@PaMP+qn>InvCMXI!@4ZHQ;+@Oo&pAKNJ^#a<Z~ohoNnac<
zeYx}ei^Y<Zi8j;RD`~+#J2X5d$Wg($lpZ;y+8Vnss)@l1SI-M>Hs6;Gc)4_5W`nzP
z`B*NR)f0Ekfr(G%!$CWZ!y+(;UgP#p5!+`6wiP&5P-F$J6?j$<vx2x4_*Rf8vrD|k
zrtvk2{)U$nzam*?59C#aswt{^%VH0yo;Yf+tSg`f=TY%IwPJa^0Glf|m@DQ-m|uX+
zRm)?Ee^^bT0E?>SN;whZ6fjY#98(lAMgKALI(H++U5Lr|<NaeY-fdf+{h3}n3D`91
z`GXyL7UQu5pQNfXN?EF^T)zq`Sw^*<wNz2Bs(~81s3XO4PHJR`Rh(lrqio<lO*~*D
zPif{k0WWCb6(Q4l$47SZHA5@kY3C;${H9wf=#gsnN)st*p;ubjFYO$ZV;q(Nj>s7O
za*g9M&I!50pgdwoo-iy^jK~{K%RA1<dq(9m7v&3=<QJC>TrnP3jn8$nf*WQHH_Z+*
zrh{>lNpZ{ca@X{6k9F$%wm!8kQ_N;{Z)G1H>(z%YRe^S|4_EmuY{lT46x-CDO|j`_
zyZUk{HJ$1$q==+xSBD`k<)&3_hC0zo6S7NHjB2x$Ho^>XYE7UM2zA)?rdj6@l3=&q
zn3%n+Q!ne%NSewSo$w-;#V$3jmX>J2jCL@WaY;le0VlpG+D%S;cF)kDzt)1)*pu~4
LxAxGJQ+xjcAK0)=

diff --git a/MavenChess/MavenChess/target/classes/model/Rook.class b/MavenChess/MavenChess/target/classes/model/Rook.class
index ee62dd3c32855be4fe2f5261aed520c175275f3d..936be027e604e017fbd32ca0ca0b34308ae8b7a1 100644
GIT binary patch
literal 1633
zcma)6T~8cU7=F&~?3~@%;iJ%@ML=4imhV;6)v}0%T6AS$OR2PrF*>_UV9KyVW)~uf
zNpBi2yfraly=i*mtwsx}HBC&s>Xqrw@j`sgevncyadyv~bKZ~Vec$IjXP*7@+fx8j
zxMLuMu!LqJ0$m`!>90Co;)d%K907gOExP3?fwKddy23BHW!EpJ(u2zqQGxcm_Kuy{
zF1uc0Itc9Dj9V%jkT4WrTp&E444VX+j|0Tef>wz$Cfd+0VAQlXeSbqhYzef!9MFIX
z%R~px3219h`A!u(t;C%sUTKJPO3<x>_XtD=(#+F9FD^)2H1Qhxj!K;I?O;_vx~1zy
zXLDDe??jC+r!csppe~ts9hXUtTbd0VvebUUQ5i}Mni#?`)3jF^$QsC0sq*aNS|Xdj
z>lDhV8sMmju{z+KTU=8y-Z1ed#s#7*wBC!}lTjM^sb-~ABi}ah4w3@qx?P%aoZ`H{
z<1jRPu%h^WPpPkv-xX4Ljg1y)$+$&lVS6+01h?$GM@d`8FWBC)9k^;=7i#5ow?y1}
zMAfDg=`Hx49}q7saE6&q@7S)Vyi{D8_cv0ma-ABi5pevh5JuWT;O^KSfxhBkD`ejD
z3mYnR;c^r?@&Zlu=ruHk->ikP{sT8+d)^mB41LD@svAOg94~Kot5M?R(@-WG6gQ6j
z6!UFbD%*vPd3&o$j>LjMY{^|K+U4zl1SbDS)u-YbOa69HaAsZAhM3}bOr029Wa~n_
zt>Bx5K<9gcyEMZ50di=#`vBtSszHixbrgUo4P%((>O##7@AJZ|N2)tV5ViUMSF5no
znBh#=&^Z0#)IEO!nL9viUjA<6!r^RA)3Uh;XFZgi(5gZTGzuai3d7lnNI0omdZ+gE
zA-?a_EPX5~J0og}hLbTZX;?;U^dYvbSOr^8VCIH?Me{z+TGBGszpQP}TT!(+K-a?X
zXifBL1@Yn0ee~}kHo|$}w%U#Cp-at)eY{mcD^1_6yr}Q5K-ZG7`-b@O@Z0-3-|Hhk
zu__IUp#|0tG?Sw?^l&{6i|lmZL!84L&QsrsMSfI1M;Gp)8{g4tkN5Hya`~8_kw4If
zKXD1q==T@=D$84B?H;|a5id-nZ#b@!;W<jLa}_1(*O<i>c4ZN}_=qxt7xD*u%$2Sf
zKkCqPHun>DD9Q+P$gnd#c!YT(Xw3BivRp-QgFfbw)grBKQW79~NLVS+BGD_Efy5I3
s?DrwdiJy=QK1w(Jf=<G$d)2g&UgMAvPXqm%@>`4>!l%q-xw^XjFPAV<TL1t6

literal 1769
zcmbVNTT@$A6#f=D$w|Tq<rbh<+XCehAl6G-4boB!nl?}@3Z;XWljH~+LJo5haCrCK
zH)o1(KG;VuV@szUeeq3a{2RXMgYU&}=Y%2`9miyH&f06Q^{vad_Ri1Gp8N=43^P$Q
zAYj6<5JX7OxaJm}QgTK)1xFAXRb^Ej6SVi|>KkrFRh3&#X9wmY2qR)5YM~L9AnIG(
zaotrx*!9$sD%&MN^I=yLO@g)+d(%#CR8=WC?s@iBPF1Q=#L%o0X%Pha2j)z)37QTD
z)<NSII&?%?kD?V_7Ea=nz*usscWaJWtv+Mn?4Ei-D_+pZ=LNz3ER)xoix#@kBZ#QV
zgzI@up~}3DR61}kic9D-(Qjb@gU@?(!?nF4D^-<Dx$LZM3A&H?9xmO-8nQ5~<Azja
z(sLYLcGAL&xXkSBA~ECrxmtTlc6ljzJHNur(!T4<7G9~l-cscyRy{$&1SfK;>`ZU0
z<sI)`J71!vHRl%W(wyxny{;>b>awZ`ta@IWt28@Oa7(Voer5$N?Be*QtxDQ!%H4Em
z-m_O%t>pB8pWH$22xHowr#3a^k{874F?=5eS@Xf-|KKf(#gv?n$${LXIp=4Ya-iz2
zbED{fQWkU^tZ8d~udcr1Kt~UEe~d}SW~+8#b;@3^cO){amdbW@!(+=*|Dn!fL8G(o
zhF5SVm2P}QcXdSbhYK9m2A(srq0b1V2Fg5We7?%n9R&CVtii;Y9mrtfA<S=URw+K4
zYI}{e)+a26E7YC$?Qs>aaYavk5{Ray*O9K_kKzr!iQn)CV?`K#<tbtdJ2)|Aq>Ml+
z7)XTzDKn4?$BpLjmooJftqX(Sqx}&&<Hkq6bb1HpriUNn!hNLU!EGcG!~RC^HX0Md
zkC3>J$PnKn^Lq8tfmLD~AtMz$fLlBUH}t=7Lx01qgEH;?e23%aHqQQgzJ7-0aY)5I
zr2RsB<Kb<@pCcYqYxq+`9z6SQ=o>O&K(qH1FAJcJ6VOTay2$29wBQulahjTQ{9YuZ
z-MoW)Fo9mo^OAX=J`M)4iV;+h#3m2>XJqnoB7Q;ZugUvE^85pt{t4Ic3&!y)Ch;5I
z!tZz+e<CX;Zb}T(632{m;XS#GIk}E`$>6TMg9Vw#qI`%CB#*o-Gn$^NMNY{TT8?pw
zIFGWjH(!*l;X3ClO#5-%;9ND*dxG%|-r|dR6Pen5y}&FooYZ!iV=ft(=#*Jzlwti@
zM$j|rW85UhEox@byvs)L4<u~jlF9iN{Q-6va$jqrwXP4wqE~CbXkSNkS5Nj4SL6uX
MfGGx>u1UB50>b8Opa1{>

diff --git a/MavenChess/MavenChess/target/classes/view/BoardView.class b/MavenChess/MavenChess/target/classes/view/BoardView.class
index 07076728f78342beebbbcf75905400bb31d83718..658950bedb33ff474e89419b3e918501d22fd96f 100644
GIT binary patch
literal 7567
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
QsH)V3yt<V`d1~PQ0126(O8@`>

literal 7879
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
S`?^tCrf(W*3x_;v>;D33F13*W

diff --git a/MavenChess/MavenChess/target/classes/view/Custom3dModel.class b/MavenChess/MavenChess/target/classes/view/Custom3dModel.class
index b9724d85e6009c24f25759fa7841c0791ab818b8..b56a7c62690b04a4b2304ab7ef8ce2400c8a2049 100644
GIT binary patch
delta 1452
zcmZvcX>3$g6vuyemUrh3&q9W!yl60JTNH|gQlSiOV@oN5q(dzMM?UCC22yNVn3kp{
z#Q6drObjYdkfKr)Wk3|!oVFAZ5K$`b`@V~c;`YI4#Cl!_VIY2(d(ZzY|8w5C=gjKS
z`$h-*{@H&JsNnbA!7;`}%{_`yOJi-ZqQ+R$lA_ubjg51g8=6|<i5cyS;>%hanww1S
zW39%qxSw@Sg)vDz;3SMZvxAMA2Q40QI*q*YO>}BDTReiH7<!)Z9F1b|vV<_#x5gIT
zJ}(hl6b~|<Ef$aQxO37dFjH*PY`1vA8KJKXq<GTeDRw%Q`U+#0#cuZOZO~2X^5Jv-
zhkTmCXp1LW<L%BLfru4rR|GS-+Nn2Js1wd{voz=1ASd}w^S#9qesBf{kB<CN;Zchf
z)~u$ccw%~EtfeL1qWRf56&&mPReIx`4vuoB3>uaUaS1unI-9-hL-CBr9@2ulvT(QH
zo-DjyaBmhqAo$rVd{FRnS@;lM;r3(5c~~-R#wQZYclrh`R7acwYuu&J3$`*^j`D&a
z#W7xVBb-KSWcd-%xbbiquI~t`6ZBbMS9)n6qlcjkbECk!K_Y@ew97ecRU~^EAMK(j
z>>rzE!niagVWXFD)Hc$Tg{nf;X==Kd6V|;%qPFg$E*!7}Y36ls%)M`NJr;&d+w>NP
zZb=jCpx!q9#rugvHw~q}TwngWO&Gbp8ryH1zH^ptn$xr-7ufz>Uq%+uHjRrM7Nl4>
zK;AY$9w|)IKEyZ>jCx(N&`QbfE$-&dNYv+zM1{bAfzlAAc3HDM1Kvmvt30IoOOx(L
z+?65}Hui9DXnmRu?x#QOoov|tG>?Y0t$Wz2=wP-h?NA(IX_}`?1H%p9W^AcvtnYvk
z_2vfhZ>#GePiPsIrOoKX`Br1uWFytTr*M}%(o9vUs=1qFMpz?n@4n@F^5x7YKmmD-
zp^U3!fv;vJ<EW#M#j;1sxrRF^Vl@+FT_@7XB(_q*b|!O>DIBMiFPO?tggL`B6{1Xy
zp<I;^R#Ul7l~JiGnIY+`R85lUs+MY1&-H3Pvs4?i)k<zqYpGRRn5%YBr*?AVz;LaS
zwdkZu67)&At7WiW<^-k`_6x7@s*KfQKH@cAm$6$e=Nr69K-EapTf8m*6>VJ0I}#gk
zhwto&CSCDe-jmr3sBOH@2hyAhmEc2h^h%o=gz{tjQryjaA}I|%l@7T(k+FRy8}zwo
z)-b4FvYMKpW~N4aq>AyHa!pthfqrR?nEtbRGS+0qtfgZYdt4Ad;P4j<JpH0J&eOO~
vD9xsvGnjIx{-(q;<WE^JFJDSo9=_shxdT%0H}X3r&w^MLr=@GZq3nMFrgul@

delta 1386
zcmY+EX>3$g6vuz}&CI(qZ>EJ*V0>x<XbalKVhg1VOIVAP%1EffWIo6MjTywY!6|7X
zVd4i9Ob99ukh&mJq=H%~)YsBhTtG$KabI!8T@$`()OsET9g>;%&i~y1S?;<2`?|;8
zJ=Qw;Pv22s2ETV%<ITJf_i~@+{s>!eoE2uJ+U9IG3qudEL(>-FLFbrRSh$IYBRqns
z7}mTt-I!UDNv*uCer;-HgGCvSM%cw;PN5zbYG;q;@d$gJCHkshJ5NN|$9`vnzS4Xu
z!qapf-m4qcn9+5sQ|nUY>8A3U^qPi6O_`demc~`{T30qSXVOiLQ=Q6CJTKj-@ZFwj
zRRq?payExr)CtFLRp)<g@eSW<zKd`xXPjE=xcb2v79QpQSyAL1u%gb)@No63vp75{
zYmi62Y}e)h2T^p1ZE#5N;T+s8_?aB+3hv3ly@HSA;6B0qId}k{<PKoU^I55|3%^)!
zvlECU)lnxEDak%3I5Onrd0r5tc#&i0Bc@7MhWK=GH=)Zb4vJ~uos*XmuD}Z)HAFcd
zE@Y0MYr^0XMhqqL?U9JE<aYbfi5^DZQ0g*95139kuRI&B_V-gJ?(&#f>@uOmWnxVC
z6HD0IWm>`Pg1Ig=J=Dd5{lpV?u!qI5kR5WVZ{vjbUgj~9G0V1m6$Q7rq}sU2wgMG>
zG(a!u>OeFQ^>5pWjs~jzwrN}b|JHg-XmYt@scl9By%$W|GXEzGIXg(&mUB99WQhb9
zte1Meie5Iv6MkPj5%8+zI!$qE;g8P0G+X7hcuxlfF@1>51zTOVdmDSmSEX&!WoImC
z2am8@(Z)j0>QFMv)h<s~hem4uE-sT{75fLwgfAM3`d2JILZLwiBXZnBK4C96o2zuk
zU{|Rpt6Ei~7LeT}=k6Wac8cU#M38Y5GM;H%%`C2=mJ;eIB`udG!?moZoQ+IiE7!4`
zO7=66PO3x|lX;VB&M<|u#FW8Q6=j+#WxARocm^}oEM}=1=1JMvY9Vvf66R*rGHO(k
z`RY!tS9h^M?VwKWW0C42uDZGLoQgKfh1ktpUgBku>_%K(;RKd6c9vH;DXL2IIj`}$
zw4dP=Z%8X4DUrupyp5LJRV<g-kf*W>S`_OYvZrJeLDk8-yeCqfp;~!gh(77Gg%8B?
z%b?cqAs@+?BuSEwMZTI(WLDnI7+U*O1pJwJwh$ha`j+;7^EKKqgj=SWu8C>lFeuXr
z=PVo9+;uIR5X$6>C>Lco$M}<_#-O-$P9l$m(rn8ATXwE#|BFe+@IPcmKE9CF3{LZ<
Xyo1v8SMvX!9|c*$<tKjOH|&1_D2gT-

diff --git a/MavenChess/MavenChess/target/classes/view/CustomCamera.class b/MavenChess/MavenChess/target/classes/view/CustomCamera.class
index 03a2e0653bb42d437418ddfec3bee1441df92cfe..26d3a8efec8aa8c0024ccc05fe267bc80ab29f96 100644
GIT binary patch
delta 600
zcmX|;$#YCm6vlt=_3)CHm!3ilsiGHJtB$E-NNL0nQ-~_`f~stg>IG2=y6l813mbNK
zV_~gOEL0N_#1Lad#5|_T*55!W-+NNMx#zp*obP<!x%YZ{Y_2={cW4-BWAcW(&#9bs
z#;w>3mzRt>yz&_1b>(1f*b2X~m|^mfY37t0&A)Z2=bgu6MiPv~BYgA|pFD<nVBvN2
z_Lh#fA30Dim&y)bEi&e(JI9^Z+1J-|;;6%SGwH6VO_3le>6B@zYfYxu%ohK~jvz)W
z-E}i9Gw3DFc`t2#d1p#lmeDMy3+Z4nMOLzxR=QZlA+~Zk*dnU)Fju&$=%WfZvBYTO
z76aJKW*4`GLgF?s$Th;65a*6iM4dxsqP}a-c4}lJMkkHzBqPouc1x!isHDY)LRF=}
zUCxPHLkstWLflu~!Tv)g)R3_KS26vui>C`rXEiz2$o5*+%hWd3Y3K&_vr$X5bBs-#
z)c*c5Ia!1Ls!V@i(h73EaXUZ{c{C*$#r{okf%Nn(vU5rG9@YH5Y_53#b0OZ+y+k&b
z>gDq^$?klX2U?B)yQ*4Q{JECcPsFx)$}>g3>$!5{Oz?gReGvMrnyc<FeB%eR{sGwx
BcdY;b

delta 622
zcmX|;%TH5L5XOJ!w&j-Vr7Z!A_&}nmP|y^mirQFI0*Dx2_#k0JL#_s5ic&Q$bm7vN
zn3%Km4^X2EQ=h2##0R3{Tk#eD3KtsVoZ7fK^WB;GzWHYE<ot`Z&cvV5F(A$NOHQx7
zAh_2%*f}zMXul#_AKx^TIh@&ZB#|5NvR<N)Pv!gVDHWP<c*dm7bC(yq%%@BJ%Ku7H
zrI!XOld1TwaDX=sWxREH$asWtNqjJgk1lt)r*ONnS#P9mUnZCHayFm!DW}2zRZ*i)
zJ2iURsVudKP%hRi{nKeFw`ixse9>KqcD{ASETxjV*KN|>?!4+4XQk|-<PC6+^AZ(#
zF6-m&39pf660&6zT`Z%A)$ArkA8QyCLBmW_BJWU<Y0wp}io#;4T;sY7p3PQn2=WQH
zf>AEu7lkl41qGz@mL4wa+rF6~TL?*Slx@V=!4h_|N;qapt+0{l|NI$ro0Gx~imNd}
zKJG}}#`;anR}rzyvGm-~nRuF+w9>#@T39FVdN$A|i?q`(_ZXy;1Clw)M*SmH)o3i4
zLmVsEv<m1x4~p_7Sik707j^kJdSSR@pjiwg<=)Gg!wMF$vS2nUOGDj%vvn8^B`S|3
fZ}FHX5>3}r$xZQ^cSZDG&?l)m(ml-=zES-bUR8hV

diff --git a/MavenChess/MavenChess/target/classes/view/CustomLight.class b/MavenChess/MavenChess/target/classes/view/CustomLight.class
index 99527e13383b6d4d8d92231c1c7c93ac223491c5..5dca188028fe0f1b9563d42a38f325d9a1293066 100644
GIT binary patch
delta 268
zcmYL@%SwV#6h_xMc)|1kYBw*1frB8@Nlh&8mr5-K!AVchAbk_3=OG+BaUfJPg`ijP
zNhI7I1t*KMIp1F2{`J0%`T1LX0X6zFGti#lo`*0+pOT&HYgMspoetG}>NM;|uWz)3
zlca=@;Zmqk1PKY7pb|vn1uN?XmhUt7-xB69LZ1Lp(!|ITr^pdQju~^pgj1%Ru_VEx
zOF9crJj<kL)7drfAzlAh+~wyK!k?7wD0o$`YTgcQ#wE_V<-*yLyN$g~cIomWKE<n;
GG`%f9%pr#W

delta 411
zcmZvX%Sr-q6vlruV~NvX*~Kg}gaSb!vqfc=cE4Iy2H~QGl$8Y)DABHcw3~+r+6mpI
z+PMgNfFOE^+E=HsP0;2$|I2qfkNR_s{`7hG0K`}+>PdCYPM?B%Cv%wDJPPI4vwPW4
z>R`W+$Zc&Gbb6_C(7=E}ltBesUcMAOiU0Z0AAwIN&aj;kgHdxs^(*7%sp_eoG?-%A
zJXhbsn#8+l7KApu))af0DhgFp3(kNtgF{a6VHUOWaiBzR+QpZq-Qc*U|B^`Hg2)v^
zB|6g1M*Pleg12<3tQIY=S-~C*K_@n9@lb~k7ZK`NmaTSa<b)>9q)l1+ya?l+7Uo1@
zRFX+BFE@pSR+5!k<fNb~kKy1IG5bAZ=BuqUKJh13w-{c!X}9d$6~(WeXjx=Q{1hqj
Hvv%qm3+YCB

diff --git a/MavenChess/MavenChess/target/classes/view/CustomMaterial.class b/MavenChess/MavenChess/target/classes/view/CustomMaterial.class
index 7a14a2eb28337bdc65f227b580d3a20f0ec86851..716c4af3b9b45177c2e298edd4a74ae7fb2c8078 100644
GIT binary patch
delta 140
zcmZ3<yO(!EJyShzu&a-&bBL=;e2AxyD>DNF0}~?ykFS52qmz#-T#T8Kf!i@8#L?Ls
zF2n*<798N}?CIzO7h`2);BxXoR>cMs3HR^}K^Vo($iNcr@9zS#ii2_UE2jO-03&%D
Ah5!Hn

delta 101
zcmdnXyOMW9JyQfnu&a-&bBL=8GXnzy6C(q=uYZ`MlaDKi%go5Y<`@#<=<E&Ru>d85
l16-Xw9eqGtRz?OcCx6Ev7bhR60ydaPxQA!R=GRP@m;uFV6G#96

diff --git a/MavenChess/MavenChess/target/classes/view/CustomScene.class b/MavenChess/MavenChess/target/classes/view/CustomScene.class
index 81e4bbefc75c5d8e4dc1702512caeb6ef69af5e9..6f961b88f066934065f9339e26e71c1f847402e7 100644
GIT binary patch
delta 13
Ucmey!{*iqH7c-;KWNzkX03nS8NB{r;

delta 13
Ucmey!{*iqH7c(Q%WNzkX03kgDH~;_u

diff --git a/MavenChess/MavenChess/target/classes/view/Desk.class b/MavenChess/MavenChess/target/classes/view/Desk.class
index cb8dfbd1f233a6a57ad1d06b7451d7c9f08f0671..55a49cd16fcf1060e1a916541af1fe10e381ae50 100644
GIT binary patch
delta 13
UcmZqWY~|e0#>^-*xt;kR038Jcga7~l

delta 13
UcmZqWY~|e0#>~hxxt;kR035XhbN~PV

diff --git a/MavenChess/MavenChess/target/classes/view/TileView.class b/MavenChess/MavenChess/target/classes/view/TileView.class
index d0c63dff6102454b28998207b6a2a891f84e26eb..df2fc8f7e944a9eb86325a43fab5c5685fb402d6 100644
GIT binary patch
delta 22
dcmeyz{*Qfw1QVwa12+Q?0|SH5W<{pEi~vEQ1kC^d

delta 22
dcmeyz{*Qfw1QRC{12+Q?0|NuoW<{pEi~vAk1g!u7

-- 
GitLab