package buildcraftAdditions.client.gui;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang3.text.WordUtils;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.SoundHandler;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Container;
import net.minecraft.util.ResourceLocation;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import buildcraftAdditions.client.gui.widgets.WidgetBase;
import buildcraftAdditions.utils.RenderUtils;
import buildcraftAdditions.utils.Utils;
/**
* Copyright (c) 2014-2015, AEnterprise
* http://buildcraftadditions.wordpress.com/
* Buildcraft Additions is distributed under the terms of GNU GPL v3.0
* Please check the contents of the license located in
* http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/
*/
@SideOnly(Side.CLIENT)
public abstract class GuiBase extends GuiContainer {
public static final ResourceLocation PLAYER_INV_TEXTURE = new ResourceLocation("bcadditions:textures/gui/guiPlayerInv.png");
public final List<WidgetBase> widgets = new ArrayList<WidgetBase>();
public final int xSizePlayerInv = 176;
public final int ySizePlayerInv = 100;
private final ResourceLocation texture;
public int titleXoffset = 5;
public int titleYoffset = 8;
public boolean shouldDrawWidgets = true;
public int textColor = 0x003A81;
public boolean centerTitle = true;
public int tileGuiYSize = 0;
private boolean drawPlayerInv = false;
public GuiBase(Container container) {
super(container);
texture = texture();
xSize = getXSize();
ySize = getYSize();
tileGuiYSize = getYSize();
}
public GuiBase setDrawPlayerInv(boolean draw) {
drawPlayerInv = draw;
if (draw)
ySize = getYSize() + ySizePlayerInv;
return this;
}
public GuiBase setTitleXOffset(int offset) {
titleXoffset = offset;
return this;
}
public GuiBase setTitleYOffset(int offset) {
titleYoffset = offset;
return this;
}
public GuiBase setTextColor(int color) {
textColor = color;
return this;
}
public GuiBase setCenterTitle(boolean value) {
centerTitle = value;
return this;
}
public GuiBase setDrawWidgets(boolean value) {
shouldDrawWidgets = value;
return this;
}
public abstract ResourceLocation texture();
public abstract int getXSize();
public abstract int getYSize();
public abstract String getInventoryName();
public abstract void initialize();
public SoundHandler soundHandler() {
return Minecraft.getMinecraft().getSoundHandler();
}
public void bindTexture(ResourceLocation texture) {
RenderUtils.bindTexture(texture);
}
public void drawString(String text, int x, int y) {
drawString(text, x, y, textColor);
}
public void drawString(String text, int x, int y, int color) {
fontRendererObj.drawString(text, x, y, color);
}
public void widgetActionPerformed(WidgetBase widget) {
}
public boolean hasCustomName() {
return false;
}
public String getCustomName() {
return null;
}
public void addWidget(WidgetBase widget) {
widgets.add(widget);
}
@Override
public void initGui() {
super.initGui();
if (drawPlayerInv)
guiTop = (height - ySize) / 2;
initialize();
}
@Override
protected void drawGuiContainerBackgroundLayer(float f, int x, int y) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
bindTexture(texture());
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, tileGuiYSize);
if (drawPlayerInv) {
bindTexture(PLAYER_INV_TEXTURE);
drawTexturedModalRect(guiLeft, guiTop + tileGuiYSize, 0, 0, xSizePlayerInv, ySizePlayerInv);
}
bindTexture(texture());
drawBackgroundPreWidgets(f, x, y);
if (shouldDrawWidgets)
drawWidgets(x, y);
bindTexture(texture());
drawBackgroundPostWidgets(f, x, y);
}
public void drawBackgroundPreWidgets(float f, int x, int y) {
}
public void drawBackgroundPostWidgets(float f, int x, int y) {
}
protected void drawWidgets(int x, int y) {
for (WidgetBase widget : widgets) {
widget.render(x, y);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
}
@Override
protected void drawGuiContainerForegroundLayer(int x, int y) {
if (drawPlayerInv)
drawString(Utils.localize("container.inventory"), 8, tileGuiYSize + 6, textColor);
String name = hasCustomName() && getCustomName() != null ? getCustomName() : Utils.localize(String.format("gui.%s.name", getInventoryName()));
drawString(name, centerTitle ? (int) (getXSize() / 2 - name.length() * 2.5) : titleXoffset, titleYoffset, textColor);
drawForegroundExtra(x, y);
}
public void drawForegroundExtra(int x, int y) {
}
@Override
public void setWorldAndResolution(Minecraft minecraft, int width, int height) {
widgets.clear();
super.setWorldAndResolution(minecraft, width, height);
}
@Override
protected void mouseClicked(int x, int y, int button) {
super.mouseClicked(x, y, button);
for (WidgetBase widget : widgets) {
if (widget.getBounds().contains(x, y) && widget.enabled)
widget.onWidgetClicked(x, y, button);
}
}
@Override
public void drawScreen(int x, int y, float f) {
super.drawScreen(x, y, f);
List<String> tooltips = new ArrayList<String>();
for (WidgetBase widget : widgets)
if (widget.getBounds().contains(x, y))
widget.addTooltip(x, y, tooltips, isShiftKeyDown());
if (!tooltips.isEmpty()) {
List<String> finalLines = new ArrayList<String>();
for (String line : tooltips) {
String[] lines = WordUtils.wrap(line, 30).split(System.getProperty("line.separator"));
Collections.addAll(finalLines, lines);
}
drawHoveringText(finalLines, x, y, fontRendererObj);
}
}
public void redraw() {
widgets.clear();
buttonList.clear();
initialize();
}
public int guiLeft() {
return guiLeft;
}
public int guiTop() {
return guiTop;
}
}