Prévisualisation d'une tuile avec la souris

This commit is contained in:
2024-11-16 22:44:48 +01:00
parent 55455d8fec
commit dd2cbdf9b9

View File

@@ -18,6 +18,11 @@ import java.awt.Point;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics2D; 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. * 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 offsetX = 0; // Décalage horizontal du plateau
private int offsetY = 0; // Décalage vertical du plateau private int offsetY = 0; // Décalage vertical du plateau
private Tile nextTile; private Tile nextTile;
private Point mousePosition = null;
// Constructeur avec seed // Constructeur avec seed
public Board(JFrame gameFrame, long seed) { public Board(JFrame gameFrame, long seed) {
@@ -63,9 +68,38 @@ public class Board extends JPanel{
this.addMouseListener(new GameMouseClickListener(this)); 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() { private void initializeNextTile() {
int offsetX = 50; // Décalage pour la position en haut à gauche int offsetX = 50; // Décalage pour la position en haut à gauche
int offsetY = 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() { public Tile getNextTile() { return nextTile; }
return nextTile;
}
public void handleSpaceKeyPress() { public void handleSpaceKeyPress() {
// Calculer les dimensions totales du plateau (largeur et hauteur des tuiles) // Calculer les dimensions totales du plateau (largeur et hauteur des tuiles)
@@ -179,17 +211,11 @@ public class Board extends JPanel{
centralTile.setPosition(centerX, centerY); centralTile.setPosition(centerX, centerY);
} }
public void addTile(Tile tile) { public void addTile(Tile tile) { tiles.add(tile);}
tiles.add(tile);
}
public Random getRandom() { public Random getRandom() { return random; }
return random;
}
public Game getGame() { public Game getGame() { return game; }
return game;
}
/** /**
* Calcule les positions disponibles autour de la tuile donnée. * Calcule les positions disponibles autour de la tuile donnée.
@@ -285,29 +311,17 @@ public class Board extends JPanel{
} }
} }
public double getZoomFactor() { public double getZoomFactor() { return zoomFactor;}
return zoomFactor;
}
public void setZoomFactor(double zoomFactor) { public void setZoomFactor(double zoomFactor) { this.zoomFactor = zoomFactor; }
this.zoomFactor = zoomFactor;
}
public int getOffsetX() { public int getOffsetX() { return offsetX; }
return offsetX;
}
public void setOffsetX(int offsetX) { public void setOffsetX(int offsetX) { this.offsetX = offsetX; }
this.offsetX = offsetX;
}
public int getOffsetY() { public int getOffsetY() { return offsetY; }
return offsetY;
}
public void setOffsetY(int offsetY) { public void setOffsetY(int offsetY) { this.offsetY = offsetY; }
this.offsetY = offsetY;
}
public void zoomIn() { public void zoomIn() {
zoomFactor *= 1.1; // Augmenter le facteur de zoom 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); 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) { if (nextTile != null) {
// Calculer la position correcte de la nextTile (en tenant compte du zoom et des décalages) // 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 int nextTileX = 0; // Position x dans l'espace global