package fr.iut_fbleau.Avalam.ui;
import fr.iut_fbleau.Avalam.Tower;
import javax.swing.*;
import java.awt.*;
/**
* La classe PieceLayer gère l'affichage des pions
* (sous forme de PieceButton) sur la grille.
*
* Elle s'occupe uniquement :
*
* - d'afficher les pièces
* - de positionner correctement les boutons
* - d'attacher un callback à chaque clic
*
*
* Aucune logique de jeu n'est réalisée ici.
*
* @author
* @version 1.0
*/
public class PieceLayer extends JPanel {
/**
* Constructeur.
* Initialise un panneau transparent prêt à recevoir des pions.
*/
public PieceLayer() {
setLayout(null);
setOpaque(false);
setBounds(0, 0, 800, 800);
}
/**
* Affiche la grille de tours sous forme de boutons.
*
* @param grid grille 9×9 des tours
* @param xBase offset X du plateau
* @param yBase offset Y du plateau
* @param spacing espacement entre cases
* @param size taille d'un pion
* @param clickCallback fonction appelée lors d’un clic sur un pion
*/
public void displayGrid(Tower[][] grid, int xBase, int yBase,
int spacing, int size,
java.util.function.BiConsumer clickCallback) {
removeAll();
for (int r = 0; r < 9; r++) {
for (int c = 0; c < 9; c++) {
Tower t = grid[r][c];
if (t != null) {
PieceButton pb = new PieceButton(
t.getColor().getSwingColor(),
t.getHeight(),
r, c
);
pb.setBounds(xBase + c * spacing, yBase + r * spacing, size, size);
int fr = r, fc = c;
pb.addActionListener(e -> clickCallback.accept(fr, fc));
add(pb);
}
}
}
revalidate();
repaint();
}
}