package chbachman.armour.gui.element;
import java.util.List;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import chbachman.api.item.IModularItem;
import chbachman.api.registry.ModularItemRegistry;
import chbachman.api.upgrade.IUpgrade;
import chbachman.api.util.Array;
import chbachman.api.util.ImmutableArray;
import chbachman.armour.gui.recipe.RecipeContainer;
import cofh.lib.gui.GuiBase;
import cofh.lib.gui.GuiProps;
import cofh.lib.gui.element.TabBase;
import cofh.lib.render.RenderHelper;
public class TabCompatible extends TabBase {
RecipeContainer container;
Array<ElementItem> items;
ImmutableArray<IModularItem> modularItems = ModularItemRegistry.getItemList();
private int startIndex = 0;
private int maxItems = 6;
public static ResourceLocation GRID_TEXTURE = new ResourceLocation(GuiProps.PATH_ELEMENTS + "Slot_Grid_Augment.png");
public TabCompatible(GuiBase gui, RecipeContainer c) {
super(gui, 1);
this.container = c;
this.maxHeight = Math.min(modularItems.size(), maxItems) * 18 + 28;
this.maxWidth = 42;
items = new Array<ElementItem>();
for (IModularItem item : modularItems) {
ElementItem i = new ElementItem(this.gui, -this.gui.getGuiLeft() - 16, -this.gui.getGuiTop() - 16).setItem(item.getItem());
items.add(i);
this.addElement(i);
}
}
@Override
public void addTooltip(List<String> list) {
super.addTooltip(list);
if (!this.isFullyOpened()) {
list.add("Compatible?");
}
}
@Override
public void drawForeground(int x, int y) {
super.drawForeground(x, y);
if (!this.isVisible()) {
return;
}
if (this.isCompatible(container.item)) {
this.drawTabIcon("IconAccept");
} else {
this.drawTabIcon("IconCancel");
}
if (!this.isFullyOpened()) {
return;
}
for (int i = 0; i < Math.min(modularItems.size(), this.maxItems); i++) {
IModularItem modularItem = modularItems.get(startIndex + i);
String iconName;
if (this.isCompatible(modularItem)) {
iconName = "IconAccept";
} else {
iconName = "IconCancel";
}
this.gui.drawIcon(iconName, 21 + this.currentShiftX, 25 + i * 18 + this.currentShiftY, 1);
}
}
@Override
protected void drawBackground() {
super.drawBackground();
if (!this.isFullyOpened()) {
return;
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
RenderHelper.bindTexture(GRID_TEXTURE);
for (int i = 0; i < Math.min(modularItems.size(), this.maxItems); i++) {
this.drawSlots(0, i, 1);
}
}
@Override
public void setFullyOpen() {
super.setFullyOpen();
this.displaySlots(true);
}
@Override
public void toggleOpen() {
if (this.open) {
this.displaySlots(false);
}
super.toggleOpen();
}
int slotsBorderX1 = -2;
int slotsBorderY1 = 20;
@Override
public boolean onMouseWheel(int mouseX, int mouseY, int movement) {
if (!super.onMouseWheel(mouseX, mouseY, movement)) {
return false;
}
this.startIndex += Math.signum(movement);
if (startIndex > this.modularItems.size() - this.maxItems) {
this.startIndex = this.modularItems.size() - this.maxItems;
}
if (this.startIndex < 0) {
this.startIndex = 0;
}
displaySlots(this.open);
return true;
}
private void updateSlots() {
for (int i = startIndex; i < this.maxItems + startIndex; i++) {
if (i >= this.items.size) {
break;
}
this.items.get(i).setPosition(this.slotsBorderX1 + 6, this.slotsBorderY1 + 4 + 18 * i);
this.items.get(i).setVisible(true);
}
for (int i = 0; i < this.items.size; i++) {
if (i >= startIndex && i < startIndex + this.maxItems) {
continue;
}
// this.items.get(i).setPosition(-this.gui.getGuiLeft() - 16,
// -this.gui.getGuiTop() - 16);
this.items.get(i).setVisible(false);
}
}
public void displaySlots(boolean shouldDisplay) {
if (shouldDisplay) {
this.updateSlots();
}
}
private void drawSlots(int xOffset, int yOffset, int slots) {
this.gui.drawSizedTexturedModalRect(this.posXOffset() + this.slotsBorderX1 + 3 + 9 * xOffset, this.posY + this.slotsBorderY1 + 3 + 18 * yOffset, 0, 0, 18 * slots, 18, 96, 32);
}
boolean isCompatible(IModularItem item) {
if (this.container.recipe == null) {
return false;
}
IUpgrade upgrade = this.container.recipe.getRecipeOutput();
return upgrade.isCompatible(item, this.container.stack, item.getSlot());
}
}