diff --git a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java index 78869f8..f9fe701 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java @@ -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(); diff --git a/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameSpaceKeyListener.java b/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameSpaceKeyListener.java new file mode 100644 index 0000000..6b7ba34 --- /dev/null +++ b/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameSpaceKeyListener.java @@ -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 + } + } +}