75 lines
1.9 KiB
Java
75 lines
1.9 KiB
Java
package fr.iut_fbleau.Avalam.ui;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* La classe <code>HighlightLayer</code> est responsable de l'affichage des
|
|
* cases de déplacement autorisées sous forme de cercles verts.
|
|
*
|
|
* Elle n'interagit pas directement avec les pièces, mais se contente
|
|
* de dessiner en arrière-plan selon une liste de positions légales.
|
|
*
|
|
* @author
|
|
* @version 1.0
|
|
*/
|
|
public class HighlightLayer extends JPanel {
|
|
|
|
private int xBase, yBase, spacing, size;
|
|
|
|
/** Liste des positions jouables (cases en vert). */
|
|
private List<Point> legalMoves;
|
|
|
|
/**
|
|
* Constructeur.
|
|
*
|
|
* @param xBase position X de base du plateau
|
|
* @param yBase position Y de base du plateau
|
|
* @param spacing espacement entre cases
|
|
* @param size taille des pions
|
|
*/
|
|
public HighlightLayer(int xBase, int yBase, int spacing, int size) {
|
|
this.xBase = xBase;
|
|
this.yBase = yBase;
|
|
this.spacing = spacing;
|
|
this.size = size;
|
|
|
|
setOpaque(false);
|
|
setBounds(0, 0, 800, 800);
|
|
}
|
|
|
|
/**
|
|
* Définit la liste des cases légales à afficher.
|
|
*/
|
|
public void setLegalMoves(List<Point> moves) {
|
|
this.legalMoves = moves;
|
|
repaint();
|
|
}
|
|
|
|
/**
|
|
* Dessine les cercles verts autour des cases autorisées.
|
|
*/
|
|
@Override
|
|
protected void paintComponent(Graphics g) {
|
|
super.paintComponent(g);
|
|
|
|
if (legalMoves == null) return;
|
|
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
g2.setColor(new Color(0, 255, 0, 120));
|
|
|
|
for (Point p : legalMoves) {
|
|
|
|
int r = p.x;
|
|
int c = p.y;
|
|
|
|
int x = xBase + c * spacing;
|
|
int y = yBase + r * spacing;
|
|
|
|
int highlight = size + 20; // Cercle plus grand que le pion
|
|
g2.fillOval(x - 10, y - 10, highlight, highlight);
|
|
}
|
|
}
|
|
}
|