Files
betterMcGuis/src/main/java/fr/luc/bettermcguis/pattern/GuiMask.java
T

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);
}
}