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 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 resolveSlots(int rows, int cols) { List 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); } }