seppuku/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ColorComponent.java

146 lines
5.9 KiB
Java

package me.rigamortis.seppuku.api.gui.hud.component;
import me.rigamortis.seppuku.Seppuku;
import me.rigamortis.seppuku.api.texture.Texture;
import me.rigamortis.seppuku.api.util.ColorUtil;
import me.rigamortis.seppuku.api.util.RenderUtil;
import net.minecraft.client.Minecraft;
import java.awt.*;
public class ColorComponent extends TextComponent {
private Color currentColor;
private static final int BORDER = 1;
private static final int TEXT_BLOCK_PADDING = 1;
private static final int COLOR_SIZE = 7;
private String customDisplayValue;
private final Texture gearTexture;
private final Texture gearTextureEnabled;
public ColorComponent(String name, int defaultColor) {
super(name, String.valueOf(defaultColor), false);
this.currentColor = new Color(defaultColor);
this.displayValue = "#" + Integer.toHexString(this.currentColor.getRGB()).toLowerCase().substring(2);
this.gearTexture = new Texture("gear_wheel.png");
this.gearTextureEnabled = new Texture("gear_wheel-enabled.png");
this.setH(9);
}
public ColorComponent(String name, int defaultColor, String customDisplayValue) {
this(name, defaultColor);
this.customDisplayValue = customDisplayValue;
}
@Override
public void render(int mouseX, int mouseY, float partialTicks) {
//super.render(mouseX, mouseY, partialTicks);
/*if (this.focused) {
this.setH(50);
} else {
this.setH(9);
}*/
if (isMouseInside(mouseX, mouseY))
RenderUtil.drawGradientRect(this.getX(), this.getY(), this.getX() + this.getW(), this.getY() + this.getH(), 0x30909090, 0x00101010);
// draw bg rect
RenderUtil.drawRect(this.getX(), this.getY(), this.getX() + this.getW() - (this.focused ? 20 : 10), this.getY() + this.getH(), 0x45303030);
// draw color rect
RenderUtil.drawRect(this.getX() + BORDER, this.getY() + BORDER, this.getX() + BORDER + COLOR_SIZE, this.getY() + BORDER + COLOR_SIZE, ColorUtil.changeAlpha(this.currentColor.getRGB(), 0xFF));
// draw name / display value
String displayedName = this.getName();
if (this.focused) {
displayedName = this.displayValue;
} else if (customDisplayValue != null) {
displayedName = customDisplayValue;
} else if (this.getDisplayName() != null) {
displayedName = this.getDisplayName();
}
Minecraft.getMinecraft().fontRenderer.drawString(displayedName, (int) this.getX() + BORDER + COLOR_SIZE + BORDER, (int) this.getY() + BORDER, this.focused ? 0xFFFFFFFF : 0xFFAAAAAA);
// draw bg rect behind right button
RenderUtil.drawRect(this.getX() + this.getW() - (this.focused ? 20 : 10), this.getY(), this.getX() + this.getW(), this.getY() + this.getH(), 0x45202020);
if (this.focused) {
if (!this.selectedText.equals("")) {
RenderUtil.drawRect(this.getX() + BORDER + COLOR_SIZE + BORDER, this.getY(), this.getX() + BORDER + COLOR_SIZE + BORDER + Minecraft.getMinecraft().fontRenderer.getStringWidth(this.displayValue), this.getY() + this.getH(), 0x45FFFFFF);
}
float blockX = this.getX() + BORDER + Minecraft.getMinecraft().fontRenderer.getStringWidth(this.displayValue) + COLOR_SIZE + BORDER + TEXT_BLOCK_PADDING;
float blockY = this.getY() + TEXT_BLOCK_PADDING;
int blockWidth = 2;
int blockHeight = Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT - 2;
RenderUtil.drawRect(blockX, blockY, blockX + blockWidth, blockY + blockHeight, 0xFFFFFFFF);
// draw gear
RenderUtil.drawRect(this.getX() + this.getW() - 10, this.getY(), this.getX() + this.getW(), this.getY() + this.getH(), 0xFF101010);
this.gearTextureEnabled.bind();
this.gearTextureEnabled.render(this.getX() + this.getW() - 9, this.getY() + 0.5f, 8, 8);
// check
RenderUtil.drawRect(this.getX() + this.getW() - 20, this.getY(), this.getX() + this.getW() - 10, this.getY() + this.getH(), 0xFF101010);
this.checkTexture.bind();
this.checkTexture.render(this.getX() + this.getW() - 19, this.getY() + 0.5f, 8, 8);
// handle holding backspace
this.handleBackspacing();
} else {
// draw gear
this.gearTexture.bind();
this.gearTexture.render(this.getX() + this.getW() - 9, this.getY() + 0.5f, 8, 8);
}
}
@Override
public void mouseRelease(int mouseX, int mouseY, int button) {
super.mouseRelease(mouseX, mouseY, button);
if (!this.focused) // must be focused
return;
if (button == 0) {
// check for clicking check
if (mouseX >= this.getX() + this.getW() - 20 && mouseX <= this.getX() + this.getW() - 10 && mouseY >= this.getY() && mouseY <= this.getY() + this.getH()) {
this.enterPressed();
}
}
}
@Override
protected void enterPressed() {
try {
int newColor = (int) Long.parseLong(this.displayValue.replaceAll("#", ""), 16);
this.currentColor = new Color(newColor);
} catch (NumberFormatException e) {
Seppuku.INSTANCE.logChat(this.getName() + ": Invalid color format. Correct format example: \"ff0000\" for red.");
} catch (Exception e) {
Seppuku.INSTANCE.logChat(this.getName() + ": Something went terribly wrong while setting the color. Please try again.");
}
super.enterPressed();
}
public Color getCurrentColor() {
return currentColor;
}
public void setCurrentColor(Color currentColor) {
this.currentColor = currentColor;
}
public String getCustomDisplayValue() {
return customDisplayValue;
}
public void setCustomDisplayValue(String customDisplayValue) {
this.customDisplayValue = customDisplayValue;
}
}