Ajouts d'un dezoom avec la touche espace
This commit is contained in:
@@ -3,6 +3,7 @@ package fr.monkhanny.dorfromantik.game;
|
||||
import fr.monkhanny.dorfromantik.listeners.GameResizeListener;
|
||||
import fr.monkhanny.dorfromantik.listeners.GameZoomListener;
|
||||
import fr.monkhanny.dorfromantik.listeners.GameArrowKeyListener;
|
||||
import fr.monkhanny.dorfromantik.listeners.GameSpaceKeyListener;
|
||||
import fr.monkhanny.dorfromantik.Options;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -52,6 +53,8 @@ public class Board extends JPanel{
|
||||
gameFrame.addKeyListener(new GameArrowKeyListener(this));
|
||||
gameFrame.setFocusable(true);
|
||||
|
||||
gameFrame.addKeyListener(new GameSpaceKeyListener(this));
|
||||
|
||||
this.addMouseListener(new java.awt.event.MouseAdapter() {
|
||||
public void mousePressed(java.awt.event.MouseEvent e) {
|
||||
handleMouseClick(e);
|
||||
@@ -60,6 +63,68 @@ public class Board extends JPanel{
|
||||
});
|
||||
}
|
||||
|
||||
public void handleSpaceKeyPress() {
|
||||
// Calculer les dimensions totales du plateau (largeur et hauteur des tuiles)
|
||||
int totalWidth = 0;
|
||||
int totalHeight = 0;
|
||||
|
||||
// Calculer la largeur et la hauteur totale de toutes les tuiles
|
||||
for (Tile tile : tiles) {
|
||||
totalWidth = Math.max(totalWidth, tile.getXCoord() + tile.getRadius());
|
||||
totalHeight = Math.max(totalHeight, tile.getYCoord() + tile.getRadius());
|
||||
}
|
||||
|
||||
// Ajouter une petite marge pour les bords
|
||||
totalWidth += 50; // Marge pour éviter que les tuiles ne soient collées au bord
|
||||
totalHeight += 50; // Marge pour éviter que les tuiles ne soient collées au bord
|
||||
|
||||
// Calculer le facteur de zoom pour que toutes les tuiles tiennent sur l'écran
|
||||
double horizontalZoom = (double) getWidth() / totalWidth;
|
||||
double verticalZoom = (double) getHeight() / totalHeight;
|
||||
|
||||
// Choisir le zoom le plus petit pour éviter que les tuiles ne sortent de l'écran
|
||||
zoomFactor = Math.min(horizontalZoom, verticalZoom);
|
||||
|
||||
// Ajuster les offsets pour centrer les tuiles après le dézoom
|
||||
adjustOffsets(totalWidth, totalHeight);
|
||||
|
||||
// Recalculer les positions disponibles et redessiner le plateau
|
||||
repaint();
|
||||
}
|
||||
|
||||
private void adjustOffsets(int totalWidth, int totalHeight) {
|
||||
// Calculer les décalages nécessaires pour centrer le plateau
|
||||
int targetOffsetX = (int) ((getWidth() - totalWidth * zoomFactor) / 2);
|
||||
int targetOffsetY = (int) ((getHeight() - totalHeight * zoomFactor) / 2);
|
||||
|
||||
// Appliquer les nouveaux offsets
|
||||
setOffsetX(targetOffsetX);
|
||||
setOffsetY(targetOffsetY);
|
||||
}
|
||||
|
||||
|
||||
private void adjustZoomAndPosition() {
|
||||
// Calculer la largeur et la hauteur totales des tuiles (en fonction du nombre de tuiles)
|
||||
int totalWidth = 0;
|
||||
int totalHeight = 0;
|
||||
|
||||
// Trouver la plus grande étendue de tuiles sur l'axe X et Y
|
||||
for (Tile tile : tiles) {
|
||||
totalWidth = Math.max(totalWidth, tile.getXCoord() + tile.getRadius());
|
||||
totalHeight = Math.max(totalHeight, tile.getYCoord() + tile.getRadius());
|
||||
}
|
||||
|
||||
// Définir l'offset pour centrer les tuiles sur le plateau après le dézoom
|
||||
int targetOffsetX = (int) ((getWidth() - totalWidth * zoomFactor) / 2);
|
||||
int targetOffsetY = (int) ((getHeight() - totalHeight * zoomFactor) / 2);
|
||||
|
||||
// Appliquer ces nouveaux offsets
|
||||
setOffsetX(targetOffsetX);
|
||||
setOffsetY(targetOffsetY);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void handleMouseClick(java.awt.event.MouseEvent e) {
|
||||
// Récupérer les coordonnées du clic
|
||||
Point clickedPoint = e.getPoint();
|
||||
|
@@ -0,0 +1,21 @@
|
||||
package fr.monkhanny.dorfromantik.listeners;
|
||||
|
||||
import fr.monkhanny.dorfromantik.game.Board;
|
||||
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class GameSpaceKeyListener extends java.awt.event.KeyAdapter {
|
||||
private Board board;
|
||||
|
||||
public GameSpaceKeyListener(Board board) {
|
||||
this.board = board;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(java.awt.event.KeyEvent e) {
|
||||
if (e.getKeyCode() == java.awt.event.KeyEvent.VK_SPACE) {
|
||||
board.handleSpaceKeyPress(); // Appeler la méthode dans Board pour dézoomer
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user