Aller au contenu principal

SlotGrid

Dessine les fonds de slots Apocaly (fond SLOT_BG + bordure SUB_BORDER 1 px) pour les slots d'un AbstractContainerMenu. Utilisé exclusivement dans ApocalyContainerScreen.

package ca.tawess123.apocalyinterface.api.widget;
Rôle de SlotGrid

SlotGrid ne gère pas les items — il dessine uniquement les fonds visuels. Les items sont rendus par vanilla AbstractContainerScreen après renderBg(). SlotGrid doit être appelé dans buildLayout pour que ses fonds apparaissent sous les items vanilla.


Builder

SlotGrid grid = SlotGrid.builder()
.slots(List<Slot> slots) // slots du menu (requis)
.screenOrigin(int leftPos, int topPos) // position du panneau (requis)
.visibleIf(boolean visible) // visibilité conditionnelle
.build();

Options du builder

OptionTypeDéfautDescription
.slots(List<Slot>)List<Slot>Liste des slots du menu. Généralement this.menu.slots. Requis.
.screenOrigin(int, int)int, intPosition X et Y du coin supérieur gauche du panneau dans l'écran. Utiliser this.leftPos, this.topPos. Requis.
.visibleIf(boolean)booleantrueMasque la grille si false.

Hauteur calculée

hauteur = maxY(slots) - minY(slots) + 18 px (hauteur d'un slot)

Calculée à partir des positions déclarées dans le AbstractContainerMenu.


Exemple

// Dans ApocalyContainerScreen.buildLayout(Row root) :
root.add(SlotGrid.builder()
.slots(this.menu.slots)
.screenOrigin(this.leftPos, this.topPos)
.build());

Pour que cela fonctionne, les slots doivent avoir des positions correctes dans le menu. Voir la recette marchand à slots pour un exemple complet avec AbstractContainerMenu et DeferredRegister<MenuType>.


Positionnement des slots dans le menu

Les positions slot.x et slot.y sont relatives au coin supérieur gauche du panneau (leftPos, topPos). SlotGrid les lit et dessine les fonds à (leftPos + slot.x - 1, topPos + slot.y - 1).

// Dans AbstractContainerMenu — positions relatives au panneau
static final int SLOT_ORIGIN_X = 11; // PANEL_MARGIN(10) + 1
static final int SLOT_ORIGIN_Y = 32; // après header + divider + gap
static final int SLOT_STRIDE = 20; // 18 px slot + 2 px marge

for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
addSlot(new Slot(container,
row * 3 + col,
SLOT_ORIGIN_X + col * SLOT_STRIDE,
SLOT_ORIGIN_Y + row * SLOT_STRIDE));
}
}

Voir aussi