package hunternif.mc.atlas.client.gui; import hunternif.mc.atlas.client.Textures; import hunternif.mc.atlas.client.gui.core.GuiComponentButton; import hunternif.mc.atlas.util.AtlasRenderHelper; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import org.lwjgl.opengl.GL11; public class GuiArrowButton extends GuiComponentButton { private static final int WIDTH = 12; private static final int HEIGHT = 12; private static final int IMAGE_WIDTH = 24; private static final int IMAGE_HEIGHT = 24; public enum ArrowDirection { UP("Up"), DOWN("Down"), LEFT("Left"), RIGHT("Right"); public final String description; ArrowDirection(String text) { this.description = text; } } private final ArrowDirection direction; private GuiArrowButton(ArrowDirection direction) { setSize(WIDTH, HEIGHT); this.direction = direction; } static GuiArrowButton up() { return new GuiArrowButton(ArrowDirection.UP); } static GuiArrowButton down() { return new GuiArrowButton(ArrowDirection.DOWN); } static GuiArrowButton left() { return new GuiArrowButton(ArrowDirection.LEFT); } static GuiArrowButton right() { return new GuiArrowButton(ArrowDirection.RIGHT); } @Override public void drawScreen(int mouseX, int mouseY, float partialTick) { RenderHelper.disableStandardItemLighting(); GlStateManager.enableBlend(); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); int x = getGuiX(), y = getGuiY(); if (isMouseOver) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); } else { // Fade out when the mouse is far from them: int distanceSq = (mouseX - x - getWidth()/2)*(mouseX - x - getWidth()/2) + (mouseY - y - getHeight()/2)*(mouseY - y - getHeight()/2); double alpha = distanceSq < 400 ? 0.5 : Math.pow((double)distanceSq, -0.28); GlStateManager.color(1, 1, 1, (float)alpha); } int u = 0, v = 0; switch (direction) { case LEFT: u = 0; v = 0; break; case RIGHT: u = 0; v = 12; break; case UP: u = 12; v = 0; break; case DOWN: u = 12; v = 12; break; } AtlasRenderHelper.drawTexturedRect(Textures.BTN_ARROWS, x, y, u, v, WIDTH, HEIGHT, IMAGE_WIDTH, IMAGE_HEIGHT); GlStateManager.disableBlend(); } }