package mekanism.client.gui.element;
import java.awt.Rectangle;
import java.util.List;
import mekanism.api.ObfuscatedNames;
import mekanism.api.util.ReflectionUtils;
import mekanism.client.gui.IGuiWrapper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public abstract class GuiElement
{
public static Minecraft mc = Minecraft.getMinecraft();
public ResourceLocation RESOURCE;
public IGuiWrapper guiObj;
public ResourceLocation defaultLocation;
public GuiElement(ResourceLocation resource, IGuiWrapper gui, ResourceLocation def)
{
RESOURCE = resource;
guiObj = gui;
defaultLocation = def;
}
public void displayTooltip(String s, int xAxis, int yAxis)
{
guiObj.displayTooltip(s, xAxis, yAxis);
}
public void displayTooltips(List<String> list, int xAxis, int yAxis)
{
guiObj.displayTooltips(list, xAxis, yAxis);
}
public void offsetX(int xSize)
{
if(guiObj instanceof GuiContainer)
{
try {
int size = (Integer)ReflectionUtils.getPrivateValue(guiObj, GuiContainer.class, ObfuscatedNames.GuiContainer_xSize);
ReflectionUtils.setPrivateValue(guiObj, size + xSize, GuiContainer.class, ObfuscatedNames.GuiContainer_xSize);
} catch(Exception e) {
e.printStackTrace();
}
}
}
public void offsetY(int ySize)
{
if(guiObj instanceof GuiContainer)
{
try {
int size = (Integer)ReflectionUtils.getPrivateValue(guiObj, GuiContainer.class, ObfuscatedNames.GuiContainer_ySize);
ReflectionUtils.setPrivateValue(guiObj, size + ySize, GuiContainer.class, ObfuscatedNames.GuiContainer_ySize);
} catch(Exception e) {
e.printStackTrace();
}
}
}
public void offsetLeft(int guiLeft)
{
if(guiObj instanceof GuiContainer)
{
try {
int left = (Integer)ReflectionUtils.getPrivateValue(guiObj, GuiContainer.class, ObfuscatedNames.GuiContainer_guiLeft);
System.out.println(left + " " + guiLeft);
ReflectionUtils.setPrivateValue(guiObj, left + guiLeft, GuiContainer.class, ObfuscatedNames.GuiContainer_guiLeft);
} catch(Exception e) {
e.printStackTrace();
}
}
}
public void offsetTop(int guiTop)
{
if(guiObj instanceof GuiContainer)
{
try {
int top = (Integer)ReflectionUtils.getPrivateValue(guiObj, GuiContainer.class, ObfuscatedNames.GuiContainer_guiTop);
ReflectionUtils.setPrivateValue(guiObj, top + guiTop, GuiContainer.class, ObfuscatedNames.GuiContainer_guiTop);
} catch(Exception e) {
e.printStackTrace();
}
}
}
public void renderScaledText(String text, int x, int y, int color, int maxX)
{
int length = getFontRenderer().getStringWidth(text);
if(length <= maxX)
{
getFontRenderer().drawString(text, x, y, color);
}
else {
float scale = (float)maxX/length;
float reverse = 1/scale;
float yAdd = 4-(scale*8)/2F;
GlStateManager.pushMatrix();
GlStateManager.scale(scale, scale, scale);
getFontRenderer().drawString(text, (int)(x*reverse), (int)((y*reverse)+yAdd), color);
GlStateManager.popMatrix();
}
}
public FontRenderer getFontRenderer()
{
return guiObj.getFont();
}
public void mouseClickMove(int mouseX, int mouseY, int button, long ticks) {}
public void mouseReleased(int x, int y, int type) {}
public abstract Rectangle4i getBounds(int guiWidth, int guiHeight);
public abstract void renderBackground(int xAxis, int yAxis, int guiWidth, int guiHeight);
public abstract void renderForeground(int xAxis, int yAxis);
public abstract void preMouseClicked(int xAxis, int yAxis, int button);
public abstract void mouseClicked(int xAxis, int yAxis, int button);
public static interface IInfoHandler
{
public List<String> getInfo();
}
public static class Rectangle4i
{
public int x, y, width, height;
public Rectangle4i(int x, int y, int width, int height)
{
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public Rectangle toRectangle()
{
return new Rectangle(x, y, width, height);
}
}
}