Files
SAE31_2024/src/main/java/controller/MousePressHandler.java

65 lines
2.1 KiB
Java

package controller;
import view.HexagonTile;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Map;
import javax.swing.SwingUtilities;
public class MousePressHandler extends MouseAdapter {
private CameraController controller;
private GameContext context; // Ajout du GameContext
public MousePressHandler(CameraController controller, GameContext context) {
this.controller = controller;
this.context = context; // Utilisation du contexte
}
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
System.out.println("Clic droit détecté");
controller.setMouseDragStart(e.getPoint());
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
// Créer une nouvelle carte pour stocker les nouvelles positions logiques
Map<Point, HexagonTile> newHexagonMap = new HashMap<>();
for (Map.Entry<Point, HexagonTile> entry : context.hexagonMap.entrySet()) {
HexagonTile hexTile = entry.getValue();
Point newLogicalPosition = calculateNewLogicalPosition(hexTile.getLocation());
// Ajouter la nouvelle position logique dans la nouvelle carte
newHexagonMap.put(newLogicalPosition, hexTile);
}
// Remplacer l'ancienne carte après avoir terminé l'itération
Map<Point, HexagonTile> oldHexagonMap = context.hexagonMap; // Sauvegarder l'ancienne référence
context.hexagonMap = newHexagonMap; // Réassigner la nouvelle carte
oldHexagonMap.clear(); // Vider l'ancienne carte (maintenant non utilisée)
controller.resetMouseDragStart();
}
}
private Point calculateNewLogicalPosition(Point visualPosition) {
int logicalX = visualPosition.x / (int) (50 * 3 / 2);
int logicalY = visualPosition.y / (int) (Math.sqrt(3) * 50);
if (logicalX % 2 != 0) {
logicalY -= (int) (Math.sqrt(3) * 50 / 2);
}
return new Point(logicalX, logicalY);
}
}