From d4727c23ceea46ccd9b75707bfc3212d9fa16d1c Mon Sep 17 00:00:00 2001
From: MasterPyo <olivier.pillods@gmail.com>
Date: Sat, 29 Apr 2023 10:19:02 +0200
Subject: [PATCH] variants fully functionnal + enpassant pawn AND nwap

---
 .../src/main/java/controller/Main.java        | 107 ++++++++++++++++--
 .../MavenChess/src/main/java/model/Board.java |  24 +++-
 .../MavenChess/src/main/java/model/Giant.java |  45 +++++---
 .../src/main/java/model/Kamikaze.java         |  52 +++++----
 .../src/main/java/model/Magician.java         |   4 +
 .../MavenChess/src/main/java/model/Nwap.java  |  10 ++
 .../MavenChess/src/main/java/model/Pawn.java  |   3 +-
 .../src/main/java/model/Position.java         |   2 +
 .../MavenChess/src/main/java/model/Queen.java |   2 +-
 .../src/main/java/view/BoardView.java         |  32 +++++-
 .../src/main/java/view/CustomMaterial.java    |  10 +-
 .../src/main/java/view/TileView.java          |   2 +-
 .../target/classes/controller/Main.class      | Bin 6956 -> 9258 bytes
 .../target/classes/model/Board.class          | Bin 4097 -> 4599 bytes
 .../target/classes/model/Giant.class          | Bin 1746 -> 1481 bytes
 .../target/classes/model/Kamikaze.class       | Bin 1348 -> 1804 bytes
 .../target/classes/model/Magician.class       | Bin 919 -> 1015 bytes
 .../target/classes/model/Nwap.class           | Bin 1743 -> 1955 bytes
 .../target/classes/model/Pawn.class           | Bin 2345 -> 2345 bytes
 .../target/classes/model/Position.class       | Bin 1390 -> 1443 bytes
 .../target/classes/model/Queen.class          | Bin 1518 -> 1518 bytes
 .../target/classes/view/BoardView.class       | Bin 6565 -> 7379 bytes
 .../target/classes/view/CustomMaterial.class  | Bin 1730 -> 1809 bytes
 .../target/classes/view/TileView.class        | Bin 1022 -> 1055 bytes
 24 files changed, 236 insertions(+), 57 deletions(-)

diff --git a/MavenChess/MavenChess/src/main/java/controller/Main.java b/MavenChess/MavenChess/src/main/java/controller/Main.java
index 9328f91..c1f1957 100644
--- a/MavenChess/MavenChess/src/main/java/controller/Main.java
+++ b/MavenChess/MavenChess/src/main/java/controller/Main.java
@@ -5,8 +5,7 @@ import javafx.scene.*;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.input.ScrollEvent;
 import javafx.stage.Stage;
-import model.Board;
-import model.Position;
+import model.*;
 import view.*;
 
 import java.util.ArrayList;
