diff --git a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java index 1d81b77..d9b8cad 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java @@ -18,6 +18,11 @@ import java.awt.Point; import java.awt.Color; import java.awt.Graphics2D; +// TEMPORAIRE : +import java.awt.event.MouseMotionAdapter; // Import pour MouseMotionAdapter +import java.awt.event.MouseEvent; // Import pour MouseEvent +import java.awt.AlphaComposite; + /** * Représente le plateau de jeu. @@ -33,7 +38,7 @@ public class Board extends JPanel{ private int offsetX = 0; // Décalage horizontal du plateau private int offsetY = 0; // Décalage vertical du plateau private Tile nextTile; - + private Point mousePosition = null; // Constructeur avec seed public Board(JFrame gameFrame, long seed) { @@ -63,9 +68,38 @@ public class Board extends JPanel{ this.addMouseListener(new GameMouseClickListener(this)); - + this.addMouseMotionListener(new MouseMotionAdapter() { + @Override + public void mouseMoved(java.awt.event.MouseEvent e) { + handleMouseMove(e); + } + }); + } + public void handleMouseMove(java.awt.event.MouseEvent e) { + // Récupérer les coordonnées du curseur + Point cursorPoint = e.getPoint(); + + // Ajuster la position de la souris en fonction du zoom et des offsets + int adjustedX = (int)((cursorPoint.x - offsetX) / zoomFactor); + int adjustedY = (int)((cursorPoint.y - offsetY) / zoomFactor); + + // Vérifier si la souris est proche d'une des positions disponibles + for (Point position : availablePositions) { + if (new Point(adjustedX, adjustedY).distance(position) < 20) { + mousePosition = position; + repaint(); // Redessiner le plateau avec la tuile transparente + return; + } + } + + // Si la souris n'est pas proche d'une position valide, ne rien faire + mousePosition = null; + repaint(); // Redessiner sans la tuile transparente +} + + private void initializeNextTile() { int offsetX = 50; // Décalage pour la position en haut à gauche int offsetY = 50; // Décalage pour la position en haut à gauche @@ -73,9 +107,7 @@ public class Board extends JPanel{ } - public Tile getNextTile() { - return nextTile; - } + public Tile getNextTile() { return nextTile; } public void handleSpaceKeyPress() { // Calculer les dimensions totales du plateau (largeur et hauteur des tuiles) @@ -179,17 +211,11 @@ public class Board extends JPanel{ centralTile.setPosition(centerX, centerY); } - public void addTile(Tile tile) { - tiles.add(tile); - } + public void addTile(Tile tile) { tiles.add(tile);} - public Random getRandom() { - return random; - } + public Random getRandom() { return random; } - public Game getGame() { - return game; - } + public Game getGame() { return game; } /** * Calcule les positions disponibles autour de la tuile donnée. @@ -285,29 +311,17 @@ public class Board extends JPanel{ } } - public double getZoomFactor() { - return zoomFactor; - } + public double getZoomFactor() { return zoomFactor;} - public void setZoomFactor(double zoomFactor) { - this.zoomFactor = zoomFactor; - } + public void setZoomFactor(double zoomFactor) { this.zoomFactor = zoomFactor; } - public int getOffsetX() { - return offsetX; - } + public int getOffsetX() { return offsetX; } - public void setOffsetX(int offsetX) { - this.offsetX = offsetX; - } + public void setOffsetX(int offsetX) { this.offsetX = offsetX; } - public int getOffsetY() { - return offsetY; - } + public int getOffsetY() { return offsetY; } - public void setOffsetY(int offsetY) { - this.offsetY = offsetY; - } + public void setOffsetY(int offsetY) { this.offsetY = offsetY; } public void zoomIn() { zoomFactor *= 1.1; // Augmenter le facteur de zoom @@ -354,6 +368,17 @@ public class Board extends JPanel{ tile.drawTileAt(g,tileX-50,tileY-50,1f); } + // Vérifier si la position de la souris est valide et ne pas dessiner si elle est occupée + if (mousePosition != null && nextTile != null && !isTileAtPosition(mousePosition)) { + int nextTileX = mousePosition.x; + int nextTileY = mousePosition.y; + + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); // Rendre la tuile transparente + nextTile.drawTileAt(g, nextTileX - 50, nextTileY - 50, 1f); + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); // Rétablir l'opacité + } + + if (nextTile != null) { // Calculer la position correcte de la nextTile (en tenant compte du zoom et des décalages) int nextTileX = 0; // Position x dans l'espace global