diff options
Diffstat (limited to 'src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java')
-rw-r--r-- | src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java index 774d936..7a5c8f3 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java @@ -1,4 +1,201 @@ package io.polyfrost.oneconfig.gui.elements; +import io.polyfrost.oneconfig.renderer.Renderer; +import io.polyfrost.oneconfig.themes.Theme; +import io.polyfrost.oneconfig.themes.ThemeElement; +import io.polyfrost.oneconfig.themes.Themes; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import org.jetbrains.annotations.NotNull; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +import java.awt.*; + +@SuppressWarnings("unused") public class OCBlock { + private static final Theme theme = Themes.getActiveTheme(); + private static final Minecraft mc = Minecraft.getMinecraft(); + public static ScaledResolution resolution = new ScaledResolution(mc); + private Color color; + private String text; + private final boolean bold; + private int width, height; + private ThemeElement element; + private boolean clicked = false; + private boolean rightClicked = false; + private int mouseX, mouseY; + private boolean hovered; + private int x, y; + + /** + * Create a new basic element. + * @param color color of the element + * @param width width of the element + * @param height height of the element + */ + public OCBlock(int color, int width, int height) { + this(null, false, color, width, height); + } + + /** + * Create a new element with the specified text, and automatic width/height + padding. + * @param text text to use + * @param bold weather or not to use bold text + * @param color color of the background to use + */ + public OCBlock(@NotNull String text, boolean bold, int color) { + this(text, bold, color, theme.getFont().getWidth(text) + 6, theme.getFont().getHeight() + 4); + } + + /** + * Create a new element with the specified text, and custom width/height. + * @param text text to use + * @param bold weather or not to use bold text + * @param color color of the background to use + */ + public OCBlock(String text, boolean bold, int color, int width, int height) { + this.text = text; + this.bold = bold; + this.color = Renderer.getColorFromInt(color); + this.width = width; + this.height = height; + } + + /** + * Create a new Element with the specified image. + * @param element element to use + * @param colorMask color mast to use (-1 for default) + */ + public OCBlock(ThemeElement element, int colorMask, int width, int height) { + this.element = element; + this.color = Renderer.getColorFromInt(colorMask); + this.width = width; + this.height = height; + this.bold = false; + } + + /** + * Draw the element at the specified coordinates. + */ + public void draw(int x, int y) { + this.x = x; + this.y = y; + if(element != null) { + Gui.drawRect(x, y, x + width, y + height, color.getRGB()); + GlStateManager.color(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); + theme.getTextureManager().draw(element, x, y, width, height); + } + if(text == null) { + Gui.drawRect(x, y, x + width, y + height, color.getRGB()); + } + else { + Gui.drawRect(x, y, x + width, y + height, color.getRGB()); + if(bold) { + theme.getBoldFont().drawString(text, x + 3, y + 2, 1f, 1f, -1); + } else { + theme.getFont().drawString(text, x + 3, y + 2, 1.1f, 1f, -1); + } + } + + } + + /** + * Update this elements click, key and hover status. Call this method at the end of your 'draw' function, if overrided. + */ + public void update() { + resolution = new ScaledResolution(mc); + int mouseX = Mouse.getX() / resolution.getScaleFactor(); + int mouseY = Math.abs((Mouse.getY() / resolution.getScaleFactor()) - resolution.getScaledHeight()); + hovered = mouseX > x && mouseY > y && mouseX < x + width && mouseY < y + height; + if(hovered) { + onHover(); + if (Mouse.isButtonDown(0) && !clicked) { + onClick(0); + } + clicked = Mouse.isButtonDown(0); + + if (Mouse.isButtonDown(1) && !rightClicked) { + onClick(1); + } + rightClicked = Mouse.isButtonDown(1); + onKeyPress(Keyboard.getEventKey()); + } + } + + /** + * Draw the element with the specified coordinates, width and height. + */ + public void draw(int x, int y, int width, int height) { + this.width = width; + this.height = height; + draw(x, y); + } + + + /** + * Override this method to set a function when a key is pressed while this element is hovered. + * @param keyCode key code that was pressed (check org.lwjgl.Keyboard for keymap) + */ + public void onKeyPress(int keyCode) { + + } + + /** + * Override this method to set a function when the element is hovered. + * @param button the button that was pressed (0 is left, 1 is right) + */ + public void onClick(int button) { + + } + + + /** + * Override this method to set a function when the element is hovered. + */ + public void onHover() { + + } + + public void setText(String text) { + this.text = text; + } + + public void setWidth(int width) { + this.width = width; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getHeight() { + return height; + } + + public Color getColor() { + return color; + } + + public int getWidth() { + return width; + } + + public String getText() { + return text; + } + + public void setColor(Color color) { + this.color = color; + } + + public boolean isHovered() { + return hovered; + } + + public boolean isClicked() { + return clicked; + } } |