@@ -23,6 +22,7 @@ public class Main extends Application {
 
 	private Board board;
 	private BoardView boardView;
+
 	@Override
 	public void start(Stage stage) {
 
@@ -99,11 +99,10 @@ public class Main extends Application {
 		if(clickedPiece.getPosition().getX() < 0) {
 			return;
 		}
-		// if piece is an "attack" or "special" target, we consider it an action to apply (tile click)
+		// if piece is colored (aka targeted), we consider it an action to apply (tile click)
 		if(clickedPiece.isTargeted()) {
 			clickTile(boardView.getTile(clickedPiece.getPosition().getID()));
-		}
-		else {
+		} else {
 			// clicking a piece will ask her available moves
 			Position position = clickedPiece.getPosition();
 			board.setSelected(position);
@@ -111,10 +110,42 @@ public class Main extends Application {
 			boardView.setColor(material, position, CustomMaterial.SELECTED_TILE);
 			ArrayList<Position> moves = board.getPiece(position).getAvailableMoves(board);
 
+			// test if kamikaze, and shows the explosion range
+			if(board.isKamikaze(position)) {
+				ArrayList<Position> explosions = ((Kamikaze) board.getPiece(position)).getExplosion();
+				for (Position explosion : explosions) {
+					boardView.setColor(material, explosion, CustomMaterial.EXPLOSION_TILE);
+				}
+				clickedPiece.setTargeted(material, CustomMaterial.EXPLOSION_TILE);
+			}
+
 			// shows all available moves on the tiles, with colors, each tile-color having a meaning
 			for (Position move : moves) {
+
 				if (board.isFree(move)) {
 					boardView.setColor(material, move, CustomMaterial.MOVABLE_TILE);
+					// test for "en passant"
+					if(board.isPawn(position) || board.isNwap(position)) {
+						Position enemy = new Position(move.getX(), position.getY());
+						boolean isEnPassant = false;
+						if(board.isEnemy(enemy, position)) {
+							if (board.isPawn(enemy)) {
+								if (((Pawn) board.getPiece(enemy)).isEnPassant()) {
+									isEnPassant = true;
+								}
+							}
+							if (board.isNwap(enemy)) {
+								if (((Nwap) board.getPiece(enemy)).isEnPassant()) {
+									isEnPassant = true;
+								}
+							}
+						}
+						if(isEnPassant) {
+							boardView.setColor(material, move, CustomMaterial.SPECIAL_TILE);
+							boardView.setColor(material, enemy, CustomMaterial.SPECIAL_TILE);
+							boardView.getPiece(enemy.getID()).setTargeted(material, CustomMaterial.ATTACK_TILE);
+						}
+					}
 				} else if (board.isEnemy(move, position)) {
 					boardView.setColor(material, move, CustomMaterial.ATTACK_TILE);
 					boardView.getPiece(move.getID()).setTargeted(material, CustomMaterial.ATTACK_TILE);
@@ -123,7 +154,7 @@ public class Main extends Application {
 					boardView.getPiece(move.getID()).setTargeted(material, CustomMaterial.SPECIAL_TILE);
 				}
 				// PROMOTION (attacking or not)
-				if (board.isPawn(position) && (move.getY() == 8 || move.getY() == 1)) {
+				if ((board.isPawn(position) || board.isNwap(position)) && (move.getY() == 8 || move.getY() == 1)) {
 					boardView.setColor(material, move, CustomMaterial.SPECIAL_TILE);
 				}
 			}
@@ -131,13 +162,27 @@ public class Main extends Application {
 	}
 
 	public void clickTile(TileView clickedTile) {
+		// --- Resets enPassant ---
+		for(int j = 1 ; j <= 8 ; j++) {
+			for(int i = 1 ; i <= 8 ; i++) {
+				Position p = new Position(i, j);
+				if (board.isPawn(p)) {
+					((Pawn) board.getPiece(p)).setEnPassant(false);
+				}
+				if (board.isNwap(p)) {
+					((Nwap) board.getPiece(p)).setEnPassant(false);
+				}
+			}
+		}
+
+		// --- Analyses the clicked tile type, and executes related actions ---
 		int state = clickedTile.getState();
 		Position selected = board.getSelected();
 		Position arrival = clickedTile.getPosition();
 		if(state != TileView.NORMAL && state != TileView.SELECTED) {
 			// --- ALL SPECIAL MOVES ---
 			if(state == TileView.SPECIAL) {
-				if(board.isPawn(selected)) {
+				if(board.isPawn(selected) || board.isNwap(selected)) {
 					// --- PROMOTION ---
 					if(arrival.getY() == 8 || arrival.getY() == 1) {
 						// --- ATTACK (while doing promotion) ---
@@ -156,6 +201,16 @@ public class Main extends Application {
 					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
+						Position enemy = new Position(arrival.getX(), selected.getY());
+						boardView.getPiece(enemy.getID()).resetTargeted(material); // reset color
+						boardView.killPiece(enemy); // place piece on graveyard (visual)
+						board.killPiece(enemy.getID()); // because we don't move "on it", we need to kill it manually (model)
+						Position enPassantArrival = new Position(arrival.getX(), selected.getY()+1);
+						if(board.getSelectedPiece().getColor() == Piece.BLACK) {
+							enPassantArrival.setY(selected.getY()-1);
+						}
+						board.movePiece(selected, enPassantArrival); // move piece (on model)
+						boardView.movePiece(selected, enPassantArrival); // move piece (on 3d view)
 					}
 				}
 				// --- CASTLING (from king) ---
@@ -189,12 +244,50 @@ public class Main extends Application {
 					boardView.movePiece(selected, arrival); // move rook (on 3d view)
 				}
 			}
+			// --- EXPLOSION MOVES ---
+			else if (state == TileView.EXPLOSION) {
+				for(int n = 0 ; n < 64 ; n++) {
+					if(boardView.getTile(n).getState() == TileView.EXPLOSION) {
+						if(boardView.getPiece(n) != null) {
+							boardView.getPiece(n).resetTargeted(material); // reset color
+							boardView.killPiece(boardView.getPiece(n).getPosition()); // place piece on graveyard (visual)
+							board.killPiece(n);
+						}
+					}
+				}
+			}
 			// --- STANDARD MOVES ---
 			else {
 				// --- ATTACK ---
 				if(state == TileView.ATTACK) {
 					boardView.getPiece(arrival.getID()).resetTargeted(material); // reset color
 					boardView.killPiece(arrival); // place piece on graveyard (visual)
+					// --- MAGICIAN CHANGE ---
+					if(board.isMagician(selected)) {
+						// we can't do switch statement on ".getClass()"
+						Piece enemy = board.getPiece(arrival);
+						Magician magician = (Magician) board.getPiece(selected);
+						int color = magician.getColor();
+						if (enemy.getClass() == Pawn.class) { magician.setCopiedPiece(new Pawn(selected, color)); }
+						if (enemy.getClass() == Rook.class) { magician.setCopiedPiece(new Rook(selected, color)); }
+						if (enemy.getClass() == Knight.class) { magician.setCopiedPiece(new Knight(selected, color)); }
+						if (enemy.getClass() == Bishop.class) { magician.setCopiedPiece(new Bishop(selected, color)); }
+						if (enemy.getClass() == Queen.class) { magician.setCopiedPiece(new Queen(selected, color)); }
+						if (enemy.getClass() == King.class) { magician.setCopiedPiece(new King(selected, color)); }
+						if (enemy.getClass() == Nwap.class) { magician.setCopiedPiece(new Nwap(selected, color)); }
+						if (enemy.getClass() == Magician.class) { magician.setCopiedPiece(((Magician) enemy).getCopiedPiece()); } // lol, stealing the stealer
+						if (enemy.getClass() == Giant.class) { magician.setCopiedPiece(new Giant(selected, color)); }
+						if (enemy.getClass() == Kamikaze.class) { magician.setCopiedPiece(new Kamikaze(selected, color)); }
+					}
+				}
+				// --- EN PASSANT activation ---
+				if(Math.abs(selected.getY() - arrival.getY()) == 2) {
+					if(board.isPawn(selected)) {
+						((Pawn) board.getPiece(selected)).setEnPassant(true);
+					}
+					if(board.isNwap(selected)) {
+						((Nwap) board.getPiece(selected)).setEnPassant(true);
+					}
 				}
 				// --- MOVE ---
 				board.movePiece(selected, arrival); // move piece (on model)
diff --git a/MavenChess/MavenChess/src/main/java/model/Board.java b/MavenChess/MavenChess/src/main/java/model/Board.java
index b7c82d5..1ba3182 100644
--- a/MavenChess/MavenChess/src/main/java/model/Board.java
+++ b/MavenChess/MavenChess/src/main/java/model/Board.java
@@ -79,7 +79,11 @@ public class Board {
 		Piece piece = getPiece(origin);
 		piece.setPosition(arrival); // changes position to arrival
 		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
+		killPiece(origin.getID()); // removes the origin ID piece on the pieces list
+	}
+
+	public void killPiece(int id) {
+		pieces[id] = null;
 	}
 
 	public void mutationOfSelectedPiece(int type) {
@@ -120,4 +124,22 @@ public class Board {
 				&& !isFree(p)
 				&& getPiece(p).getClass() == Pawn.class);
 	}
+
+	public boolean isNwap(Position p) {
+		return (p.isCorrect()
+				&& !isFree(p)
+				&& getPiece(p).getClass() == Nwap.class);
+	}
+
+	public boolean isKamikaze(Position p) {
+		return (p.isCorrect()
+				&& !isFree(p)
+				&& getPiece(p).getClass() == Kamikaze.class);
+	}
+
+	public boolean isMagician(Position p) {
+		return (p.isCorrect()
+				&& !isFree(p)
+				&& getPiece(p).getClass() == Magician.class);
+	}
 }
diff --git a/MavenChess/MavenChess/src/main/java/model/Giant.java b/MavenChess/MavenChess/src/main/java/model/Giant.java
index edc669a..f7f9d89 100644
--- a/MavenChess/MavenChess/src/main/java/model/Giant.java
+++ b/MavenChess/MavenChess/src/main/java/model/Giant.java
@@ -3,7 +3,7 @@ package model;
 import java.util.ArrayList;
 
 public class Giant extends Piece{
-    protected Giant(Position p, int color) {
+    public Giant(Position p, int color) {
         super(p, color);
     }
 
@@ -12,8 +12,31 @@ public class Giant extends Piece{
     public ArrayList<Position> getAvailableMoves(Board b) {
 
         ArrayList<Position> moves = new ArrayList<>();
-
         Position arrival;
+
+        // list of the 4 giant directions
+        int[] all_x = {0, 2, 0, -2};
+        int[] all_y = {2, 0, -2, 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 < 4 && !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 explicit directions version : ----------------------------
+        /*
         int i = 1;
         boolean left = false;
         boolean right = false;
@@ -21,26 +44,21 @@ public class Giant extends Piece{
         boolean down = false;
 
         while (i < 4) {
-
             //left
-
             arrival = new Position(p.getX() + (i*2), p.getY());
             if (arrival.isCorrect()) {
                 if (!left) {
                     if (b.isEnemy(arrival, p) || b.isFree(arrival)) {
                         moves.add(arrival);
                     }
-
                     if (b.isKing(arrival)) {
                         moves.add(arrival);
-
                     }
                 }
                 if (!b.isFree(arrival)) {
                     left = true;
                 }
             }
-
             //right
             arrival = new Position(p.getX() - (i*2), p.getY());
             if (arrival.isCorrect()) {
@@ -52,14 +70,11 @@ public class Giant extends Piece{
                         moves.add(arrival);
                     }
                 }
-
                 if (!b.isFree(arrival)) {
-
                     right = true;
                 }
             }
 
-
             arrival = new Position(p.getX(), p.getY() + (i*2));
             if (arrival.isCorrect()) {
                 if (!top) {
@@ -67,15 +82,11 @@ public class Giant extends Piece{
                         moves.add(arrival);
                     }
                 }
-
                 if (!b.isFree(arrival)) {
-
                     top = true;
                 }
             }
 
-
-
             arrival = new Position(p.getX(), p.getY() - (i*2));
             if (arrival.isCorrect()) {
                 if (!down) {
@@ -83,15 +94,13 @@ public class Giant extends Piece{
                         moves.add(arrival);
                     }
                 }
-
                 if (!b.isFree(arrival)) {
-
                     top = true;
                 }
             }
-
             i++;
-        }
+        }*/
+        // ------------------------------------------------------------
 
         return moves;
 
diff --git a/MavenChess/MavenChess/src/main/java/model/Kamikaze.java b/MavenChess/MavenChess/src/main/java/model/Kamikaze.java
index 1b8909d..882a687 100644
--- a/MavenChess/MavenChess/src/main/java/model/Kamikaze.java
+++ b/MavenChess/MavenChess/src/main/java/model/Kamikaze.java
@@ -2,7 +2,7 @@ package model;
 
 import java.util.ArrayList;
 
-public class Kamikaze extends Pawn {
+public class Kamikaze extends Pawn { // aka Trojan knight :P
     public Kamikaze(Position p, int color) {
         super(p, color);
     }
@@ -10,42 +10,56 @@ public class Kamikaze extends Pawn {
     @Override
     public ArrayList<Position> getAvailableMoves(Board b) {
 
-
-        ArrayList<Position> moves = new ArrayList<Position>();
+        ArrayList<Position> moves = new ArrayList<>();
         Position arrival;
 
-
-        // Self-Detonation Position no need for checks as the Kamikaze is already in place
-        arrival = new Position(p.getX(),p.getY());
-        moves.add(arrival);
-
-        if(color == Piece.WHITE) { // black and white have an opposite direction behavior
-
+        /*if(color == Piece.WHITE) { // black and white have an opposite direction behavior
             if(!hasBeenMoved){
-
                 arrival = new Position(p.getX(),p.getY()+2);
                 if(arrival.isCorrect() && b.isFree(arrival)) {moves.add(arrival);}
-
             }
-
             arrival = new Position(p.getX(),p.getY()+1);
             if(arrival.isCorrect() && b.isFree(arrival)) {moves.add(arrival);}
-
         }
         else {
-
-
             if(!hasBeenMoved){
-
                 arrival = new Position(p.getX(),p.getY()-2);
                 if(arrival.isCorrect() && b.isFree(arrival)) {moves.add(arrival);}
-
             }
-
             arrival = new Position(p.getX(),p.getY()-1);
             if(arrival.isCorrect() && b.isFree(arrival)) {moves.add(arrival);}
+        }*/
+
+        // list of the 8 kamikaze-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);
+            }
+        }
 
+        return moves;
+    }
+
+    public ArrayList<Position> getExplosion() {
+
+        ArrayList<Position> moves = new ArrayList<>();
+        Position target;
+
+        for(int x = -1 ; x <= 1 ; x++) {
+            for(int y = -1 ; y <= 1 ; y++) {
+                target = new Position(p.getX() + x, p.getY() + y);
+                if (target.isCorrect()) {
+                    moves.add(target);
+                }
+            }
         }
+
         return moves;
     }
 }
diff --git a/MavenChess/MavenChess/src/main/java/model/Magician.java b/MavenChess/MavenChess/src/main/java/model/Magician.java
index c0cf191..e43e4c5 100644
--- a/MavenChess/MavenChess/src/main/java/model/Magician.java
+++ b/MavenChess/MavenChess/src/main/java/model/Magician.java
@@ -18,6 +18,10 @@ public class Magician extends Piece{
     public void setCopiedPiece(Piece copiedPiece) {
         this.copiedPiece = copiedPiece;
     }
+
+    public Piece getCopiedPiece() {
+        return copiedPiece;
+    }
     public void setPosition(Position p) {
         this.p = p;
         copiedPiece.setPosition(p);
diff --git a/MavenChess/MavenChess/src/main/java/model/Nwap.java b/MavenChess/MavenChess/src/main/java/model/Nwap.java
index e15c448..61b7f88 100644
--- a/MavenChess/MavenChess/src/main/java/model/Nwap.java
+++ b/MavenChess/MavenChess/src/main/java/model/Nwap.java
@@ -3,8 +3,11 @@ package model;
 import java.util.ArrayList;
 
 public class Nwap extends Pawn {
+
+    private boolean enPassant;
     public Nwap(Position p, int color) {
         super(p, color);
+        enPassant = false;
     }
 
     @Override
@@ -73,4 +76,11 @@ public class Nwap extends Pawn {
         }
         return moves;
     }
+    public boolean isEnPassant() {
+        return enPassant;
+    }
+
+    public void setEnPassant(boolean enPassant) {
+        this.enPassant = enPassant;
+    }
 }
diff --git a/MavenChess/MavenChess/src/main/java/model/Pawn.java b/MavenChess/MavenChess/src/main/java/model/Pawn.java
index 69509fc..a61afdc 100644
--- a/MavenChess/MavenChess/src/main/java/model/Pawn.java
+++ b/MavenChess/MavenChess/src/main/java/model/Pawn.java
@@ -4,9 +4,10 @@ import java.util.ArrayList;
 
 public class Pawn extends Piece {
 
-	private boolean enPassant = true; // temporarily given true but has to be changed in the controller
+	private boolean enPassant;
 	public Pawn(Position p, int color) {
 		super(p, color);
+		enPassant = false;
 	}
 
 	public ArrayList<Position> getAvailableMoves(Board b) {
diff --git a/MavenChess/MavenChess/src/main/java/model/Position.java b/MavenChess/MavenChess/src/main/java/model/Position.java
index b1562dc..2eceaf8 100644
--- a/MavenChess/MavenChess/src/main/java/model/Position.java
+++ b/MavenChess/MavenChess/src/main/java/model/Position.java
@@ -8,6 +8,8 @@ public class Position {
 	public static final int WHITE_GRAVEYARD = -1, BLACK_GRAVEYARD = -2;
 
 	public Position(int x, int y) {
+		while(x < 1) { x += 8; }
+		while(x > 8) { x -= 8; }
 		this.x = x;
 		this.y = y;
 	}
diff --git a/MavenChess/MavenChess/src/main/java/model/Queen.java b/MavenChess/MavenChess/src/main/java/model/Queen.java
index 08f4ae3..0bf59fd 100644
--- a/MavenChess/MavenChess/src/main/java/model/Queen.java
+++ b/MavenChess/MavenChess/src/main/java/model/Queen.java
@@ -3,7 +3,7 @@ package model;
 import java.util.ArrayList;
 
 public class Queen extends Piece{
-    protected Queen(Position p, int color) {
+    public Queen(Position p, int color) {
         super(p, color);
     }
 
diff --git a/MavenChess/MavenChess/src/main/java/view/BoardView.java b/MavenChess/MavenChess/src/main/java/view/BoardView.java
index 0a670ea..2608e65 100644
--- a/MavenChess/MavenChess/src/main/java/view/BoardView.java
+++ b/MavenChess/MavenChess/src/main/java/view/BoardView.java
@@ -1,8 +1,10 @@
 package view;
 
+import javafx.animation.TranslateTransition;
 import javafx.scene.Group;
 import javafx.scene.shape.*;
 import model.*;
+import javafx.util.Duration;
 
 public class BoardView {
 
@@ -113,15 +115,30 @@ public class BoardView {
 		}
 	}
 
+	private void updatePieceWithAnimation(Position position) { // updates the piece(i, j), visually, to the right position
+		int id = position.getID();
+		MeshView obj = getPieceObj(id);
+		if(getPiece(id) != null) {
+			TranslateTransition animation = new TranslateTransition();
+			animation.setDuration(Duration.millis(300));
+			animation.setNode(obj);
+			animation.setFromX(obj.getTranslateX());
+			animation.setFromZ(obj.getTranslateZ());
+			animation.setToX((position.getX()-1) * BOARD_SIZE + CENTERED_ORIGIN);
+			animation.setToZ((position.getY()-1) * BOARD_SIZE + CENTERED_ORIGIN);
+			animation.play();
+		}
+	}
+
 	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);
+			piece.getObj().setTranslateZ(y * BOARD_SIZE*0.65f - BOARD_SIZE*5);
 		} 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().setTranslateZ(-y * BOARD_SIZE*0.65f + BOARD_SIZE*5);
 		}
 		piece.getObj().setTranslateY(GRAVEYARD_HEIGHT); // place at right height (Y axis) on table
 	}
@@ -149,6 +166,7 @@ public class BoardView {
 		getTileObj(id).setMaterial(material.get(type));
 		// save color-type in the "state" attribute of that tile
 		switch(type) {
+			case CustomMaterial.EXPLOSION_TILE -> getTile(id).setState(TileView.EXPLOSION);
 			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);
@@ -162,19 +180,23 @@ public class BoardView {
 		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
-		updatePiece(arrival); // updates 3d model position (visual)
+		// updatePiece(arrival); // updates 3d model position (visual)
+		updatePieceWithAnimation(arrival); // updates 3d model position (visual) but animated
 	}
 
 	public 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));
+			piece.setPosition(new Position(1, white_death_count));
+			piece.getPosition().setX(Position.WHITE_GRAVEYARD);
 		} else {
 			black_death_count++;
-			piece.setPosition(new Position(Position.BLACK_GRAVEYARD, black_death_count));
+			piece.setPosition(new Position(1, black_death_count));
+			piece.getPosition().setX(Position.BLACK_GRAVEYARD);
 		}
 		updateGraveyardPiece(piece);
+		pieces[p.getID()] = null;
 	}
 
 	public void mutationPiece(Custom3dModel model, Position selected, int type) {
diff --git a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
index 8a31a02..ede4a37 100644
--- a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
+++ b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java
@@ -9,8 +9,8 @@ public class CustomMaterial {
 	private static PhongMaterial[] material;
 	public static final int
 			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;
+			ATTACK_TILE = 4, SPECIAL_TILE = 5, BLACK_TILE = 6, WHITE_TILE = 7, WOOD = 8, EXPLOSION_TILE = 9;
+	private static final int MATERIAL_LENGTH = 10;
 
 	public CustomMaterial() {
 		material = new PhongMaterial[MATERIAL_LENGTH];
@@ -19,9 +19,9 @@ public class CustomMaterial {
 		material[WHITE] = new PhongMaterial();
 		material[WHITE].setDiffuseColor(Color.rgb(240,240,240));
 		material[SELECTED_TILE] = new PhongMaterial();
-		material[SELECTED_TILE].setDiffuseColor(Color.rgb(50,200,100));
+		material[SELECTED_TILE].setDiffuseColor(Color.rgb(40,150,60));
 		material[MOVABLE_TILE] = new PhongMaterial();
-		material[MOVABLE_TILE].setDiffuseColor(Color.rgb(50,240,0));
+		material[MOVABLE_TILE].setDiffuseColor(Color.rgb(50,200,80));
 		material[ATTACK_TILE] = new PhongMaterial();
 		material[ATTACK_TILE].setDiffuseColor(Color.rgb(200,50,50));
 		material[SPECIAL_TILE] = new PhongMaterial();
@@ -32,6 +32,8 @@ public class CustomMaterial {
 		material[WHITE_TILE].setDiffuseColor(Color.grayRgb(200));
 		material[WOOD] = new PhongMaterial();
 		material[WOOD].setDiffuseMap(new Image("/wood.jpg"));
+		material[EXPLOSION_TILE] = new PhongMaterial();
+		material[EXPLOSION_TILE].setDiffuseColor(Color.rgb(200, 80, 50));
 
 		for(int i = 0 ; i < MATERIAL_LENGTH ; i++) {
 			material[i].setSpecularColor(Color.rgb(100, 100, 100));
diff --git a/MavenChess/MavenChess/src/main/java/view/TileView.java b/MavenChess/MavenChess/src/main/java/view/TileView.java
index d92276e..a19c08c 100644
--- a/MavenChess/MavenChess/src/main/java/view/TileView.java
+++ b/MavenChess/MavenChess/src/main/java/view/TileView.java
@@ -9,7 +9,7 @@ public class TileView {
 	private final Position position;
 	private int state;
 
-	public static final int NORMAL = 0, SELECTED = 1, MOVABLE = 2, ATTACK = 3, SPECIAL = 4;
+	public static final int NORMAL = 0, SELECTED = 1, MOVABLE = 2, ATTACK = 3, SPECIAL = 4, EXPLOSION = 5;
 	public TileView(Box obj, Position position) {
 		this.obj = obj;
 		this.position = position;
diff --git a/MavenChess/MavenChess/target/classes/controller/Main.class b/MavenChess/MavenChess/target/classes/controller/Main.class
index 5e69f5ffa85aa5268903966b3a16a5f30e180f58..8d4ad131fcbb83edbee5e5d469a9676cc242489a 100644
GIT binary patch
delta 4504
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

delta 2113
zcmah}Yfw~W7=E5*FR*)%n<&d2M1ciV3{gQq15^TyL@{p|=t>(4tGlF5HSTn^rps7o
zYNCre&LoXl#!yRYI?k9~Y)0!xKbkB{)6y){tke*D&)F3n#-=%Q&UwD~d*A1Kzvp|u
zcl)dz#nwXuyY~Sor?1CaWVIc|w-$V-;26GF_gbe$9LEU@epGN$HP}XlAIDD$e#U9F
zz?NRP7{4eui(d(|%QwU8bP{nnb?u%NPWQNakI&WV@^qBuF0x`V&MEjE=hc(8@m4D~
z;12~C@uxc9Hn!|<1(!k;_04NLtmwlP1^-|VVQh7FF0|q`Tvafj8N$WT(AnJS6iPxN
z)n^rZu~DH3^NC2W)937**X$K9=L#!YXi*rBLqtTI%k8drIhX5!R)sby>QQC1d6>c|
zMyr;{3UjQ&I1X3qB8w|yHTsbX6GC~_x;k1VFD5E5F^Mqc)YRlQYECH%Q$tR3J)Slz
z>`Ygf!Ax~qRCZ>T!qFTf%S%F4PIqVXLLw|Dx5|n*<|xdiqxW1?EFH#n&l=G#dZ=`=
z;Z-3SWl_yZb;Km8Z7~f|>j+z$q&3~^b**W3_h!brIBcPni@4arB?_0askbZ6NZzAv
z8lEz$Mayit!ntgSW<!*TD>Xx_!g}5nO&5`wqppt4NS7IX6K;idoGlX9baXhqmF{Mr
z&*`(!qo&0>jH`)M^~<<awJm;Sd7hNcI8YwI<mdx?1Q?hvU$br;#sa}g(1Bw)PDbQ-
z7RooTH)=#BnXfjCTwATVl}peu#B%~~Lm0k*gGHPubT-7Wn3KfTk1;`;uuKTiX=pO1
z2w{mDm5^X5MUO_Vj!m#n(h{-4Am631py{S$!a0>?dNOien!hk!fKf64?dtl3(FR;p
z-$<BPSrEWCB}Th(7k(hRuv0^)i2dj*F*)8tlid`+nJx?$+$wLW-DD2na5okNC-VdN
zO-)bC;sv!jF{|u?W)<6CUC7cRFGq)OhN2_m7R1~j3D-!j&DQiZ>UuUJUhPSY^ShCc
zb`+rl74V=AtFQz<tV1Ur!~J*>Yp@k-@vc}t!2|dT58^b|(*i%^@vs#2qq+!1Fp0<O
zEN6wFe4OPpK?dRakkfg)NG&o93T$Vk90^$k`1QjKx>X~LC6ZtoB5X+mD6yc=f}<83
z@5cneg&8SV5P3;hiG%n!D6(O%h-?vde_jCnWttoTT$_^@prOQ=+{I<d#?4%mY}vwe
zZBEn|saoyE>r%DoP_&w-O>2WQuOLm+O~d;Gctmh%fMFpM&6=MjzzEGC@9Y8@L~6zY
ziJ&gIj^cG&fFsloQj*JXxsUb|J-EPb9`qBW``L{JA)AikyRk78p4^4U)tFSf|0V{z
zagZVigKG_0zZ;X2&0GF|Gq=cFue<<0*UBYKFPCk8<jUX)Io%D2#FL1_Q%J_s$iOpl
z-p@((Y(y=dM-yH^tJIALFX17)ED>EYvlXvm8#bXEZ_2X++p!04$tmu@5xkAB@eWR4
zCr-&#JCFCJn+I@JS|qWHG1$#yY1jU2DWyW}WhwTt90yp5kJyNVT!v5S!e{j1FxTUV
zUXDu;A&XUWhTM0PES1BVQjTUJo*A?Wts`WU(itpFKW9l_koL$2Sflj{MAFMUBsR=1
zZPv|NfkwSZQxP$M3b_bUqkY*q{Yc^!OzB6W{HCVIMH{r97pzfK36b0Ym>p822Zr{v
zxq8a!L67UHz^u0@tr40zhj+qn5K3vVx1eO&P|Di>pwv3y4N8qsdU%L&nk1lgHbn|A
zLGI6}0JCr6ZP5d(b>b00$H80`$#9;`hjG3T7}&@K@|PX)Zh4onnJYrb$$LZSK0)o`
NWtHVSxQbrb{{`kAuJ!-`

diff --git a/MavenChess/MavenChess/target/classes/model/Board.class b/MavenChess/MavenChess/target/classes/model/Board.class
index 3f59b5de49f9289154a28c351733feece290d730..d7205579cb1b8491f6d63f543ac471e8ac5a086a 100644
GIT binary patch
literal 4599
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

delta 1955
zcma)6TW=Fb7(MH?<FGgvj2#qgRcV06af%}G01`ncB0wpGTPT-s4W%K4I0>->;l5C4
zq2bPQDTM+B3Ps`p1Ts=9@rEk(x$0XVE9D1N?F&LZ-|S>Ph?iLM?w;A1bIy0Z+4*nU
z@jB=Cx4*msFdvVfId4PW47*{@))=;-&O&)l_fXqFZXoX<jqNdfjvW>z>?*Vk<n!G-
zhAh~b#*Gfj(H+B1^mr%iX=S@&*p1%jPwaoJNI3Ip<2vtlWVu&aHp9)K4;K2V6~X{&
zvB$uJ#CZc3h=&Zkmw2Cnhl%$a_yF-i10NzjY~UlPb#c@fa5>?afsYe^WneLM!oXta
zq=CiI*9I0t-xyd7oigwtwAA9XF+fN7*1#^}n8d%NGZ8V~tC&^<WxS4fx#(-_j5n)%
z+oH3oS7k_GGR~>>b7AAWdRl-aF7U}lD++q75hJ+Bu@Kk2z$IMf-Shq|pXZM7X)))@
zo6779R5cYbrHEA1nr9pd;S8^idfR{sWFX2l{%p;|b-047bZB8IJ`<;$GoN#W)6tx%
zSx<?4KB)$15-wMhIRTl2Yb@L+Tc*icG+9*0-e+nyTtx$-D6XqKEap+;6Io|fmcZz*
zNOz{vFX2@?e>2m6ofda2Q@#y2MpcsHc2p%P6^*JSZT0jW6~gS)U${Zj5qKPpW8xdM
zMv<-_`&Cf=drZ~EH1jTu5f&3Ih2r|Dw5eJo0M5`pENsGNy?QpIkaw}HEN7#NSW+VK
zIX*EsVgbiZY|tF-WR^-2S&4xSZ|C1@j#ap&ZZG4`YBzFC1eqjMty04+{Gb^N+(BV7
zrm|$}STXbCBGzVS7STA?eaqNRHIxTda#OEjbgNN~4u-RaVoQOn&l9Mna9eE$a^nu4
zLR^+q`^~2IUHqsW{6SLbNq@G8&LXyWt1EJ<oDUG?@H(DP>oJ`X%t0r0Hew4y?c-J2
zUgs|jMEfC)<<Z9j&Hrqqu?`|{Fx`sB<ML7RsMFG$_3liv_O2VKQW^Y)XxN)q=_n7C
zioXjJu$`Z5ml10+&`j!BMTza1+$ss*!+kAsgcMR=#uup<kuSKZlo;#HGV%`I?@;#<
z!uAu+wfXhBvLU54-BjPn!=(oed@fa;2^?fpz_PhAD)f-r&h+w;^70@kSk4jIKlQ$s
zwDywFUcQVkco?{#zStOZ(MuOOy6D4)=rwYv4_ws0n?s$_{%QQ$vrF0{t@8I17^HTd
n+68J4j$ixX__Y_kt1V?O^tFeny`S0#s69M>?MGw?;phJWdXE)k

diff --git a/MavenChess/MavenChess/target/classes/model/Giant.class b/MavenChess/MavenChess/target/classes/model/Giant.class
index 212b8b22a9ff9ca0be66779f2376a6f0e3223a40..3585b01c7aac9a58774cfa823e3b6de25154838e 100644
GIT binary patch
delta 752
zcmZuuO-~b16g_Xg-puQW3XZf^TNFQOi(hrrs#yF$(O^l4(UAmHB$3#NE=<HtS+LNh
z8C}q26T^ay1_MzHdtLe?{1GguXQtx9IGOkEz31F}-+kx(-10r4er$YQ1JH+?Z`H3v
z7F`m1UF<`5*eS|(76)7$#G!CpbX!MU^dJ|$7Mbvim`}eH5HkYuVRd@q$>bwO_qe9G
zo`x08?=T-!tK&@4Mh6ArU?yD9Ms$h(a9yi91YtoSA5QDZT7g3-Xxt@H8@=?ppvUo1
z9HWhxc66{J@{Z#Kvjt9~NSg;V#kvH!rB%pa1<sKCrUG5B1cq4&Oj>K(Mx|uLC=r8*
zNhGlJO3AG0zU5gdW37P~DZ{gReVH;NW9z<S_{vkVf!m%_$M7oLpyxB%ma)T=o_c)0
z6(l`73RaN5l`FKMOdW|_VHx}9;pAx#--)9-EW>x^lvrpk&RN{w<UiIpxPeH70c_{q
zMhV)H;dP7fa1lF+cVY-h3?qdR?7|q*n8j|q!yeR;MT2sE;KMC4{}ZNS0iRKjS>$kv
zeROu1giqNd`;6f<J)7M|aRz5mbJ+AQN(2?DS2#z{iqyoW`b#*E3sl_Z5q%s<<9P2;
zMn4BHqJ~TKOk8G-`#0+fv#t_(4%uW|DX~=|D>;J10Drz^llMr-iGK;fFCxn%H#rIS
bPg#pKRg)+FujxARYdlxOb<Q#vdpCXqxjAo1

literal 1746
zcmbVN&r@4f6#fo*$;*#NAV6Aep}(jS2x(e>q}U)Wqy=LGtwvj5Y==kkfLlWzeR<Gf
z?_b~!7A{=qq8oLb;@BC-l?xZn_<y)_#&K2rUVcEK=yc=_@7;UuIo~<=`_8@j_1TX<
z0T{zf7;W(B&<ywy5JXn(vQ<gnR#wRp1V&X=xnqK!M4`E0*OaU5YBoQ3M@LZ5{lMHX
z)9bFPq{kh{+$^Y?8-|Xs2N)6f5}sqbAbJoWgbsA-h#BZY_g>y9Wma8*tO+^~XAHwY
z+`us$7ii0tJ6i|Od*)XSoM@TnJVURSy-(mz<XNa^Ic?w!&I&@Rma`qlDlrXfn-8NO
z=XJbh;B^e_)iGh4PFbL<+KsBUx+&;?fq=v1HJ}C!3?WJ8RBh6+NMZL2fu5s|lz|IK
zvj(%wMDawS&SS-_E~jrTK45v-2H+(FZ!`gKs_HVgo})s7j)JOMGwZ91mh+LhSfQn>
zV3*9w9n(?XylK?j6;%_oH><7ln<XzLyJ9;eIxmQk%kd3URlKlid&8pt`Bv3+BC>;x
z>JF+*7~OOnwP98Ww78$75yK>_4Y2sXM2q5XD%O%G_&nVmwY=h~;@Xs7E8CB%f@23a
zwYk>X*uYVsqlZNqW0CDe*DQTHZLT#b2^H0H)pXY#a+Z0CeI5xKF52r($(mFi^Wi$J
z7d!=VmVMpEqXoV-?@U4PCTDs0_yGD)vUdmaZQbE5zP$rTGaZ9?o1-%gH)L>`GjD|l
zgdpB%1n<yWa0OX@3ETD;<3fNud<uPT2cc;#qxmv^Unbzo=)O!auIXRO$4_C*4SkR3
z6ZFJ2|H?vR{K^ha&ZM5;)E2UF|2C4zRAb@XHX=zbB(@M5=6Cq6H@kRXme@u>%lHo=
zmybXW{4eCdbI485dg=Q$r{elH`u@A-MwR-}Smo!jf-j5pnI>O9dp!IN1<~LM_!S2E
zj#9oDA`~l1xnk(y6UT8reK<+sdU2Jb>o|p3oW^~e!xC?v3I^aJfk#N;b6yBrNaG7!
z#CN!aA1Lt8%<v1Nf1~8T6X6eB!=D((-<S{sIqAZboIqasa7#vTTdv{*xsDHI7Dc&_
zyRw8iQMe~I7V6FQ37cg^E@PB6vK!@LtIarimp=!>D_t?qHMUoT(c^454N)m!0y%bb
zOcuC@9Gk93?%@VUI`7?iOmY;&6nQZAFy13Zo|YmycS%D?M~9Anoe|>w0lQ4IZ`ENm
f?f&-gmHIzF;az6kcWQ;=eFC@PCX*HFqv?MDzCvih

diff --git a/MavenChess/MavenChess/target/classes/model/Kamikaze.class b/MavenChess/MavenChess/target/classes/model/Kamikaze.class
index 621fc71ea9f694f98ebc401e45ae56b6b263c205..bc82b5d2c762f16d0c5a41e2e7af6163853c6daa 100644
GIT binary patch
literal 1804
zcma)*U2hvj6o%iicXw=O-MCHNHqg+tX&XDv2Tg(taWMJ7flxb+2x@VO)NT?hY`gYG
zYdbXDA@vV%36~(m1via~5{W`3Zn@$2AfbeJ)*o%sR6_Rb%sF$;nRA{w^Vh*|&jDny
z96<m<3C)BKLm*OdH_Fb~vh`I}z?inHc0DU_Hj!`X-I`su-D+krd0QeR(DT6Bw#FKD
z+ZmhnJZmR!*Xj{SL{z*kfnY)zMg>kC4G=~*ViKoKoIy`#_m)+$A6j3R1;my>?D(M(
zn24J=hw}p3X1V^kAAeD)driF2R+p6GqDr7oKu;_(*9b15U*fWfD;N;yY9=%1THc0$
zv}?I)xw0cL@JgM>Q%K%bp{|*@jzI#lYYSeP>Gr(hs0<~NCWeq=n$`vniYM|uF2|~F
zjuqD)l-KJSWoKf<#3;rD!gg)m^*nC)rQKzn^Sls&?z~+sFEuJ_W$!a<&7tN@-d(qx
z+m>f5xuw+VU)r@7<k~zl<go5Ku1Bzo0;kDtcH6QY<ymmI%XGQguE2+qNj5V*da(>6
z9&wPAv^>w=wj4@q6tN}{ZJ}!V^T0|oaQroqbjxw>F<RgYX5<SDd+umaJ6r9-22YAI
zef)N^%rLrAx7HsPtSujj#2l%v*qc?W-tdSm{XgnFF|J8yxkp<LUx3S!&nI4o$f#Q$
zZ3U7io17Ruvf?(p_40zPt~T1fw^7wDxXiZ_;A;hfASxLAzD;S7a*(qeN?qKC*yS>S
z8~my_O*IWe80V_LX@&_*Qc^p7bPS?a?;uTUftz@jGsB8Mctn_cPoF`S_7N_`Lcd2!
zL9JNQ^kPZpFu0b1Vks0mD3)S||D`;oH7#kO(L$$%zbBPJh*C^B#-v`H(t~LuZuDx;
ze?XyEiyNb9*{iE5^bBTc=vSQD!`ZmJ-&|dYhwks=&85^xQ-14vbfrf2aP>QchdC$i
zJT}D7hr7d1n6~C47)2M?Q3AL^1Or&bHEi<HRxyYM68IKL{KU8U3-!BvdkWJk%dX;m
zyhkLGR%uLeglOB341oo451(S1Iz!><;CxD-ED?qn?E}mZ<2b&-EasTYD(+yOD;*!w
z$Lv_;XthAiGPFa6l@i?&mn6@X_=taA&LMILck~iwYe#VJALxgw6FS>1H%9!JBf#De
z_yo6FR~n(MPW@8rO7nqipY|hW0%<L-adG1%>U|yPnu1;!-or3Cr#O?dM$Ugf4)XhF
z>ILoVe#1<VK$^XJ6BpP_6XZC>-wfpi>holyC{Hqz3DV4S1lWj^K4pzfJLi*E9lg|I
z8=|KoDqf<eG&yP%y>aLVh$v>_Ur2F?5$HY=@-!7E1xaga=%TQ-_!KBEF+u>v{{UMA
BaJv8i

delta 702
zcmb7?O=}ZT6o#KWnR=6Ph}aJ)Mw9wg+hl61@!MK8wYITT3NEC(gw9Y4X$K+}cliOj
zuv}2$%AM|1kOnNc>dL)4e}JGH>DuC%L<XUBAp`fEIp?|OocrGUEWPD8Uv@ry1|}%4
zJKvL<oXY^m%&N*xrZ~U}my?`QbS;Lpu&z*L&1uE{mCz4rqw~wbVh~}&E_n(H_hI!>
zDF{~Q!nME`+B{W9GY)4trzyIe=R&-<6jtlLnNm6PR^2r_YTV3Q#iXv*>&t7^nt5T}
zH$Sauvz{1iSjYhEll7vES|%YM=zQTw3-v)<i%YUPVkInKlFQ-^bTF=PRsNz(H$74$
z^5jrLE3PpvR?4cTw6G<&y@_6Ek(%4YUC4hVz0shzZRu~3x#x{+kbNM5<MwNo#16e;
zEM{Z0s}jM&dQA=%#Evydb@uLt?SJ6Mf8mu5{06_VcN71An(PgG@8#fjTf_;uO-PG`
zJ!I(>p$;|h=%>hGX30<?#}m=^IfJ}ph<6OL#R%Ux!!Nn%Ncnt6$yoVquFDHkQuGHm
sxG9Qf`N}P6k)R~J8|Nk^ce_1+{hNwLYuvukqQ{g3E$#?7-S%ew0J4LF&Hw-a

diff --git a/MavenChess/MavenChess/target/classes/model/Magician.class b/MavenChess/MavenChess/target/classes/model/Magician.class
index 9cb9112d36bf90d87c427dbc257a0887af5d10bf..a6c93ebe3cfc690fedc4ddf1307820b1a0664976 100644
GIT binary patch
delta 149
zcmbQv{+*rc)W2Q(7#JAr7<4ysePvYSOHVCv&M(MJO$o?MO-^NG;MdUf$<0qm&Cv%7
zSWo`TXu!z2S&xZ}(Mpp+i-D0r2B=*hNHYRyR;?`zTpNH4CI(p`$p#h_XOIK3c_0cH
h<QWtg7$%!C8*@rAurf$9@G{6uE@YNx*9Pm-0RW5s8iN1;

delta 56
zcmey)KAoNG)W2Q(7#JAr7_>KXePx`i#H7c_vN@26i*fP{W&=(!237`f23`h<$rqXB
L*)@R*nHaPH&S4Ck

diff --git a/MavenChess/MavenChess/target/classes/model/Nwap.class b/MavenChess/MavenChess/target/classes/model/Nwap.class
index 900487542c16548ca728b2437c64d2dedfb7bbf0..c273033df9b7465fdafc8be19375d84470913a55 100644
GIT binary patch
literal 1955
zcmb7FO>Y}j6g|%wXKH7hCT-Kwra(heYCDciDNO-~&?Lmv#Ysa`0?8^b_K;3-X2Q%k
zRaX3jZrFqs3nVrOQ3)D}O5Lzy%aR|!0wIu)kf;jcy!i-m+DfiQns?vzx#!(;-@W4>
z|NZ_xfC((5kwBLY%|H^}0_k<9VKz(i@|G>oJ#N{SKOt}=TZ{aTXZe<6m#ewO6b>Mz
zBW<7u#%|=?Ex93(GVOWkdD8X;#IlZFfx|cDrYyC5t67?KUAa}WJU@*L`qat&0$tgV
z^00v;7!XL-ou=b5ysG1vKu?r_W!6n~@^J$v)Un15=}noYJ?m_m4IL*1dfQV~;O7iH
zk5lAgYJK~qq%nvW44lTWfVO7(9|XBnmHR~lXJhx0a^zI9c_x>wvI5FeFffWD6<gl4
z<GN;@iYa9|jhApv$IAxJ<CWd?ryS`vSXj%exTeXXJW^N{nZcNWi+GhxvO)MjwiXnx
zDebk=)zzCkq#T~`x`8sr1$4`svCZ`@fzyvL?$?`Jrp{?zv%tZcWt(%Y^;OfoE?1lM
z9I82W*<6&arS_3i^KV!lOC2$(D=rK4vsROv(rPNCDnB8^@#%rkaxTof{n8n#OV_nF
zWs^6uDv*hI!x$EKJtP}=LiEx09Je;&JkLHZV0^#+2_}$P@MZm@S-BA@Of6Vzw)9&r
zOEA`fhR2fjs7u&wd&4vRJzFiioLl6SEI2K<ZdNQ+?3AixQC%&D*rf?hq~M$5L`$R1
zk>vXg?yjMW4`Ad+PVPYDyS{^dhx-I)80ZatOA(!BbPwL7?^KA#B}{V1NHqdvQx*q|
zkpfeg=1Ts=Up!0W@xR|gW@!fpXY=3UkoGzL<oe8KkoPdSMDy9Z7)mxm<4kg82idvN
zyBOI<{|ML8Hc|zy7vA3sUwJCH7PD&|v1>7VXYeSM5Iiy(ZeQER-(lKc;t#r>sJHQS
zdOL#uueUS!uHKH|vEBf@M{jgZg>TpnTF^ot;yCSow&4K!aE#9hoa6Vc!nRpq<Fqi0
z+c<+Ski&iC@e>O86{GB@^Fqg%7{Wy{hO(IF=g7n*@d+lyr<f66qauDlRs4)A;y26&
zt$7(bx!>ZWn)Eh44lQ!TJ~m?9xU^=Ng}?#v3*N?MB*?uH#a4rMj(@wtW`2jB9Mb=w
zq9dbY@BxYsQKV6PfWkvuXmjOIBRs*h1m;lWTg_UDD|I2s>gitv05xQ46oL6bfe`|t
t90jh@9|lj5P7QK*ez0vs)&DGTon!W1z;HA~#VX0J#$Fx#E^!H5`wtU8sa*g7

literal 1743
zcmb7E-%k`*7(EvThFu2~1qG{B)XL8CW2FWBvA7l}t7{i(LPLcoF1sUMyX?@}SqM-5
z3BL3NpL}T2x27hIB%1irH(!195AeY>ZPKJkiEVoB%q$huWZg~X-udQy=YHqA=iX=k
zK7I-ygXuUL&}hQ2(1d1z_=;O}N~s%iy)4i?rpn6C2y`U!QQWO4U%BOU&Ym;TB5>%A
zT$8D)uS%(L&yyQ@Rq^965!ZbC1R4|eTnw#fGqK;o0krQdF|#gL1)2(O$@K(8&cq>s
zebF+?DL6W<)52jK5wLE{%7o*Tr`<KDNc4h<Zh^MlMd^f(EF8meBFKGUZ_#md;e>^g
z=n*iM9sg!fUrvWlTR2k-&+EWhEufbLCUVrOBesPk`UGOCGU<ArQ}BcIg*XN<Xd-3d
z9ENrzOt{ixrOm36^&E$ddaH#tGfjMEVHhK1l10Kh6ZxQ_C0SlheYJFli=;Jf0Ou`S
zz(oO5Ri?_$%7(z{w;1>8wHK&!k{c?pKd;KpOm$_+@xGQzB}NYB-GVI5Nl)qbC}{Y%
zRfX-2nDic{1=`uG@inPR8mYH{kTbQ_1EFa<tb4Z+m}*MTQ){xs9a$1+jd;TxHg_c?
z>wHi4;oUWEtk&x6eOJQRUi}#s&^qhO!nf0MHBuOxRm)}RS3S01v<?mLB#qCyRj=S=
zm2PBAcWF>>8+z!#2A(VMNp)!E^Ag{3XyhL-lYPgwARY#QG@ttPF-%|!#yC3}!f=^K
zQ~yluW|HU`4^KdQ1)p;yZNpz&!T`kYPhie(AvT@-1(xvue{$@&5BUUL^PC=igpZqw
z;p9});ub!c8F+-mCffTr_HQEA&+*f5-h?lH5ZtJ-8+EZ8HTL@8Q7Iv~Zy<af-NfHv
z*+1eBhTf~U_+fhMg8#3#KKPE_y5Kdv0r(BQ(Khw}Ogk9R_PK>_KHF%XgS1Bnj_^Ok
zt13&|EYdhtI`SS);Rl?>Q}p6FY`j8}emW<3^@tt}i&0z<H+Zu+xGe4>BfiIk_z9EZ
zS7gNtTou3JdSK0KwBQiFz&Lpu$@*P5BS$SpBi4+|*#stO+!pbY->1+(?$sza%bKm7
tZ&zvNYmC^4|AVXv(?r)c24CwtwQF!2{jV{yD`fLH=>vA16ki6j{D11Bj-LPk

diff --git a/MavenChess/MavenChess/target/classes/model/Pawn.class b/MavenChess/MavenChess/target/classes/model/Pawn.class
index 07a780168facd29ef0f800edf01c6bd32e74749f..6dae773e174ac427e7b93206b7439cdf8da34f98 100644
GIT binary patch
delta 246
zcmWNHJugFX7)Q_VxwqPCQc`NrDh3q>inc;sA{y`UZXprrpqq)wAQFqg)UlJqQWI%v
zx0xEdFW>_hjQ%;vNltPaiALhp_XoTd;WxloagO6TN9mxG7_sKC-?rOsBJ{dU(nFu4
zpGi{8k|rQSnL*AO;*t>_$WmvFcgFc-f-iS|ljD~u#hF%y8I6)xfr3gDwalDOnAa60
z-Ls%a0@Yd66H9ubtQM<k7g^H}>-uBE#HMwzWl6Rz#jfSqvmN&Bj03B3XxALs4aauJ
VY4bUpmMXQ6ND#UpM78Ecv;RdvC<_1p

delta 246
zcmWN{J4=Fb97pl<{rT9V1qzx$nMTmfp}TgoCkVR-W|zq!YN)oRni?W#X=rkE3R-L`
z#P+r(Y3~j60va0oFCRE?8i_{Y)$=l53;zu;O3oM|XOs?ny69{UdTqOn6Cvrc+nJ(=
zUMA^do-_d&*2r?g0GAB$z%X^jcqhjv<9so}x4VCtQjBS3nb9b-Dv(!^f>v2jl|@~#
zq<e~bWLb3rJ+Yz}N@}sL_8c4fVN-u>nb@{CJC<VC(v&UFo|UQCG5dDGfn9TGHyqg=
W)#kI`FP+vtB0>0!Fz2;UbmSi{eJ9rd

diff --git a/MavenChess/MavenChess/target/classes/model/Position.class b/MavenChess/MavenChess/target/classes/model/Position.class
index bf4b97164c8118351d4b88aa50f9425eaff273f9..d08ee04d724822d2ca396ded99593f1d5aef9acc 100644
GIT binary patch
delta 398
zcmYjMyGjF55IuA6ZnAkACGn9>Ow49?v#a8xj$ox2u+mzHVx@(JjfL0<c7hDp*{G0K
zi{M{a_#qZHrZUcMBFKfg^Eh+noX_-A=EbFaZtuK%bh6t$+wUHp9<xJRd_gx?w@}ak
zyzmWV8;?j`lhqpz?1J?i<%8bvJGA>qhLt{YuY%N=msmzZVj2cAm_Qaba;PH@SE`y!
z>LXV97o-w?!DT^l7U2~dk{625L*dX#SR})AMj#F!sCAm+JJqHVzpM7#Y)m;?H^-EO
zCR}#(&SV7^swj!9n!EsYzSJ`*FFr@``9UwG8ZhCA+$MkMK(}P`N4uscU7uS<O$XBH
z7_J{kCycL6i$sXYKLd%_CW*cfi+pcvmzMvjYK?IX{xUkW#v5j}7#TF7%A3*BiWCZ~
Ezxd5GTL1t6

delta 352
zcmYk0u};H45JczhY$b8x1c4k-Vn~1(+h;@|h>ju!5(0?|3MfD_5fu~^NR-sn`w9F2
z6cH^I4ILlCH!yKfM6)+Dr=7Pi)gSLQQnIHG>i+3NKDs^0@6Yn<yBm2_&sP`FFaR3%
z9m=-HDA{lf|BaEx3g<i=PLH#S3TmjsM~6vwy2f{vjs^U$K^3Y&rK#6M^gzwYr`}f!
zGBklKnOHR^%B-U&=jLdqg)-U*5VCa{DVdY@Ciek5YqyAsc7+Z3Hk*|$Tyi}UN=|BG
zcI`Tm+hZEZrPDD9lP4xIlZ45ld^ly3!pfI(7-R)wdTsK@$Ru`;2mOEaa7GWYMVdm!
Pn_TGDP|@^hG`4>Mkf<r)

diff --git a/MavenChess/MavenChess/target/classes/model/Queen.class b/MavenChess/MavenChess/target/classes/model/Queen.class
index 10479f12d5926eab2359e138d32913df50571a05..99db5da17bccc0d501fdc65cf89700ac9c579f60 100644
GIT binary patch
delta 14
VcmaFI{f>KsCo?1CW-sO?OaLg-1eX8+

delta 14
VcmaFI{f>KsCo?0<W-sO?OaLh41eyQ<

diff --git a/MavenChess/MavenChess/target/classes/view/BoardView.class b/MavenChess/MavenChess/target/classes/view/BoardView.class
index 0fa96c7105936d1ac4ba9becd2e2e9ba818040e1..dad9befd6db93d0d81adc0e81ba4275c84441a0e 100644
GIT binary patch
delta 3467
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
A^#A|>

delta 2571
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
agrDKc;bDi~4NdqmFR{8p4Caw03jPJckGEF<

diff --git a/MavenChess/MavenChess/target/classes/view/CustomMaterial.class b/MavenChess/MavenChess/target/classes/view/CustomMaterial.class
index 06ac3d5e95495a07bff9fe1ddba2c69a20ed8c70..8dc8f459dec29d3bd79feacd9f5bfa14b963d72e 100644
GIT binary patch
delta 413
zcmYjM%}N4c6g_vwQ5;J@Aq<=Tvmccf%_a&fq$ZsjbyAC3Nj*TX(5eTJ52Ds>+V!)@
zC<t;DK|Mh90ui*17S)}JpvCud&$;*9bK0HFsQ&PEeG6b7wR8PV$wsYB*QwO(O1V+D
z9ZO{@Oo)~8b*pOUorYtT3-zK0>rz+S)FB_$qq!s&F$IFjxPm40!1`A&Ge*!5<h#HP
zT?jA&+R3y)LYFeI9-N5dK;-0mz)<gnD<j(B=mjDoe1q^-3$dDCm~k*E%qxgXB-EV2
z!zWrcROGe0FyynA-rGkKO*U{01E=W49s2Nue!O4+uNcG!hDgIObz_85NYOOLXaVEo
z^1FdFZ6gDl^%78MhG$p&AZ!+^a2PM~5m3IFR6+<5@X1>UWmLR)o|Rcn$N3Os(}sD*
aKLsA{<p(DJ<bC8<)Z<)#5n;{mul@kgIzP(*

delta 356
zcmXw!yGjFL5QV?l%_by4vla%EXiU7|C5X6SBO(bJlV}oev9PicU&F=+P`1(52N1O|
zUO*(32tI+OjgUe+!9tzgU@`wcoHKLgoa63RSLFHU?g3a}<1*4VdSkUhqqtcqRClYz
zdZ|%1l?%HWvn5gY%{-k-vd9dAqqxD6mS7Row+PZEpa@c!Y$A5py$x&+J3TzvdpFqE
z#IJ}3?+NcTiEVkkV=Mb<x{h^Xne!>#_^@)JW!2s%;bwyq2Ztm$BFPyk&gtio0bWS+
z${_D#_#!I-h9u62q#2cI{bw1IJmZv9CypU~x>NRDt1~LBD88y?WBe*<ga`?ItGZC7
o*2%)0CNc6l7F4Gx=R!LJ&zct&a{ux^(h>Ezx_?Mm^XJ$90OpW3P5=M^

diff --git a/MavenChess/MavenChess/target/classes/view/TileView.class b/MavenChess/MavenChess/target/classes/view/TileView.class
index df2fc8f7e944a9eb86325a43fab5c5685fb402d6..10d5f7a31ef3220a528617df33384f178c13ee0a 100644
GIT binary patch
delta 373
zcmZvYO%B0O5Xb-Xq^b>RL_?Y`)Hn6*0CpA<L1N<yPT>HSJ%9^XXt1$x09SCA#=KXt
zD4Usi|C!%>yhuN0%x83e0GMJDnmSp=Y`b2pHuKdo#j19(NGCFalGwQpJlG%<IU!Ji
z#<7Mf+gflC4XOvBaIFSsJxJI_6RqGSoP8S|S;g9rJ+asPEA%r50(G`&CEAd1HZG7b
zzX(3MY?E*<377uDJ@i5QA3A?ZjCTLh1GTRlJ>^9O`?T-gkPpAKsnjz6gQq$a<Eqc{
O@~{GIc@bfxpz#|$ogYsC

delta 363
zcmZvY%?*M;5QX2YB8Z|A2*!92@ee`83h2iwD1riPfP+T8c(4F#GQ`=Hct9_2HgD(K
zd9z2O)Xiske*j3aKbtyT0@8?#JQRnH27(5kb($Aq5eMAnu>)9WqK7v6tOGc(F=N+9
zgVn_xi~J=<*%B+svX^iru3B`3e&U0Ge5|ERSHay+gM|5p5Ms?*hpjq1{0m2jLD>&&
u7q!vjzw`#%YIMp$g$x>vZ?Ml_+EngD{f^w+`*c;|<zfz8xe;NfpyUk=RvSJ5

-- 
GitLab