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.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