package openmods.gui; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.inventory.Container; import openmods.gui.component.BaseComposite; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; public abstract class ComponentGui extends GuiContainer { protected final BaseComposite root; public ComponentGui(Container container, int width, int height) { super(container); this.xSize = width; this.ySize = height; root = createRoot(); } protected abstract BaseComposite createRoot(); @Override public void updateScreen() { super.updateScreen(); if (root.isTicking()) root.tick(); } @Override protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); if (root.isMouseOver(x - this.guiLeft, y - this.guiTop)) root.mouseDown(x - this.guiLeft, y - this.guiTop, button); } @Override protected void mouseMovedOrUp(int x, int y, int button) { super.mouseMovedOrUp(x, y, button); if (root.isMouseOver(x - this.guiLeft, y - this.guiTop)) { if (button >= 0) root.mouseUp(x - this.guiLeft, y - this.guiTop, button); } } @Override protected void mouseClickMove(int x, int y, int button, long time) { super.mouseClickMove(x, y, button, time); if (root.isMouseOver(x - this.guiLeft, y - this.guiTop)) root.mouseDrag(x - this.guiLeft, y - this.guiTop, button, time); } @Override protected void keyTyped(char par1, int par2) { super.keyTyped(par1, par2); root.keyTyped(par1, par2); } public void preRender(float mouseX, float mouseY) {} public void postRender(int mouseX, int mouseY) {} @Override protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { preRender(mouseX, mouseY); GL11.glPushMatrix(); GL11.glTranslated(this.guiLeft, this.guiTop, 0); root.render(this.mc, 0, 0, mouseX - this.guiLeft, mouseY - this.guiTop); GL11.glPopMatrix(); } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { postRender(mouseX, mouseY); } @Override public void drawScreen(int par1, int par2, float par3) { super.drawScreen(par1, par2, par3); prepareRenderState(); GL11.glPushMatrix(); root.renderOverlay(this.mc, this.guiLeft, this.guiTop, par1 - this.guiLeft, par2 - this.guiTop); GL11.glPopMatrix(); restoreRenderState(); } protected void prepareRenderState() { GL11.glDisable(GL12.GL_RESCALE_NORMAL); RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_DEPTH_TEST); } protected void restoreRenderState() { GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_DEPTH_TEST); RenderHelper.enableStandardItemLighting(); } }