Tile par rapport a la base de donnée + fix rotation tuile
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
package controller;
|
||||
|
||||
import model.Tile;
|
||||
import model.TileDatabaseManager;
|
||||
import view.HexagonTile;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.Point;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -15,19 +17,31 @@ public class GameController implements TilePlacer {
|
||||
private Tile nextTile;
|
||||
private HexagonTile nextTilePreview;
|
||||
private GameContext gameContext;
|
||||
private TileDatabaseManager dbManager;
|
||||
private List<Tile> currentTiles;
|
||||
private int tileIndex;
|
||||
|
||||
public GameController(GameContext gameContext, JPanel gridPanel, Tile nextTile, HexagonTile nextTilePreview) {
|
||||
public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview) {
|
||||
this.gameContext = gameContext;
|
||||
this.gridPanel = gridPanel;
|
||||
this.hexagonMap = gameContext.getHexagonMap();
|
||||
this.availablePositions = gameContext.getAvailablePositions();
|
||||
this.nextTile = nextTile;
|
||||
this.nextTilePreview = nextTilePreview;
|
||||
|
||||
// Mettre à jour la preview initiale
|
||||
this.dbManager = new TileDatabaseManager();
|
||||
this.tileIndex = 0;
|
||||
|
||||
loadSeries(1); // Charger la série par défaut (ex. série 1)
|
||||
updatePreview();
|
||||
}
|
||||
|
||||
public void loadSeries(int idSeries) {
|
||||
currentTiles = dbManager.getTilesBySeries(idSeries);
|
||||
tileIndex = 0;
|
||||
System.out.println("Série " + idSeries + " chargée avec " + currentTiles.size() + " tuiles.");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void placeTile(Point position) {
|
||||
if (availablePositions.contains(position)) {
|
||||
@@ -37,7 +51,9 @@ public class GameController implements TilePlacer {
|
||||
return;
|
||||
}
|
||||
|
||||
hexTile.setTile(nextTile);
|
||||
System.out.println("Placement de la tuile avec ID : " + (nextTile != null ? nextTile.getId() : "null") + " à la position : " + position);
|
||||
|
||||
hexTile.setTile(nextTile); // Place la tuile actuelle
|
||||
gridPanel.revalidate();
|
||||
gridPanel.repaint();
|
||||
|
||||
@@ -52,32 +68,52 @@ public class GameController implements TilePlacer {
|
||||
}
|
||||
|
||||
gameContext.repaintGrid(gridPanel);
|
||||
generateNextTile();
|
||||
generateNextTile(); // Génère la tuile suivante
|
||||
}
|
||||
}
|
||||
|
||||
public void initializeGame(CameraController cameraController) {
|
||||
Tile initialTile = generateRandomTile();
|
||||
|
||||
|
||||
public void initializeGame(CameraController cameraController) {
|
||||
generateNextTile(); // Génère la première tuile et assigne une tuile valide à `nextTile`
|
||||
|
||||
Tile initialTile = getNextTile(); // Récupère la tuile générée
|
||||
if (initialTile == null) {
|
||||
System.out.println("Erreur : aucune tuile initiale générée.");
|
||||
return; // Arrête l'initialisation si aucune tuile n'a été générée
|
||||
}
|
||||
|
||||
System.out.println("ID de la tuile initiale générée : " + initialTile.getId()); // Affiche l'ID de la tuile initiale
|
||||
|
||||
int centerX = gridPanel.getPreferredSize().width / 2;
|
||||
int centerY = gridPanel.getPreferredSize().height / 2;
|
||||
|
||||
|
||||
Point initialPosition = new Point(0, 0);
|
||||
initialPosition.setLocation(centerX / 50, centerY / 50);
|
||||
|
||||
placeInitialTile(initialPosition, cameraController, initialTile);
|
||||
initialPosition.setLocation(centerX / 50, centerY / 50); // Calcule la position centrale
|
||||
|
||||
placeInitialTile(initialPosition, cameraController, initialTile); // Place la première tuile
|
||||
generateNextTile();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void placeInitialTile(Point position, CameraController cameraController, Tile tile) {
|
||||
addHexagonTile(position, gridPanel, 50, cameraController, tile);
|
||||
availablePositions.remove(position);
|
||||
|
||||
if (tile == null) {
|
||||
System.out.println("Erreur : tuile initiale non définie.");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Placement de la tuile initiale avec ID : " + tile.getId() + " à la position : " + position);
|
||||
|
||||
addHexagonTile(position, gridPanel, 50, cameraController, tile); // Place la première tuile
|
||||
availablePositions.remove(position); // Marque la position comme occupée
|
||||
|
||||
Point[] adjacentPositions = getAdjacentPositions(position);
|
||||
for (Point adj : adjacentPositions) {
|
||||
if (!hexagonMap.containsKey(adj)) {
|
||||
availablePositions.add(adj);
|
||||
addHexagonTile(adj, gridPanel, 50, cameraController, null);
|
||||
addHexagonTile(adj, gridPanel, 50, cameraController, null); // Placeholder vide pour les positions adjacentes
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -87,44 +123,68 @@ public class GameController implements TilePlacer {
|
||||
System.out.println("Erreur : position ou panel est null");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int xOffset = position.x * (int) (hexSize * 3 / 2);
|
||||
int yOffset = position.y * (int) (Math.sqrt(3) * hexSize);
|
||||
|
||||
|
||||
if (cameraController != null) {
|
||||
Point viewOffset = cameraController.getViewOffset();
|
||||
xOffset += viewOffset.x;
|
||||
yOffset += viewOffset.y;
|
||||
}
|
||||
|
||||
|
||||
if (position.x % 2 != 0) {
|
||||
yOffset += (int) (Math.sqrt(3) * hexSize / 2);
|
||||
}
|
||||
|
||||
HexagonTile hexTile = new HexagonTile(position);
|
||||
|
||||
boolean isPlaceholder = (tile == null); // Si tile est null, c'est un placeholder
|
||||
HexagonTile hexTile = new HexagonTile(position, isPlaceholder);
|
||||
|
||||
if (tile != null) {
|
||||
hexTile.setTile(tile);
|
||||
} else {
|
||||
System.out.println("Aucun tile n'a été fourni pour cette position : " + position);
|
||||
}
|
||||
|
||||
|
||||
hexTile.setBounds(xOffset, yOffset, hexSize, hexSize);
|
||||
hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions));
|
||||
|
||||
|
||||
hexagonMap.put(position, hexTile);
|
||||
panel.add(hexTile);
|
||||
panel.revalidate();
|
||||
panel.repaint();
|
||||
}
|
||||
|
||||
|
||||
public void generateNextTile() {
|
||||
nextTile = new Tile();
|
||||
updatePreview();
|
||||
if (tileIndex < currentTiles.size()) {
|
||||
nextTile = currentTiles.get(tileIndex++);
|
||||
System.out.println("Génération de la prochaine tuile avec ID : " + nextTile.getId() + " (index " + tileIndex + ")");
|
||||
updatePreview(); // Met à jour l'aperçu de la tuile suivante
|
||||
} else {
|
||||
nextTile = null; // Fin de la série, plus de tuiles à placer
|
||||
updatePreview(); // Met à jour l'aperçu pour refléter l'absence de prochaine tuile
|
||||
System.out.println("Fin de la série. Plus de tuiles à placer.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void updatePreview() {
|
||||
nextTilePreview.setTile(nextTile);
|
||||
nextTilePreview.repaint();
|
||||
if (nextTilePreview != null) {
|
||||
if (nextTile != null) {
|
||||
nextTilePreview.setTile(nextTile); // Met à jour avec une tuile valide
|
||||
} else {
|
||||
nextTilePreview.setTile(null); // Affiche un placeholder ou un message si `nextTile` est null
|
||||
}
|
||||
nextTilePreview.repaint();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Tile getNextTile() {
|
||||
return nextTile;
|
||||
}
|
||||
|
||||
private Point[] getAdjacentPositions(Point position) {
|
||||
@@ -148,12 +208,4 @@ public class GameController implements TilePlacer {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private Tile generateRandomTile() {
|
||||
return new Tile();
|
||||
}
|
||||
|
||||
public Tile getNextTile() {
|
||||
return nextTile;
|
||||
}
|
||||
}
|
||||
|
@@ -10,6 +10,8 @@ public class MouseWheelController implements MouseWheelListener {
|
||||
|
||||
private HexagonTile previewTile;
|
||||
private GameController gameController;
|
||||
private long lastRotationTime = 0; // Stocke le temps de la dernière rotation
|
||||
private static final int ROTATION_DELAY = 100; // Délai minimum en millisecondes entre chaque rotation
|
||||
|
||||
public MouseWheelController(HexagonTile previewTile, GameController gameController) {
|
||||
this.previewTile = previewTile;
|
||||
@@ -18,14 +20,21 @@ public class MouseWheelController implements MouseWheelListener {
|
||||
|
||||
@Override
|
||||
public void mouseWheelMoved(MouseWheelEvent e) {
|
||||
Tile nextTile = gameController.getNextTile();
|
||||
long currentTime = System.currentTimeMillis();
|
||||
|
||||
if (e.getWheelRotation() < 0) {
|
||||
nextTile.rotateClockwise();
|
||||
} else if (e.getWheelRotation() > 0) {
|
||||
nextTile.rotateClockwise();
|
||||
// Si le délai entre les rotations est respecté, on procède à la rotation
|
||||
if (currentTime - lastRotationTime >= ROTATION_DELAY) {
|
||||
Tile nextTile = gameController.getNextTile();
|
||||
if (nextTile != null) {
|
||||
if (e.getWheelRotation() < 0) {
|
||||
nextTile.rotateClockwise();
|
||||
} else if (e.getWheelRotation() > 0) {
|
||||
nextTile.rotateCounterClockwise();
|
||||
}
|
||||
|
||||
previewTile.repaint(); // Mettre à jour l'aperçu avec la nouvelle rotation
|
||||
lastRotationTime = currentTime; // Mise à jour du temps de la dernière rotation
|
||||
}
|
||||
}
|
||||
|
||||
previewTile.repaint(); // Mettre à jour l'aperçu avec la nouvelle rotation
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user