Ajout d'un zoom + déclacement sur le board
This commit is contained in:
@@ -51,4 +51,6 @@ public class Options {
|
||||
public static int SOUNDS_VOLUME = 60;
|
||||
|
||||
public static final Dimension MINIMUM_FRAME_SIZE = new Dimension(700, 700);
|
||||
|
||||
public static boolean AUTO_FOCUS = true;
|
||||
}
|
||||
|
@@ -1,6 +1,8 @@
|
||||
package fr.monkhanny.dorfromantik.game;
|
||||
|
||||
import fr.monkhanny.dorfromantik.listeners.GameResizeListener;
|
||||
import fr.monkhanny.dorfromantik.listeners.GameZoomListener;
|
||||
import fr.monkhanny.dorfromantik.listeners.GameArrowKeyListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -10,6 +12,7 @@ import javax.swing.JPanel;
|
||||
import javax.swing.JFrame;
|
||||
import java.awt.Point;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
|
||||
|
||||
/**
|
||||
@@ -22,6 +25,10 @@ public class Board extends JPanel{
|
||||
private Game game;
|
||||
private JFrame gameFrame;
|
||||
private Tile centralTile;
|
||||
private double zoomFactor = 1.0; // Facteur de zoom initial
|
||||
private int offsetX = 0; // Décalage horizontal du plateau
|
||||
private int offsetY = 0; // Décalage vertical du plateau
|
||||
|
||||
|
||||
// Constructeur avec seed
|
||||
public Board(JFrame gameFrame, long seed) {
|
||||
@@ -37,25 +44,41 @@ public class Board extends JPanel{
|
||||
// Ajouter un écouteur de redimensionnement pour redessiner les tuiles
|
||||
gameFrame.addComponentListener(new GameResizeListener(this));
|
||||
|
||||
// Ajouter un écouteur de molette de souris pour gérer le zoom
|
||||
gameFrame.addMouseWheelListener(new GameZoomListener(this));
|
||||
|
||||
// Ajouter un écouteur de clavier pour déplacer le plateau
|
||||
gameFrame.addKeyListener(new GameArrowKeyListener(this));
|
||||
gameFrame.setFocusable(true);
|
||||
|
||||
this.addMouseListener(new java.awt.event.MouseAdapter() {
|
||||
public void mousePressed(java.awt.event.MouseEvent e) {
|
||||
handleMouseClick(e);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void handleMouseClick(java.awt.event.MouseEvent e) {
|
||||
// Récupérer les coordonnées du clic
|
||||
Point clickedPoint = e.getPoint();
|
||||
|
||||
// Vérifiez si la position cliquée est dans la liste des positions disponibles et si la distance est suffisante
|
||||
// Ajuster les coordonnées du clic en tenant compte du zoom et des déplacements
|
||||
// Annuler l'effet du zoom et du déplacement
|
||||
int adjustedX = (int)((clickedPoint.x - offsetX) / zoomFactor);
|
||||
int adjustedY = (int)((clickedPoint.y - offsetY) / zoomFactor);
|
||||
|
||||
// Vérifiez si la position ajustée est dans la liste des positions disponibles et si la distance est suffisante
|
||||
for (Point position : availablePositions) {
|
||||
if (clickedPoint.distance(position) < 20) { // Assurez-vous que le clic est plus éloigné du point
|
||||
// Vérifiez la distance entre le clic ajusté et la position
|
||||
if (new Point(adjustedX, adjustedY).distance(position) < 20) {
|
||||
placeTileAtPosition(position); // Place une tuile à cette position
|
||||
break; // Si une tuile est ajoutée, on peut sortir de la boucle
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void initializeCentralTile() {
|
||||
int centerX = gameFrame.getWidth() / 2;
|
||||
int centerY = gameFrame.getHeight() / 2;
|
||||
@@ -152,6 +175,23 @@ public class Board extends JPanel{
|
||||
}
|
||||
}
|
||||
|
||||
public void zoomIn() {
|
||||
zoomFactor *= 1.1; // Augmenter le facteur de zoom
|
||||
repaint();
|
||||
}
|
||||
|
||||
public void zoomOut() {
|
||||
zoomFactor /= 1.1; // Diminuer le facteur de zoom
|
||||
repaint();
|
||||
}
|
||||
|
||||
public void moveBoard(int dx, int dy) {
|
||||
offsetX += dx;
|
||||
offsetY += dy;
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Afficher les points rouges pour indiquer les positions disponibles.
|
||||
*
|
||||
@@ -160,6 +200,13 @@ public class Board extends JPanel{
|
||||
@Override
|
||||
public void paintComponent(Graphics g) {
|
||||
super.paintComponent(g);
|
||||
Graphics2D g2d = (Graphics2D) g;
|
||||
|
||||
// Appliquer l'échelle de zoom et le déplacement
|
||||
g2d.scale(zoomFactor, zoomFactor); // Appliquer le zoom
|
||||
g2d.translate(offsetX / zoomFactor, offsetY / zoomFactor); // Appliquer le déplacement (en tenant compte du zoom)
|
||||
|
||||
// Dessiner les points rouges pour les positions disponibles
|
||||
for (Point position : availablePositions) {
|
||||
g.setColor(Color.RED);
|
||||
g.fillOval(position.x - 5, position.y - 5, 10, 10); // Dessiner un point rouge
|
||||
|
@@ -0,0 +1,32 @@
|
||||
package fr.monkhanny.dorfromantik.listeners;
|
||||
|
||||
import fr.monkhanny.dorfromantik.game.Board;
|
||||
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class GameArrowKeyListener extends KeyAdapter {
|
||||
private Board board;
|
||||
|
||||
public GameArrowKeyListener(Board board) {
|
||||
this.board = board;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
switch (e.getKeyCode()) {
|
||||
case KeyEvent.VK_UP:
|
||||
board.moveBoard(0, -10); // Déplacer vers le haut
|
||||
break;
|
||||
case KeyEvent.VK_DOWN:
|
||||
board.moveBoard(0, 10); // Déplacer vers le bas
|
||||
break;
|
||||
case KeyEvent.VK_LEFT:
|
||||
board.moveBoard(-10, 0); // Déplacer vers la gauche
|
||||
break;
|
||||
case KeyEvent.VK_RIGHT:
|
||||
board.moveBoard(10, 0); // Déplacer vers la droite
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,24 @@
|
||||
package fr.monkhanny.dorfromantik.listeners;
|
||||
|
||||
import fr.monkhanny.dorfromantik.game.Board;
|
||||
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseWheelEvent;
|
||||
|
||||
public class GameZoomListener extends MouseAdapter {
|
||||
private Board board;
|
||||
|
||||
public GameZoomListener(Board board) {
|
||||
this.board = board;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseWheelMoved(MouseWheelEvent e) {
|
||||
// Vérifier la direction de la molette (positive = zoom arrière, negative = zoom avant)
|
||||
if (e.getWheelRotation() < 0) {
|
||||
board.zoomIn(); // Appeler zoomIn() si la molette tourne vers le haut
|
||||
} else {
|
||||
board.zoomOut(); // Appeler zoomOut() si la molette tourne vers le bas
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user