56 lines
1.7 KiB
Java
56 lines
1.7 KiB
Java
package fr.luc.bettermcguis.pattern;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Représente un masque de sélection de slots basé sur des lignes de caractères binaires (0 et 1 ou caractères au choix).
|
|
*/
|
|
public class GuiMask {
|
|
|
|
private final List<String> lines = new ArrayList<>();
|
|
private final char activeChar;
|
|
|
|
/**
|
|
* Crée un masque avec '1' comme caractère actif par défaut.
|
|
*/
|
|
public GuiMask(String... lines) {
|
|
this('1', lines);
|
|
}
|
|
|
|
/**
|
|
* Crée un masque en précisant le caractère actif.
|
|
*
|
|
* @param activeChar Le caractère représentant un slot sélectionné.
|
|
* @param lines Les lignes du masque.
|
|
*/
|
|
public GuiMask(char activeChar, String... lines) {
|
|
this.activeChar = activeChar;
|
|
if (lines != null) {
|
|
this.lines.addAll(Arrays.asList(lines));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Résout la liste des slots sélectionnés par ce masque pour des dimensions données.
|
|
*
|
|
* @param rows Le nombre de lignes.
|
|
* @param cols Le nombre de colonnes (ex: 9).
|
|
* @return La liste des slots actifs (0-indexés).
|
|
*/
|
|
public List<Integer> resolveSlots(int rows, int cols) {
|
|
List<Integer> slots = new ArrayList<>();
|
|
for (int r = 0; r < Math.min(lines.size(), rows); r++) {
|
|
String line = lines.get(r);
|
|
for (int c = 0; c < Math.min(line.length(), cols); c++) {
|
|
if (line.charAt(c) == activeChar) {
|
|
slots.add(r * cols + c);
|
|
}
|
|
}
|
|
}
|
|
return Collections.unmodifiableList(slots);
|
|
}
|
|
}
|