/**
* Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
* <p/>
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.core.lib.gui;
import java.util.ArrayList;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
public abstract class GuiAdvancedInterface extends GuiBuildCraft {
public ArrayList<AdvancedSlot> slots = new ArrayList<AdvancedSlot>();
public GuiAdvancedInterface(BuildCraftContainer container, IInventory inventory, ResourceLocation texture) {
super(container, inventory, texture);
}
public int getSlotIndexAtLocation(int i, int j) {
int x = i - guiLeft;
int y = j - guiTop;
for (int position = 0; position < slots.size(); ++position) {
AdvancedSlot s = slots.get(position);
if (s != null && x >= s.x && x <= s.x + 16 && y >= s.y && y <= s.y + 16) {
return position;
}
}
return -1;
}
public AdvancedSlot getSlotAtLocation(int i, int j) {
int id = getSlotIndexAtLocation(i, j);
if (id != -1) {
return slots.get(id);
} else {
return null;
}
}
private boolean isMouseOverSlot(AdvancedSlot slot, int mouseX, int mouseY) {
int realMouseX = mouseX - this.guiLeft;
int realMouseY = mouseY - this.guiTop;
return realMouseX >= slot.x - 1 && realMouseX < slot.x + 16 + 1 && realMouseY >= slot.y - 1 && realMouseY < slot.y + 16 + 1;
}
protected void drawSlotHighlight(AdvancedSlot slot, int mouseX, int mouseY) {
if (this.isMouseOverSlot(slot, mouseX, mouseY) && slot.shouldDrawHighlight()) {
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glColorMask(true, true, true, false);
this.drawGradientRect(guiLeft + slot.x, guiTop + slot.y, guiLeft + slot.x + 16, guiTop + slot.y + 16, -2130706433, -2130706433);
GL11.glColorMask(true, true, true, true);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST);
}
}
protected void drawBackgroundSlots(int mouseX, int mouseY) {
RenderHelper.enableGUIStandardItemLighting();
GL11.glPushMatrix();
GL11.glPushAttrib(GL11.GL_TRANSFORM_BIT);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
int i1 = 240;
int k1 = 240;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, i1 / 1.0F, k1 / 1.0F);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
if (slots != null) {
for (AdvancedSlot slot : slots) {
if (slot != null) {
slot.drawSprite(guiLeft, guiTop);
drawSlotHighlight(slot, mouseX, mouseY);
}
}
}
GL11.glPopAttrib();
GL11.glPopMatrix();
}
public void drawTooltipForSlotAt(int mouseX, int mouseY) {
AdvancedSlot slot = getSlotAtLocation(mouseX, mouseY);
if (slot != null) {
slot.drawTooltip(this, mouseX, mouseY);
RenderHelper.enableGUIStandardItemLighting();
}
}
public void drawTooltip(String caption, int mouseX, int mouseY) {
if (caption.length() > 0) {
int i2 = mouseX - guiLeft;
int k2 = mouseY - guiTop;
drawCreativeTabHoveringText(caption, i2, k2);
RenderHelper.enableGUIStandardItemLighting();
}
}
public static RenderItem getItemRenderer() {
return itemRender;
}
public int getXSize() {
return xSize;
}
public int getYSize() {
return ySize;
}
@Override
public void renderToolTip(ItemStack stack, int x, int y) {
super.renderToolTip(stack, x, y);
}
public void drawStack(ItemStack item, int x, int y) {
Minecraft mc = Minecraft.getMinecraft();
if (item != null) {
GL11.glEnable(GL11.GL_LIGHTING);
float prevZ = GuiAdvancedInterface.getItemRenderer().zLevel;
GuiAdvancedInterface.getItemRenderer().zLevel = 200F;
GuiAdvancedInterface.getItemRenderer().renderItemAndEffectIntoGUI(getFontRenderer(), mc.renderEngine, item, x, y);
GuiAdvancedInterface.getItemRenderer().renderItemOverlayIntoGUI(getFontRenderer(), mc.renderEngine, item, x, y);
GuiAdvancedInterface.getItemRenderer().zLevel = prevZ;
GL11.glDisable(GL11.GL_LIGHTING);
}
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
super.mouseClicked(mouseX, mouseY, mouseButton);
AdvancedSlot slot = getSlotAtLocation(mouseX, mouseY);
if (slot != null && slot.isDefined()) {
slotClicked(slot, mouseButton);
}
}
public void resetNullSlots(int size) {
slots.clear();
for (int i = 0; i < size; ++i) {
slots.add(null);
}
}
// TODO: Use this for all children of this class
protected void slotClicked(AdvancedSlot slot, int mouseButton) {
}
}