package org.halvors.electrometrics.client.gui;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import org.halvors.electrometrics.client.gui.component.IGuiComponent;
import org.halvors.electrometrics.common.base.ResourceType;
import org.halvors.electrometrics.common.component.IComponent;
import org.halvors.electrometrics.common.component.IComponentContainer;
import org.halvors.electrometrics.common.tile.TileEntity;
import org.halvors.electrometrics.common.util.ResourceUtils;
import org.lwjgl.opengl.GL11;
import java.util.List;
@SideOnly(Side.CLIENT)
public abstract class GuiComponentContainerScreen extends GuiScreen implements IComponentContainer, IGui {
private static final Minecraft game = Minecraft.getMinecraft();
protected final ResourceLocation defaultResource = ResourceUtils.getResource(ResourceType.GUI, "Screen.png");
protected final TileEntity tileEntity;
// This is not present by default in GuiComponentContainerScreen as it is in GuiComponentContainerInventoryScreen.
protected final int xSize = 176;
protected final int ySize = 100;
private int guiLeft;
private int guiTop;
protected GuiComponentContainerScreen(TileEntity tileEntity) {
this.tileEntity = tileEntity;
}
@Override
public boolean doesGuiPauseGame() {
return false;
}
@Override
public void initGui() {
super.initGui();
guiLeft = (width - xSize) / 2;
guiTop = (height - ySize) / 2;
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTick) {
drawDefaultBackground();
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
drawGuiScreenBackgroundLayer(partialTick, mouseX, mouseY);
super.drawScreen(mouseX, mouseY, partialTick);
GL11.glTranslatef(guiLeft, guiTop, 0);
drawGuiScreenForegroundLayer(mouseX, mouseY);
}
public float getNeededScale(String text, int maxX) {
int length = fontRendererObj.getStringWidth(text);
if (length <= maxX) {
return 1;
} else {
return (float) maxX / length;
}
}
public void renderScaledText(String text, int x, int y, int color, int maxX) {
int length = fontRendererObj.getStringWidth(text);
if (length <= maxX) {
fontRendererObj.drawString(text, x, y, color);
} else {
float scale = (float) maxX / length;
float reverse = 1 / scale;
float yAdd = 4 - (scale * 8) / 2F;
GL11.glPushMatrix();
GL11.glScalef(scale, scale, scale);
fontRendererObj.drawString(text, (int) (x * reverse), (int) ((y * reverse) + yAdd), color);
GL11.glPopMatrix();
}
}
protected void drawGuiScreenBackgroundLayer(float partialTick, int mouseX, int mouseY) {
game.renderEngine.bindTexture(defaultResource);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;
drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize);
int xAxis = mouseX - guiWidth;
int yAxis = mouseY - guiHeight;
for (IComponent component : components) {
if (component instanceof IGuiComponent) {
IGuiComponent guiComponent = (IGuiComponent) component;
guiComponent.renderBackground(xAxis, yAxis, guiWidth, guiHeight, xSize, ySize);
}
}
}
protected void drawGuiScreenForegroundLayer(int mouseX, int mouseY) {
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;
drawString(tileEntity.getInventoryName(), (xSize / 2) - (fontRendererObj.getStringWidth(tileEntity.getInventoryName()) / 2), 6);
int xAxis = mouseX - guiWidth;
int yAxis = mouseY - guiHeight;
for (IComponent component : components) {
if (component instanceof IGuiComponent) {
IGuiComponent guiComponent = (IGuiComponent) component;
guiComponent.renderForeground(xAxis, yAxis, xSize, ySize);
}
}
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int button) {
int guiWidth = (width - xSize) / 2;
int guiHeight = (height - ySize) / 2;
int xAxis = mouseX - guiWidth;
int yAxis = mouseY - guiHeight;
for (IComponent component : components) {
if (component instanceof IGuiComponent) {
IGuiComponent guiComponent = (IGuiComponent) component;
guiComponent.preMouseClicked(xAxis, yAxis, xSize, ySize, button);
}
}
super.mouseClicked(mouseX, mouseY, button);
for (IComponent component : components) {
if (component instanceof IGuiComponent) {
IGuiComponent guiComponent = (IGuiComponent) component;
guiComponent.mouseClicked(xAxis, yAxis, xSize, ySize, button);
}
}
}
@Override
protected void mouseClickMove(int mouseX, int mouseY, int button, long ticks) {
super.mouseClickMove(mouseX, mouseY, button, ticks);
int xAxis = (mouseX - (width - xSize) / 2);
int yAxis = (mouseY - (height - ySize) / 2);
for (IComponent component : components) {
if (component instanceof IGuiComponent) {
IGuiComponent guiComponent = (IGuiComponent) component;
guiComponent.mouseClickMove(xAxis, yAxis, button, ticks);
}
}
}
@Override
protected void mouseReleased(int mouseX, int mouseY, int type) {
super.mouseReleased(mouseX, mouseY, type);
int xAxis = (mouseX - (width - xSize) / 2);
int yAxis = (mouseY - (height - ySize) / 2);
for (IComponent component : components) {
if (component instanceof IGuiComponent) {
IGuiComponent guiComponent = (IGuiComponent) component;
guiComponent.mouseReleased(xAxis, yAxis, type);
}
}
}
@Override
public void drawTexturedRect(int x, int y, int textureX, int textureY, int width, int height) {
super.drawTexturedModalRect(x, y, textureX, textureY, width, height);
}
@Override
public void drawTexturedRectFromIcon(int x, int y, IIcon icon, int width, int height) {
super.drawTexturedModelRectFromIcon(x, y, icon, width, height);
}
@Override
public void drawString(String text, int x, int y) {
fontRendererObj.drawString(text, x, y, 0x404040);
}
@Override
public void displayTooltip(String text, int x, int y) {
drawCreativeTabHoveringText(text, x, y);
}
@Override
public void displayTooltips(List<String> list, int xAxis, int yAxis) {
drawHoveringText(list, xAxis, yAxis);
}
@Override
public FontRenderer getFontRenderer() {
return fontRendererObj;
}
}